diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..6977c94 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,14 @@ +storage/ +tests/ +logs/ +notebooks/ +**/*_*cache*_* +/.* +*.lock +*.ini +*.toml +*.md +!pyproject.toml +!poetry.lock +!README.md +Dockerfile diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..1e1dd28 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,34 @@ +root = true + +[*] +end_of_line = lf +trim_trailing_whitespace = true +insert_final_newline = true +charset = utf-8 +indent_style = tab +indent_size = 2 + +# YAML doesn't support hard tabs +# Templates that will be weird with hard tabs in the website editor +[*.{yml,yaml,md}] +indent_style = space +indent_size = 2 + +# Force python to be as python demands +[*.{py,ipynb}] +indent_size = 4 +indent_style = space + +[{**.*sh}] +indent_size = 2 +indent_style = tab + +shell_variant = bash +binary_next_line = false # like -bn +switch_case_indent = true # like -ci +space_redirects = true # like -sr +keep_padding = false # like -kp +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000..4de2de7 --- /dev/null +++ b/.flake8 @@ -0,0 +1,124 @@ +[flake8] +extend-ignore = + # Allow function call as argument default + B008, + # Do not enforce trailing comma (lets Black decide what is best) + C812,C813,C814,C815,C816,C818,C819, + # Don't ask for docstring at top of module --- put it in the functions/classes + D100, + # Do not check for docstring within __init__ method + D107, + # Ignore whitespace before ';' + E203, + # Don't ask about line length, Black recommends using bugbear B950 instead + E501, + # Stop finding commented out code because it's mistaking shape annotations for code + E800, + # Stop complaining about subprocess, we need it for this project + S404,S602,S603,S607, + # Stop complaining about using functions from random + S311, + # Ignore errors for internal mypy traceback, stderr output, or an unmatched line. + T499, + # Do not complain about line-break before binary operator (caused by Black) + W503, + # Do not warn on too many imports. + WPS201, + # Do not warn on too many module members + WPS202, + # Do not warn when too many arguments in functions + WPS211, + # Do not warn on too many methods + WPS214, + # Allow lots of importing from the same module --- it can happen and thats okay! + WPS235, + # Do not warn on complex f-string + WPS237, + # Allow relative module references + WPS300, + # Allow f-strings + WPS305, + # Do not force base classes to inherit object + WPS306, + # Allow return statement that simply returns a prior statement + WPS331, + # Allow new lines to start with a dot (caused by Black) + WPS348, + # Allow logic in __init__ modules + WPS412, + # Google Python style is not RST until after processed by Napoleon + # See https://github.com/peterjc/flake8-rst-docstrings/issues/17 + RST201,RST203,RST301, +extend-select = + # Should raise AssertionError instead of assert False + B011, + # Use of break, continue or return in finally blocks will silence exceptions. + B012, + # Redundant exception types in except + B014, + # Pointless comparisons + B015, + # Cannot raise a literal + B016, + # Do not use `self.assertRaises(Exception)` + B017, + # Find useless expressions + B018, + # Use namedtuple instead of dataclass when only `__init__` attributes are set + B903, + # Within an except clause, raise exceptions with `raise ... from err` or `raise ... + # from None` to distinguish them from errors in exception handling + B904, + # Counterpart to W503, enforce having the operator at the start of a new line. + W504, + +max-line-length = 99 +max-complexity = 18 +max-methods = 10 +max-line-complexity = 18 +max-local-variables = 20 +max-expressions = 20 +max-function-expressions = 10 +max-module-expressions = 20 +max-string-usages = 10 +max-annotation-complexity = 4 +min-name-length = 1 +max-try-body-length = 2 +exps-for-one-empty-line = 1 +show-violation-links = true +format = wemake + +# Black enforces double quotes. +inline-quotes = double + +docstring-convention = google + +# Darglint +docstring_style = google +strictness = long + +nested-classes-whitelist = + Meta + Params + Config + +allowed-domain-names = + data + utils + util + params + +per-file-ignores = + src/*/_version.py:WPS410 + src/**/__init__.py:D,F401,WPS436 + tests/*:D,F401,WPS118,WPS202,WPS204,WPS214,WPS218,WPS226,WPS231,WPS232,WPS235,WPS301,WPS432,WPS437,WPS442,S101 + scripts/update_torch_cuda.py:S404,S603,S607,WPS323,WPS333,WPS432,WPS433,WPS459 + +extend-exclude= + .venv/, + *_cache/, + .cache/, + logs/, + storage/, + docs/, + src/emma_perception/utils/visualizing_image.py diff --git a/.github/labels.yml b/.github/labels.yml new file mode 100644 index 0000000..43c77b3 --- /dev/null +++ b/.github/labels.yml @@ -0,0 +1,90 @@ +--- +# Labels names are important as they are used by Release Drafter to decide +# regarding where to record them in changelog or if to skip them. +# +# The repository labels will be automatically configured using this file and +# the GitHub Action https://github.com/marketplace/actions/github-labeler. +## more info https://github.com/crazy-max/ghaction-github-labeler + +# ------------------------- Conventional Commit types ------------------------ # +# From https://github.com/commitizen/conventional-commit-types/blob/master/index.json + +- name: feature + description: A new enhancement or feature + color: 0A8844 + from_name: "enhancement" + +- name: fix + description: A bug fix + color: d23832 + from_name: "bug" + +- name: documentation + description: Documentation changes only + color: 8AD9F5 + +- name: style + description: Changes that do not affect meaning of code (formatting, etc.) + color: F9CD8E + +- name: refactor + description: Code change that neither fixes a bug nor adds a feature + color: FBCA0C + from_name: refactoring + +- name: performance + description: Code change that improves performance + color: F2A33C + +- name: test + description: Adding missing tests or correcting existing tests + color: 34FFB3 + +- name: build + description: Changes that affect the build system or external dependencies + color: 8F4FBB + +- name: continuous integration + description: Changes to CI configuration and scripts + color: FCBFE3 + +- name: chore + description: Other changes that don't modify src or test files + color: d3d3d3 + +- name: revert + description: Revert a previous commit + color: 1e1e1e + +- name: backwards incompatible + description: incompatible changes to how the application works + color: AB2232 + +- name: question + description: Further information is requested + color: EE328E + +# ------------------------------- Dependencies ------------------------------- # +- name: dependencies + description: Pull requests that update dependencies + color: 0366d6 + +# ------------------------------ Utility labels ------------------------------ # +- name: automerge + color: "ffffff" + description: "Automerge this PR" + +- name: "stale" + color: "ffffff" + description: "" +# - name: duplicate +# description: This issue or pull request already exists +# color: ffffff + +# - name: invalid +# description: This doesn't seem right +# color: ffffff + +# - name: wontfix +# description: This will not be worked on +# color: ffffff diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml new file mode 100644 index 0000000..3ea25ea --- /dev/null +++ b/.github/workflows/build-image.yml @@ -0,0 +1,68 @@ +name: Build and push images + +on: + workflow_call: + workflow_dispatch: + release: + types: [published] + +env: + PYTHON_VERSION: 3.9 + REGISTRY: ghcr.io + BASE_IMAGE: emma-heriot-watt/base:latest + BUILDER_IMAGE: emma-heriot-watt/builder:latest + REPOSITORY: emma-heriot-watt/perception + +jobs: + build_image: + name: Build and push image + runs-on: ubuntu-latest + strategy: + matrix: + torch_version_suffix: ["", "+cu113"] + + permissions: + contents: read + packages: write + + steps: + - name: Check out the repository + uses: actions/checkout@v4 + + - name: Define image suffix + id: image-tag + env: + TORCH_VERSION_SUFFIX: ${{ matrix.torch_version_suffix }} + run: | + if [ -z "$TORCH_VERSION_SUFFIX" ]; then + TORCH_VERSION_SUFFIX="+cpu" + fi + IMAGE_TAG=$(echo "$TORCH_VERSION_SUFFIX" | tr -d "+") + echo "tag=$IMAGE_TAG" >> "$GITHUB_OUTPUT" + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.REPOSITORY }} + tags: | + ${{ steps.image-tag.outputs.tag }} + + - name: Build and push image + uses: docker/build-push-action@v5 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + build-args: | + BASE_IMAGE_NAME=${{ env.REGISTRY }}/${{ env.BASE_IMAGE }} + BUILDER_IMAGE_NAME=${{ env.REGISTRY }}/${{ env.BUILDER_IMAGE }} + TORCH_VERSION_SUFFIX=${{ matrix.torch_version_suffix }} diff --git a/.github/workflows/continuous_integration.yml b/.github/workflows/continuous_integration.yml new file mode 100644 index 0000000..67bd6ff --- /dev/null +++ b/.github/workflows/continuous_integration.yml @@ -0,0 +1,169 @@ +name: Continuous Integration + +on: + workflow_dispatch: + workflow_call: + pull_request: + types: [opened, reopened, synchronize, ready_for_review] + branches: [main] + +env: + PYTHON_VERSION: 3.9 + +jobs: + changes: + name: Check for Python file changes + runs-on: ubuntu-latest + if: ${{ !github.event.pull_request.draft }} + outputs: + python: ${{steps.filter.outputs.python}} + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - uses: dorny/paths-filter@v2 + id: filter + with: + filters: | + python: + - '**/*.py' + - 'pyproject.toml' + - 'poetry.lock' + - '.github/workflows/continuous_integration.yml' + - '.mypy.ini' + - '.flake8' + + typecheck: + name: Type check Python + needs: [changes] + if: ${{needs.changes.outputs.python == 'true' && !github.event.pull_request.draft }} + runs-on: ubuntu-latest + steps: + - name: Checkout the repository + uses: actions/checkout@v4 + + - name: Setup reviewdog + uses: reviewdog/action-setup@v1 + + - name: Install Poetry + run: pipx install poetry + + - name: Set up Python ${{ env.PYTHON_VERSION }} + uses: actions/setup-python@v4 + with: + python-version: ${{ env.PYTHON_VERSION }} + cache: "poetry" + + - name: Install dependencies + run: poetry install + + - name: Load mypy cache + uses: actions/cache@v3 + id: mypy-cache + with: + path: .mypy_cache + key: ${{ runner.os }}-mypy-cache-${{ hashFiles('poetry.lock') }}-${{hashFiles('pyproject.toml') }} + restore-keys: | + ${{ runner.os }}-mypy-cache-${{ hashFiles('poetry.lock') }}-${{hashFiles('pyproject.toml') }} + ${{ runner.os }}-mypy-cache- + + - name: Run mypy with reviewdog + env: + REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_EVENT_NAME: ${{ github.event_name }} + run: | + exit_val="0" + [[ $GITHUB_EVENT_NAME == "pull_request" ]] && reporter="github-pr-review" || reporter="github-check" + poetry run mypy \ + --show-column-numbers \ + --show-absolute-path \ + --no-error-summary . 2>&1 | reviewdog \ + -efm="%f:%l:%c: %t%*[^:]: %m" \ + -name="mypy" \ + -filter-mode=nofilter \ + -fail-on-error \ + -reporter="${reporter}" || exit_val="$?" + if [[ "${exit_val}" -ne '0' ]]; then + exit 1 + fi + + lint: + name: Lint Python + needs: [changes] + if: ${{needs.changes.outputs.python == 'true' && !github.event.pull_request.draft }} + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup reviewdog + uses: reviewdog/action-setup@v1 + + - name: Install Poetry + run: pipx install poetry + + - name: Set up Python ${{ env.PYTHON_VERSION }} + uses: actions/setup-python@v4 + with: + python-version: ${{ env.PYTHON_VERSION }} + cache: "poetry" + + - name: Install dependencies + run: poetry install + + - name: Run flake8 + env: + REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_EVENT_NAME: ${{ github.event_name }} + run: | + exit_val="0" + [[ $GITHUB_EVENT_NAME == "pull_request" ]] && reporter="github-pr-review" || reporter="github-check" + poetry run flake8 \ + --format=default . 2>&1 | reviewdog \ + -f=pep8 \ + -name="flake8" \ + -fail-on-error \ + -filter-mode=file \ + -reporter="${reporter}" || exit_val="$?" + if [[ "${exit_val}" -ne '0' ]]; then + exit 1 + fi + + format: + name: Format + runs-on: ubuntu-latest + if: ${{ !github.event.pull_request.draft }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python ${{ env.PYTHON_VERSION }} + uses: actions/setup-python@v4 + with: + python-version: ${{ env.PYTHON_VERSION }} + cache: "pip" + + - name: Install pre-commit + run: | + pip install pre-commit + + - name: Load cached pre-commit environment + uses: actions/cache@v3 + id: pre-commit-cache + with: + path: ~/.cache/pre-commit + key: ${{ runner.os }}-pre-commit-${{ hashFiles('**/.pre-commit-config.yaml') }} + restore-keys: | + ${{ runner.os }}-pre-commit- + + - name: Run pre-commit hook + id: run-pre-commit-hooks + run: | + git add .pre-commit-config.yaml + pre-commit run --color=always --all-files + + - name: Annotate any changes using reviewdog + if: ${{ failure() }} + id: reviewdog-suggester + uses: reviewdog/action-suggester@v1 + with: + tool_name: pre-commit diff --git a/.github/workflows/pr-lint.yml b/.github/workflows/pr-lint.yml new file mode 100644 index 0000000..2c917a9 --- /dev/null +++ b/.github/workflows/pr-lint.yml @@ -0,0 +1,42 @@ +name: "Lint PR" + +on: + pull_request_target: + types: + - opened + - edited + - synchronize + +jobs: + main: + name: Validate PR title + runs-on: ubuntu-latest + steps: + - name: Validate PR title + uses: amannn/action-semantic-pull-request@v5 + id: lint_pr_title + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # When the previous steps fails, the workflow would stop. By adding this + # condition you can continue the execution with the populated error message. + - name: Create error message if validation fails + uses: marocchino/sticky-pull-request-comment@v2 + if: always() && (steps.lint_pr_title.outputs.error_message != null) + with: + header: pr-title-lint-error + message: | + Hey there and thank you for opening this pull request! 👋🏼 + We require pull request titles to follow the [Conventional Commits specification](https://www.conventionalcommits.org/en/v1.0.0/) and it looks like your proposed title needs to be adjusted. + + Details: + ``` + ${{ steps.lint_pr_title.outputs.error_message }} + ``` + + - name: Delete previous comment when issue is resolved + if: ${{ steps.lint_pr_title.outputs.error_message == null }} + uses: marocchino/sticky-pull-request-comment@v2 + with: + header: pr-title-lint-error + delete: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..045e5d6 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,35 @@ +name: Releases + +on: + push: + branches: [main] + +env: + PYTHON_VERSION: 3.9 + +jobs: + labeler: + name: Update labels + runs-on: ubuntu-latest + steps: + - name: Check out the repository + uses: actions/checkout@v3 + + - name: Run Labeler + uses: crazy-max/ghaction-github-labeler@v4.1.0 + + continuous-integration: + name: Continuous Integration + uses: "./.github/workflows/continuous_integration.yml" + secrets: inherit + + tests: + name: Tests + uses: "./.github/workflows/tests.yml" + secrets: inherit + + build_image: + name: Build image + uses: "./.github/workflows/build-image.yml" + secrets: inherit + needs: [continuous-integration, tests] diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..76d5b5b --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,73 @@ +name: Tests + +on: + workflow_dispatch: + workflow_call: + pull_request: + branches: [main] + paths-ignore: ["**/*.md", "**/*.rst"] + +env: + PYTHON_VERSION: 3.9 + # Disable tokenizers parallelism because this doesn't help, and can cause issues in distributed tests. + TOKENIZERS_PARALLELISM: "false" + # Disable multithreading with OMP because this can lead to dead-locks in distributed tests. + OMP_NUM_THREADS: "1" + # See https://github.com/pytorch/pytorch/issues/37377#issuecomment-677851112. + MKL_THREADING_LAYER: "GNU" + +jobs: + changes: + name: Check for Python file changes + runs-on: ubuntu-latest + if: ${{ !github.event.pull_request.draft }} + outputs: + python: ${{steps.filter.outputs.python}} + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - uses: dorny/paths-filter@v2 + id: filter + with: + filters: | + python: + - '**/*.py' + - 'storage/fixtures/**/*' + - 'pyproject.toml' + - 'poetry.lock' + - '.github/workflows/tests.yml' + + python: + name: Run Python test suite + defaults: + run: + shell: bash + + runs-on: ubuntu-latest + needs: [changes] + if: ${{needs.changes.outputs.python == 'true' && !github.event.pull_request.draft }} + steps: + - name: Checkout the repository + uses: actions/checkout@v4 + + - name: Install Poetry + run: pipx install poetry + + - name: Set up Python ${{ env.PYTHON_VERSION }} + uses: actions/setup-python@v4 + with: + python-version: ${{ env.PYTHON_VERSION }} + cache: "poetry" + + - name: Install dependencies + run: poetry install + + - name: Run test suite + run: poetry run poe test-everything | tee pytest-coverage.txt + + - name: Comment the coverage + if: ${{ always() && github.event_name == 'pull_request' && github.actor != 'dependabot[bot]' }} + uses: MishaKav/pytest-coverage-comment@main + with: + pytest-coverage-path: ./pytest-coverage.txt + junitxml-path: ./pytest.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..87e11df --- /dev/null +++ b/.gitignore @@ -0,0 +1,362 @@ +# Created by https://www.toptal.com/developers/gitignore/api/vscode,python,intellij+all +# Edit at https://www.toptal.com/developers/gitignore?templates=vscode,python,intellij+all + +.rtx.toml + +### Intellij+all ### +# 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 + +slurm-* + +# 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 + +# 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 + +### Intellij+all Patch ### +# Ignores the whole .idea folder and all .iml files +# See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360 + +.idea/ + +# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023 + +*.iml +modules.xml +.idea/misc.xml +*.ipr + +# Sonarlint plugin +.idea/sonarlint + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +pytestdebug.log + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ +doc/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.env/ +.venv/ +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ +pythonenv* +.autoenv +.envrc + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# operating system-related files +# file properties cache/storage on macOS +*.DS_Store +# thumbnail cache on Windows +Thumbs.db + +# profiling data +.prof + +### vscode ### +.vscode/* +!.vscode/recommended-settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Lightning-Hydra-Template +logs/ + +# End of https://www.toptal.com/developers/gitignore/api/vscode,python,intellij+all + +# Created by https://www.toptal.com/developers/gitignore/api/data,images,video +# Edit at https://www.toptal.com/developers/gitignore?templates=data,images,video + +### Data ### +# *.csv +*.dat +*.efx +*.gbr +*.key +*.pps +*.ppt +*.pptx +*.sdf +*.tax2010 +*.vcf +*.xml + +### Images ### +# JPEG +*.jpg +*.jpeg +*.jpe +*.jif +*.jfif +*.jfi + +# JPEG 2000 +*.jp2 +*.j2k +*.jpf +*.jpx +*.jpm +*.mj2 + +# JPEG XR +*.jxr +*.hdp +*.wdp + +# Graphics Interchange Format +*.gif + +# RAW +*.raw + +# Web P +*.webp + +# Portable Network Graphics +*.png + +# Animated Portable Network Graphics +*.apng + +# Multiple-image Network Graphics +*.mng + +# Tagged Image File Format +*.tiff +*.tif + +# Scalable Vector Graphics +*.svg +*.svgz + +# Portable Document Format +*.pdf + +# X BitMap +*.xbm + +# BMP +*.bmp +*.dib + +# ICO +*.ico + +# 3D Images +*.3dm +*.max + +### Video ### +*.3g2 +*.3gp +*.asf +*.asx +*.avi +*.flv +*.mkv +*.mov +*.mp4 +*.mpg +*.ogv +*.rm +*.swf +*.vob +*.wmv +*.webm + +# Ignoring storage folder +storage/* +!storage/fixtures/ +!storage/constants/ + +# End of https://www.toptal.com/developers/gitignore/api/data,images,video diff --git a/.kodiak.toml b/.kodiak.toml new file mode 100644 index 0000000..de128d4 --- /dev/null +++ b/.kodiak.toml @@ -0,0 +1,15 @@ +version = 1 + +[merge.automerge_dependencies] +# only auto merge "minor" and "patch" version upgrades. +# do not automerge "major" version upgrades. +versions = ["minor", "patch"] +usernames = ["dependabot"] + +# allow dependabot to update and close stale dependency upgrades. +[update] +ignored_usernames = ["dependabot"] + +# Automatically approve when using automerge label +[approve] +auto_approve_usernames = ["dependabot"] diff --git a/.mypy.ini b/.mypy.ini new file mode 100644 index 0000000..09e815a --- /dev/null +++ b/.mypy.ini @@ -0,0 +1,40 @@ +[mypy] + +python_version = 3.9 +exclude = (?x)(configs | storage | logs | docs | src/emma_perception/utils/visualizing_image.py) + +# Import discovery +ignore_missing_imports = true +namespace_packages = true + +# Untyped definitions and calls +disallow_untyped_defs = true +disallow_incomplete_defs = true +check_untyped_defs = true +disallow_any_generics = true +disallow_subclassing_any = true +disallow_untyped_decorators = false + +# None and Optional handling +no_implicit_optional = true + +# Warnings +warn_redundant_casts = true +warn_unused_ignores = true +warn_unused_configs = true +warn_unreachable = true + +# Config error messages +show_error_context = false +show_column_numbers = true +show_error_codes = true +pretty = false + +plugins = pydantic.mypy + +[mypy-tests.*] +disallow_untyped_defs = false + +[pydantic-mypy] +init_typed = true +warn_untyped_fields = true diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..ad9b343 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,148 @@ +# using default_language_version +default_language_version: + node: 16.14.2 + +repos: + # -------------------------- Version control checks -------------------------- # + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.5.0 + hooks: + - id: check-merge-conflict + name: Check for merge conflicts + - id: check-vcs-permalinks + name: Ensure links to VCS websites are permalinks + - id: detect-private-key + name: Detect private key + - id: check-case-conflict + name: Check issues with file name casing + - id: check-symlinks + name: Check for symlinks which point to nothing + - id: destroyed-symlinks + name: Check for destroyed symlinks + + - repo: https://github.com/sirosen/check-jsonschema + rev: 0.27.2 + hooks: + - id: check-github-workflows + name: Validate GitHub workflows + types: [yaml] + + # ----------------------------- Check file issues ---------------------------- # + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.5.0 + hooks: + - id: check-toml + name: Check TOML + types: [toml] + - id: check-yaml + name: Check YAML + args: [--allow-multiple-documents] + types: [yaml] + - id: end-of-file-fixer + name: Fix end of files + types: [text] + - id: trailing-whitespace + name: Trim trailing whitespace + args: [--markdown-linebreak-ext=md] + types: [text] + - id: mixed-line-ending + name: Check line endings + - id: fix-encoding-pragma + name: Remove any encoding pragma + args: [--remove] + + # ------------------------------ Python checking ----------------------------- # + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.5.0 + hooks: + - id: debug-statements + name: Check for debugger statements + types: [python] + + - repo: https://github.com/pre-commit/pygrep-hooks + rev: v1.10.0 + hooks: + - id: python-use-type-annotations + name: Using type annotations over comments + types: [python] + - id: python-check-blanket-noqa + name: Check for blanket `# noqa` + types: [python] + - id: python-check-blanket-type-ignore + name: "Check for blanket `# type: ignore`" + types: [python] + - id: python-no-log-warn + name: Check for deprecated `.warn()` method of python loggers + types: [python] + + # ----------------------------- Automatic linters ---------------------------- # + - repo: https://github.com/asottile/pyupgrade + rev: v3.15.0 + hooks: + - id: pyupgrade + name: Update syntax for newer Python + types: [python] + args: ["--py39-plus"] + - repo: https://github.com/sirosen/texthooks + rev: 0.6.3 + hooks: + - id: fix-smartquotes + name: Fix Smart Quotes + - repo: https://github.com/asottile/yesqa + rev: v1.5.0 + hooks: + - id: yesqa + name: Remove unnecessary `# noqa` comments + types: [python] + additional_dependencies: [wemake-python-styleguide] + + # ------------------------------ Python imports ------------------------------ # + - repo: https://github.com/hakancelik96/unimport + rev: 1.1.0 + hooks: + - id: unimport + name: Remove any unused imports + types: [python] + args: + [ + --remove, + --exclude, + '^.*/?__init__\.py$', + --include-star-import, + --gitignore, + ] + - repo: https://github.com/MarcoGorelli/absolufy-imports + rev: v0.3.1 + hooks: + - id: absolufy-imports + types: [python] + name: Convert relative imports to absolute + - repo: https://github.com/timothycrosley/isort + rev: 5.12.0 + hooks: + - id: isort + name: Format imports + additional_dependencies: [toml] + types: [python] + exclude: ^.*/?setup\.py$ + + # -------------------------------- Formatting -------------------------------- # + - repo: https://github.com/pre-commit/mirrors-prettier + rev: v3.1.0 + hooks: + - id: prettier + name: Prettier + exclude: ^.*/?CHANGELOG\.md$ + - repo: https://github.com/myint/docformatter + rev: v1.7.5 + hooks: + - id: docformatter + name: Format docstrings + types: [python] + args: [--in-place, --wrap-summaries=99, --wrap-descriptions=99] + - repo: https://github.com/psf/black + rev: 23.11.0 + hooks: + - id: black-jupyter + types: [python] + name: Format code diff --git a/.releaserc.js b/.releaserc.js new file mode 100644 index 0000000..2dc9cc2 --- /dev/null +++ b/.releaserc.js @@ -0,0 +1,70 @@ +const RELEASE_BRANCH = process.env.RELEASE_BRANCH || "main"; +const CHANGELOG_FILE = process.env.CHANGELOG_FILE || "CHANGELOG.md"; +const VERSION_FILE = process.env.VERSION_FILE || "src/*/_version.py"; + +const config = { + branches: [RELEASE_BRANCH], + plugins: [ + [ + "@semantic-release/commit-analyzer", + { + preset: "conventionalcommits", + }, + ], + [ + "@semantic-release/release-notes-generator", + { + preset: "conventionalcommits", + }, + ], + [ + "@semantic-release/changelog", + { + changelogFile: CHANGELOG_FILE, + changelogTitle: + "# Changelog\n\nAll notable changes to this project will be documented in this file. See\n[Conventional Commits](https://conventionalcommits.org) for commit guidelines.", + }, + ], + [ + "@semantic-release/exec", + { + prepareCmd: "poetry version ${nextRelease.version}", + }, + ], + [ + "@google/semantic-release-replace-plugin", + { + replacements: [ + { + files: [VERSION_FILE], + ignore: ["test/*", "tests/*"], + from: "__version__ = [\"'].*[\"']", + to: '__version__ = "${nextRelease.version}"', + }, + ], + }, + ], + [ + "@semantic-release/github", + { + assets: [ + { path: "dist/*.tar.gz", label: "sdist" }, + { path: "dist/*.whl", label: "wheel" }, + ], + successComment: false, + failComment: false, + releasedLabels: false, + failTitle: false, + labels: false, + }, + ], + [ + "@semantic-release/git", + { + assets: ["pyproject.toml", VERSION_FILE, CHANGELOG_FILE], + }, + ], + ], +}; + +module.exports = config; diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..978576d --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,28 @@ +{ + "recommendations": [ + "mikestead.dotenv", + "editorconfig.editorconfig", + "tamasfe.even-better-toml", + "redvanworkshop.explorer-exclude-vscode-extension", + "eamodio.gitlens", + "nhoizey.gremlins", + "ms-toolsai.jupyter", + "ms-toolsai.jupyter-keymap", + "ms-toolsai.jupyter-renderers", + "yzhang.markdown-all-in-one", + "christian-kohler.path-intellisense", + "ms-python.vscode-pylance", + "ms-python.python", + "njpwerner.autodocstring", + "ms-vscode-remote.remote-containers", + "ms-vscode-remote.remote-ssh", + "ms-vscode-remote.remote-ssh-edit", + "ms-vscode-remote.vscode-remote-extensionpack", + "stkb.rewrap", + "visualstudioexptteam.vscodeintellicode", + "kevinkyang.auto-comment-blocks", + "redhat.vscode-yaml", + "esbenp.prettier-vscode", + "foxundermoon.shell-format" + ] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..ecc4587 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,36 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Current file", + "type": "python", + "request": "launch", + "program": "${file}", + "console": "integratedTerminal", + "justMyCode": false, + "subProcess": true + }, + { + "name": "Debug Run", + "type": "python", + "request": "launch", + "program": "${workspaceFolder}/run.py", + "console": "integratedTerminal", + "justMyCode": false, + "subProcess": true + }, + { + "name": "Debug Tests", + "type": "python", + "request": "launch", + "justMyCode": false, + "purpose": ["debug-test"], + "env": { + "_PYTEST_RAISE": "1" + } + } + ] +} diff --git a/.vscode/recommended-settings.json b/.vscode/recommended-settings.json new file mode 100644 index 0000000..4a43f74 --- /dev/null +++ b/.vscode/recommended-settings.json @@ -0,0 +1,81 @@ +{ + "files.exclude": { + "**/.git": true, + "**/.svn": true, + "**/.hg": true, + "**/CVS": true, + "**/.DS_Store": true, + "**/Thumbs.db": true, + "**/.idea": true, + "**/LICENSE": true, + "**/.rsync-filter": true, + "**/.coverage*": true, + "**/.hypothesis": true, + "**/{*.egg-info,*cache*,.venv,*.lock}": true, + "**/{.python-version,py.typed}": true, + "**/.gitkeep": true, + "**/.gitignore": true, + "**/.gitattributes": true, + ".editorconfig": true, + ".pre-commit-config.yaml": true, + ".flake8": true, + ".dockerignore": true, + "Dockerfile": true, + "docker-compose.yaml": true, + "docker/": true, + "Makefile": true, + "pyproject.toml": true, + ".env*": true, + ".github/": true, + "*.md": true, + ".vscode/": false, + "logs/": true, + "data": true, + "notebooks": true, + "scripts": true + }, + "explorerExclude.backup": null, + "editor.wordWrapColumn": 99, + "editor.rulers": [99], + "python.envFile": "${workspaceFolder}/.env", + "terminal.integrated.env.linux": { + "PYTHONPATH": "${workspaceFolder}" + }, + "git.ignoreLimitWarning": true, + "[json,yaml]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "[python]": { + "editor.defaultFormatter": "ms-python.python", + "editor.formatOnPaste": false, + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.organizeImports": true, + "source.fixAll": true + } + }, + "python.formatting.provider": "black", + "python.sortImports.args": ["--atomic"], + "python.linting.enabled": true, + "python.linting.lintOnSave": true, + "python.linting.pylintEnabled": false, + "python.linting.mypyEnabled": true, + "python.linting.flake8Enabled": true, + "python.linting.pydocstyleEnabled": false, + "python.testing.pytestEnabled": true, + "python.linting.mypyArgs": ["--show-column-numbers", "--show-error-codes"], + "jupyter.jupyterServerType": "local", + "jupyter.notebookFileRoot": "${workspaceFolder}", + "python.pythonPath": ".venv/bin/python3", + "python.testing.unittestEnabled": false, + "shellformat.useEditorConfig": true, + "python.testing.cwd": "${workspaceFolder}", + "cSpell.enabled": true, + "rewrap.autoWrap.enabled": true, + "editor.insertSpaces": false, + "autoDocstring.docstringFormat": "google", + "python.testing.pytestArgs": ["tests", "-x"], + "editor.bracketPairColorization.enabled": true, + "editor.guides.bracketPairs": "active" +} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..a367f98 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,161 @@ +# Changelog + +All notable changes to this project will be documented in this file. See +[Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [1.13.0](https://github.com/emma-simbot/perception/compare/v1.12.0...v1.13.0) (2023-04-15) + + +### Features + +* new entity clf ([#235](https://github.com/emma-simbot/perception/issues/235)) ([99da0ca](https://github.com/emma-simbot/perception/commit/99da0ca2ff773ece1b344320160d6e4cab0b0a90)) + +## [1.12.0](https://github.com/emma-simbot/perception/compare/v1.11.0...v1.12.0) (2023-03-13) + + +### Features + +* replace knn with mlp entity clf ([#232](https://github.com/emma-simbot/perception/issues/232)) ([65a39ed](https://github.com/emma-simbot/perception/commit/65a39ed36897f6b4e9230ecad9c1ff280223dfac)) + +## [1.11.0](https://github.com/emma-simbot/perception/compare/v1.10.2...v1.11.0) (2023-03-08) + + +### Features + +* knn entity clf ([#230](https://github.com/emma-simbot/perception/issues/230)) ([62e18f6](https://github.com/emma-simbot/perception/commit/62e18f6597bf07164fa96321fb8d1b4f38ac0462)) + +## [1.10.2](https://github.com/emma-simbot/perception/compare/v1.10.1...v1.10.2) (2023-03-03) + + +### Bug Fixes + +* round table is mapped to table entity ([#228](https://github.com/emma-simbot/perception/issues/228)) ([568bd7c](https://github.com/emma-simbot/perception/commit/568bd7cbdb97f40ba7a55a8c0851abd78ccffd4a)) + +## [1.10.1](https://github.com/emma-simbot/perception/compare/v1.10.0...v1.10.1) (2023-02-17) + + +### Bug Fixes + +* place entity classifier on correct device ([#226](https://github.com/emma-simbot/perception/issues/226)) ([5f16fb5](https://github.com/emma-simbot/perception/commit/5f16fb538d36ec7918efe2053cda61be3106f2b0)) + +## [1.10.0](https://github.com/emma-simbot/perception/compare/v1.9.0...v1.10.0) (2023-02-15) + + +### Features + +* optimised perception using torch response ([#224](https://github.com/emma-simbot/perception/issues/224)) ([831c680](https://github.com/emma-simbot/perception/commit/831c6800a8210dfa64ef53d00741c28d912ffbfb)) + +## [1.9.0](https://github.com/emma-simbot/perception/compare/v1.8.2...v1.9.0) (2023-02-14) + + +### Features + +* Include object entities ([#223](https://github.com/emma-simbot/perception/issues/223)) ([c0b9d97](https://github.com/emma-simbot/perception/commit/c0b9d974c9acd0a97e71c7b643e920df9dac50bf)) + + +### Bug Fixes + +* change endpoints to be non-asynchronous ([#221](https://github.com/emma-simbot/perception/issues/221)) ([57f9668](https://github.com/emma-simbot/perception/commit/57f9668aaa899d5932ff13f3cab629cbc701d220)) + +## [1.8.2](https://github.com/emma-simbot/perception/compare/v1.8.1...v1.8.2) (2023-01-06) + + +### Bug Fixes + +* pin numpy to `<1.24` because deprecations break legacy code ([dfe3b47](https://github.com/emma-simbot/perception/commit/dfe3b47dda8518c3ab9376aba732be8fda6af3f0)), closes [#208](https://github.com/emma-simbot/perception/issues/208) + +## [1.8.1](https://github.com/emma-simbot/perception/compare/v1.8.0...v1.8.1) (2023-01-05) + + +### Bug Fixes + +* Change response_model to response_class ([#206](https://github.com/emma-simbot/perception/issues/206)) ([75119d8](https://github.com/emma-simbot/perception/commit/75119d89277ad72d5527801f6110e4c074db0438)) + +## [1.8.0](https://github.com/emma-simbot/perception/compare/v1.7.0...v1.8.0) (2023-01-02) + + +### Features + +* **telemetry:** include instrumentation and tracking of metrics for requests and the system ([8ae3643](https://github.com/emma-simbot/perception/commit/8ae3643db9bcb85d3c2ca4b853094da0487a4a5b)) +* **telemetry:** More fine-grained tracing during feature extraction ([0f2b513](https://github.com/emma-simbot/perception/commit/0f2b513a3c045db0c2f35c4493067d3815eb9c1d)) +* use orjson to build response and add tracing ([435e89b](https://github.com/emma-simbot/perception/commit/435e89b47cd40ed8883eb070c434d87c64d365d2)) + + +### Bug Fixes + +* fastapi ORJSONResponse import ([ab3fe3d](https://github.com/emma-simbot/perception/commit/ab3fe3d912e74299f2336395851f06fcd4d8b9df)) + +## [1.7.0](https://github.com/emma-simbot/perception/compare/v1.6.1...v1.7.0) (2022-12-23) + + +### Features + +* added support for tracing ([#203](https://github.com/emma-simbot/perception/issues/203)) ([7529955](https://github.com/emma-simbot/perception/commit/7529955c3e39101c1618f1499ea5238ebd98d61f)) + +## [1.6.1](https://github.com/emma-simbot/perception/compare/v1.6.0...v1.6.1) (2022-12-22) + + +### Bug Fixes + +* **revert:** using Ray Serve to serve Perception ([#200](https://github.com/emma-simbot/perception/issues/200)) ([#202](https://github.com/emma-simbot/perception/issues/202)) ([3091da6](https://github.com/emma-simbot/perception/commit/3091da6a25ca86cf66281884e73757ab9adb2445)) + +## [1.6.0](https://github.com/emma-simbot/perception/compare/v1.5.1...v1.6.0) (2022-12-21) + + +### Features + +* Using Ray Serve to serve Perception ([#200](https://github.com/emma-simbot/perception/issues/200)) ([e83a960](https://github.com/emma-simbot/perception/commit/e83a9602badbf60df1fc7741a668d2ca34508f3b)) + +## [1.5.1](https://github.com/emma-simbot/perception/compare/v1.5.0...v1.5.1) (2022-12-20) + + +### Bug Fixes + +* revert adding tracing for the feature extractor endpoint ([#198](https://github.com/emma-simbot/perception/issues/198)) ([#199](https://github.com/emma-simbot/perception/issues/199)) ([dcaa484](https://github.com/emma-simbot/perception/commit/dcaa484ac233130f8c809846d00296160e7491ea)) + +## [1.5.0](https://github.com/emma-simbot/perception/compare/v1.4.0...v1.5.0) (2022-12-20) + + +### Features + +* setup tracing for the feature extractor endpoint ([#198](https://github.com/emma-simbot/perception/issues/198)) ([b86065d](https://github.com/emma-simbot/perception/commit/b86065d41435cb943fd14f2e423eabf9ac44482e)) + +## [1.4.0](https://github.com/emma-simbot/perception/compare/v1.3.0...v1.4.0) (2022-11-28) + + +### Features + +* Add simbot custom model config ([#191](https://github.com/emma-simbot/perception/issues/191)) ([1793f33](https://github.com/emma-simbot/perception/commit/1793f33a10c65d542b01f416b2dbfdfb87847ba5)) + +## [1.3.0](https://github.com/emma-simbot/perception/compare/v1.2.0...v1.3.0) (2022-11-28) + + +### Features + +* use custom classmap ([#189](https://github.com/emma-simbot/perception/issues/189)) ([864a274](https://github.com/emma-simbot/perception/commit/864a2749cbb168f96681d8790edbce424b0f0269)) + +## [1.2.0](https://github.com/emma-simbot/perception/compare/v1.1.0...v1.2.0) (2022-11-19) + + +### Features + +* Change simbot classmap path ([#187](https://github.com/emma-simbot/perception/issues/187)) ([66dd978](https://github.com/emma-simbot/perception/commit/66dd9788b67b1f1af372a90973ff1e67c327f0b6)) + +## [1.1.0](https://github.com/emma-simbot/perception/compare/v1.0.0...v1.1.0) (2022-11-04) + + +### Features + +* Update simbot classmap config ([#185](https://github.com/emma-simbot/perception/issues/185)) ([4fbcca7](https://github.com/emma-simbot/perception/commit/4fbcca7dc89f3efccd9104748f624ed4d486a72c)) + +## 1.0.0 (2022-10-28) + + +### Bug Fixes + +* use the request body for updating the model device ([8f83fc6](https://github.com/emma-simbot/perception/commit/8f83fc6567b9a77f739826d14e2f6856deebddfe)) + + +### Reverts + +* Revert "Build(deps): bump actions/setup-python from 3 to 4 (#152)" (#162) ([ee64b1c](https://github.com/emma-simbot/perception/commit/ee64b1c14e8657e1d0ceb0d1314e2e0db017bbc7)), closes [#152](https://github.com/emma-simbot/perception/issues/152) [#162](https://github.com/emma-simbot/perception/issues/162) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..de53d78 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,148 @@ +# Contributing + +- [Quick start](#quick-start) +- [Installing things](#installing-things) + - [Poetry](#poetry) + - [Managing Python versions...](#managing-python-versions) + - [...with pyenv](#with-pyenv) + - [...with Anaconda](#with-anaconda) +- [Developer tooling](#developer-tooling) + - [Code style](#code-style) + - [Task runner](#task-runner) + - [Formatting](#formatting) + - [Linting](#linting) + - [Type checking](#type-checking) + - [Working with branches](#working-with-branches) + +## Quick start + +Assuming you have [pyenv](https://github.com/pyenv/pyenv) and [Poetry](https://python-poetry.org/), clone the repository and run: + +```bash +# Use Python 3.9.9 in the project +pyenv local 3.9.9 + +# Tell Poetry to use pyenv +poetry env use $(pyenv which python) + +# Install dependencies +poetry install + +# Activate the virtual environment +poetry shell + +# Install pre-commit hooks +pre-commit install +``` + +## Installing things + +We've tried to keep necessary things as simplistic as possible. However, we need to install some things. + +### Poetry + +This project uses Poetry for **creating virtual environments** and **managing Python packages**. This should be installed globally and can be done by running: + +```bash +curl -sSL https://install.python-poetry.org | python3 - +``` + +You can verify it's installed and accessible by running `poetry --version`. + +Once you've got Poetry installed, we think it's best to install Python dependencies into a `.venv/` folder within the cloned repo. Tell Poetry to handle this for you: + +```bash +poetry config virtualenvs.in-project true +``` + +For more on how to manage, add, remove, and update dependencies, see the [official Poetry documentation](https://python-poetry.org/docs/basic-usage/). + +### Managing Python versions... + +There are two ways of managing your Python environments. We recommend [pyenv](https://github.com/pyenv/pyenv), but we have also included instructions for [Anaconda](https://anaconda.com). + +#### ...with pyenv + +Install pyenv following the [instructions within the official repo](https://github.com/pyenv/pyenv#installation) for your system. **Remember to do step 2**! + +You can verify it's installed with `pyenv --version`. + +1. Install the Python version you want with `pyenv install 3.9.9` +2. Go to the cloned repo +3. Assign the specific Python version to the project by running `pyenv local 3.9.9` + +If you want a different version of Python, just change the version in the steps. + +#### ...with Anaconda + +Install Anaconda using the [instructions on the official website](https://anaconda.com/). + +Then create an environment for your project by running: + +```bash +conda create -n PROJECT_NAME python=3.9 +conda activate PROJECT_NAME +``` + +## Developer tooling + +- Dependency management with [Poetry](https://python-poetry.org/) +- Easier task running with [Poe the Poet](https://github.com/nat-n/poethepoet) +- Code formatting with [Black](https://github.com/psf/black) and [Prettier](https://prettier.io/) +- Linting with [pre-commit](https://pre-commit.com/) and [Flake8](http://flake8.pycqa.org/), using the strict [wemake-python-styleguide](https://wemake-python-stylegui.de/en/latest/) +- Automated Python Docstring Formatting with [docformatter](https://github.com/myint/docformatter) +- Continuous integration with [GitHub Actions](https://github.com/features/actions) +- Testing with [pytest](https://docs.pytest.org/en/latest/) +- Code coverage with [coverage.oy](https://coverage.readthedocs.io/) +- Static type-checking with [mypy](http://mypy-lang.org/) +- Automated Python syntax updates with [pyupgrade](https://github.com/asottile/pyupgrade) +- Security audit with [Bandit](https://github.com/PyCQA/bandit) +- Automated release notes with [Release Drafter](https://github.com/release-drafter/release-drafter) +- Manage project labels with [GitHub Labeler](https://github.com/marketplace/actions/github-labeler) +- Automated dependency updates with [Dependabot](https://dependabot.com/) + +### Code style + +To ensure all code is standardized, we use [black](https://github.com/psf/black), along with other automatic formatters. To enforce a consistent coding style, we use [Flake8](https://flake8.pycqa.org/en/latest/) with the [wemake-python-styleguide](https://wemake-python-stylegui.de/en/latest/). To verify and enforce type annotations, we use [mypy](https://mypy.readthedocs.io/en/stable/). Common tasks can be called using [Poe the Poet](https://github.com/nat-n/poethepoet). + +#### Task runner + +[Poe the Poet](https://github.com/nat-n/poethepoet) is a task runner that works well with Poetry. To see what tasks exist, run `poe` in your terminal. If you want to add more tasks, check [the documentation](https://github.com/nat-n/poethepoet) and [what already exists](https://github.com/emma-simbot/research-base/blob/main/pyproject.toml). + +If you have issues getting `poe` to work, make sure that you are already within the activated shell (by running `poetry shell`). + +#### Formatting + +If you want to automatically format on every commit, you can use [pre-commit](https://pre-commit.com/). As mentioned above, run `pre-commit install` and it will install the hooks. + +To manually format all files, run + +```bash +poe format +``` + +#### Linting + +If you want to check the linting rules on the codebase, run + +```bash +poe lint +``` + +#### Type checking + +If you want to check types on the codebase, run + +```bash +poe typecheck +``` + +#### Working with branches + +We've settled on a middle ground when it comes to developing: **keep the `main` branch clean**. + +Within branches, you can do whatever you want to do, but you should **never push anything directly to the `main` branch**. + +For every PR, an automated set of linters and formatters will check your code to +see whether it follows the set rules. If it fails, **do not merge** with the +`main` branch. diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..86cdb9b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,47 @@ +ARG BUILDER_IMAGE_NAME +ARG BASE_IMAGE_NAME + +# ---------------------------------- Builder --------------------------------- # +# hadolint ignore=DL3006 +FROM ${BUILDER_IMAGE_NAME} as builder + +# Install necessary dependencies for OpenCV +RUN apt-get update -qq \ + && apt-get upgrade -y --no-install-recommends \ + ffmpeg libsm6 libxext6 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* \ + && apt-get autoremove -y + +ARG TORCH_VERSION_SUFFIX="" + +WORKDIR ${PYSETUP_PATH}/repo + +COPY . ${PYSETUP_PATH}/repo + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +RUN poetry install --only main \ + && TORCH_VERSION="$(pip show torch | grep Version | cut -d ':' -f2 | xargs)${TORCH_VERSION_SUFFIX}" \ + && TORCHVISION_VERSION="$(pip show torchvision | grep Version | cut -d ':' -f2 | xargs)${TORCH_VERSION_SUFFIX}" \ + && pip install --no-cache-dir torch=="${TORCH_VERSION}" torchvision=="${TORCHVISION_VERSION}" -f https://download.pytorch.org/whl/torch_stable.html + +# ---------------------------------- Runner ---------------------------------- # +# hadolint ignore=DL3006 +FROM ${BASE_IMAGE_NAME} as runner + +# Install necessary dependencies for OpenCV +RUN apt-get update -qq \ + && apt-get upgrade -y --no-install-recommends \ + ffmpeg libsm6 libxext6 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* \ + && apt-get autoremove -y + +COPY --from=builder ${PYSETUP_PATH} ${PYSETUP_PATH} + +WORKDIR ${PYSETUP_PATH}/repo + +# Set the PYTHONPATH +ENV PYTHONPATH='./src' + +ENTRYPOINT ["/bin/bash"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..7578532 --- /dev/null +++ b/README.md @@ -0,0 +1,90 @@ +
+ +# EMMA: Perception + + + Python 3.9 + + + PyTorch + + + Lightning + + + Poetry + + +
+ + + pre-commit + + + style: black + + + wemake-python-styleguide + + +
+ +[![Continuous Integration](https://github.com/emma-heriot-watt/perception/actions/workflows/continuous_integration.yml/badge.svg)](https://github.com/emma-heriot-watt/perception/actions/workflows/continuous_integration.yml) +[![Tests](https://github.com/emma-heriot-watt/perception/actions/workflows/tests.yml/badge.svg)](https://github.com/emma-heriot-watt/perception/actions/workflows/tests.yml) +[![Build and push images](https://github.com/emma-heriot-watt/perception/actions/workflows/build-image.yml/badge.svg)](https://github.com/emma-heriot-watt/perception/actions/workflows/build-image.yml) + +
+ +> [!IMPORTANT] +> If you have questions or find bugs or anything, you can contact us in our [organisation's discussion](https://github.com/orgs/emma-heriot-watt/discussions). + +## About + +This repository holds the object detector and feature extractor for running things. Essentially, this is the model that takes an image and returns a series of features for that image. This repository can be used as a standalone to extract features before running things on policy, or used as an API to extract features during inference. + +## Writing code and running things + +### Run the server for the [Alexa Arena](https://github.com/amazon-science/alexa-arena) + +Running this command as is will automatically download and use the [fine-tuned checkpoint from our HF models repo](https://huggingface.co/emma-heriot-watt/models/blob/main/vinvl_finetune_arena.ckpt) and use the same settings we used when we ran experiments within the [Alexa Arena](https://github.com/amazon-science/alexa-arena). + +```bash +python src/emma_perception/commands/run_server.py +``` + +### Extracting features + +For training things, we need to extract the features for each image. + +Here's the command you can use to extract features from images. Obviously, you can change the paths to the folder of images, and the output dir, and whatever else you want. + +```bash +python src/emma_perception/commands/extract_visual_features.py --images_dir --output_dir +``` + +
+argparse arguments for the command + +https://github.com/emma-heriot-watt/perception/blob/e20855aacec2d27f5e2b07254bd42d12e81a52e0/src/emma_perception/commands/extract_visual_features.py#L20-L50 + +
+ +#### Extracting features for the Alexa Arena + +If you want to use the fine-tuned model to extract features with the model we trained on the Alexa Arena, just add `--is_arena` onto the above command. This will automatically download and use the [fine-tuned checkpoint from our HF models repo](https://huggingface.co/emma-heriot-watt/models/blob/main/vinvl_finetune_arena.ckpt) and use the same settings we used when we ran experiments within the Alexa Arena. + +### Developer tooling + +- Dependency management with [Poetry](https://python-poetry.org/) +- Easier task running with [Poe the Poet](https://github.com/nat-n/poethepoet) +- Code formatting with [Black](https://github.com/psf/black) and [Prettier](https://prettier.io/) +- Linting with [pre-commit](https://pre-commit.com/) and [Flake8](http://flake8.pycqa.org/), using the strict [wemake-python-styleguide](https://wemake-python-stylegui.de/en/latest/) +- Automated Python Docstring Formatting with [docformatter](https://github.com/myint/docformatter) +- Continuous integration with [GitHub Actions](https://github.com/features/actions) +- Testing with [pytest](https://docs.pytest.org/en/latest/) +- Code coverage with [coverage.py](https://coverage.readthedocs.io/) +- Static type-checking with [mypy](http://mypy-lang.org/) +- Automated Python syntax updates with [pyupgrade](https://github.com/asottile/pyupgrade) +- Security audit with [Bandit](https://github.com/PyCQA/bandit) +- Manage project labels with [GitHub Labeler](https://github.com/marketplace/actions/github-labeler) diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..08c282b --- /dev/null +++ b/poetry.lock @@ -0,0 +1,5514 @@ +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. + +[[package]] +name = "aiohttp" +version = "3.9.1" +description = "Async http client/server framework (asyncio)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1f80197f8b0b846a8d5cf7b7ec6084493950d0882cc5537fb7b96a69e3c8590"}, + {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72444d17777865734aa1a4d167794c34b63e5883abb90356a0364a28904e6c0"}, + {file = "aiohttp-3.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b05d5cbe9dafcdc733262c3a99ccf63d2f7ce02543620d2bd8db4d4f7a22f83"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c4fa235d534b3547184831c624c0b7c1e262cd1de847d95085ec94c16fddcd5"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:289ba9ae8e88d0ba16062ecf02dd730b34186ea3b1e7489046fc338bdc3361c4"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bff7e2811814fa2271be95ab6e84c9436d027a0e59665de60edf44e529a42c1f"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81b77f868814346662c96ab36b875d7814ebf82340d3284a31681085c051320f"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b9c7426923bb7bd66d409da46c41e3fb40f5caf679da624439b9eba92043fa6"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8d44e7bf06b0c0a70a20f9100af9fcfd7f6d9d3913e37754c12d424179b4e48f"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22698f01ff5653fe66d16ffb7658f582a0ac084d7da1323e39fd9eab326a1f26"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ca7ca5abfbfe8d39e653870fbe8d7710be7a857f8a8386fc9de1aae2e02ce7e4"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8d7f98fde213f74561be1d6d3fa353656197f75d4edfbb3d94c9eb9b0fc47f5d"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5216b6082c624b55cfe79af5d538e499cd5f5b976820eac31951fb4325974501"}, + {file = "aiohttp-3.9.1-cp310-cp310-win32.whl", hash = "sha256:0e7ba7ff228c0d9a2cd66194e90f2bca6e0abca810b786901a569c0de082f489"}, + {file = "aiohttp-3.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:c7e939f1ae428a86e4abbb9a7c4732bf4706048818dfd979e5e2839ce0159f23"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:df9cf74b9bc03d586fc53ba470828d7b77ce51b0582d1d0b5b2fb673c0baa32d"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ecca113f19d5e74048c001934045a2b9368d77b0b17691d905af18bd1c21275e"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8cef8710fb849d97c533f259103f09bac167a008d7131d7b2b0e3a33269185c0"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bea94403a21eb94c93386d559bce297381609153e418a3ffc7d6bf772f59cc35"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91c742ca59045dce7ba76cab6e223e41d2c70d79e82c284a96411f8645e2afff"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c93b7c2e52061f0925c3382d5cb8980e40f91c989563d3d32ca280069fd6a87"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee2527134f95e106cc1653e9ac78846f3a2ec1004cf20ef4e02038035a74544d"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11ff168d752cb41e8492817e10fb4f85828f6a0142b9726a30c27c35a1835f01"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b8c3a67eb87394386847d188996920f33b01b32155f0a94f36ca0e0c635bf3e3"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c7b5d5d64e2a14e35a9240b33b89389e0035e6de8dbb7ffa50d10d8b65c57449"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:69985d50a2b6f709412d944ffb2e97d0be154ea90600b7a921f95a87d6f108a2"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:c9110c06eaaac7e1f5562caf481f18ccf8f6fdf4c3323feab28a93d34cc646bd"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737e69d193dac7296365a6dcb73bbbf53bb760ab25a3727716bbd42022e8d7a"}, + {file = "aiohttp-3.9.1-cp311-cp311-win32.whl", hash = "sha256:4ee8caa925aebc1e64e98432d78ea8de67b2272252b0a931d2ac3bd876ad5544"}, + {file = "aiohttp-3.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:a34086c5cc285be878622e0a6ab897a986a6e8bf5b67ecb377015f06ed316587"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f800164276eec54e0af5c99feb9494c295118fc10a11b997bbb1348ba1a52065"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:500f1c59906cd142d452074f3811614be04819a38ae2b3239a48b82649c08821"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0b0a6a36ed7e164c6df1e18ee47afbd1990ce47cb428739d6c99aaabfaf1b3af"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69da0f3ed3496808e8cbc5123a866c41c12c15baaaead96d256477edf168eb57"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:176df045597e674fa950bf5ae536be85699e04cea68fa3a616cf75e413737eb5"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b796b44111f0cab6bbf66214186e44734b5baab949cb5fb56154142a92989aeb"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f27fdaadce22f2ef950fc10dcdf8048407c3b42b73779e48a4e76b3c35bca26c"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcb6532b9814ea7c5a6a3299747c49de30e84472fa72821b07f5a9818bce0f66"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:54631fb69a6e44b2ba522f7c22a6fb2667a02fd97d636048478db2fd8c4e98fe"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4b4c452d0190c5a820d3f5c0f3cd8a28ace48c54053e24da9d6041bf81113183"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:cae4c0c2ca800c793cae07ef3d40794625471040a87e1ba392039639ad61ab5b"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:565760d6812b8d78d416c3c7cfdf5362fbe0d0d25b82fed75d0d29e18d7fc30f"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54311eb54f3a0c45efb9ed0d0a8f43d1bc6060d773f6973efd90037a51cd0a3f"}, + {file = "aiohttp-3.9.1-cp312-cp312-win32.whl", hash = "sha256:85c3e3c9cb1d480e0b9a64c658cd66b3cfb8e721636ab8b0e746e2d79a7a9eed"}, + {file = "aiohttp-3.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:11cb254e397a82efb1805d12561e80124928e04e9c4483587ce7390b3866d213"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8a22a34bc594d9d24621091d1b91511001a7eea91d6652ea495ce06e27381f70"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:598db66eaf2e04aa0c8900a63b0101fdc5e6b8a7ddd805c56d86efb54eb66672"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c9376e2b09895c8ca8b95362283365eb5c03bdc8428ade80a864160605715f1"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41473de252e1797c2d2293804e389a6d6986ef37cbb4a25208de537ae32141dd"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c5857612c9813796960c00767645cb5da815af16dafb32d70c72a8390bbf690"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffcd828e37dc219a72c9012ec44ad2e7e3066bec6ff3aaa19e7d435dbf4032ca"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:219a16763dc0294842188ac8a12262b5671817042b35d45e44fd0a697d8c8361"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f694dc8a6a3112059258a725a4ebe9acac5fe62f11c77ac4dcf896edfa78ca28"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bcc0ea8d5b74a41b621ad4a13d96c36079c81628ccc0b30cfb1603e3dfa3a014"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:90ec72d231169b4b8d6085be13023ece8fa9b1bb495e4398d847e25218e0f431"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cf2a0ac0615842b849f40c4d7f304986a242f1e68286dbf3bd7a835e4f83acfd"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:0e49b08eafa4f5707ecfb321ab9592717a319e37938e301d462f79b4e860c32a"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2c59e0076ea31c08553e868cec02d22191c086f00b44610f8ab7363a11a5d9d8"}, + {file = "aiohttp-3.9.1-cp38-cp38-win32.whl", hash = "sha256:4831df72b053b1eed31eb00a2e1aff6896fb4485301d4ccb208cac264b648db4"}, + {file = "aiohttp-3.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:3135713c5562731ee18f58d3ad1bf41e1d8883eb68b363f2ffde5b2ea4b84cc7"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cfeadf42840c1e870dc2042a232a8748e75a36b52d78968cda6736de55582766"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:70907533db712f7aa791effb38efa96f044ce3d4e850e2d7691abd759f4f0ae0"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cdefe289681507187e375a5064c7599f52c40343a8701761c802c1853a504558"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7481f581251bb5558ba9f635db70908819caa221fc79ee52a7f58392778c636"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49f0c1b3c2842556e5de35f122fc0f0b721334ceb6e78c3719693364d4af8499"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d406b01a9f5a7e232d1b0d161b40c05275ffbcbd772dc18c1d5a570961a1ca4"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d8e4450e7fe24d86e86b23cc209e0023177b6d59502e33807b732d2deb6975f"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c0266cd6f005e99f3f51e583012de2778e65af6b73860038b968a0a8888487a"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab221850108a4a063c5b8a70f00dd7a1975e5a1713f87f4ab26a46e5feac5a0e"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c88a15f272a0ad3d7773cf3a37cc7b7d077cbfc8e331675cf1346e849d97a4e5"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:237533179d9747080bcaad4d02083ce295c0d2eab3e9e8ce103411a4312991a0"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:02ab6006ec3c3463b528374c4cdce86434e7b89ad355e7bf29e2f16b46c7dd6f"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04fa38875e53eb7e354ece1607b1d2fdee2d175ea4e4d745f6ec9f751fe20c7c"}, + {file = "aiohttp-3.9.1-cp39-cp39-win32.whl", hash = "sha256:82eefaf1a996060602f3cc1112d93ba8b201dbf5d8fd9611227de2003dddb3b7"}, + {file = "aiohttp-3.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:9b05d33ff8e6b269e30a7957bd3244ffbce2a7a35a81b81c382629b80af1a8bf"}, + {file = "aiohttp-3.9.1.tar.gz", hash = "sha256:8fc49a87ac269d4529da45871e2ffb6874e87779c3d0e2ccd813c0899221239d"}, +] + +[package.dependencies] +aiosignal = ">=1.1.2" +async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} +attrs = ">=17.3.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +yarl = ">=1.0,<2.0" + +[package.extras] +speedups = ["Brotli", "aiodns", "brotlicffi"] + +[[package]] +name = "aiosignal" +version = "1.3.1" +description = "aiosignal: a list of registered asynchronous callbacks" +optional = false +python-versions = ">=3.7" +files = [ + {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, + {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, +] + +[package.dependencies] +frozenlist = ">=1.1.0" + +[[package]] +name = "anyio" +version = "4.1.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "anyio-4.1.0-py3-none-any.whl", hash = "sha256:56a415fbc462291813a94528a779597226619c8e78af7de0507333f700011e5f"}, + {file = "anyio-4.1.0.tar.gz", hash = "sha256:5a0bec7085176715be77df87fc66d6c9d70626bd752fcc85f57cdbee5b3760da"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" + +[package.extras] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] + +[[package]] +name = "appdirs" +version = "1.4.4" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = "*" +files = [ + {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, + {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, +] + +[[package]] +name = "appnope" +version = "0.1.3" +description = "Disable App Nap on macOS >= 10.9" +optional = false +python-versions = "*" +files = [ + {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, + {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, +] + +[[package]] +name = "argon2-cffi" +version = "23.1.0" +description = "Argon2 for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, +] + +[package.dependencies] +argon2-cffi-bindings = "*" + +[package.extras] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] + +[[package]] +name = "argon2-cffi-bindings" +version = "21.2.0" +description = "Low-level CFFI bindings for Argon2" +optional = false +python-versions = ">=3.6" +files = [ + {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, + {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, +] + +[package.dependencies] +cffi = ">=1.0.1" + +[package.extras] +dev = ["cogapp", "pre-commit", "pytest", "wheel"] +tests = ["pytest"] + +[[package]] +name = "arrow" +version = "1.3.0" +description = "Better dates & times for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, +] + +[package.dependencies] +python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] + +[[package]] +name = "astor" +version = "0.8.1" +description = "Read/rewrite/write Python ASTs" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +files = [ + {file = "astor-0.8.1-py2.py3-none-any.whl", hash = "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5"}, + {file = "astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e"}, +] + +[[package]] +name = "asttokens" +version = "2.4.1" +description = "Annotate AST trees with source code positions" +optional = false +python-versions = "*" +files = [ + {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, + {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, +] + +[package.dependencies] +six = ">=1.12.0" + +[package.extras] +astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] +test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] + +[[package]] +name = "async-lru" +version = "2.0.4" +description = "Simple LRU cache for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"}, + {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} + +[[package]] +name = "async-timeout" +version = "4.0.3" +description = "Timeout context manager for asyncio programs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, + {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, +] + +[[package]] +name = "attrs" +version = "23.1.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] + +[[package]] +name = "babel" +version = "2.13.1" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Babel-2.13.1-py3-none-any.whl", hash = "sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed"}, + {file = "Babel-2.13.1.tar.gz", hash = "sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900"}, +] + +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + +[[package]] +name = "bandit" +version = "1.7.5" +description = "Security oriented static analyser for python code." +optional = false +python-versions = ">=3.7" +files = [ + {file = "bandit-1.7.5-py3-none-any.whl", hash = "sha256:75665181dc1e0096369112541a056c59d1c5f66f9bb74a8d686c3c362b83f549"}, + {file = "bandit-1.7.5.tar.gz", hash = "sha256:bdfc739baa03b880c2d15d0431b31c658ffc348e907fe197e54e0389dd59e11e"}, +] + +[package.dependencies] +colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} +GitPython = ">=1.0.1" +PyYAML = ">=5.3.1" +rich = "*" +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)", "tomli (>=1.1.0)"] +toml = ["tomli (>=1.1.0)"] +yaml = ["PyYAML"] + +[[package]] +name = "beautifulsoup4" +version = "4.12.2" +description = "Screen-scraping library" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, + {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] +name = "bleach" +version = "6.1.0" +description = "An easy safelist-based HTML-sanitizing tool." +optional = false +python-versions = ">=3.8" +files = [ + {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, + {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, +] + +[package.dependencies] +six = ">=1.9.0" +webencodings = "*" + +[package.extras] +css = ["tinycss2 (>=1.1.0,<1.3)"] + +[[package]] +name = "certifi" +version = "2023.11.17" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, + {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, +] + +[[package]] +name = "cffi" +version = "1.16.0" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, + {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, + {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, + {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, + {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, + {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, + {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, + {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, + {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, + {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, + {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, + {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, + {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, + {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "cfgv" +version = "3.4.0" +description = "Validate configuration and produce human readable error messages." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "cityscapesscripts" +version = "2.2.1" +description = "Scripts for the Cityscapes Dataset" +optional = false +python-versions = "*" +files = [ + {file = "cityscapesScripts-2.2.1-py3-none-any.whl", hash = "sha256:dcf3855a9d76869fa510330871c39f6125989e9d87bf2e3077e6a00432238ce1"}, + {file = "cityscapesScripts-2.2.1.tar.gz", hash = "sha256:a5b9a67d00258181a692e6e971c73a20d50ab45a1f258d6087667cfb52b36a90"}, +] + +[package.dependencies] +appdirs = "*" +coloredlogs = "*" +matplotlib = "*" +numpy = "*" +pillow = "*" +pyquaternion = "*" +tqdm = "*" +typing = "*" + +[package.extras] +gui = ["PyQt5"] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "coloredlogs" +version = "15.0.1" +description = "Colored terminal output for Python's logging module" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, + {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, +] + +[package.dependencies] +humanfriendly = ">=9.1" + +[package.extras] +cron = ["capturer (>=2.4)"] + +[[package]] +name = "comm" +version = "0.2.0" +description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." +optional = false +python-versions = ">=3.8" +files = [ + {file = "comm-0.2.0-py3-none-any.whl", hash = "sha256:2da8d9ebb8dd7bfc247adaff99f24dce705638a8042b85cb995066793e391001"}, + {file = "comm-0.2.0.tar.gz", hash = "sha256:a517ea2ca28931c7007a7a99c562a0fa5883cfb48963140cf642c41c948498be"}, +] + +[package.dependencies] +traitlets = ">=4" + +[package.extras] +test = ["pytest"] + +[[package]] +name = "contourpy" +version = "1.2.0" +description = "Python library for calculating contours of 2D quadrilateral grids" +optional = false +python-versions = ">=3.9" +files = [ + {file = "contourpy-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0274c1cb63625972c0c007ab14dd9ba9e199c36ae1a231ce45d725cbcbfd10a8"}, + {file = "contourpy-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ab459a1cbbf18e8698399c595a01f6dcc5c138220ca3ea9e7e6126232d102bb4"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdd887f17c2f4572ce548461e4f96396681212d858cae7bd52ba3310bc6f00f"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d16edfc3fc09968e09ddffada434b3bf989bf4911535e04eada58469873e28e"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c203f617abc0dde5792beb586f827021069fb6d403d7f4d5c2b543d87edceb9"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b69303ceb2e4d4f146bf82fda78891ef7bcd80c41bf16bfca3d0d7eb545448aa"}, + {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:884c3f9d42d7218304bc74a8a7693d172685c84bd7ab2bab1ee567b769696df9"}, + {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1b1208102be6e851f20066bf0e7a96b7d48a07c9b0cfe6d0d4545c2f6cadab"}, + {file = "contourpy-1.2.0-cp310-cp310-win32.whl", hash = "sha256:34b9071c040d6fe45d9826cbbe3727d20d83f1b6110d219b83eb0e2a01d79488"}, + {file = "contourpy-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:bd2f1ae63998da104f16a8b788f685e55d65760cd1929518fd94cd682bf03e41"}, + {file = "contourpy-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd10c26b4eadae44783c45ad6655220426f971c61d9b239e6f7b16d5cdaaa727"}, + {file = "contourpy-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c6b28956b7b232ae801406e529ad7b350d3f09a4fde958dfdf3c0520cdde0dd"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebeac59e9e1eb4b84940d076d9f9a6cec0064e241818bcb6e32124cc5c3e377a"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:139d8d2e1c1dd52d78682f505e980f592ba53c9f73bd6be102233e358b401063"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e9dc350fb4c58adc64df3e0703ab076f60aac06e67d48b3848c23647ae4310e"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18fc2b4ed8e4a8fe849d18dce4bd3c7ea637758c6343a1f2bae1e9bd4c9f4686"}, + {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:16a7380e943a6d52472096cb7ad5264ecee36ed60888e2a3d3814991a0107286"}, + {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8d8faf05be5ec8e02a4d86f616fc2a0322ff4a4ce26c0f09d9f7fb5330a35c95"}, + {file = "contourpy-1.2.0-cp311-cp311-win32.whl", hash = "sha256:67b7f17679fa62ec82b7e3e611c43a016b887bd64fb933b3ae8638583006c6d6"}, + {file = "contourpy-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:99ad97258985328b4f207a5e777c1b44a83bfe7cf1f87b99f9c11d4ee477c4de"}, + {file = "contourpy-1.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:575bcaf957a25d1194903a10bc9f316c136c19f24e0985a2b9b5608bdf5dbfe0"}, + {file = "contourpy-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9e6c93b5b2dbcedad20a2f18ec22cae47da0d705d454308063421a3b290d9ea4"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:464b423bc2a009088f19bdf1f232299e8b6917963e2b7e1d277da5041f33a779"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:68ce4788b7d93e47f84edd3f1f95acdcd142ae60bc0e5493bfd120683d2d4316"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d7d1f8871998cdff5d2ff6a087e5e1780139abe2838e85b0b46b7ae6cc25399"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e739530c662a8d6d42c37c2ed52a6f0932c2d4a3e8c1f90692ad0ce1274abe0"}, + {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:247b9d16535acaa766d03037d8e8fb20866d054d3c7fbf6fd1f993f11fc60ca0"}, + {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:461e3ae84cd90b30f8d533f07d87c00379644205b1d33a5ea03381edc4b69431"}, + {file = "contourpy-1.2.0-cp312-cp312-win32.whl", hash = "sha256:1c2559d6cffc94890b0529ea7eeecc20d6fadc1539273aa27faf503eb4656d8f"}, + {file = "contourpy-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:491b1917afdd8638a05b611a56d46587d5a632cabead889a5440f7c638bc6ed9"}, + {file = "contourpy-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5fd1810973a375ca0e097dee059c407913ba35723b111df75671a1976efa04bc"}, + {file = "contourpy-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:999c71939aad2780f003979b25ac5b8f2df651dac7b38fb8ce6c46ba5abe6ae9"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7caf9b241464c404613512d5594a6e2ff0cc9cb5615c9475cc1d9b514218ae8"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:266270c6f6608340f6c9836a0fb9b367be61dde0c9a9a18d5ece97774105ff3e"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbd50d0a0539ae2e96e537553aff6d02c10ed165ef40c65b0e27e744a0f10af8"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11f8d2554e52f459918f7b8e6aa20ec2a3bce35ce95c1f0ef4ba36fbda306df5"}, + {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ce96dd400486e80ac7d195b2d800b03e3e6a787e2a522bfb83755938465a819e"}, + {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6d3364b999c62f539cd403f8123ae426da946e142312a514162adb2addd8d808"}, + {file = "contourpy-1.2.0-cp39-cp39-win32.whl", hash = "sha256:1c88dfb9e0c77612febebb6ac69d44a8d81e3dc60f993215425b62c1161353f4"}, + {file = "contourpy-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:78e6ad33cf2e2e80c5dfaaa0beec3d61face0fb650557100ee36db808bfa6843"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:be16975d94c320432657ad2402f6760990cb640c161ae6da1363051805fa8108"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b95a225d4948b26a28c08307a60ac00fb8671b14f2047fc5476613252a129776"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0d7e03c0f9a4f90dc18d4e77e9ef4ec7b7bbb437f7f675be8e530d65ae6ef956"}, + {file = "contourpy-1.2.0.tar.gz", hash = "sha256:171f311cb758de7da13fc53af221ae47a5877be5a0843a9fe150818c51ed276a"}, +] + +[package.dependencies] +numpy = ">=1.20,<2.0" + +[package.extras] +bokeh = ["bokeh", "selenium"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.6.1)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] + +[[package]] +name = "coverage" +version = "7.3.2" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"}, + {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"}, + {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"}, + {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"}, + {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"}, + {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"}, + {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"}, + {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"}, + {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"}, + {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"}, + {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"}, + {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"}, + {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"}, + {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"}, + {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"}, + {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"}, + {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"}, + {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"}, + {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"}, + {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"}, + {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"}, + {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"}, +] + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "cycler" +version = "0.12.1" +description = "Composable style cycles" +optional = false +python-versions = ">=3.8" +files = [ + {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, + {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, +] + +[package.extras] +docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] +tests = ["pytest", "pytest-cov", "pytest-xdist"] + +[[package]] +name = "cython" +version = "3.0.6" +description = "The Cython compiler for writing C extensions in the Python language." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "Cython-3.0.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0fcdfbf6fc7d0bd683d55e617c3d5a5f25b28ce8b405bc1e89054fc7c52a97e5"}, + {file = "Cython-3.0.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ccbee314f8d15ee8ddbe270859dda427e1187123f2c7c41526d1f260eee6c8f7"}, + {file = "Cython-3.0.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14b992f36ffa1294921fca5f6488ea192fadd75770dc64fa25975379382551e9"}, + {file = "Cython-3.0.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ca2e90a75d405070f3c41e701bb8005892f14d42322f1d8fd00a61d660bbae7"}, + {file = "Cython-3.0.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4121c1160bc1bd8828546e8ce45906bd9ff27799d14747ce3fbbc9d67efbb1b8"}, + {file = "Cython-3.0.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:519814b8f80869ee5f9ee2cb2363e5c310067c0298cbea291c556b22da1ef6ae"}, + {file = "Cython-3.0.6-cp310-cp310-win32.whl", hash = "sha256:b029d8c754ef867ab4d67fc2477dde9782bf0409cb8e4024a7d29cf5aff37530"}, + {file = "Cython-3.0.6-cp310-cp310-win_amd64.whl", hash = "sha256:2262390f453eedf600e084b074144286576ed2a56bb7fbfe15ad8d9499eceb52"}, + {file = "Cython-3.0.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfe8c7ac60363769ed8d91fca26398aaa9640368ab999a79b0ccb5e788d3bcf8"}, + {file = "Cython-3.0.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e31a9b18ec6ce57eb3479df920e6093596fe4ba8010dcc372720040386b4bdb"}, + {file = "Cython-3.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca2542f1f34f0141475b13777df040c31f2073a055097734a0a793ac3a4fb72"}, + {file = "Cython-3.0.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b24c1c38dad4bd85e142ccbe2f88122807f8d5a75352321e1e4baf2b293df7c6"}, + {file = "Cython-3.0.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:dc4b4e76c1414584bb55465dfb6f41dd6bd27fd53fb41ddfcaca9edf00c1f80e"}, + {file = "Cython-3.0.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:805a2c532feee09aeed064eaeb7b6ee35cbab650569d0a3756975f3cc4f246cf"}, + {file = "Cython-3.0.6-cp311-cp311-win32.whl", hash = "sha256:dcdb9a177c7c385fe0c0709a9a6790b6508847d67dcac76bb65a2c7ea447efe5"}, + {file = "Cython-3.0.6-cp311-cp311-win_amd64.whl", hash = "sha256:b8640b7f6503292c358cef925df5a69adf230045719893ffe20ad98024fdf7ae"}, + {file = "Cython-3.0.6-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:16b3b02cc7b3bc42ee1a0118b1465ca46b0f3fb32d003e6f1a3a352a819bb9a3"}, + {file = "Cython-3.0.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11e1d9b153573c425846b627bef52b3b99cb73d4fbfbb136e500a878d4b5e803"}, + {file = "Cython-3.0.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85a7a406f78c2f297bf82136ff5deac3150288446005ed1e56552a9e3ac1469f"}, + {file = "Cython-3.0.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88be4fbc760de8f313df89ca8256098c0963c9ec72f3aa88538384b80ef1a6ef"}, + {file = "Cython-3.0.6-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ea2e5a7c503b41618bfb10e4bc610f780ab1c729280531b5cabb24e05aa21cf2"}, + {file = "Cython-3.0.6-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d296b48e1410cab50220a28a834167f2d7ac6c0e7de12834d66e42248a1b0f6"}, + {file = "Cython-3.0.6-cp312-cp312-win32.whl", hash = "sha256:7f19e99c6e334e9e30dfa844c3ca4ac09931b94dbba406c646bde54687aed758"}, + {file = "Cython-3.0.6-cp312-cp312-win_amd64.whl", hash = "sha256:9cae02e26967ffb6503c6e91b77010acbadfb7189a5a11d6158d634fb0f73679"}, + {file = "Cython-3.0.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cb6a54543869a5b0ad009d86eb0ebc0879fab838392bfd253ad6d4f5e0f17d84"}, + {file = "Cython-3.0.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d2d9e53bf021cc7a5c7b6b537b5b5a7ba466ba7348d498aa17499d0ad12637e"}, + {file = "Cython-3.0.6-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05d15854b2b363b35c755d22015c1c2fc590b8128202f8c9eb85578461101d9c"}, + {file = "Cython-3.0.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5548316497a3b8b2d9da575ea143476472db90dee73c67def061621940f78ae"}, + {file = "Cython-3.0.6-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9b853e0855e4b3d164c05b24718e5e2df369e5af54f47cb8d923c4f497dfc92c"}, + {file = "Cython-3.0.6-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:2c77f97f462a40a319dda7e28c1669370cb26f9175f3e8f9bab99d2f8f3f2f09"}, + {file = "Cython-3.0.6-cp36-cp36m-win32.whl", hash = "sha256:3ac8b6734f2cad5640f2da21cd33cf88323547d07e445fb7453ab38ec5033b1f"}, + {file = "Cython-3.0.6-cp36-cp36m-win_amd64.whl", hash = "sha256:8dd5f5f3587909ff71f0562f50e00d4b836c948e56e8f74897b12f38a29e41b9"}, + {file = "Cython-3.0.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9c0472c6394750469062deb2c166125b10411636f63a0418b5c36a60d0c9a96a"}, + {file = "Cython-3.0.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97081932c8810bb99cb26b4b0402202a1764b58ee287c8b306071d2848148c24"}, + {file = "Cython-3.0.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e781b3880dfd0d4d37983c9d414bfd5f26c2141f6d763d20ef1964a0a4cb2405"}, + {file = "Cython-3.0.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef88c46e91e21772a5d3b6b1e70a6da5fe098154ad4768888129b1c05e93bba7"}, + {file = "Cython-3.0.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a38b9e7a252ec27dbc21ee8f00f09a896e88285eebb6ed99207b2ff1ea6af28e"}, + {file = "Cython-3.0.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4975cdaf720d29288ec225b76b4f4471ff03f4f8b51841ba85d6587699ab2ad5"}, + {file = "Cython-3.0.6-cp37-cp37m-win32.whl", hash = "sha256:9b89463ea330318461ca47d3e49b5f606e7e82446b6f37e5c19b60392439674c"}, + {file = "Cython-3.0.6-cp37-cp37m-win_amd64.whl", hash = "sha256:0ca8f379b47417bfad98faeb14bf8a3966fc92cf69f8aaf7635cf6885e50d001"}, + {file = "Cython-3.0.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b3dda1e80eb577b9563cee6cf31923a7b88836b9f9be0043ec545b138b95d8e8"}, + {file = "Cython-3.0.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:267e34e9a96f98c379100ef4192994a311678fb5c9af34c83ba5230223577581"}, + {file = "Cython-3.0.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:345d9112fde4ae0347d656f58591fd52017c61a19779c95423bb38735fe4a401"}, + {file = "Cython-3.0.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25da0e51331ac12ff16cd858d1d836e092c984e1dc45d338166081d3802297c0"}, + {file = "Cython-3.0.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:eebbf09089b4988b9f398ed46f168892e32fcfeec346b15954fdd818aa103456"}, + {file = "Cython-3.0.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e3ed0c125556324fa49b9e92bea13be7b158fcae6f72599d63c8733688257788"}, + {file = "Cython-3.0.6-cp38-cp38-win32.whl", hash = "sha256:86e1e5a5c9157a547d0a769de59c98a1fc5e46cfad976f32f60423cc6de11052"}, + {file = "Cython-3.0.6-cp38-cp38-win_amd64.whl", hash = "sha256:0d45a84a315bd84d1515cd3571415a0ee0709eb4e2cd4b13668ede928af344a7"}, + {file = "Cython-3.0.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a8e788e64b659bb8fe980bc37da3118e1f7285dec40c5fb293adabc74d4205f2"}, + {file = "Cython-3.0.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a77a174c7fb13d80754c8bf9912efd3f3696d13285b2f568eca17324263b3f7"}, + {file = "Cython-3.0.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1074e84752cd0daf3226823ddbc37cca8bc45f61c94a1db2a34e641f2b9b0797"}, + {file = "Cython-3.0.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49d5cae02d56e151e1481e614a1af9a0fe659358f2aa5eca7a18f05aa641db61"}, + {file = "Cython-3.0.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b94610fa49e36db068446cfd149a42e3246f38a4256bbe818512ac181446b4b"}, + {file = "Cython-3.0.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fabb2d14dd71add618a7892c40ffec584d1dae1e477caa193778e52e06821d83"}, + {file = "Cython-3.0.6-cp39-cp39-win32.whl", hash = "sha256:ce442c0be72ab014c305399d955b78c3d1e69d5a5ce24398122b605691b69078"}, + {file = "Cython-3.0.6-cp39-cp39-win_amd64.whl", hash = "sha256:8a05f79a0761fc76c42e945e5a9cb5d7986aa9e8e526fdf52bd9ca61a12d4567"}, + {file = "Cython-3.0.6-py2.py3-none-any.whl", hash = "sha256:5921a175ea20779d4443ef99276cfa9a1a47de0e32d593be7679be741c9ed93b"}, + {file = "Cython-3.0.6.tar.gz", hash = "sha256:399d185672c667b26eabbdca420c98564583798af3bc47670a8a09e9f19dd660"}, +] + +[[package]] +name = "darglint" +version = "1.8.1" +description = "A utility for ensuring Google-style docstrings stay up to date with the source code." +optional = false +python-versions = ">=3.6,<4.0" +files = [ + {file = "darglint-1.8.1-py3-none-any.whl", hash = "sha256:5ae11c259c17b0701618a20c3da343a3eb98b3bc4b5a83d31cdd94f5ebdced8d"}, + {file = "darglint-1.8.1.tar.gz", hash = "sha256:080d5106df149b199822e7ee7deb9c012b49891538f14a11be681044f0bb20da"}, +] + +[[package]] +name = "debugpy" +version = "1.8.0" +description = "An implementation of the Debug Adapter Protocol for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "debugpy-1.8.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:7fb95ca78f7ac43393cd0e0f2b6deda438ec7c5e47fa5d38553340897d2fbdfb"}, + {file = "debugpy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef9ab7df0b9a42ed9c878afd3eaaff471fce3fa73df96022e1f5c9f8f8c87ada"}, + {file = "debugpy-1.8.0-cp310-cp310-win32.whl", hash = "sha256:a8b7a2fd27cd9f3553ac112f356ad4ca93338feadd8910277aff71ab24d8775f"}, + {file = "debugpy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:5d9de202f5d42e62f932507ee8b21e30d49aae7e46d5b1dd5c908db1d7068637"}, + {file = "debugpy-1.8.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:ef54404365fae8d45cf450d0544ee40cefbcb9cb85ea7afe89a963c27028261e"}, + {file = "debugpy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60009b132c91951354f54363f8ebdf7457aeb150e84abba5ae251b8e9f29a8a6"}, + {file = "debugpy-1.8.0-cp311-cp311-win32.whl", hash = "sha256:8cd0197141eb9e8a4566794550cfdcdb8b3db0818bdf8c49a8e8f8053e56e38b"}, + {file = "debugpy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:a64093656c4c64dc6a438e11d59369875d200bd5abb8f9b26c1f5f723622e153"}, + {file = "debugpy-1.8.0-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:b05a6b503ed520ad58c8dc682749113d2fd9f41ffd45daec16e558ca884008cd"}, + {file = "debugpy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c6fb41c98ec51dd010d7ed650accfd07a87fe5e93eca9d5f584d0578f28f35f"}, + {file = "debugpy-1.8.0-cp38-cp38-win32.whl", hash = "sha256:46ab6780159eeabb43c1495d9c84cf85d62975e48b6ec21ee10c95767c0590aa"}, + {file = "debugpy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:bdc5ef99d14b9c0fcb35351b4fbfc06ac0ee576aeab6b2511702e5a648a2e595"}, + {file = "debugpy-1.8.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:61eab4a4c8b6125d41a34bad4e5fe3d2cc145caecd63c3fe953be4cc53e65bf8"}, + {file = "debugpy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:125b9a637e013f9faac0a3d6a82bd17c8b5d2c875fb6b7e2772c5aba6d082332"}, + {file = "debugpy-1.8.0-cp39-cp39-win32.whl", hash = "sha256:57161629133113c97b387382045649a2b985a348f0c9366e22217c87b68b73c6"}, + {file = "debugpy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:e3412f9faa9ade82aa64a50b602544efcba848c91384e9f93497a458767e6926"}, + {file = "debugpy-1.8.0-py2.py3-none-any.whl", hash = "sha256:9c9b0ac1ce2a42888199df1a1906e45e6f3c9555497643a85e0bf2406e3ffbc4"}, + {file = "debugpy-1.8.0.zip", hash = "sha256:12af2c55b419521e33d5fb21bd022df0b5eb267c3e178f1d374a63a2a6bdccd0"}, +] + +[[package]] +name = "decopatch" +version = "1.4.10" +description = "Create decorators easily in python." +optional = false +python-versions = "*" +files = [ + {file = "decopatch-1.4.10-py2.py3-none-any.whl", hash = "sha256:e151f7f93de2b1b3fd3f3272dcc7cefd1a69f68ec1c2d8e288ecd9deb36dc5f7"}, + {file = "decopatch-1.4.10.tar.gz", hash = "sha256:957f49c93f4150182c23f8fb51d13bb3213e0f17a79e09c8cca7057598b55720"}, +] + +[package.dependencies] +makefun = ">=1.5.0" + +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +optional = false +python-versions = ">=3.5" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] + +[[package]] +name = "distlib" +version = "0.3.7" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, + {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, +] + +[[package]] +name = "dnspython" +version = "2.4.2" +description = "DNS toolkit" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "dnspython-2.4.2-py3-none-any.whl", hash = "sha256:57c6fbaaeaaf39c891292012060beb141791735dbb4004798328fc2c467402d8"}, + {file = "dnspython-2.4.2.tar.gz", hash = "sha256:8dcfae8c7460a2f84b4072e26f1c9f4101ca20c071649cb7c34e8b6a93d58984"}, +] + +[package.extras] +dnssec = ["cryptography (>=2.6,<42.0)"] +doh = ["h2 (>=4.1.0)", "httpcore (>=0.17.3)", "httpx (>=0.24.1)"] +doq = ["aioquic (>=0.9.20)"] +idna = ["idna (>=2.1,<4.0)"] +trio = ["trio (>=0.14,<0.23)"] +wmi = ["wmi (>=1.5.1,<2.0.0)"] + +[[package]] +name = "docutils" +version = "0.20.1" +description = "Docutils -- Python Documentation Utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, + {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, +] + +[[package]] +name = "einops" +version = "0.7.0" +description = "A new flavour of deep learning operations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "einops-0.7.0-py3-none-any.whl", hash = "sha256:0f3096f26b914f465f6ff3c66f5478f9a5e380bb367ffc6493a68143fbbf1fd1"}, + {file = "einops-0.7.0.tar.gz", hash = "sha256:b2b04ad6081a3b227080c9bf5e3ace7160357ff03043cd66cc5b2319eb7031d1"}, +] + +[[package]] +name = "email-validator" +version = "2.1.0.post1" +description = "A robust email address syntax and deliverability validation library." +optional = false +python-versions = ">=3.8" +files = [ + {file = "email_validator-2.1.0.post1-py3-none-any.whl", hash = "sha256:c973053efbeddfef924dc0bd93f6e77a1ea7ee0fce935aea7103c7a3d6d2d637"}, + {file = "email_validator-2.1.0.post1.tar.gz", hash = "sha256:a4b0bd1cf55f073b924258d19321b1f3aa74b4b5a71a42c305575dba920e1a44"}, +] + +[package.dependencies] +dnspython = ">=2.0.0" +idna = ">=2.0.0" + +[[package]] +name = "emma-common" +version = "2.3.1" +description = "Common modules which are used a lot throughout EMMA repositories" +optional = false +python-versions = ">=3.9,<3.11" +files = [] +develop = false + +[package.dependencies] +fastapi = {version = ">=0.88.0", extras = ["all"]} +gunicorn = ">=20.1.0" +httpx = ">=0.23.1" +huggingface-hub = ">=0.19.4" +loguru = ">=0.6.0" +numpy = ">1.22" +orjson = ">=3.8.3" +pydantic = {version = ">=1.10.0,<2", extras = ["dotenv"]} +rich = ">=12.6.0" +torch = ">=1.10,!=1.13.0,<2" + +[package.source] +type = "git" +url = "https://github.com/emma-heriot-watt/common.git" +reference = "HEAD" +resolved_reference = "c52a5b573306c92f42fd46f70abc00506a58b6f8" + +[[package]] +name = "eradicate" +version = "2.3.0" +description = "Removes commented-out code." +optional = false +python-versions = "*" +files = [ + {file = "eradicate-2.3.0-py3-none-any.whl", hash = "sha256:2b29b3dd27171f209e4ddd8204b70c02f0682ae95eecb353f10e8d72b149c63e"}, + {file = "eradicate-2.3.0.tar.gz", hash = "sha256:06df115be3b87d0fc1c483db22a2ebb12bcf40585722810d809cc770f5031c37"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.2.0" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, + {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "executing" +version = "2.0.1" +description = "Get the currently executing AST node of a frame, and other information" +optional = false +python-versions = ">=3.5" +files = [ + {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, + {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, +] + +[package.extras] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] + +[[package]] +name = "fastapi" +version = "0.99.1" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = false +python-versions = ">=3.7" +files = [ + {file = "fastapi-0.99.1-py3-none-any.whl", hash = "sha256:976df7bab51ac7beda9f68c4513b8c4490b5c1135c72aafd0a5ee4023ec5282e"}, + {file = "fastapi-0.99.1.tar.gz", hash = "sha256:ac78f717cd80d657bd183f94d33b9bda84aa376a46a9dab513586b8eef1dc6fc"}, +] + +[package.dependencies] +email-validator = {version = ">=1.1.1", optional = true, markers = "extra == \"all\""} +httpx = {version = ">=0.23.0", optional = true, markers = "extra == \"all\""} +itsdangerous = {version = ">=1.1.0", optional = true, markers = "extra == \"all\""} +jinja2 = {version = ">=2.11.2", optional = true, markers = "extra == \"all\""} +orjson = {version = ">=3.2.1", optional = true, markers = "extra == \"all\""} +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0" +python-multipart = {version = ">=0.0.5", optional = true, markers = "extra == \"all\""} +pyyaml = {version = ">=5.3.1", optional = true, markers = "extra == \"all\""} +starlette = ">=0.27.0,<0.28.0" +typing-extensions = ">=4.5.0" +ujson = {version = ">=4.0.1,<4.0.2 || >4.0.2,<4.1.0 || >4.1.0,<4.2.0 || >4.2.0,<4.3.0 || >4.3.0,<5.0.0 || >5.0.0,<5.1.0 || >5.1.0", optional = true, markers = "extra == \"all\""} +uvicorn = {version = ">=0.12.0", extras = ["standard"], optional = true, markers = "extra == \"all\""} + +[package.extras] +all = ["email-validator (>=1.1.1)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] + +[[package]] +name = "fastjsonschema" +version = "2.19.0" +description = "Fastest Python implementation of JSON schema" +optional = false +python-versions = "*" +files = [ + {file = "fastjsonschema-2.19.0-py3-none-any.whl", hash = "sha256:b9fd1a2dd6971dbc7fee280a95bd199ae0dd9ce22beb91cc75e9c1c528a5170e"}, + {file = "fastjsonschema-2.19.0.tar.gz", hash = "sha256:e25df6647e1bc4a26070b700897b07b542ec898dd4f1f6ea013e7f6a88417225"}, +] + +[package.extras] +devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] + +[[package]] +name = "filelock" +version = "3.13.1" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.8" +files = [ + {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, + {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +typing = ["typing-extensions (>=4.8)"] + +[[package]] +name = "flake8" +version = "6.1.0" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.8.1" +files = [ + {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, + {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.11.0,<2.12.0" +pyflakes = ">=3.1.0,<3.2.0" + +[[package]] +name = "flake8-bandit" +version = "4.1.1" +description = "Automated security testing with bandit and flake8." +optional = false +python-versions = ">=3.6" +files = [ + {file = "flake8_bandit-4.1.1-py3-none-any.whl", hash = "sha256:4c8a53eb48f23d4ef1e59293657181a3c989d0077c9952717e98a0eace43e06d"}, + {file = "flake8_bandit-4.1.1.tar.gz", hash = "sha256:068e09287189cbfd7f986e92605adea2067630b75380c6b5733dab7d87f9a84e"}, +] + +[package.dependencies] +bandit = ">=1.7.3" +flake8 = ">=5.0.0" + +[[package]] +name = "flake8-broken-line" +version = "1.0.0" +description = "Flake8 plugin to forbid backslashes for line breaks" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "flake8_broken_line-1.0.0-py3-none-any.whl", hash = "sha256:96c964336024a5030dc536a9f6fb02aa679e2d2a6b35b80a558b5136c35832a9"}, + {file = "flake8_broken_line-1.0.0.tar.gz", hash = "sha256:e2c6a17f8d9a129e99c1320fce89b33843e2963871025c4c2bb7b8b8d8732a85"}, +] + +[package.dependencies] +flake8 = ">5" + +[[package]] +name = "flake8-bugbear" +version = "23.11.28" +description = "A plugin for flake8 finding likely bugs and design problems in your program. Contains warnings that don't belong in pyflakes and pycodestyle." +optional = false +python-versions = ">=3.8.1" +files = [ + {file = "flake8-bugbear-23.11.28.tar.gz", hash = "sha256:0ba6c44eaa0e4782da94c5c2607159a0e73569369246cd179cc143a0e16b78ba"}, + {file = "flake8_bugbear-23.11.28-py3-none-any.whl", hash = "sha256:8d0f351d954fd860851710cd8b5b28742b2339c0e58848b103418dd9cddb9aa4"}, +] + +[package.dependencies] +attrs = ">=19.2.0" +flake8 = ">=6.0.0" + +[package.extras] +dev = ["coverage", "hypothesis", "hypothesmith (>=0.2)", "pre-commit", "pytest", "tox"] + +[[package]] +name = "flake8-commas" +version = "2.1.0" +description = "Flake8 lint for trailing commas." +optional = false +python-versions = "*" +files = [ + {file = "flake8-commas-2.1.0.tar.gz", hash = "sha256:940441ab8ee544df564ae3b3f49f20462d75d5c7cac2463e0b27436e2050f263"}, + {file = "flake8_commas-2.1.0-py2.py3-none-any.whl", hash = "sha256:ebb96c31e01d0ef1d0685a21f3f0e2f8153a0381430e748bf0bbbb5d5b453d54"}, +] + +[package.dependencies] +flake8 = ">=2" + +[[package]] +name = "flake8-comprehensions" +version = "3.14.0" +description = "A flake8 plugin to help you write better list/set/dict comprehensions." +optional = false +python-versions = ">=3.8" +files = [ + {file = "flake8_comprehensions-3.14.0-py3-none-any.whl", hash = "sha256:7b9d07d94aa88e62099a6d1931ddf16c344d4157deedf90fe0d8ee2846f30e97"}, + {file = "flake8_comprehensions-3.14.0.tar.gz", hash = "sha256:81768c61bfc064e1a06222df08a2580d97de10cb388694becaf987c331c6c0cf"}, +] + +[package.dependencies] +flake8 = ">=3.0,<3.2.0 || >3.2.0" + +[[package]] +name = "flake8-debugger" +version = "4.1.2" +description = "ipdb/pdb statement checker plugin for flake8" +optional = false +python-versions = ">=3.7" +files = [ + {file = "flake8-debugger-4.1.2.tar.gz", hash = "sha256:52b002560941e36d9bf806fca2523dc7fb8560a295d5f1a6e15ac2ded7a73840"}, + {file = "flake8_debugger-4.1.2-py3-none-any.whl", hash = "sha256:0a5e55aeddcc81da631ad9c8c366e7318998f83ff00985a49e6b3ecf61e571bf"}, +] + +[package.dependencies] +flake8 = ">=3.0" +pycodestyle = "*" + +[[package]] +name = "flake8-docstrings" +version = "1.7.0" +description = "Extension for flake8 which uses pydocstyle to check docstrings" +optional = false +python-versions = ">=3.7" +files = [ + {file = "flake8_docstrings-1.7.0-py2.py3-none-any.whl", hash = "sha256:51f2344026da083fc084166a9353f5082b01f72901df422f74b4d953ae88ac75"}, + {file = "flake8_docstrings-1.7.0.tar.gz", hash = "sha256:4c8cc748dc16e6869728699e5d0d685da9a10b0ea718e090b1ba088e67a941af"}, +] + +[package.dependencies] +flake8 = ">=3" +pydocstyle = ">=2.1" + +[[package]] +name = "flake8-eradicate" +version = "1.5.0" +description = "Flake8 plugin to find commented out code" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "flake8_eradicate-1.5.0-py3-none-any.whl", hash = "sha256:18acc922ad7de623f5247c7d5595da068525ec5437dd53b22ec2259b96ce9d22"}, + {file = "flake8_eradicate-1.5.0.tar.gz", hash = "sha256:aee636cb9ecb5594a7cd92d67ad73eb69909e5cc7bd81710cf9d00970f3983a6"}, +] + +[package.dependencies] +attrs = "*" +eradicate = ">=2.0,<3.0" +flake8 = ">5" + +[[package]] +name = "flake8-isort" +version = "6.1.1" +description = "flake8 plugin that integrates isort" +optional = false +python-versions = ">=3.8" +files = [ + {file = "flake8_isort-6.1.1-py3-none-any.whl", hash = "sha256:0fec4dc3a15aefbdbe4012e51d5531a2eb5fa8b981cdfbc882296a59b54ede12"}, + {file = "flake8_isort-6.1.1.tar.gz", hash = "sha256:c1f82f3cf06a80c13e1d09bfae460e9666255d5c780b859f19f8318d420370b3"}, +] + +[package.dependencies] +flake8 = "*" +isort = ">=5.0.0,<6" + +[package.extras] +test = ["pytest"] + +[[package]] +name = "flake8-quotes" +version = "3.3.2" +description = "Flake8 lint for quotes." +optional = false +python-versions = "*" +files = [ + {file = "flake8-quotes-3.3.2.tar.gz", hash = "sha256:6e26892b632dacba517bf27219c459a8396dcfac0f5e8204904c5a4ba9b480e1"}, +] + +[package.dependencies] +flake8 = "*" + +[[package]] +name = "flake8-rst-docstrings" +version = "0.3.0" +description = "Python docstring reStructuredText (RST) validator for flake8" +optional = false +python-versions = ">=3.7" +files = [ + {file = "flake8-rst-docstrings-0.3.0.tar.gz", hash = "sha256:d1ce22b4bd37b73cd86b8d980e946ef198cfcc18ed82fedb674ceaa2f8d1afa4"}, + {file = "flake8_rst_docstrings-0.3.0-py3-none-any.whl", hash = "sha256:f8c3c6892ff402292651c31983a38da082480ad3ba253743de52989bdc84ca1c"}, +] + +[package.dependencies] +flake8 = ">=3" +pygments = "*" +restructuredtext-lint = "*" + +[package.extras] +develop = ["build", "twine"] + +[[package]] +name = "flake8-string-format" +version = "0.3.0" +description = "string format checker, plugin for flake8" +optional = false +python-versions = "*" +files = [ + {file = "flake8-string-format-0.3.0.tar.gz", hash = "sha256:65f3da786a1461ef77fca3780b314edb2853c377f2e35069723348c8917deaa2"}, + {file = "flake8_string_format-0.3.0-py2.py3-none-any.whl", hash = "sha256:812ff431f10576a74c89be4e85b8e075a705be39bc40c4b4278b5b13e2afa9af"}, +] + +[package.dependencies] +flake8 = "*" + +[[package]] +name = "fonttools" +version = "4.45.1" +description = "Tools to manipulate font files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fonttools-4.45.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:45fa321c458ea29224067700954ec44493ae869b47e7c5485a350a149a19fb53"}, + {file = "fonttools-4.45.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0dc7617d96b1e668eea9250e1c1fe62d0c78c3f69573ce7e3332cc40e6d84356"}, + {file = "fonttools-4.45.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ed3bda541e86725f6b4e1b94213f13ed1ae51a5a1f167028534cedea38c010"}, + {file = "fonttools-4.45.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4f4a5870e3b56788fb196da8cf30d0dfd51a76dc3b907861d018165f76ae4c2"}, + {file = "fonttools-4.45.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a3c11d9687479f01eddef729aa737abcdea0a44fdaffb62a930a18892f186c9b"}, + {file = "fonttools-4.45.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:316cec50581e844c3ab69d7c82455b54c7cf18236b2f09e722faf665fbfcac58"}, + {file = "fonttools-4.45.1-cp310-cp310-win32.whl", hash = "sha256:e2277cba9f0b525e30de2a9ad3cb4219aa4bc697230c1645666b0deee9f914f0"}, + {file = "fonttools-4.45.1-cp310-cp310-win_amd64.whl", hash = "sha256:1b9e9ad2bcded9a1431afaa57c8d3c39143ac1f050862d66bddd863c515464a2"}, + {file = "fonttools-4.45.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff6a698bdd435d24c379f6e8a54908cd9bb7dda23719084d56bf8c87709bf3bd"}, + {file = "fonttools-4.45.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c980d60cd6ec1376206fe55013d166e5627ad0b149b5c81e74eaa913ab6134f"}, + {file = "fonttools-4.45.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a12dee6523c02ca78aeedd0a5e12bfa9b7b29896350edd5241542897b072ae23"}, + {file = "fonttools-4.45.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37cd1ced6efb3dd6fe82e9f9bf92fd74ac58a5aefc284045f59ecd517a5fb9ab"}, + {file = "fonttools-4.45.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e3d24248221bd7151dfff0d88b1b5da02dccd7134bd576ce8888199827bbaa19"}, + {file = "fonttools-4.45.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ba6c23591427844dfb0a13658f1718489de75de6a46b64234584c0d17573162d"}, + {file = "fonttools-4.45.1-cp311-cp311-win32.whl", hash = "sha256:cebcddbe9351b67166292b4f71ffdbfcce01ba4b07d4267824eb46b277aeb19a"}, + {file = "fonttools-4.45.1-cp311-cp311-win_amd64.whl", hash = "sha256:f22eb69996a0bd49f76bdefb30be54ce8dbb89a0d1246874d610f05c2aa2e69e"}, + {file = "fonttools-4.45.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:794de93e83297db7b4943f2431e206d8b1ea69cb3ae14638a49cc50332bf0db8"}, + {file = "fonttools-4.45.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4ba17822a6681d06849078daaf6e03eccc9f467efe7c4c60280e28a78e8e5df9"}, + {file = "fonttools-4.45.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e50f794d09df0675da8d9dbd7c66bfcab2f74a708343aabcad41936d26556891"}, + {file = "fonttools-4.45.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b07b857d4f9de3199a8c3d1b1bf2078c0f37447891ca1a8d9234106b9a27aff"}, + {file = "fonttools-4.45.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:777ba42b94a27bb7fb2b4082522fccfd345667c32a56011e1c3e105979af5b79"}, + {file = "fonttools-4.45.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:21e96b99878348c74aa58059b8578d7586f9519cbcdadacf56486737038aa043"}, + {file = "fonttools-4.45.1-cp312-cp312-win32.whl", hash = "sha256:5cbf02cda8465b69769d07385f5d11e7bba19954e7787792f46fe679ec755ebb"}, + {file = "fonttools-4.45.1-cp312-cp312-win_amd64.whl", hash = "sha256:800e354e0c3afaeb8d9552769773d02f228e98c37b8cb03041157c3d0687cffc"}, + {file = "fonttools-4.45.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6eb2c54f7a07c92108daabcf02caf31df97825738db02a28270633946bcda4d0"}, + {file = "fonttools-4.45.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:43a3d267334109ff849c37cf3629476b5feb392ef1d2e464a167b83de8cd599c"}, + {file = "fonttools-4.45.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e1aefc2bf3c43e0f33f995f828a7bbeff4adc9393a7760b11456dbcf14388f6"}, + {file = "fonttools-4.45.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f53a19dcdd5737440839b8394eeebb35da9ec8109f7926cb6456639b5b58e47"}, + {file = "fonttools-4.45.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a17706b9cc24b27721613fe5773d93331ab7f0ecaca9955aead89c6b843d3a7"}, + {file = "fonttools-4.45.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fb36e5f40191274a95938b40c0a1fa7f895e36935aea8709e1d6deff0b2d0d4f"}, + {file = "fonttools-4.45.1-cp38-cp38-win32.whl", hash = "sha256:46eabddec12066829b8a1efe45ae552ba2f1796981ecf538d5f68284c354c589"}, + {file = "fonttools-4.45.1-cp38-cp38-win_amd64.whl", hash = "sha256:b6de2f0fcd3302fb82f94801002cb473959e998c14c24ec28234adb674aed345"}, + {file = "fonttools-4.45.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:392d0e3cc23daee910193625f7cf1b387aff9dd5b6f1a5f4a925680acb6dcbc2"}, + {file = "fonttools-4.45.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4b9544b1346d99848ac0e9b05b5d45ee703d7562fc4c9c48cf4b781de9632e57"}, + {file = "fonttools-4.45.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8717db3e4895e4820ade64ea379187738827ee60748223cb0438ef044ee208c6"}, + {file = "fonttools-4.45.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e29d5f298d616a93a4c5963682dc6cc8cc09f6d89cad2c29019fc5fb3b4d9472"}, + {file = "fonttools-4.45.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:cb472905da3049960e80fc1cf808231880d79727a8410e156bf3e5063a1c574f"}, + {file = "fonttools-4.45.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ba299f1fbaa2a1e33210aaaf6fa816d4059e4d3cfe2ae9871368d4ab548c1c6a"}, + {file = "fonttools-4.45.1-cp39-cp39-win32.whl", hash = "sha256:105099968b58a5b4cef6f3eb409db8ea8578b302a9d05e23fecba1b8b0177b5f"}, + {file = "fonttools-4.45.1-cp39-cp39-win_amd64.whl", hash = "sha256:847f3f49dd3423e5a678c098e2ba92c7f4955d4aab3044f6a507b0bb0ecb07e0"}, + {file = "fonttools-4.45.1-py3-none-any.whl", hash = "sha256:3bdd7dfca8f6c9f4779384064027e8477ad6a037d6a327b09381f43e0247c6f3"}, + {file = "fonttools-4.45.1.tar.gz", hash = "sha256:6e441286d55fe7ec7c4fb36812bf914924813776ff514b744b510680fc2733f2"}, +] + +[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 (>=15.1.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 (>=15.1.0)"] +woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] + +[[package]] +name = "fqdn" +version = "1.5.1" +description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +optional = false +python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +files = [ + {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, + {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, +] + +[[package]] +name = "frozenlist" +version = "1.4.0" +description = "A list-like structure which implements collections.abc.MutableSequence" +optional = false +python-versions = ">=3.8" +files = [ + {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"}, + {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"}, + {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62"}, + {file = "frozenlist-1.4.0-cp310-cp310-win32.whl", hash = "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0"}, + {file = "frozenlist-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb"}, + {file = "frozenlist-1.4.0-cp311-cp311-win32.whl", hash = "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431"}, + {file = "frozenlist-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8"}, + {file = "frozenlist-1.4.0-cp38-cp38-win32.whl", hash = "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc"}, + {file = "frozenlist-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3"}, + {file = "frozenlist-1.4.0-cp39-cp39-win32.whl", hash = "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f"}, + {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"}, + {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"}, +] + +[[package]] +name = "fsspec" +version = "2023.10.0" +description = "File-system specification" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fsspec-2023.10.0-py3-none-any.whl", hash = "sha256:346a8f024efeb749d2a5fca7ba8854474b1ff9af7c3faaf636a4548781136529"}, + {file = "fsspec-2023.10.0.tar.gz", hash = "sha256:330c66757591df346ad3091a53bd907e15348c2ba17d63fd54f5c39c4457d2a5"}, +] + +[package.dependencies] +aiohttp = {version = "<4.0.0a0 || >4.0.0a0,<4.0.0a1 || >4.0.0a1", optional = true, markers = "extra == \"http\""} +requests = {version = "*", optional = true, markers = "extra == \"http\""} + +[package.extras] +abfs = ["adlfs"] +adl = ["adlfs"] +arrow = ["pyarrow (>=1)"] +dask = ["dask", "distributed"] +devel = ["pytest", "pytest-cov"] +dropbox = ["dropbox", "dropboxdrivefs", "requests"] +full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] +fuse = ["fusepy"] +gcs = ["gcsfs"] +git = ["pygit2"] +github = ["requests"] +gs = ["gcsfs"] +gui = ["panel"] +hdfs = ["pyarrow (>=1)"] +http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "requests"] +libarchive = ["libarchive-c"] +oci = ["ocifs"] +s3 = ["s3fs"] +sftp = ["paramiko"] +smb = ["smbprotocol"] +ssh = ["paramiko"] +tqdm = ["tqdm"] + +[[package]] +name = "gitdb" +version = "4.0.11" +description = "Git Object Database" +optional = false +python-versions = ">=3.7" +files = [ + {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"}, + {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"}, +] + +[package.dependencies] +smmap = ">=3.0.1,<6" + +[[package]] +name = "gitpython" +version = "3.1.40" +description = "GitPython is a Python library used to interact with Git repositories" +optional = false +python-versions = ">=3.7" +files = [ + {file = "GitPython-3.1.40-py3-none-any.whl", hash = "sha256:cf14627d5a8049ffbf49915732e5eddbe8134c3bdb9d476e6182b676fc573f8a"}, + {file = "GitPython-3.1.40.tar.gz", hash = "sha256:22b126e9ffb671fdd0c129796343a02bf67bf2994b35449ffc9321aa755e18a4"}, +] + +[package.dependencies] +gitdb = ">=4.0.1,<5" + +[package.extras] +test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-sugar"] + +[[package]] +name = "gunicorn" +version = "21.2.0" +description = "WSGI HTTP Server for UNIX" +optional = false +python-versions = ">=3.5" +files = [ + {file = "gunicorn-21.2.0-py3-none-any.whl", hash = "sha256:3213aa5e8c24949e792bcacfc176fef362e7aac80b76c56f6b5122bf350722f0"}, + {file = "gunicorn-21.2.0.tar.gz", hash = "sha256:88ec8bff1d634f98e61b9f65bc4bf3cd918a90806c6f5c48bc5603849ec81033"}, +] + +[package.dependencies] +packaging = "*" + +[package.extras] +eventlet = ["eventlet (>=0.24.1)"] +gevent = ["gevent (>=1.4.0)"] +setproctitle = ["setproctitle"] +tornado = ["tornado (>=0.2)"] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "h5py" +version = "3.7.0" +description = "Read and write HDF5 files from Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h5py-3.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d77af42cb751ad6cc44f11bae73075a07429a5cf2094dfde2b1e716e059b3911"}, + {file = "h5py-3.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:63beb8b7b47d0896c50de6efb9a1eaa81dbe211f3767e7dd7db159cea51ba37a"}, + {file = "h5py-3.7.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:04e2e1e2fc51b8873e972a08d2f89625ef999b1f2d276199011af57bb9fc7851"}, + {file = "h5py-3.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f73307c876af49aa869ec5df1818e9bb0bdcfcf8a5ba773cc45a4fba5a286a5c"}, + {file = "h5py-3.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:f514b24cacdd983e61f8d371edac8c1b780c279d0acb8485639e97339c866073"}, + {file = "h5py-3.7.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:43fed4d13743cf02798a9a03a360a88e589d81285e72b83f47d37bb64ed44881"}, + {file = "h5py-3.7.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c038399ce09a58ff8d89ec3e62f00aa7cb82d14f34e24735b920e2a811a3a426"}, + {file = "h5py-3.7.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03d64fb86bb86b978928bad923b64419a23e836499ec6363e305ad28afd9d287"}, + {file = "h5py-3.7.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e5b7820b75f9519499d76cc708e27242ccfdd9dfb511d6deb98701961d0445aa"}, + {file = "h5py-3.7.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a9351d729ea754db36d175098361b920573fdad334125f86ac1dd3a083355e20"}, + {file = "h5py-3.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6776d896fb90c5938de8acb925e057e2f9f28755f67ec3edcbc8344832616c38"}, + {file = "h5py-3.7.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0a047fddbe6951bce40e9cde63373c838a978c5e05a011a682db9ba6334b8e85"}, + {file = "h5py-3.7.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0798a9c0ff45f17d0192e4d7114d734cac9f8b2b2c76dd1d923c4d0923f27bb6"}, + {file = "h5py-3.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:0d8de8cb619fc597da7cf8cdcbf3b7ff8c5f6db836568afc7dc16d21f59b2b49"}, + {file = "h5py-3.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f084bbe816907dfe59006756f8f2d16d352faff2d107f4ffeb1d8de126fc5dc7"}, + {file = "h5py-3.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1fcb11a2dc8eb7ddcae08afd8fae02ba10467753a857fa07a404d700a93f3d53"}, + {file = "h5py-3.7.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ed43e2cc4f511756fd664fb45d6b66c3cbed4e3bd0f70e29c37809b2ae013c44"}, + {file = "h5py-3.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e7535df5ee3dc3e5d1f408fdfc0b33b46bc9b34db82743c82cd674d8239b9ad"}, + {file = "h5py-3.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:9e2ad2aa000f5b1e73b5dfe22f358ca46bf1a2b6ca394d9659874d7fc251731a"}, + {file = "h5py-3.7.0.tar.gz", hash = "sha256:3fcf37884383c5da64846ab510190720027dca0768def34dd8dcb659dbe5cbf3"}, +] + +[package.dependencies] +numpy = ">=1.14.5" + +[[package]] +name = "httpcore" +version = "1.0.2" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpcore-1.0.2-py3-none-any.whl", hash = "sha256:096cc05bca73b8e459a1fc3dcf585148f63e534eae4339559c9b8a8d6399acc7"}, + {file = "httpcore-1.0.2.tar.gz", hash = "sha256:9fc092e4799b26174648e54b74ed5f683132a464e95643b226e00c2ed2fa6535"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.13,<0.15" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<0.23.0)"] + +[[package]] +name = "httptools" +version = "0.6.1" +description = "A collection of framework independent HTTP protocol utils." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f"}, + {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563"}, + {file = "httptools-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:639dc4f381a870c9ec860ce5c45921db50205a37cc3334e756269736ff0aac58"}, + {file = "httptools-0.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e57997ac7fb7ee43140cc03664de5f268813a481dff6245e0075925adc6aa185"}, + {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0ac5a0ae3d9f4fe004318d64b8a854edd85ab76cffbf7ef5e32920faef62f142"}, + {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3f30d3ce413088a98b9db71c60a6ada2001a08945cb42dd65a9a9fe228627658"}, + {file = "httptools-0.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:1ed99a373e327f0107cb513b61820102ee4f3675656a37a50083eda05dc9541b"}, + {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7a7ea483c1a4485c71cb5f38be9db078f8b0e8b4c4dc0210f531cdd2ddac1ef1"}, + {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85ed077c995e942b6f1b07583e4eb0a8d324d418954fc6af913d36db7c05a5a0"}, + {file = "httptools-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b0bb634338334385351a1600a73e558ce619af390c2b38386206ac6a27fecfc"}, + {file = "httptools-0.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d9ceb2c957320def533671fc9c715a80c47025139c8d1f3797477decbc6edd2"}, + {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4f0f8271c0a4db459f9dc807acd0eadd4839934a4b9b892f6f160e94da309837"}, + {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6a4f5ccead6d18ec072ac0b84420e95d27c1cdf5c9f1bc8fbd8daf86bd94f43d"}, + {file = "httptools-0.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:5cceac09f164bcba55c0500a18fe3c47df29b62353198e4f37bbcc5d591172c3"}, + {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:75c8022dca7935cba14741a42744eee13ba05db00b27a4b940f0d646bd4d56d0"}, + {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:48ed8129cd9a0d62cf4d1575fcf90fb37e3ff7d5654d3a5814eb3d55f36478c2"}, + {file = "httptools-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f58e335a1402fb5a650e271e8c2d03cfa7cea46ae124649346d17bd30d59c90"}, + {file = "httptools-0.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93ad80d7176aa5788902f207a4e79885f0576134695dfb0fefc15b7a4648d503"}, + {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9bb68d3a085c2174c2477eb3ffe84ae9fb4fde8792edb7bcd09a1d8467e30a84"}, + {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b512aa728bc02354e5ac086ce76c3ce635b62f5fbc32ab7082b5e582d27867bb"}, + {file = "httptools-0.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:97662ce7fb196c785344d00d638fc9ad69e18ee4bfb4000b35a52efe5adcc949"}, + {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8e216a038d2d52ea13fdd9b9c9c7459fb80d78302b257828285eca1c773b99b3"}, + {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3e802e0b2378ade99cd666b5bffb8b2a7cc8f3d28988685dc300469ea8dd86cb"}, + {file = "httptools-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd3e488b447046e386a30f07af05f9b38d3d368d1f7b4d8f7e10af85393db97"}, + {file = "httptools-0.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe467eb086d80217b7584e61313ebadc8d187a4d95bb62031b7bab4b205c3ba3"}, + {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3c3b214ce057c54675b00108ac42bacf2ab8f85c58e3f324a4e963bbc46424f4"}, + {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ae5b97f690badd2ca27cbf668494ee1b6d34cf1c464271ef7bfa9ca6b83ffaf"}, + {file = "httptools-0.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:405784577ba6540fa7d6ff49e37daf104e04f4b4ff2d1ac0469eaa6a20fde084"}, + {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:95fb92dd3649f9cb139e9c56604cc2d7c7bf0fc2e7c8d7fbd58f96e35eddd2a3"}, + {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dcbab042cc3ef272adc11220517278519adf8f53fd3056d0e68f0a6f891ba94e"}, + {file = "httptools-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf2372e98406efb42e93bfe10f2948e467edfd792b015f1b4ecd897903d3e8d"}, + {file = "httptools-0.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678fcbae74477a17d103b7cae78b74800d795d702083867ce160fc202104d0da"}, + {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e0b281cf5a125c35f7f6722b65d8542d2e57331be573e9e88bc8b0115c4a7a81"}, + {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:95658c342529bba4e1d3d2b1a874db16c7cca435e8827422154c9da76ac4e13a"}, + {file = "httptools-0.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ebaec1bf683e4bf5e9fbb49b8cc36da482033596a415b3e4ebab5a4c0d7ec5e"}, + {file = "httptools-0.6.1.tar.gz", hash = "sha256:c6e26c30455600b95d94b1b836085138e82f177351454ee841c148f93a9bad5a"}, +] + +[package.extras] +test = ["Cython (>=0.29.24,<0.30.0)"] + +[[package]] +name = "httpx" +version = "0.25.2" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpx-0.25.2-py3-none-any.whl", hash = "sha256:a05d3d052d9b2dfce0e3896636467f8a5342fb2b902c819428e1ac65413ca118"}, + {file = "httpx-0.25.2.tar.gz", hash = "sha256:8b8fcaa0c8ea7b05edd69a094e63a2094c4efcb48129fb757361bc423c0ad9e8"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" +sniffio = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] + +[[package]] +name = "huggingface-hub" +version = "0.19.4" +description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "huggingface_hub-0.19.4-py3-none-any.whl", hash = "sha256:dba013f779da16f14b606492828f3760600a1e1801432d09fe1c33e50b825bb5"}, + {file = "huggingface_hub-0.19.4.tar.gz", hash = "sha256:176a4fc355a851c17550e7619488f383189727eab209534d7cef2114dae77b22"}, +] + +[package.dependencies] +filelock = "*" +fsspec = ">=2023.5.0" +packaging = ">=20.9" +pyyaml = ">=5.1" +requests = "*" +tqdm = ">=4.42.1" +typing-extensions = ">=3.7.4.3" + +[package.extras] +all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "mypy (==1.5.1)", "numpy", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.1.3)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +cli = ["InquirerPy (==0.3.4)"] +dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "mypy (==1.5.1)", "numpy", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.1.3)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +docs = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "hf-doc-builder", "jedi", "mypy (==1.5.1)", "numpy", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.1.3)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)", "watchdog"] +fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] +inference = ["aiohttp", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)"] +quality = ["mypy (==1.5.1)", "ruff (>=0.1.3)"] +tensorflow = ["graphviz", "pydot", "tensorflow"] +testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "numpy", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] +torch = ["torch"] +typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"] + +[[package]] +name = "humanfriendly" +version = "10.0" +description = "Human friendly output for text interfaces using Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, + {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, +] + +[package.dependencies] +pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_version >= \"3.8\""} + +[[package]] +name = "identify" +version = "2.5.32" +description = "File identification library for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "identify-2.5.32-py2.py3-none-any.whl", hash = "sha256:0b7656ef6cba81664b783352c73f8c24b39cf82f926f78f4550eda928e5e0545"}, + {file = "identify-2.5.32.tar.gz", hash = "sha256:5d9979348ec1a21c768ae07e0a652924538e8bce67313a73cb0f681cf08ba407"}, +] + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.6" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, +] + +[[package]] +name = "importlib-metadata" +version = "6.8.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, + {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, +] + +[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 = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + +[[package]] +name = "importlib-resources" +version = "6.1.1" +description = "Read resources from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_resources-6.1.1-py3-none-any.whl", hash = "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6"}, + {file = "importlib_resources-6.1.1.tar.gz", hash = "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a"}, +] + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +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 = "ipykernel" +version = "6.27.1" +description = "IPython Kernel for Jupyter" +optional = false +python-versions = ">=3.8" +files = [ + {file = "ipykernel-6.27.1-py3-none-any.whl", hash = "sha256:dab88b47f112f9f7df62236511023c9bdeef67abc73af7c652e4ce4441601686"}, + {file = "ipykernel-6.27.1.tar.gz", hash = "sha256:7d5d594b6690654b4d299edba5e872dc17bb7396a8d0609c97cb7b8a1c605de6"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "platform_system == \"Darwin\""} +comm = ">=0.1.1" +debugpy = ">=1.6.5" +ipython = ">=7.23.1" +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +matplotlib-inline = ">=0.1" +nest-asyncio = "*" +packaging = "*" +psutil = "*" +pyzmq = ">=20" +tornado = ">=6.1" +traitlets = ">=5.4.0" + +[package.extras] +cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] +pyqt5 = ["pyqt5"] +pyside6 = ["pyside6"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "ipython" +version = "8.18.1" +description = "IPython: Productive Interactive Computing" +optional = false +python-versions = ">=3.9" +files = [ + {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, + {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} +prompt-toolkit = ">=3.0.41,<3.1.0" +pygments = ">=2.4.0" +stack-data = "*" +traitlets = ">=5" +typing-extensions = {version = "*", markers = "python_version < \"3.10\""} + +[package.extras] +all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +black = ["black"] +doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] +kernel = ["ipykernel"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["ipywidgets", "notebook"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] + +[[package]] +name = "ipywidgets" +version = "8.1.1" +description = "Jupyter interactive widgets" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ipywidgets-8.1.1-py3-none-any.whl", hash = "sha256:2b88d728656aea3bbfd05d32c747cfd0078f9d7e159cf982433b58ad717eed7f"}, + {file = "ipywidgets-8.1.1.tar.gz", hash = "sha256:40211efb556adec6fa450ccc2a77d59ca44a060f4f9f136833df59c9f538e6e8"}, +] + +[package.dependencies] +comm = ">=0.1.3" +ipython = ">=6.1.0" +jupyterlab-widgets = ">=3.0.9,<3.1.0" +traitlets = ">=4.3.1" +widgetsnbextension = ">=4.0.9,<4.1.0" + +[package.extras] +test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] + +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +optional = false +python-versions = ">=3.7" +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] + +[package.dependencies] +arrow = ">=0.15.0" + +[[package]] +name = "isort" +version = "5.12.0" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, + {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, +] + +[package.extras] +colors = ["colorama (>=0.4.3)"] +pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] +plugins = ["setuptools"] +requirements-deprecated-finder = ["pip-api", "pipreqs"] + +[[package]] +name = "itsdangerous" +version = "2.1.2" +description = "Safely pass data to untrusted environments and back." +optional = false +python-versions = ">=3.7" +files = [ + {file = "itsdangerous-2.1.2-py3-none-any.whl", hash = "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44"}, + {file = "itsdangerous-2.1.2.tar.gz", hash = "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"}, +] + +[[package]] +name = "jedi" +version = "0.19.1" +description = "An autocompletion tool for Python that can be used for text editors." +optional = false +python-versions = ">=3.6" +files = [ + {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, + {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, +] + +[package.dependencies] +parso = ">=0.8.3,<0.9.0" + +[package.extras] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] + +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "joblib" +version = "1.2.0" +description = "Lightweight pipelining with Python functions" +optional = false +python-versions = ">=3.7" +files = [ + {file = "joblib-1.2.0-py3-none-any.whl", hash = "sha256:091138ed78f800342968c523bdde947e7a305b8594b910a0fea2ab83c3c6d385"}, + {file = "joblib-1.2.0.tar.gz", hash = "sha256:e1cee4a79e4af22881164f218d4311f60074197fb707e082e803b61f6d137018"}, +] + +[[package]] +name = "json5" +version = "0.9.14" +description = "A Python implementation of the JSON5 data format." +optional = false +python-versions = "*" +files = [ + {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"}, + {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"}, +] + +[package.extras] +dev = ["hypothesis"] + +[[package]] +name = "jsonpointer" +version = "2.4" +description = "Identify specific nodes in a JSON document (RFC 6901)" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +files = [ + {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, + {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, +] + +[[package]] +name = "jsonschema" +version = "4.20.0" +description = "An implementation of JSON Schema validation for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema-4.20.0-py3-none-any.whl", hash = "sha256:ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3"}, + {file = "jsonschema-4.20.0.tar.gz", hash = "sha256:4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} +jsonschema-specifications = ">=2023.03.6" +referencing = ">=0.28.4" +rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} +rpds-py = ">=0.7.1" +uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""} + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + +[[package]] +name = "jsonschema-specifications" +version = "2023.11.2" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema_specifications-2023.11.2-py3-none-any.whl", hash = "sha256:e74ba7c0a65e8cb49dc26837d6cfe576557084a8b423ed16a420984228104f93"}, + {file = "jsonschema_specifications-2023.11.2.tar.gz", hash = "sha256:9472fc4fea474cd74bea4a2b190daeccb5a9e4db2ea80efcf7a1b582fc9a81b8"}, +] + +[package.dependencies] +referencing = ">=0.31.0" + +[[package]] +name = "jupyter" +version = "1.0.0" +description = "Jupyter metapackage. Install all the Jupyter components in one go." +optional = false +python-versions = "*" +files = [ + {file = "jupyter-1.0.0-py2.py3-none-any.whl", hash = "sha256:5b290f93b98ffbc21c0c7e749f054b3267782166d72fa5e3ed1ed4eaf34a2b78"}, + {file = "jupyter-1.0.0.tar.gz", hash = "sha256:d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f"}, + {file = "jupyter-1.0.0.zip", hash = "sha256:3e1f86076bbb7c8c207829390305a2b1fe836d471ed54be66a3b8c41e7f46cc7"}, +] + +[package.dependencies] +ipykernel = "*" +ipywidgets = "*" +jupyter-console = "*" +nbconvert = "*" +notebook = "*" +qtconsole = "*" + +[[package]] +name = "jupyter-client" +version = "8.6.0" +description = "Jupyter protocol implementation and client libraries" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_client-8.6.0-py3-none-any.whl", hash = "sha256:909c474dbe62582ae62b758bca86d6518c85234bdee2d908c778db6d72f39d99"}, + {file = "jupyter_client-8.6.0.tar.gz", hash = "sha256:0642244bb83b4764ae60d07e010e15f0e2d275ec4e918a8f7b80fbbef3ca60c7"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +python-dateutil = ">=2.8.2" +pyzmq = ">=23.0" +tornado = ">=6.2" +traitlets = ">=5.3" + +[package.extras] +docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] + +[[package]] +name = "jupyter-console" +version = "6.6.3" +description = "Jupyter terminal console" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"}, + {file = "jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539"}, +] + +[package.dependencies] +ipykernel = ">=6.14" +ipython = "*" +jupyter-client = ">=7.0.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +prompt-toolkit = ">=3.0.30" +pygments = "*" +pyzmq = ">=17" +traitlets = ">=5.4" + +[package.extras] +test = ["flaky", "pexpect", "pytest"] + +[[package]] +name = "jupyter-core" +version = "5.5.0" +description = "Jupyter core package. A base package on which Jupyter projects rely." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_core-5.5.0-py3-none-any.whl", hash = "sha256:e11e02cd8ae0a9de5c6c44abf5727df9f2581055afe00b22183f621ba3585805"}, + {file = "jupyter_core-5.5.0.tar.gz", hash = "sha256:880b86053bf298a8724994f95e99b99130659022a4f7f45f563084b6223861d3"}, +] + +[package.dependencies] +platformdirs = ">=2.5" +pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} +traitlets = ">=5.3" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] +test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "jupyter-events" +version = "0.9.0" +description = "Jupyter Event System library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_events-0.9.0-py3-none-any.whl", hash = "sha256:d853b3c10273ff9bc8bb8b30076d65e2c9685579db736873de6c2232dde148bf"}, + {file = "jupyter_events-0.9.0.tar.gz", hash = "sha256:81ad2e4bc710881ec274d31c6c50669d71bbaa5dd9d01e600b56faa85700d399"}, +] + +[package.dependencies] +jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} +python-json-logger = ">=2.0.4" +pyyaml = ">=5.3" +referencing = "*" +rfc3339-validator = "*" +rfc3986-validator = ">=0.1.1" +traitlets = ">=5.3" + +[package.extras] +cli = ["click", "rich"] +docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] +test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] + +[[package]] +name = "jupyter-lsp" +version = "2.2.1" +description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter-lsp-2.2.1.tar.gz", hash = "sha256:b17fab6d70fe83c8896b0cff59237640038247c196056b43684a0902b6a9e0fb"}, + {file = "jupyter_lsp-2.2.1-py3-none-any.whl", hash = "sha256:17a689910c5e4ae5e7d334b02f31d08ffbe98108f6f658fb05e4304b4345368b"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jupyter-server = ">=1.1.2" + +[[package]] +name = "jupyter-server" +version = "2.11.1" +description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_server-2.11.1-py3-none-any.whl", hash = "sha256:4b3a16e3ed16fd202588890f10b8ca589bd3e29405d128beb95935f059441373"}, + {file = "jupyter_server-2.11.1.tar.gz", hash = "sha256:fe80bab96493acf5f7d6cd9a1575af8fbd253dc2591aa4d015131a1e03b5799a"}, +] + +[package.dependencies] +anyio = ">=3.1.0" +argon2-cffi = "*" +jinja2 = "*" +jupyter-client = ">=7.4.4" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-events = ">=0.9.0" +jupyter-server-terminals = "*" +nbconvert = ">=6.4.4" +nbformat = ">=5.3.0" +overrides = "*" +packaging = "*" +prometheus-client = "*" +pywinpty = {version = "*", markers = "os_name == \"nt\""} +pyzmq = ">=24" +send2trash = ">=1.8.2" +terminado = ">=0.8.3" +tornado = ">=6.2.0" +traitlets = ">=5.6.0" +websocket-client = "*" + +[package.extras] +docs = ["ipykernel", "jinja2", "jupyter-client", "jupyter-server", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] +test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] + +[[package]] +name = "jupyter-server-terminals" +version = "0.4.4" +description = "A Jupyter Server Extension Providing Terminals." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_server_terminals-0.4.4-py3-none-any.whl", hash = "sha256:75779164661cec02a8758a5311e18bb8eb70c4e86c6b699403100f1585a12a36"}, + {file = "jupyter_server_terminals-0.4.4.tar.gz", hash = "sha256:57ab779797c25a7ba68e97bcfb5d7740f2b5e8a83b5e8102b10438041a7eac5d"}, +] + +[package.dependencies] +pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} +terminado = ">=0.8.3" + +[package.extras] +docs = ["jinja2", "jupyter-server", "mistune (<3.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] +test = ["coverage", "jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-cov", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] + +[[package]] +name = "jupyterlab" +version = "4.0.9" +description = "JupyterLab computational environment" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab-4.0.9-py3-none-any.whl", hash = "sha256:9f6f8e36d543fdbcc3df961a1d6a3f524b4a4001be0327a398f68fa4e534107c"}, + {file = "jupyterlab-4.0.9.tar.gz", hash = "sha256:9ebada41d52651f623c0c9f069ddb8a21d6848e4c887d8e5ddc0613166ed5c0b"}, +] + +[package.dependencies] +async-lru = ">=1.0.0" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +ipykernel = "*" +jinja2 = ">=3.0.3" +jupyter-core = "*" +jupyter-lsp = ">=2.0.0" +jupyter-server = ">=2.4.0,<3" +jupyterlab-server = ">=2.19.0,<3" +notebook-shim = ">=0.2" +packaging = "*" +tomli = {version = "*", markers = "python_version < \"3.11\""} +tornado = ">=6.2.0" +traitlets = "*" + +[package.extras] +dev = ["black[jupyter] (==23.10.1)", "build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.1.4)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-tornasync", "sphinx (>=1.8,<7.2.0)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.0.1)", "ipython (==8.14.0)", "ipywidgets (==8.0.6)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.0.post0)", "matplotlib (==3.7.1)", "nbconvert (>=7.0.0)", "pandas (==2.0.2)", "scipy (==1.10.1)", "vega-datasets (==0.9.0)"] +test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] + +[[package]] +name = "jupyterlab-pygments" +version = "0.3.0" +description = "Pygments theme using JupyterLab CSS variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, + {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, +] + +[[package]] +name = "jupyterlab-server" +version = "2.25.2" +description = "A set of server components for JupyterLab and JupyterLab like applications." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab_server-2.25.2-py3-none-any.whl", hash = "sha256:5b1798c9cc6a44f65c757de9f97fc06fc3d42535afbf47d2ace5e964ab447aaf"}, + {file = "jupyterlab_server-2.25.2.tar.gz", hash = "sha256:bd0ec7a99ebcedc8bcff939ef86e52c378e44c2707e053fcd81d046ce979ee63"}, +] + +[package.dependencies] +babel = ">=2.10" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jinja2 = ">=3.0.3" +json5 = ">=0.9.0" +jsonschema = ">=4.18.0" +jupyter-server = ">=1.21,<3" +packaging = ">=21.3" +requests = ">=2.31" + +[package.extras] +docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] +openapi = ["openapi-core (>=0.18.0,<0.19.0)", "ruamel-yaml"] +test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] + +[[package]] +name = "jupyterlab-widgets" +version = "3.0.9" +description = "Jupyter interactive widgets for JupyterLab" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_widgets-3.0.9-py3-none-any.whl", hash = "sha256:3cf5bdf5b897bf3bccf1c11873aa4afd776d7430200f765e0686bd352487b58d"}, + {file = "jupyterlab_widgets-3.0.9.tar.gz", hash = "sha256:6005a4e974c7beee84060fdfba341a3218495046de8ae3ec64888e5fe19fdb4c"}, +] + +[[package]] +name = "kiwisolver" +version = "1.4.5" +description = "A fast implementation of the Cassowary constraint solver" +optional = false +python-versions = ">=3.7" +files = [ + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, + {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, +] + +[[package]] +name = "lightning-utilities" +version = "0.10.0" +description = "PyTorch Lightning Sample project." +optional = false +python-versions = ">=3.7" +files = [ + {file = "lightning-utilities-0.10.0.tar.gz", hash = "sha256:9e31617eccbbadc6b737a2432fd7076ff8e24957f9c63aeba2530b189e19319c"}, + {file = "lightning_utilities-0.10.0-py3-none-any.whl", hash = "sha256:84d09b11fe9bc16c803ae5e412874748239d73ad2f3d1b90862f99ce15a03aa0"}, +] + +[package.dependencies] +packaging = ">=17.1" +setuptools = "*" +typing-extensions = "*" + +[package.extras] +cli = ["fire"] +docs = ["requests (>=2.0.0)"] +typing = ["mypy (>=1.0.0)", "types-setuptools"] + +[[package]] +name = "loguru" +version = "0.7.2" +description = "Python logging made (stupidly) simple" +optional = false +python-versions = ">=3.5" +files = [ + {file = "loguru-0.7.2-py3-none-any.whl", hash = "sha256:003d71e3d3ed35f0f8984898359d65b79e5b21943f78af86aa5491210429b8eb"}, + {file = "loguru-0.7.2.tar.gz", hash = "sha256:e671a53522515f34fd406340ee968cb9ecafbc4b36c679da03c18fd8d0bd51ac"}, +] + +[package.dependencies] +colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} +win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} + +[package.extras] +dev = ["Sphinx (==7.2.5)", "colorama (==0.4.5)", "colorama (==0.4.6)", "exceptiongroup (==1.1.3)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v1.4.1)", "mypy (==v1.5.1)", "pre-commit (==3.4.0)", "pytest (==6.1.2)", "pytest (==7.4.0)", "pytest-cov (==2.12.1)", "pytest-cov (==4.1.0)", "pytest-mypy-plugins (==1.9.3)", "pytest-mypy-plugins (==3.0.0)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.3.0)", "tox (==3.27.1)", "tox (==4.11.0)"] + +[[package]] +name = "makefun" +version = "1.15.2" +description = "Small library to dynamically create python functions." +optional = false +python-versions = "*" +files = [ + {file = "makefun-1.15.2-py2.py3-none-any.whl", hash = "sha256:1c83abfaefb6c3c7c83ed4a993b4a310af80adf6db15625b184b1f0f7545a041"}, + {file = "makefun-1.15.2.tar.gz", hash = "sha256:16f2a2b34d9ee0c2b578c960a1808c974e2822cf79f6e9b9c455aace10882d45"}, +] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "markupsafe" +version = "2.1.3" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, +] + +[[package]] +name = "maskrcnn-benchmark" +version = "0.1" +description = "object detection in pytorch" +optional = false +python-versions = "*" +files = [] +develop = false + +[package.dependencies] +torch = "*" +torchvision = "*" + +[package.source] +type = "git" +url = "https://github.com/emma-heriot-watt/scene-graph-benchmark.git" +reference = "HEAD" +resolved_reference = "07864b610cd7f5248e134af0cf416e037b81bf13" + +[[package]] +name = "matplotlib" +version = "3.8.2" +description = "Python plotting package" +optional = false +python-versions = ">=3.9" +files = [ + {file = "matplotlib-3.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:09796f89fb71a0c0e1e2f4bdaf63fb2cefc84446bb963ecdeb40dfee7dfa98c7"}, + {file = "matplotlib-3.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f9c6976748a25e8b9be51ea028df49b8e561eed7809146da7a47dbecebab367"}, + {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b78e4f2cedf303869b782071b55fdde5987fda3038e9d09e58c91cc261b5ad18"}, + {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e208f46cf6576a7624195aa047cb344a7f802e113bb1a06cfd4bee431de5e31"}, + {file = "matplotlib-3.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:46a569130ff53798ea5f50afce7406e91fdc471ca1e0e26ba976a8c734c9427a"}, + {file = "matplotlib-3.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:830f00640c965c5b7f6bc32f0d4ce0c36dfe0379f7dd65b07a00c801713ec40a"}, + {file = "matplotlib-3.8.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d86593ccf546223eb75a39b44c32788e6f6440d13cfc4750c1c15d0fcb850b63"}, + {file = "matplotlib-3.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9a5430836811b7652991939012f43d2808a2db9b64ee240387e8c43e2e5578c8"}, + {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9576723858a78751d5aacd2497b8aef29ffea6d1c95981505877f7ac28215c6"}, + {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ba9cbd8ac6cf422f3102622b20f8552d601bf8837e49a3afed188d560152788"}, + {file = "matplotlib-3.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:03f9d160a29e0b65c0790bb07f4f45d6a181b1ac33eb1bb0dd225986450148f0"}, + {file = "matplotlib-3.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:3773002da767f0a9323ba1a9b9b5d00d6257dbd2a93107233167cfb581f64717"}, + {file = "matplotlib-3.8.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:4c318c1e95e2f5926fba326f68177dee364aa791d6df022ceb91b8221bd0a627"}, + {file = "matplotlib-3.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:091275d18d942cf1ee9609c830a1bc36610607d8223b1b981c37d5c9fc3e46a4"}, + {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b0f3b8ea0e99e233a4bcc44590f01604840d833c280ebb8fe5554fd3e6cfe8d"}, + {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7b1704a530395aaf73912be741c04d181f82ca78084fbd80bc737be04848331"}, + {file = "matplotlib-3.8.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:533b0e3b0c6768eef8cbe4b583731ce25a91ab54a22f830db2b031e83cca9213"}, + {file = "matplotlib-3.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:0f4fc5d72b75e2c18e55eb32292659cf731d9d5b312a6eb036506304f4675630"}, + {file = "matplotlib-3.8.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:deaed9ad4da0b1aea77fe0aa0cebb9ef611c70b3177be936a95e5d01fa05094f"}, + {file = "matplotlib-3.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:172f4d0fbac3383d39164c6caafd3255ce6fa58f08fc392513a0b1d3b89c4f89"}, + {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7d36c2209d9136cd8e02fab1c0ddc185ce79bc914c45054a9f514e44c787917"}, + {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5864bdd7da445e4e5e011b199bb67168cdad10b501750367c496420f2ad00843"}, + {file = "matplotlib-3.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ef8345b48e95cee45ff25192ed1f4857273117917a4dcd48e3905619bcd9c9b8"}, + {file = "matplotlib-3.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:7c48d9e221b637c017232e3760ed30b4e8d5dfd081daf327e829bf2a72c731b4"}, + {file = "matplotlib-3.8.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa11b3c6928a1e496c1a79917d51d4cd5d04f8a2e75f21df4949eeefdf697f4b"}, + {file = "matplotlib-3.8.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1095fecf99eeb7384dabad4bf44b965f929a5f6079654b681193edf7169ec20"}, + {file = "matplotlib-3.8.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:bddfb1db89bfaa855912261c805bd0e10218923cc262b9159a49c29a7a1c1afa"}, + {file = "matplotlib-3.8.2.tar.gz", hash = "sha256:01a978b871b881ee76017152f1f1a0cbf6bd5f7b8ff8c96df0df1bd57d8755a1"}, +] + +[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.3.1" +numpy = ">=1.21,<2" +packaging = ">=20.0" +pillow = ">=8" +pyparsing = ">=2.3.1" +python-dateutil = ">=2.7" + +[[package]] +name = "matplotlib-inline" +version = "0.1.6" +description = "Inline Matplotlib backend for Jupyter" +optional = false +python-versions = ">=3.5" +files = [ + {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, + {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, +] + +[package.dependencies] +traitlets = "*" + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "mistune" +version = "3.0.2" +description = "A sane and fast Markdown parser with useful plugins and renderers" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"}, + {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, +] + +[[package]] +name = "multidict" +version = "6.0.4" +description = "multidict implementation" +optional = false +python-versions = ">=3.7" +files = [ + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, + {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, + {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, + {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, + {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, + {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, + {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, + {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, + {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, + {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, + {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, + {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, + {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, +] + +[[package]] +name = "mypy" +version = "1.7.1" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mypy-1.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:12cce78e329838d70a204293e7b29af9faa3ab14899aec397798a4b41be7f340"}, + {file = "mypy-1.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1484b8fa2c10adf4474f016e09d7a159602f3239075c7bf9f1627f5acf40ad49"}, + {file = "mypy-1.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31902408f4bf54108bbfb2e35369877c01c95adc6192958684473658c322c8a5"}, + {file = "mypy-1.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f2c2521a8e4d6d769e3234350ba7b65ff5d527137cdcde13ff4d99114b0c8e7d"}, + {file = "mypy-1.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:fcd2572dd4519e8a6642b733cd3a8cfc1ef94bafd0c1ceed9c94fe736cb65b6a"}, + {file = "mypy-1.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4b901927f16224d0d143b925ce9a4e6b3a758010673eeded9b748f250cf4e8f7"}, + {file = "mypy-1.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2f7f6985d05a4e3ce8255396df363046c28bea790e40617654e91ed580ca7c51"}, + {file = "mypy-1.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:944bdc21ebd620eafefc090cdf83158393ec2b1391578359776c00de00e8907a"}, + {file = "mypy-1.7.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9c7ac372232c928fff0645d85f273a726970c014749b924ce5710d7d89763a28"}, + {file = "mypy-1.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:f6efc9bd72258f89a3816e3a98c09d36f079c223aa345c659622f056b760ab42"}, + {file = "mypy-1.7.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6dbdec441c60699288adf051f51a5d512b0d818526d1dcfff5a41f8cd8b4aaf1"}, + {file = "mypy-1.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4fc3d14ee80cd22367caaaf6e014494415bf440980a3045bf5045b525680ac33"}, + {file = "mypy-1.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c6e4464ed5f01dc44dc9821caf67b60a4e5c3b04278286a85c067010653a0eb"}, + {file = "mypy-1.7.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:d9b338c19fa2412f76e17525c1b4f2c687a55b156320acb588df79f2e6fa9fea"}, + {file = "mypy-1.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:204e0d6de5fd2317394a4eff62065614c4892d5a4d1a7ee55b765d7a3d9e3f82"}, + {file = "mypy-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:84860e06ba363d9c0eeabd45ac0fde4b903ad7aa4f93cd8b648385a888e23200"}, + {file = "mypy-1.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8c5091ebd294f7628eb25ea554852a52058ac81472c921150e3a61cdd68f75a7"}, + {file = "mypy-1.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40716d1f821b89838589e5b3106ebbc23636ffdef5abc31f7cd0266db936067e"}, + {file = "mypy-1.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5cf3f0c5ac72139797953bd50bc6c95ac13075e62dbfcc923571180bebb662e9"}, + {file = "mypy-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:78e25b2fd6cbb55ddfb8058417df193f0129cad5f4ee75d1502248e588d9e0d7"}, + {file = "mypy-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:75c4d2a6effd015786c87774e04331b6da863fc3fc4e8adfc3b40aa55ab516fe"}, + {file = "mypy-1.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2643d145af5292ee956aa0a83c2ce1038a3bdb26e033dadeb2f7066fb0c9abce"}, + {file = "mypy-1.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75aa828610b67462ffe3057d4d8a4112105ed211596b750b53cbfe182f44777a"}, + {file = "mypy-1.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ee5d62d28b854eb61889cde4e1dbc10fbaa5560cb39780c3995f6737f7e82120"}, + {file = "mypy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:72cf32ce7dd3562373f78bd751f73c96cfb441de147cc2448a92c1a308bd0ca6"}, + {file = "mypy-1.7.1-py3-none-any.whl", hash = "sha256:f7c5d642db47376a0cc130f0de6d055056e010debdaf0707cd2b0fc7e7ef30ea"}, + {file = "mypy-1.7.1.tar.gz", hash = "sha256:fcb6d9afb1b6208b4c712af0dafdc650f518836065df0d4fb1d800f5d6773db2"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = ">=4.1.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +mypyc = ["setuptools (>=50)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +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.9.0" +description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "nbclient-0.9.0-py3-none-any.whl", hash = "sha256:a3a1ddfb34d4a9d17fc744d655962714a866639acd30130e9be84191cd97cd15"}, + {file = "nbclient-0.9.0.tar.gz", hash = "sha256:4b28c207877cf33ef3a9838cdc7a54c5ceff981194a82eac59d558f05487295e"}, +] + +[package.dependencies] +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +nbformat = ">=5.1" +traitlets = ">=5.4" + +[package.extras] +dev = ["pre-commit"] +docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] + +[[package]] +name = "nbconvert" +version = "7.11.0" +description = "Converting Jupyter Notebooks" +optional = false +python-versions = ">=3.8" +files = [ + {file = "nbconvert-7.11.0-py3-none-any.whl", hash = "sha256:d1d417b7f34a4e38887f8da5bdfd12372adf3b80f995d57556cb0972c68909fe"}, + {file = "nbconvert-7.11.0.tar.gz", hash = "sha256:abedc01cf543177ffde0bfc2a69726d5a478f6af10a332fc1bf29fcb4f0cf000"}, +] + +[package.dependencies] +beautifulsoup4 = "*" +bleach = "!=5.0.0" +defusedxml = "*" +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} +jinja2 = ">=3.0" +jupyter-core = ">=4.7" +jupyterlab-pygments = "*" +markupsafe = ">=2.0" +mistune = ">=2.0.3,<4" +nbclient = ">=0.5.0" +nbformat = ">=5.7" +packaging = "*" +pandocfilters = ">=1.4.1" +pygments = ">=2.4.1" +tinycss2 = "*" +traitlets = ">=5.1" + +[package.extras] +all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] +docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] +qtpdf = ["nbconvert[qtpng]"] +qtpng = ["pyqtwebengine (>=5.15)"] +serve = ["tornado (>=6.1)"] +test = ["flaky", "ipykernel", "ipywidgets (>=7)", "pytest"] +webpdf = ["playwright"] + +[[package]] +name = "nbformat" +version = "5.9.2" +description = "The Jupyter Notebook format" +optional = false +python-versions = ">=3.8" +files = [ + {file = "nbformat-5.9.2-py3-none-any.whl", hash = "sha256:1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9"}, + {file = "nbformat-5.9.2.tar.gz", hash = "sha256:5f98b5ba1997dff175e77e0c17d5c10a96eaed2cbd1de3533d1fc35d5e111192"}, +] + +[package.dependencies] +fastjsonschema = "*" +jsonschema = ">=2.6" +jupyter-core = "*" +traitlets = ">=5.1" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["pep440", "pre-commit", "pytest", "testpath"] + +[[package]] +name = "nest-asyncio" +version = "1.5.8" +description = "Patch asyncio to allow nested event loops" +optional = false +python-versions = ">=3.5" +files = [ + {file = "nest_asyncio-1.5.8-py3-none-any.whl", hash = "sha256:accda7a339a70599cb08f9dd09a67e0c2ef8d8d6f4c07f96ab203f2ae254e48d"}, + {file = "nest_asyncio-1.5.8.tar.gz", hash = "sha256:25aa2ca0d2a5b5531956b9e273b45cf664cae2b145101d73b86b199978d48fdb"}, +] + +[[package]] +name = "ninja" +version = "1.11.1" +description = "Ninja is a small build system with a focus on speed" +optional = false +python-versions = "*" +files = [ + {file = "ninja-1.11.1-py2.py3-none-macosx_10_9_universal2.macosx_10_9_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:f48c3c6eea204062f6bbf089dfc63e1ad41a08640e1da46ef2b30fa426f7ce23"}, + {file = "ninja-1.11.1-py2.py3-none-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:edec1053e141253076b2df7ec03a246ff581e9270aa1ca9759397b21e2760e57"}, + {file = "ninja-1.11.1-py2.py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:817e2aee2a4d28a708a67bcfba1817ae502c32c6d8ef80e50d63b0f23adf3a08"}, + {file = "ninja-1.11.1-py2.py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df11b8afea0501883e33faeb1c43d2ef67f466d5f4bd85f9c376e9a93a43a277"}, + {file = "ninja-1.11.1-py2.py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a564fe755ddfbdbccb07b0b758e3f8460e5f8ba1adaab40a5eaa2f8c01ce68"}, + {file = "ninja-1.11.1-py2.py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c474326e11fba3f8c2582715d79216292e327d3335367c0e87e9647a002cc4a"}, + {file = "ninja-1.11.1-py2.py3-none-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6f6465a7efe6473a2a34edab83633594de19d59406a727316e1367ebcc528908"}, + {file = "ninja-1.11.1-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:642cb64d859276998f14972724850e0c5b7febbc1bce3d2065b7e0cb7d3a0b79"}, + {file = "ninja-1.11.1-py2.py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:60179bb4f22c88279c53a5402bb5fe81c97c627a28d93c737d1fa067d892115d"}, + {file = "ninja-1.11.1-py2.py3-none-musllinux_1_1_i686.whl", hash = "sha256:34753459493543782d87267e4cad63dd4639b07f8394ffe6d4417e9eda05c8a8"}, + {file = "ninja-1.11.1-py2.py3-none-musllinux_1_1_ppc64le.whl", hash = "sha256:779f228e407c54a8b6e4cbf8f835489998dd250f67bf1b9bd7b8a8ab6bdcdc7b"}, + {file = "ninja-1.11.1-py2.py3-none-musllinux_1_1_s390x.whl", hash = "sha256:ba50a32424912e5f3ee40d791b506a160dc0eeda7de5ad8faebe7aa8006244dc"}, + {file = "ninja-1.11.1-py2.py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:3b28b595ed580752240ade7821b6cb7a5a4c6a604c865dc474bd38f06e2eb7f5"}, + {file = "ninja-1.11.1-py2.py3-none-win32.whl", hash = "sha256:3329b4b7c1694730772522a3ba0ba40fd15c012476ed3e1c9f0fd9e76190394e"}, + {file = "ninja-1.11.1-py2.py3-none-win_amd64.whl", hash = "sha256:4e547bc759c570773d83d110c41fd5ca9a94c0a9a8388f5a3ea37bdf97d002b0"}, + {file = "ninja-1.11.1-py2.py3-none-win_arm64.whl", hash = "sha256:8cf96f92ccc851c600cb3e1251c34db06f1dd682de79188ad490c33cddc66981"}, + {file = "ninja-1.11.1.tar.gz", hash = "sha256:c833a47d39b2d1eee3f9ca886fa1581efd5be6068b82734ac229961ee8748f90"}, +] + +[package.extras] +test = ["codecov (>=2.0.5)", "coverage (>=4.2)", "flake8 (>=3.0.4)", "pytest (>=4.5.0)", "pytest-cov (>=2.7.1)", "pytest-runner (>=5.1)", "pytest-virtualenv (>=1.7.0)", "virtualenv (>=15.0.3)"] + +[[package]] +name = "nltk" +version = "3.8" +description = "Natural Language Toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "nltk-3.8-py3-none-any.whl", hash = "sha256:3306502f487aa9fb0566e23443fa287a85a8d8d0821e2ef1655b4e3f0ea4aeee"}, + {file = "nltk-3.8.zip", hash = "sha256:74b30826a37d78d53427105bbd037dd880251be269fca64ee530838a46ed55fc"}, +] + +[package.dependencies] +click = "*" +joblib = "*" +regex = ">=2021.8.3" +tqdm = "*" + +[package.extras] +all = ["matplotlib", "numpy", "pyparsing", "python-crfsuite", "requests", "scikit-learn", "scipy", "twython"] +corenlp = ["requests"] +machine-learning = ["numpy", "python-crfsuite", "scikit-learn", "scipy"] +plot = ["matplotlib"] +tgrep = ["pyparsing"] +twitter = ["twython"] + +[[package]] +name = "nodeenv" +version = "1.8.0" +description = "Node.js virtual environment builder" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +files = [ + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, +] + +[package.dependencies] +setuptools = "*" + +[[package]] +name = "notebook" +version = "7.0.6" +description = "Jupyter Notebook - A web-based notebook environment for interactive computing" +optional = false +python-versions = ">=3.8" +files = [ + {file = "notebook-7.0.6-py3-none-any.whl", hash = "sha256:0fe8f67102fea3744fedf652e4c15339390902ca70c5a31c4f547fa23da697cc"}, + {file = "notebook-7.0.6.tar.gz", hash = "sha256:ec6113b06529019f7f287819af06c97a2baf7a95ac21a8f6e32192898e9f9a58"}, +] + +[package.dependencies] +jupyter-server = ">=2.4.0,<3" +jupyterlab = ">=4.0.2,<5" +jupyterlab-server = ">=2.22.1,<3" +notebook-shim = ">=0.2,<0.3" +tornado = ">=6.2.0" + +[package.extras] +dev = ["hatch", "pre-commit"] +docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.22.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] + +[[package]] +name = "notebook-shim" +version = "0.2.3" +description = "A shim layer for notebook traits and config" +optional = false +python-versions = ">=3.7" +files = [ + {file = "notebook_shim-0.2.3-py3-none-any.whl", hash = "sha256:a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7"}, + {file = "notebook_shim-0.2.3.tar.gz", hash = "sha256:f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9"}, +] + +[package.dependencies] +jupyter-server = ">=1.8,<3" + +[package.extras] +test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] + +[[package]] +name = "numpy" +version = "1.23.5" +description = "NumPy is the fundamental package for array computing with Python." +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 = "opencv-python-headless" +version = "4.8.1.78" +description = "Wrapper package for OpenCV python bindings." +optional = false +python-versions = ">=3.6" +files = [ + {file = "opencv-python-headless-4.8.1.78.tar.gz", hash = "sha256:bc7197b42352f6f865c302a49140b889ec7cd957dd697e2d7fc016ad0d3f28f1"}, + {file = "opencv_python_headless-4.8.1.78-cp37-abi3-macosx_10_16_x86_64.whl", hash = "sha256:f3a33f644249f9ce1c913eac580e4b3ef4ce7cab0a71900274708959c2feb5e3"}, + {file = "opencv_python_headless-4.8.1.78-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:2c7d45721df9801c4dcd34683a15caa0e30f38b185263fec04a6eb274bc720f0"}, + {file = "opencv_python_headless-4.8.1.78-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b6bd6e1132b6f5dcb3a5bfe30fc4d341a7bfb26134da349a06c9255288ded94"}, + {file = "opencv_python_headless-4.8.1.78-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58e70d2f0915fe23e02c6e405588276c9397844a47d38b9c87fac5f7f9ba2dcc"}, + {file = "opencv_python_headless-4.8.1.78-cp37-abi3-win32.whl", hash = "sha256:382f8c7a6a14f80091284eecedd52cee4812231ee0eff1118592197b538d9252"}, + {file = "opencv_python_headless-4.8.1.78-cp37-abi3-win_amd64.whl", hash = "sha256:0a0f1e9f836f7d5bad1dd164694944c8761711cbdf4b36ebbd4815a8ef731079"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.21.0", markers = "python_version == \"3.9\" and platform_system == \"Darwin\" and platform_machine == \"arm64\""}, + {version = ">=1.19.3", markers = "platform_system == \"Linux\" and platform_machine == \"aarch64\" and python_version >= \"3.8\" or python_version > \"3.9\" or python_version >= \"3.9\" and platform_system != \"Darwin\" or python_version >= \"3.9\" and platform_machine != \"arm64\""}, +] + +[[package]] +name = "orjson" +version = "3.9.10" +description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" +optional = false +python-versions = ">=3.8" +files = [ + {file = "orjson-3.9.10-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c18a4da2f50050a03d1da5317388ef84a16013302a5281d6f64e4a3f406aabc4"}, + {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5148bab4d71f58948c7c39d12b14a9005b6ab35a0bdf317a8ade9a9e4d9d0bd5"}, + {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4cf7837c3b11a2dfb589f8530b3cff2bd0307ace4c301e8997e95c7468c1378e"}, + {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c62b6fa2961a1dcc51ebe88771be5319a93fd89bd247c9ddf732bc250507bc2b"}, + {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:deeb3922a7a804755bbe6b5be9b312e746137a03600f488290318936c1a2d4dc"}, + {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1234dc92d011d3554d929b6cf058ac4a24d188d97be5e04355f1b9223e98bbe9"}, + {file = "orjson-3.9.10-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:06ad5543217e0e46fd7ab7ea45d506c76f878b87b1b4e369006bdb01acc05a83"}, + {file = "orjson-3.9.10-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4fd72fab7bddce46c6826994ce1e7de145ae1e9e106ebb8eb9ce1393ca01444d"}, + {file = "orjson-3.9.10-cp310-none-win32.whl", hash = "sha256:b5b7d4a44cc0e6ff98da5d56cde794385bdd212a86563ac321ca64d7f80c80d1"}, + {file = "orjson-3.9.10-cp310-none-win_amd64.whl", hash = "sha256:61804231099214e2f84998316f3238c4c2c4aaec302df12b21a64d72e2a135c7"}, + {file = "orjson-3.9.10-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:cff7570d492bcf4b64cc862a6e2fb77edd5e5748ad715f487628f102815165e9"}, + {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed8bc367f725dfc5cabeed1ae079d00369900231fbb5a5280cf0736c30e2adf7"}, + {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c812312847867b6335cfb264772f2a7e85b3b502d3a6b0586aa35e1858528ab1"}, + {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9edd2856611e5050004f4722922b7b1cd6268da34102667bd49d2a2b18bafb81"}, + {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:674eb520f02422546c40401f4efaf8207b5e29e420c17051cddf6c02783ff5ca"}, + {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d0dc4310da8b5f6415949bd5ef937e60aeb0eb6b16f95041b5e43e6200821fb"}, + {file = "orjson-3.9.10-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e99c625b8c95d7741fe057585176b1b8783d46ed4b8932cf98ee145c4facf499"}, + {file = "orjson-3.9.10-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ec6f18f96b47299c11203edfbdc34e1b69085070d9a3d1f302810cc23ad36bf3"}, + {file = "orjson-3.9.10-cp311-none-win32.whl", hash = "sha256:ce0a29c28dfb8eccd0f16219360530bc3cfdf6bf70ca384dacd36e6c650ef8e8"}, + {file = "orjson-3.9.10-cp311-none-win_amd64.whl", hash = "sha256:cf80b550092cc480a0cbd0750e8189247ff45457e5a023305f7ef1bcec811616"}, + {file = "orjson-3.9.10-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:602a8001bdf60e1a7d544be29c82560a7b49319a0b31d62586548835bbe2c862"}, + {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f295efcd47b6124b01255d1491f9e46f17ef40d3d7eabf7364099e463fb45f0f"}, + {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:92af0d00091e744587221e79f68d617b432425a7e59328ca4c496f774a356071"}, + {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5a02360e73e7208a872bf65a7554c9f15df5fe063dc047f79738998b0506a14"}, + {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:858379cbb08d84fe7583231077d9a36a1a20eb72f8c9076a45df8b083724ad1d"}, + {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666c6fdcaac1f13eb982b649e1c311c08d7097cbda24f32612dae43648d8db8d"}, + {file = "orjson-3.9.10-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3fb205ab52a2e30354640780ce4587157a9563a68c9beaf52153e1cea9aa0921"}, + {file = "orjson-3.9.10-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7ec960b1b942ee3c69323b8721df2a3ce28ff40e7ca47873ae35bfafeb4555ca"}, + {file = "orjson-3.9.10-cp312-none-win_amd64.whl", hash = "sha256:3e892621434392199efb54e69edfff9f699f6cc36dd9553c5bf796058b14b20d"}, + {file = "orjson-3.9.10-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:8b9ba0ccd5a7f4219e67fbbe25e6b4a46ceef783c42af7dbc1da548eb28b6531"}, + {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e2ecd1d349e62e3960695214f40939bbfdcaeaaa62ccc638f8e651cf0970e5f"}, + {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f433be3b3f4c66016d5a20e5b4444ef833a1f802ced13a2d852c637f69729c1"}, + {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4689270c35d4bb3102e103ac43c3f0b76b169760aff8bcf2d401a3e0e58cdb7f"}, + {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4bd176f528a8151a6efc5359b853ba3cc0e82d4cd1fab9c1300c5d957dc8f48c"}, + {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a2ce5ea4f71681623f04e2b7dadede3c7435dfb5e5e2d1d0ec25b35530e277b"}, + {file = "orjson-3.9.10-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:49f8ad582da6e8d2cf663c4ba5bf9f83cc052570a3a767487fec6af839b0e777"}, + {file = "orjson-3.9.10-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2a11b4b1a8415f105d989876a19b173f6cdc89ca13855ccc67c18efbd7cbd1f8"}, + {file = "orjson-3.9.10-cp38-none-win32.whl", hash = "sha256:a353bf1f565ed27ba71a419b2cd3db9d6151da426b61b289b6ba1422a702e643"}, + {file = "orjson-3.9.10-cp38-none-win_amd64.whl", hash = "sha256:e28a50b5be854e18d54f75ef1bb13e1abf4bc650ab9d635e4258c58e71eb6ad5"}, + {file = "orjson-3.9.10-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ee5926746232f627a3be1cc175b2cfad24d0170d520361f4ce3fa2fd83f09e1d"}, + {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a73160e823151f33cdc05fe2cea557c5ef12fdf276ce29bb4f1c571c8368a60"}, + {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c338ed69ad0b8f8f8920c13f529889fe0771abbb46550013e3c3d01e5174deef"}, + {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5869e8e130e99687d9e4be835116c4ebd83ca92e52e55810962446d841aba8de"}, + {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2c1e559d96a7f94a4f581e2a32d6d610df5840881a8cba8f25e446f4d792df3"}, + {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a3a3a72c9811b56adf8bcc829b010163bb2fc308877e50e9910c9357e78521"}, + {file = "orjson-3.9.10-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7f8fb7f5ecf4f6355683ac6881fd64b5bb2b8a60e3ccde6ff799e48791d8f864"}, + {file = "orjson-3.9.10-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c943b35ecdf7123b2d81d225397efddf0bce2e81db2f3ae633ead38e85cd5ade"}, + {file = "orjson-3.9.10-cp39-none-win32.whl", hash = "sha256:fb0b361d73f6b8eeceba47cd37070b5e6c9de5beaeaa63a1cb35c7e1a73ef088"}, + {file = "orjson-3.9.10-cp39-none-win_amd64.whl", hash = "sha256:b90f340cb6397ec7a854157fac03f0c82b744abdd1c0941a024c3c29d1340aff"}, + {file = "orjson-3.9.10.tar.gz", hash = "sha256:9ebbdbd6a046c304b1845e96fbcc5559cd296b4dfd3ad2509e33c4d9ce07d6a1"}, +] + +[[package]] +name = "overrides" +version = "7.4.0" +description = "A decorator to automatically detect mismatch when overriding a method." +optional = false +python-versions = ">=3.6" +files = [ + {file = "overrides-7.4.0-py3-none-any.whl", hash = "sha256:3ad24583f86d6d7a49049695efe9933e67ba62f0c7625d53c59fa832ce4b8b7d"}, + {file = "overrides-7.4.0.tar.gz", hash = "sha256:9502a3cca51f4fac40b5feca985b6703a5c1f6ad815588a7ca9e285b9dca6757"}, +] + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, +] + +[[package]] +name = "pandas" +version = "1.5.3" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3749077d86e3a2f0ed51367f30bf5b82e131cc0f14260c4d3e499186fccc4406"}, + {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:972d8a45395f2a2d26733eb8d0f629b2f90bebe8e8eddbb8829b180c09639572"}, + {file = "pandas-1.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50869a35cbb0f2e0cd5ec04b191e7b12ed688874bd05dd777c19b28cbea90996"}, + {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ac844a0fe00bfaeb2c9b51ab1424e5c8744f89860b138434a363b1f620f354"}, + {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a0a56cef15fd1586726dace5616db75ebcfec9179a3a55e78f72c5639fa2a23"}, + {file = "pandas-1.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:478ff646ca42b20376e4ed3fa2e8d7341e8a63105586efe54fa2508ee087f328"}, + {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6973549c01ca91ec96199e940495219c887ea815b2083722821f1d7abfa2b4dc"}, + {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c39a8da13cede5adcd3be1182883aea1c925476f4e84b2807a46e2775306305d"}, + {file = "pandas-1.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc"}, + {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae"}, + {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f2b952406a1588ad4cad5b3f55f520e82e902388a6d5a4a91baa8d38d23c7f6"}, + {file = "pandas-1.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:bc4c368f42b551bf72fac35c5128963a171b40dce866fb066540eeaf46faa003"}, + {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14e45300521902689a81f3f41386dc86f19b8ba8dd5ac5a3c7010ef8d2932813"}, + {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9842b6f4b8479e41968eced654487258ed81df7d1c9b7b870ceea24ed9459b31"}, + {file = "pandas-1.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:26d9c71772c7afb9d5046e6e9cf42d83dd147b5cf5bcb9d97252077118543792"}, + {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fbcb19d6fceb9e946b3e23258757c7b225ba450990d9ed63ccceeb8cae609f7"}, + {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:565fa34a5434d38e9d250af3c12ff931abaf88050551d9fbcdfafca50d62babf"}, + {file = "pandas-1.5.3-cp38-cp38-win32.whl", hash = "sha256:87bd9c03da1ac870a6d2c8902a0e1fd4267ca00f13bc494c9e5a9020920e1d51"}, + {file = "pandas-1.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:41179ce559943d83a9b4bbacb736b04c928b095b5f25dd2b7389eda08f46f373"}, + {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c74a62747864ed568f5a82a49a23a8d7fe171d0c69038b38cedf0976831296fa"}, + {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c4c00e0b0597c8e4f59e8d461f797e5d70b4d025880516a8261b2817c47759ee"}, + {file = "pandas-1.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a50d9a4336a9621cab7b8eb3fb11adb82de58f9b91d84c2cd526576b881a0c5a"}, + {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd05f7783b3274aa206a1af06f0ceed3f9b412cf665b7247eacd83be41cf7bf0"}, + {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f69c4029613de47816b1bb30ff5ac778686688751a5e9c99ad8c7031f6508e5"}, + {file = "pandas-1.5.3-cp39-cp39-win32.whl", hash = "sha256:7cec0bee9f294e5de5bbfc14d0573f65526071029d036b753ee6507d2a21480a"}, + {file = "pandas-1.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:dfd681c5dc216037e0b0a2c821f5ed99ba9f03ebcf119c7dac0e9a7b960b9ec9"}, + {file = "pandas-1.5.3.tar.gz", hash = "sha256:74a3fd7e5a7ec052f183273dc7b0acd3a863edf7520f5d3a1765c04ffdb3b0b1"}, +] + +[package.dependencies] +numpy = {version = ">=1.20.3", markers = "python_version < \"3.10\""} +python-dateutil = ">=2.8.1" +pytz = ">=2020.1" + +[package.extras] +test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"] + +[[package]] +name = "pandocfilters" +version = "1.5.0" +description = "Utilities for writing pandoc filters in python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"}, + {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"}, +] + +[[package]] +name = "parso" +version = "0.8.3" +description = "A Python Parser" +optional = false +python-versions = ">=3.6" +files = [ + {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, + {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, +] + +[package.extras] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["docopt", "pytest (<6.0.0)"] + +[[package]] +name = "pastel" +version = "0.2.1" +description = "Bring colors to your terminal." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pastel-0.2.1-py2.py3-none-any.whl", hash = "sha256:4349225fcdf6c2bb34d483e523475de5bb04a5c10ef711263452cb37d7dd4364"}, + {file = "pastel-0.2.1.tar.gz", hash = "sha256:e6581ac04e973cac858828c6202c1e1e81fee1dc7de7683f3e1ffe0bfd8a573d"}, +] + +[[package]] +name = "pbr" +version = "6.0.0" +description = "Python Build Reasonableness" +optional = false +python-versions = ">=2.6" +files = [ + {file = "pbr-6.0.0-py2.py3-none-any.whl", hash = "sha256:4a7317d5e3b17a3dccb6a8cfe67dab65b20551404c52c8ed41279fa4f0cb4cda"}, + {file = "pbr-6.0.0.tar.gz", hash = "sha256:d1377122a5a00e2f940ee482999518efe16d745d423a670c27773dfbc3c9a7d9"}, +] + +[[package]] +name = "pep8-naming" +version = "0.13.3" +description = "Check PEP-8 naming conventions, plugin for flake8" +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.9.0" +description = "Pexpect allows easy control of interactive console applications." +optional = false +python-versions = "*" +files = [ + {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, + {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, +] + +[package.dependencies] +ptyprocess = ">=0.5" + +[[package]] +name = "pillow" +version = "10.1.0" +description = "Python Imaging Library (Fork)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "Pillow-10.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1ab05f3db77e98f93964697c8efc49c7954b08dd61cff526b7f2531a22410106"}, + {file = "Pillow-10.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6932a7652464746fcb484f7fc3618e6503d2066d853f68a4bd97193a3996e273"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f63b5a68daedc54c7c3464508d8c12075e56dcfbd42f8c1bf40169061ae666"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0949b55eb607898e28eaccb525ab104b2d86542a85c74baf3a6dc24002edec2"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ae88931f93214777c7a3aa0a8f92a683f83ecde27f65a45f95f22d289a69e593"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b0eb01ca85b2361b09480784a7931fc648ed8b7836f01fb9241141b968feb1db"}, + {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d27b5997bdd2eb9fb199982bb7eb6164db0426904020dc38c10203187ae2ff2f"}, + {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7df5608bc38bd37ef585ae9c38c9cd46d7c81498f086915b0f97255ea60c2818"}, + {file = "Pillow-10.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:41f67248d92a5e0a2076d3517d8d4b1e41a97e2df10eb8f93106c89107f38b57"}, + {file = "Pillow-10.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1fb29c07478e6c06a46b867e43b0bcdb241b44cc52be9bc25ce5944eed4648e7"}, + {file = "Pillow-10.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2cdc65a46e74514ce742c2013cd4a2d12e8553e3a2563c64879f7c7e4d28bce7"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50d08cd0a2ecd2a8657bd3d82c71efd5a58edb04d9308185d66c3a5a5bed9610"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062a1610e3bc258bff2328ec43f34244fcec972ee0717200cb1425214fe5b839"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:61f1a9d247317fa08a308daaa8ee7b3f760ab1809ca2da14ecc88ae4257d6172"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a646e48de237d860c36e0db37ecaecaa3619e6f3e9d5319e527ccbc8151df061"}, + {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:47e5bf85b80abc03be7455c95b6d6e4896a62f6541c1f2ce77a7d2bb832af262"}, + {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a92386125e9ee90381c3369f57a2a50fa9e6aa8b1cf1d9c4b200d41a7dd8e992"}, + {file = "Pillow-10.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f7c276c05a9767e877a0b4c5050c8bee6a6d960d7f0c11ebda6b99746068c2a"}, + {file = "Pillow-10.1.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:a89b8312d51715b510a4fe9fc13686283f376cfd5abca8cd1c65e4c76e21081b"}, + {file = "Pillow-10.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:00f438bb841382b15d7deb9a05cc946ee0f2c352653c7aa659e75e592f6fa17d"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d929a19f5469b3f4df33a3df2983db070ebb2088a1e145e18facbc28cae5b27"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a92109192b360634a4489c0c756364c0c3a2992906752165ecb50544c251312"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0248f86b3ea061e67817c47ecbe82c23f9dd5d5226200eb9090b3873d3ca32de"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9882a7451c680c12f232a422730f986a1fcd808da0fd428f08b671237237d651"}, + {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1c3ac5423c8c1da5928aa12c6e258921956757d976405e9467c5f39d1d577a4b"}, + {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:806abdd8249ba3953c33742506fe414880bad78ac25cc9a9b1c6ae97bedd573f"}, + {file = "Pillow-10.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:eaed6977fa73408b7b8a24e8b14e59e1668cfc0f4c40193ea7ced8e210adf996"}, + {file = "Pillow-10.1.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:fe1e26e1ffc38be097f0ba1d0d07fcade2bcfd1d023cda5b29935ae8052bd793"}, + {file = "Pillow-10.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7e3daa202beb61821c06d2517428e8e7c1aab08943e92ec9e5755c2fc9ba5e"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24fadc71218ad2b8ffe437b54876c9382b4a29e030a05a9879f615091f42ffc2"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1d323703cfdac2036af05191b969b910d8f115cf53093125e4058f62012c9a"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:912e3812a1dbbc834da2b32299b124b5ddcb664ed354916fd1ed6f193f0e2d01"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7dbaa3c7de82ef37e7708521be41db5565004258ca76945ad74a8e998c30af8d"}, + {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9d7bc666bd8c5a4225e7ac71f2f9d12466ec555e89092728ea0f5c0c2422ea80"}, + {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baada14941c83079bf84c037e2d8b7506ce201e92e3d2fa0d1303507a8538212"}, + {file = "Pillow-10.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ef6721c97894a7aa77723740a09547197533146fba8355e86d6d9a4a1056b14"}, + {file = "Pillow-10.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0a026c188be3b443916179f5d04548092e253beb0c3e2ee0a4e2cdad72f66099"}, + {file = "Pillow-10.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04f6f6149f266a100374ca3cc368b67fb27c4af9f1cc8cb6306d849dcdf12616"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb40c011447712d2e19cc261c82655f75f32cb724788df315ed992a4d65696bb"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a8413794b4ad9719346cd9306118450b7b00d9a15846451549314a58ac42219"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c9aeea7b63edb7884b031a35305629a7593272b54f429a9869a4f63a1bf04c34"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b4005fee46ed9be0b8fb42be0c20e79411533d1fd58edabebc0dd24626882cfd"}, + {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0152565c6aa6ebbfb1e5d8624140a440f2b99bf7afaafbdbf6430426497f28"}, + {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d921bc90b1defa55c9917ca6b6b71430e4286fc9e44c55ead78ca1a9f9eba5f2"}, + {file = "Pillow-10.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfe96560c6ce2f4c07d6647af2d0f3c54cc33289894ebd88cfbb3bcd5391e256"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:937bdc5a7f5343d1c97dc98149a0be7eb9704e937fe3dc7140e229ae4fc572a7"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c25762197144e211efb5f4e8ad656f36c8d214d390585d1d21281f46d556ba"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:afc8eef765d948543a4775f00b7b8c079b3321d6b675dde0d02afa2ee23000b4"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:883f216eac8712b83a63f41b76ddfb7b2afab1b74abbb413c5df6680f071a6b9"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b920e4d028f6442bea9a75b7491c063f0b9a3972520731ed26c83e254302eb1e"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c41d960babf951e01a49c9746f92c5a7e0d939d1652d7ba30f6b3090f27e412"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1fafabe50a6977ac70dfe829b2d5735fd54e190ab55259ec8aea4aaea412fa0b"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b834f4b16173e5b92ab6566f0473bfb09f939ba14b23b8da1f54fa63e4b623f"}, + {file = "Pillow-10.1.0.tar.gz", hash = "sha256:e6bf8de6c36ed96c86ea3b6e1d5273c53f46ef518a062464cd7ef5dd2cf92e38"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "platformdirs" +version = "4.0.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-4.0.0-py3-none-any.whl", hash = "sha256:118c954d7e949b35437270383a3f2531e99dd93cf7ce4dc8340d3356d30f173b"}, + {file = "platformdirs-4.0.0.tar.gz", hash = "sha256:cb633b2bcf10c51af60beb0ab06d2f1d69064b43abf4c185ca6b28865f3f9731"}, +] + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] + +[[package]] +name = "pluggy" +version = "1.3.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, + {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "poethepoet" +version = "0.24.4" +description = "A task runner that works well with poetry." +optional = false +python-versions = ">=3.8" +files = [ + {file = "poethepoet-0.24.4-py3-none-any.whl", hash = "sha256:fb4ea35d7f40fe2081ea917d2e4102e2310fda2cde78974050ca83896e229075"}, + {file = "poethepoet-0.24.4.tar.gz", hash = "sha256:ff4220843a87c888cbcb5312c8905214701d0af60ac7271795baa8369b428fef"}, +] + +[package.dependencies] +pastel = ">=0.2.1,<0.3.0" +tomli = ">=1.2.2" + +[package.extras] +poetry-plugin = ["poetry (>=1.0,<2.0)"] + +[[package]] +name = "pre-commit" +version = "3.5.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pre_commit-3.5.0-py2.py3-none-any.whl", hash = "sha256:841dc9aef25daba9a0238cd27984041fa0467b4199fc4852e27950664919f660"}, + {file = "pre_commit-3.5.0.tar.gz", hash = "sha256:5804465c675b659b0862f07907f96295d490822a450c4c40e747d0b1c6ebcb32"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + +[[package]] +name = "prometheus-client" +version = "0.19.0" +description = "Python client for the Prometheus monitoring system." +optional = false +python-versions = ">=3.8" +files = [ + {file = "prometheus_client-0.19.0-py3-none-any.whl", hash = "sha256:c88b1e6ecf6b41cd8fb5731c7ae919bf66df6ec6fafa555cd6c0e16ca169ae92"}, + {file = "prometheus_client-0.19.0.tar.gz", hash = "sha256:4585b0d1223148c27a225b10dbec5ae9bc4c81a99a3fa80774fa6209935324e1"}, +] + +[package.extras] +twisted = ["twisted"] + +[[package]] +name = "prompt-toolkit" +version = "3.0.41" +description = "Library for building powerful interactive command lines in Python" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "prompt_toolkit-3.0.41-py3-none-any.whl", hash = "sha256:f36fe301fafb7470e86aaf90f036eef600a3210be4decf461a5b1ca8403d3cb2"}, + {file = "prompt_toolkit-3.0.41.tar.gz", hash = "sha256:941367d97fc815548822aa26c2a269fdc4eb21e9ec05fc5d447cf09bad5d75f0"}, +] + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "psutil" +version = "5.9.6" +description = "Cross-platform lib for process and system monitoring in Python." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "psutil-5.9.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:fb8a697f11b0f5994550555fcfe3e69799e5b060c8ecf9e2f75c69302cc35c0d"}, + {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:91ecd2d9c00db9817a4b4192107cf6954addb5d9d67a969a4f436dbc9200f88c"}, + {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:10e8c17b4f898d64b121149afb136c53ea8b68c7531155147867b7b1ac9e7e28"}, + {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:18cd22c5db486f33998f37e2bb054cc62fd06646995285e02a51b1e08da97017"}, + {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:ca2780f5e038379e520281e4c032dddd086906ddff9ef0d1b9dcf00710e5071c"}, + {file = "psutil-5.9.6-cp27-none-win32.whl", hash = "sha256:70cb3beb98bc3fd5ac9ac617a327af7e7f826373ee64c80efd4eb2856e5051e9"}, + {file = "psutil-5.9.6-cp27-none-win_amd64.whl", hash = "sha256:51dc3d54607c73148f63732c727856f5febec1c7c336f8f41fcbd6315cce76ac"}, + {file = "psutil-5.9.6-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c69596f9fc2f8acd574a12d5f8b7b1ba3765a641ea5d60fb4736bf3c08a8214a"}, + {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92e0cc43c524834af53e9d3369245e6cc3b130e78e26100d1f63cdb0abeb3d3c"}, + {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:748c9dd2583ed86347ed65d0035f45fa8c851e8d90354c122ab72319b5f366f4"}, + {file = "psutil-5.9.6-cp36-cp36m-win32.whl", hash = "sha256:3ebf2158c16cc69db777e3c7decb3c0f43a7af94a60d72e87b2823aebac3d602"}, + {file = "psutil-5.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:ff18b8d1a784b810df0b0fff3bcb50ab941c3b8e2c8de5726f9c71c601c611aa"}, + {file = "psutil-5.9.6-cp37-abi3-win32.whl", hash = "sha256:a6f01f03bf1843280f4ad16f4bde26b817847b4c1a0db59bf6419807bc5ce05c"}, + {file = "psutil-5.9.6-cp37-abi3-win_amd64.whl", hash = "sha256:6e5fb8dc711a514da83098bc5234264e551ad980cec5f85dabf4d38ed6f15e9a"}, + {file = "psutil-5.9.6-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:daecbcbd29b289aac14ece28eca6a3e60aa361754cf6da3dfb20d4d32b6c7f57"}, + {file = "psutil-5.9.6.tar.gz", hash = "sha256:e4b92ddcd7dd4cdd3f900180ea1e104932c7bce234fb88976e2a3b296441225a"}, +] + +[package.extras] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +optional = false +python-versions = "*" +files = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] + +[[package]] +name = "pudb" +version = "2023.1" +description = "A full-screen, console-based Python debugger" +optional = false +python-versions = "~=3.8" +files = [ + {file = "pudb-2023.1.tar.gz", hash = "sha256:15df3c603aba87a918a666ef8e1bf63f764238cc3589db3c5b7a5f1b01ea2f03"}, +] + +[package.dependencies] +jedi = ">=0.18,<1" +packaging = ">=20.0" +pygments = ">=2.7.4" +urwid = ">=1.1.1" +urwid_readline = "*" + +[package.extras] +completion = ["shtab"] + +[[package]] +name = "pure-eval" +version = "0.2.2" +description = "Safely evaluate AST nodes without side effects" +optional = false +python-versions = "*" +files = [ + {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, + {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, +] + +[package.extras] +tests = ["pytest"] + +[[package]] +name = "pycocotools" +version = "2.0.6" +description = "Official APIs for the MS-COCO dataset" +optional = false +python-versions = ">=3.5" +files = [ + {file = "pycocotools-2.0.6.tar.gz", hash = "sha256:7fe089b05cc18e806dcf3bd764708d86dab922a100f3734eb77fb77a70a1d18c"}, +] + +[package.dependencies] +matplotlib = ">=2.1.0" +numpy = "*" + +[[package]] +name = "pycodestyle" +version = "2.11.1" +description = "Python style guide checker" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, + {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, +] + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] + +[[package]] +name = "pydantic" +version = "1.10.13" +description = "Data validation and settings management using python type hints" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic-1.10.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:efff03cc7a4f29d9009d1c96ceb1e7a70a65cfe86e89d34e4a5f2ab1e5693737"}, + {file = "pydantic-1.10.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ecea2b9d80e5333303eeb77e180b90e95eea8f765d08c3d278cd56b00345d01"}, + {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1740068fd8e2ef6eb27a20e5651df000978edce6da6803c2bef0bc74540f9548"}, + {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84bafe2e60b5e78bc64a2941b4c071a4b7404c5c907f5f5a99b0139781e69ed8"}, + {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc0898c12f8e9c97f6cd44c0ed70d55749eaf783716896960b4ecce2edfd2d69"}, + {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:654db58ae399fe6434e55325a2c3e959836bd17a6f6a0b6ca8107ea0571d2e17"}, + {file = "pydantic-1.10.13-cp310-cp310-win_amd64.whl", hash = "sha256:75ac15385a3534d887a99c713aa3da88a30fbd6204a5cd0dc4dab3d770b9bd2f"}, + {file = "pydantic-1.10.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c553f6a156deb868ba38a23cf0df886c63492e9257f60a79c0fd8e7173537653"}, + {file = "pydantic-1.10.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e08865bc6464df8c7d61439ef4439829e3ab62ab1669cddea8dd00cd74b9ffe"}, + {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31647d85a2013d926ce60b84f9dd5300d44535a9941fe825dc349ae1f760df9"}, + {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:210ce042e8f6f7c01168b2d84d4c9eb2b009fe7bf572c2266e235edf14bacd80"}, + {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8ae5dd6b721459bfa30805f4c25880e0dd78fc5b5879f9f7a692196ddcb5a580"}, + {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f8e81fc5fb17dae698f52bdd1c4f18b6ca674d7068242b2aff075f588301bbb0"}, + {file = "pydantic-1.10.13-cp311-cp311-win_amd64.whl", hash = "sha256:61d9dce220447fb74f45e73d7ff3b530e25db30192ad8d425166d43c5deb6df0"}, + {file = "pydantic-1.10.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4b03e42ec20286f052490423682016fd80fda830d8e4119f8ab13ec7464c0132"}, + {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f59ef915cac80275245824e9d771ee939133be38215555e9dc90c6cb148aaeb5"}, + {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a1f9f747851338933942db7af7b6ee8268568ef2ed86c4185c6ef4402e80ba8"}, + {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:97cce3ae7341f7620a0ba5ef6cf043975cd9d2b81f3aa5f4ea37928269bc1b87"}, + {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854223752ba81e3abf663d685f105c64150873cc6f5d0c01d3e3220bcff7d36f"}, + {file = "pydantic-1.10.13-cp37-cp37m-win_amd64.whl", hash = "sha256:b97c1fac8c49be29486df85968682b0afa77e1b809aff74b83081cc115e52f33"}, + {file = "pydantic-1.10.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c958d053453a1c4b1c2062b05cd42d9d5c8eb67537b8d5a7e3c3032943ecd261"}, + {file = "pydantic-1.10.13-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c5370a7edaac06daee3af1c8b1192e305bc102abcbf2a92374b5bc793818599"}, + {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6f6e7305244bddb4414ba7094ce910560c907bdfa3501e9db1a7fd7eaea127"}, + {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3a3c792a58e1622667a2837512099eac62490cdfd63bd407993aaf200a4cf1f"}, + {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c636925f38b8db208e09d344c7aa4f29a86bb9947495dd6b6d376ad10334fb78"}, + {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:678bcf5591b63cc917100dc50ab6caebe597ac67e8c9ccb75e698f66038ea953"}, + {file = "pydantic-1.10.13-cp38-cp38-win_amd64.whl", hash = "sha256:6cf25c1a65c27923a17b3da28a0bdb99f62ee04230c931d83e888012851f4e7f"}, + {file = "pydantic-1.10.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8ef467901d7a41fa0ca6db9ae3ec0021e3f657ce2c208e98cd511f3161c762c6"}, + {file = "pydantic-1.10.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:968ac42970f57b8344ee08837b62f6ee6f53c33f603547a55571c954a4225691"}, + {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9849f031cf8a2f0a928fe885e5a04b08006d6d41876b8bbd2fc68a18f9f2e3fd"}, + {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56e3ff861c3b9c6857579de282ce8baabf443f42ffba355bf070770ed63e11e1"}, + {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f00790179497767aae6bcdc36355792c79e7bbb20b145ff449700eb076c5f96"}, + {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:75b297827b59bc229cac1a23a2f7a4ac0031068e5be0ce385be1462e7e17a35d"}, + {file = "pydantic-1.10.13-cp39-cp39-win_amd64.whl", hash = "sha256:e70ca129d2053fb8b728ee7d1af8e553a928d7e301a311094b8a0501adc8763d"}, + {file = "pydantic-1.10.13-py3-none-any.whl", hash = "sha256:b87326822e71bd5f313e7d3bfdc77ac3247035ac10b0c0618bd99dcf95b1e687"}, + {file = "pydantic-1.10.13.tar.gz", hash = "sha256:32c8b48dcd3b2ac4e78b0ba4af3a2c2eb6048cb75202f0ea7b34feb740efc340"}, +] + +[package.dependencies] +python-dotenv = {version = ">=0.10.4", optional = true, markers = "extra == \"dotenv\""} +typing-extensions = ">=4.2.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + +[[package]] +name = "pydocstyle" +version = "6.3.0" +description = "Python docstring style checker" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pydocstyle-6.3.0-py3-none-any.whl", hash = "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019"}, + {file = "pydocstyle-6.3.0.tar.gz", hash = "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1"}, +] + +[package.dependencies] +snowballstemmer = ">=2.2.0" + +[package.extras] +toml = ["tomli (>=1.2.3)"] + +[[package]] +name = "pyflakes" +version = "3.1.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, + {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, +] + +[[package]] +name = "pygments" +version = "2.17.2" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, +] + +[package.extras] +plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pyparsing" +version = "3.1.1" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, + {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pyquaternion" +version = "0.9.9" +description = "A fully featured, pythonic library for representing and using quaternions." +optional = false +python-versions = "*" +files = [ + {file = "pyquaternion-0.9.9-py2-none-any.whl", hash = "sha256:d0eb69219ca99bfcbc25c1e2c4f82e58c61dce3e907e929f13c5f3615e4b6518"}, + {file = "pyquaternion-0.9.9-py3-none-any.whl", hash = "sha256:e65f6e3f7b1fdf1a9e23f82434334a1ae84f14223eee835190cd2e841f8172ec"}, + {file = "pyquaternion-0.9.9.tar.gz", hash = "sha256:b1f61af219cb2fe966b5fb79a192124f2e63a3f7a777ac3cadf2957b1a81bea8"}, +] + +[package.dependencies] +numpy = "*" + +[package.extras] +dev = ["mkdocs"] +test = ["nose"] + +[[package]] +name = "pyreadline3" +version = "3.4.1" +description = "A python implementation of GNU readline." +optional = false +python-versions = "*" +files = [ + {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, + {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, +] + +[[package]] +name = "pytest" +version = "7.4.3" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, + {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, +] + +[package.dependencies] +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", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-cases" +version = "3.8.1" +description = "Separate test code from test cases in pytest." +optional = false +python-versions = "*" +files = [ + {file = "pytest-cases-3.8.1.tar.gz", hash = "sha256:49d7f6f8ad534e5a6e73fb8f5fd38986606f17b46ee55f7ebee07a55c677ca01"}, + {file = "pytest_cases-3.8.1-py2.py3-none-any.whl", hash = "sha256:595553f5a522ad6525778a35e0fcb4a46f8eb069e0abe108de02e1d4fb136b85"}, +] + +[package.dependencies] +decopatch = "*" +makefun = ">=1.15.1" +packaging = "*" + +[[package]] +name = "pytest-cov" +version = "4.1.0" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, + {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, +] + +[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 = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-dotenv" +version = "1.0.0" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, + {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "python-json-logger" +version = "2.0.7" +description = "A python library adding a json log formatter" +optional = false +python-versions = ">=3.6" +files = [ + {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, + {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, +] + +[[package]] +name = "python-multipart" +version = "0.0.6" +description = "A streaming multipart parser for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "python_multipart-0.0.6-py3-none-any.whl", hash = "sha256:ee698bab5ef148b0a760751c261902cd096e57e10558e11aca17646b74ee1c18"}, + {file = "python_multipart-0.0.6.tar.gz", hash = "sha256:e9925a80bb668529f1b67c7fdb0a5dacdd7cbfc6fb0bff3ea443fe22bdd62132"}, +] + +[package.extras] +dev = ["atomicwrites (==1.2.1)", "attrs (==19.2.0)", "coverage (==6.5.0)", "hatch", "invoke (==1.7.3)", "more-itertools (==4.3.0)", "pbr (==4.3.0)", "pluggy (==1.0.0)", "py (==1.11.0)", "pytest (==7.2.0)", "pytest-cov (==4.0.0)", "pytest-timeout (==2.1.0)", "pyyaml (==5.1)"] + +[[package]] +name = "pytorch-lightning" +version = "1.9.5" +description = "PyTorch Lightning is the lightweight PyTorch wrapper for ML researchers. Scale your models. Write less boilerplate." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytorch-lightning-1.9.5.tar.gz", hash = "sha256:925fe7b80ddf04859fa385aa493b260be4000b11a2f22447afb4a932d1f07d26"}, + {file = "pytorch_lightning-1.9.5-py3-none-any.whl", hash = "sha256:06821558158623c5d2ecf5d3d0374dc8bd661e0acd3acf54a6d6f71737c156c5"}, +] + +[package.dependencies] +fsspec = {version = ">2021.06.0", extras = ["http"]} +lightning-utilities = ">=0.6.0.post0" +numpy = ">=1.17.2" +packaging = ">=17.1" +PyYAML = ">=5.4" +torch = ">=1.10.0" +torchmetrics = ">=0.7.0" +tqdm = ">=4.57.0" +typing-extensions = ">=4.0.0" + +[package.extras] +all = ["colossalai (>=0.2.0)", "deepspeed (>=0.6.0)", "fairscale (>=0.4.5)", "gym[classic-control] (>=0.17.0)", "hivemind (==1.1.5)", "horovod (>=0.21.2,!=0.24.0)", "hydra-core (>=1.0.5)", "ipython[all] (<8.7.1)", "jsonargparse[signatures] (>=4.18.0)", "matplotlib (>3.1)", "omegaconf (>=2.0.5)", "rich (>=10.14.0,!=10.15.0.a)", "tensorboardX (>=2.2)", "torchmetrics (>=0.10.0)", "torchvision (>=0.11.1)"] +colossalai = ["colossalai (>=0.2.0)"] +deepspeed = ["deepspeed (>=0.6.0)"] +dev = ["cloudpickle (>=1.3)", "codecov (==2.1.12)", "colossalai (>=0.2.0)", "coverage (==6.5.0)", "deepspeed (>=0.6.0)", "fairscale (>=0.4.5)", "fastapi (<0.87.0)", "gym[classic-control] (>=0.17.0)", "hivemind (==1.1.5)", "horovod (>=0.21.2,!=0.24.0)", "hydra-core (>=1.0.5)", "ipython[all] (<8.7.1)", "jsonargparse[signatures] (>=4.18.0)", "matplotlib (>3.1)", "omegaconf (>=2.0.5)", "onnx (<1.14.0)", "onnxruntime (<1.14.0)", "pandas (>1.0)", "pre-commit (==2.20.0)", "protobuf (<=3.20.1)", "psutil (<5.9.5)", "pytest (==7.2.0)", "pytest-cov (==4.0.0)", "pytest-forked (==1.4.0)", "pytest-rerunfailures (==10.3)", "rich (>=10.14.0,!=10.15.0.a)", "scikit-learn (>0.22.1)", "tensorboard (>=2.9.1)", "tensorboardX (>=2.2)", "torchmetrics (>=0.10.0)", "torchvision (>=0.11.1)", "uvicorn (<0.19.1)"] +examples = ["gym[classic-control] (>=0.17.0)", "ipython[all] (<8.7.1)", "torchmetrics (>=0.10.0)", "torchvision (>=0.11.1)"] +extra = ["hydra-core (>=1.0.5)", "jsonargparse[signatures] (>=4.18.0)", "matplotlib (>3.1)", "omegaconf (>=2.0.5)", "rich (>=10.14.0,!=10.15.0.a)", "tensorboardX (>=2.2)"] +fairscale = ["fairscale (>=0.4.5)"] +hivemind = ["hivemind (==1.1.5)"] +horovod = ["horovod (>=0.21.2,!=0.24.0)"] +strategies = ["colossalai (>=0.2.0)", "deepspeed (>=0.6.0)", "fairscale (>=0.4.5)", "hivemind (==1.1.5)", "horovod (>=0.21.2,!=0.24.0)"] +test = ["cloudpickle (>=1.3)", "codecov (==2.1.12)", "coverage (==6.5.0)", "fastapi (<0.87.0)", "onnx (<1.14.0)", "onnxruntime (<1.14.0)", "pandas (>1.0)", "pre-commit (==2.20.0)", "protobuf (<=3.20.1)", "psutil (<5.9.5)", "pytest (==7.2.0)", "pytest-cov (==4.0.0)", "pytest-forked (==1.4.0)", "pytest-rerunfailures (==10.3)", "scikit-learn (>0.22.1)", "tensorboard (>=2.9.1)", "uvicorn (<0.19.1)"] + +[[package]] +name = "pytz" +version = "2023.3.post1" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, +] + +[[package]] +name = "pywin32" +version = "306" +description = "Python for Window Extensions" +optional = false +python-versions = "*" +files = [ + {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, + {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, + {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, + {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, + {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, + {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, + {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, + {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, + {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, + {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, + {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, + {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, +] + +[[package]] +name = "pywinpty" +version = "2.0.12" +description = "Pseudo terminal support for Windows from Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pywinpty-2.0.12-cp310-none-win_amd64.whl", hash = "sha256:21319cd1d7c8844fb2c970fb3a55a3db5543f112ff9cfcd623746b9c47501575"}, + {file = "pywinpty-2.0.12-cp311-none-win_amd64.whl", hash = "sha256:853985a8f48f4731a716653170cd735da36ffbdc79dcb4c7b7140bce11d8c722"}, + {file = "pywinpty-2.0.12-cp312-none-win_amd64.whl", hash = "sha256:1617b729999eb6713590e17665052b1a6ae0ad76ee31e60b444147c5b6a35dca"}, + {file = "pywinpty-2.0.12-cp38-none-win_amd64.whl", hash = "sha256:189380469ca143d06e19e19ff3fba0fcefe8b4a8cc942140a6b863aed7eebb2d"}, + {file = "pywinpty-2.0.12-cp39-none-win_amd64.whl", hash = "sha256:7520575b6546db23e693cbd865db2764097bd6d4ef5dc18c92555904cd62c3d4"}, + {file = "pywinpty-2.0.12.tar.gz", hash = "sha256:8197de460ae8ebb7f5d1701dfa1b5df45b157bb832e92acba316305e18ca00dd"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "pyzmq" +version = "25.1.1" +description = "Python bindings for 0MQ" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:381469297409c5adf9a0e884c5eb5186ed33137badcbbb0560b86e910a2f1e76"}, + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:955215ed0604dac5b01907424dfa28b40f2b2292d6493445dd34d0dfa72586a8"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:985bbb1316192b98f32e25e7b9958088431d853ac63aca1d2c236f40afb17c83"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:afea96f64efa98df4da6958bae37f1cbea7932c35878b185e5982821bc883369"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76705c9325d72a81155bb6ab48d4312e0032bf045fb0754889133200f7a0d849"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77a41c26205d2353a4c94d02be51d6cbdf63c06fbc1295ea57dad7e2d3381b71"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:12720a53e61c3b99d87262294e2b375c915fea93c31fc2336898c26d7aed34cd"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:57459b68e5cd85b0be8184382cefd91959cafe79ae019e6b1ae6e2ba8a12cda7"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:292fe3fc5ad4a75bc8df0dfaee7d0babe8b1f4ceb596437213821f761b4589f9"}, + {file = "pyzmq-25.1.1-cp310-cp310-win32.whl", hash = "sha256:35b5ab8c28978fbbb86ea54958cd89f5176ce747c1fb3d87356cf698048a7790"}, + {file = "pyzmq-25.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:11baebdd5fc5b475d484195e49bae2dc64b94a5208f7c89954e9e354fc609d8f"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:d20a0ddb3e989e8807d83225a27e5c2eb2260eaa851532086e9e0fa0d5287d83"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e1c1be77bc5fb77d923850f82e55a928f8638f64a61f00ff18a67c7404faf008"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d89528b4943d27029a2818f847c10c2cecc79fa9590f3cb1860459a5be7933eb"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90f26dc6d5f241ba358bef79be9ce06de58d477ca8485e3291675436d3827cf8"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2b92812bd214018e50b6380ea3ac0c8bb01ac07fcc14c5f86a5bb25e74026e9"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f957ce63d13c28730f7fd6b72333814221c84ca2421298f66e5143f81c9f91f"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:047a640f5c9c6ade7b1cc6680a0e28c9dd5a0825135acbd3569cc96ea00b2505"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7f7e58effd14b641c5e4dec8c7dab02fb67a13df90329e61c869b9cc607ef752"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c2910967e6ab16bf6fbeb1f771c89a7050947221ae12a5b0b60f3bca2ee19bca"}, + {file = "pyzmq-25.1.1-cp311-cp311-win32.whl", hash = "sha256:76c1c8efb3ca3a1818b837aea423ff8a07bbf7aafe9f2f6582b61a0458b1a329"}, + {file = "pyzmq-25.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:44e58a0554b21fc662f2712814a746635ed668d0fbc98b7cb9d74cb798d202e6"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:e1ffa1c924e8c72778b9ccd386a7067cddf626884fd8277f503c48bb5f51c762"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1af379b33ef33757224da93e9da62e6471cf4a66d10078cf32bae8127d3d0d4a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cff084c6933680d1f8b2f3b4ff5bbb88538a4aac00d199ac13f49d0698727ecb"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2400a94f7dd9cb20cd012951a0cbf8249e3d554c63a9c0cdfd5cbb6c01d2dec"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d81f1ddae3858b8299d1da72dd7d19dd36aab654c19671aa8a7e7fb02f6638a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:255ca2b219f9e5a3a9ef3081512e1358bd4760ce77828e1028b818ff5610b87b"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a882ac0a351288dd18ecae3326b8a49d10c61a68b01419f3a0b9a306190baf69"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:724c292bb26365659fc434e9567b3f1adbdb5e8d640c936ed901f49e03e5d32e"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ca1ed0bb2d850aa8471387882247c68f1e62a4af0ce9c8a1dbe0d2bf69e41fb"}, + {file = "pyzmq-25.1.1-cp312-cp312-win32.whl", hash = "sha256:b3451108ab861040754fa5208bca4a5496c65875710f76789a9ad27c801a0075"}, + {file = "pyzmq-25.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:eadbefd5e92ef8a345f0525b5cfd01cf4e4cc651a2cffb8f23c0dd184975d787"}, + {file = "pyzmq-25.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:db0b2af416ba735c6304c47f75d348f498b92952f5e3e8bff449336d2728795d"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c133e93b405eb0d36fa430c94185bdd13c36204a8635470cccc200723c13bb"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:273bc3959bcbff3f48606b28229b4721716598d76b5aaea2b4a9d0ab454ec062"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cbc8df5c6a88ba5ae385d8930da02201165408dde8d8322072e3e5ddd4f68e22"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:18d43df3f2302d836f2a56f17e5663e398416e9dd74b205b179065e61f1a6edf"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:73461eed88a88c866656e08f89299720a38cb4e9d34ae6bf5df6f71102570f2e"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:34c850ce7976d19ebe7b9d4b9bb8c9dfc7aac336c0958e2651b88cbd46682123"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win32.whl", hash = "sha256:d2045d6d9439a0078f2a34b57c7b18c4a6aef0bee37f22e4ec9f32456c852c71"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:458dea649f2f02a0b244ae6aef8dc29325a2810aa26b07af8374dc2a9faf57e3"}, + {file = "pyzmq-25.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7cff25c5b315e63b07a36f0c2bab32c58eafbe57d0dce61b614ef4c76058c115"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1579413ae492b05de5a6174574f8c44c2b9b122a42015c5292afa4be2507f28"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d0a409d3b28607cc427aa5c30a6f1e4452cc44e311f843e05edb28ab5e36da0"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21eb4e609a154a57c520e3d5bfa0d97e49b6872ea057b7c85257b11e78068222"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:034239843541ef7a1aee0c7b2cb7f6aafffb005ede965ae9cbd49d5ff4ff73cf"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f8115e303280ba09f3898194791a153862cbf9eef722ad8f7f741987ee2a97c7"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a5d26fe8f32f137e784f768143728438877d69a586ddeaad898558dc971a5ae"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win32.whl", hash = "sha256:f32260e556a983bc5c7ed588d04c942c9a8f9c2e99213fec11a031e316874c7e"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf34e43c531bbb510ae7e8f5b2b1f2a8ab93219510e2b287a944432fad135f3"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:87e34f31ca8f168c56d6fbf99692cc8d3b445abb5bfd08c229ae992d7547a92a"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c9c6c9b2c2f80747a98f34ef491c4d7b1a8d4853937bb1492774992a120f475d"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5619f3f5a4db5dbb572b095ea3cb5cc035335159d9da950830c9c4db2fbb6995"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a34d2395073ef862b4032343cf0c32a712f3ab49d7ec4f42c9661e0294d106f"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0e6b78220aba09815cd1f3a32b9c7cb3e02cb846d1cfc526b6595f6046618"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3669cf8ee3520c2f13b2e0351c41fea919852b220988d2049249db10046a7afb"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2d163a18819277e49911f7461567bda923461c50b19d169a062536fffe7cd9d2"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:df27ffddff4190667d40de7beba4a950b5ce78fe28a7dcc41d6f8a700a80a3c0"}, + {file = "pyzmq-25.1.1-cp38-cp38-win32.whl", hash = "sha256:a382372898a07479bd34bda781008e4a954ed8750f17891e794521c3e21c2e1c"}, + {file = "pyzmq-25.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:52533489f28d62eb1258a965f2aba28a82aa747202c8fa5a1c7a43b5db0e85c1"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:03b3f49b57264909aacd0741892f2aecf2f51fb053e7d8ac6767f6c700832f45"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:330f9e188d0d89080cde66dc7470f57d1926ff2fb5576227f14d5be7ab30b9fa"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2ca57a5be0389f2a65e6d3bb2962a971688cbdd30b4c0bd188c99e39c234f414"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c56d748ea50215abef7030c72b60dd723ed5b5c7e65e7bc2504e77843631c1a6"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8f03d3f0d01cb5a018debeb412441996a517b11c5c17ab2001aa0597c6d6882c"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:820c4a08195a681252f46926de10e29b6bbf3e17b30037bd4250d72dd3ddaab8"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17ef5f01d25b67ca8f98120d5fa1d21efe9611604e8eb03a5147360f517dd1e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win32.whl", hash = "sha256:04ccbed567171579ec2cebb9c8a3e30801723c575601f9a990ab25bcac6b51e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:e61f091c3ba0c3578411ef505992d356a812fb200643eab27f4f70eed34a29ef"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ade6d25bb29c4555d718ac6d1443a7386595528c33d6b133b258f65f963bb0f6"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0c95ddd4f6e9fca4e9e3afaa4f9df8552f0ba5d1004e89ef0a68e1f1f9807c7"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48e466162a24daf86f6b5ca72444d2bf39a5e58da5f96370078be67c67adc978"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abc719161780932c4e11aaebb203be3d6acc6b38d2f26c0f523b5b59d2fc1996"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ccf825981640b8c34ae54231b7ed00271822ea1c6d8ba1090ebd4943759abf5"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2f20ce161ebdb0091a10c9ca0372e023ce24980d0e1f810f519da6f79c60800"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:deee9ca4727f53464daf089536e68b13e6104e84a37820a88b0a057b97bba2d2"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa8d6cdc8b8aa19ceb319aaa2b660cdaccc533ec477eeb1309e2a291eaacc43a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019e59ef5c5256a2c7378f2fb8560fc2a9ff1d315755204295b2eab96b254d0a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b9af3757495c1ee3b5c4e945c1df7be95562277c6e5bccc20a39aec50f826cd0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:548d6482dc8aadbe7e79d1b5806585c8120bafa1ef841167bc9090522b610fa6"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:057e824b2aae50accc0f9a0570998adc021b372478a921506fddd6c02e60308e"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2243700cc5548cff20963f0ca92d3e5e436394375ab8a354bbea2b12911b20b0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79986f3b4af059777111409ee517da24a529bdbd46da578b33f25580adcff728"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:11d58723d44d6ed4dd677c5615b2ffb19d5c426636345567d6af82be4dff8a55"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:49d238cf4b69652257db66d0c623cd3e09b5d2e9576b56bc067a396133a00d4a"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fedbdc753827cf014c01dbbee9c3be17e5a208dcd1bf8641ce2cd29580d1f0d4"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc16ac425cc927d0a57d242589f87ee093884ea4804c05a13834d07c20db203c"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11c1d2aed9079c6b0c9550a7257a836b4a637feb334904610f06d70eb44c56d2"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e8a701123029cc240cea61dd2d16ad57cab4691804143ce80ecd9286b464d180"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:61706a6b6c24bdece85ff177fec393545a3191eeda35b07aaa1458a027ad1304"}, + {file = "pyzmq-25.1.1.tar.gz", hash = "sha256:259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23"}, +] + +[package.dependencies] +cffi = {version = "*", markers = "implementation_name == \"pypy\""} + +[[package]] +name = "qtconsole" +version = "5.5.1" +description = "Jupyter Qt console" +optional = false +python-versions = ">= 3.8" +files = [ + {file = "qtconsole-5.5.1-py3-none-any.whl", hash = "sha256:8c75fa3e9b4ed884880ff7cea90a1b67451219279ec33deaee1d59e3df1a5d2b"}, + {file = "qtconsole-5.5.1.tar.gz", hash = "sha256:a0e806c6951db9490628e4df80caec9669b65149c7ba40f9bf033c025a5b56bc"}, +] + +[package.dependencies] +ipykernel = ">=4.1" +jupyter-client = ">=4.1" +jupyter-core = "*" +packaging = "*" +pygments = "*" +pyzmq = ">=17.1" +qtpy = ">=2.4.0" +traitlets = "<5.2.1 || >5.2.1,<5.2.2 || >5.2.2" + +[package.extras] +doc = ["Sphinx (>=1.3)"] +test = ["flaky", "pytest", "pytest-qt"] + +[[package]] +name = "qtpy" +version = "2.4.1" +description = "Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6)." +optional = false +python-versions = ">=3.7" +files = [ + {file = "QtPy-2.4.1-py3-none-any.whl", hash = "sha256:1c1d8c4fa2c884ae742b069151b0abe15b3f70491f3972698c683b8e38de839b"}, + {file = "QtPy-2.4.1.tar.gz", hash = "sha256:a5a15ffd519550a1361bdc56ffc07fda56a6af7292f17c7b395d4083af632987"}, +] + +[package.dependencies] +packaging = "*" + +[package.extras] +test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"] + +[[package]] +name = "referencing" +version = "0.31.1" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "referencing-0.31.1-py3-none-any.whl", hash = "sha256:c19c4d006f1757e3dd75c4f784d38f8698d87b649c54f9ace14e5e8c9667c01d"}, + {file = "referencing-0.31.1.tar.gz", hash = "sha256:81a1471c68c9d5e3831c30ad1dd9815c45b558e596653db751a2bfdd17b3b9ec"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + +[[package]] +name = "regex" +version = "2023.10.3" +description = "Alternative regular expression module, to replace re." +optional = false +python-versions = ">=3.7" +files = [ + {file = "regex-2023.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4c34d4f73ea738223a094d8e0ffd6d2c1a1b4c175da34d6b0de3d8d69bee6bcc"}, + {file = "regex-2023.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8f4e49fc3ce020f65411432183e6775f24e02dff617281094ba6ab079ef0915"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cd1bccf99d3ef1ab6ba835308ad85be040e6a11b0977ef7ea8c8005f01a3c29"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:81dce2ddc9f6e8f543d94b05d56e70d03a0774d32f6cca53e978dc01e4fc75b8"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c6b4d23c04831e3ab61717a707a5d763b300213db49ca680edf8bf13ab5d91b"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c15ad0aee158a15e17e0495e1e18741573d04eb6da06d8b84af726cfc1ed02ee"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6239d4e2e0b52c8bd38c51b760cd870069f0bdf99700a62cd509d7a031749a55"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4a8bf76e3182797c6b1afa5b822d1d5802ff30284abe4599e1247be4fd6b03be"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9c727bbcf0065cbb20f39d2b4f932f8fa1631c3e01fcedc979bd4f51fe051c5"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3ccf2716add72f80714b9a63899b67fa711b654be3fcdd34fa391d2d274ce767"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:107ac60d1bfdc3edb53be75e2a52aff7481b92817cfdddd9b4519ccf0e54a6ff"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:00ba3c9818e33f1fa974693fb55d24cdc8ebafcb2e4207680669d8f8d7cca79a"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f0a47efb1dbef13af9c9a54a94a0b814902e547b7f21acb29434504d18f36e3a"}, + {file = "regex-2023.10.3-cp310-cp310-win32.whl", hash = "sha256:36362386b813fa6c9146da6149a001b7bd063dabc4d49522a1f7aa65b725c7ec"}, + {file = "regex-2023.10.3-cp310-cp310-win_amd64.whl", hash = "sha256:c65a3b5330b54103e7d21cac3f6bf3900d46f6d50138d73343d9e5b2900b2353"}, + {file = "regex-2023.10.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:90a79bce019c442604662d17bf69df99090e24cdc6ad95b18b6725c2988a490e"}, + {file = "regex-2023.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c7964c2183c3e6cce3f497e3a9f49d182e969f2dc3aeeadfa18945ff7bdd7051"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ef80829117a8061f974b2fda8ec799717242353bff55f8a29411794d635d964"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5addc9d0209a9afca5fc070f93b726bf7003bd63a427f65ef797a931782e7edc"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c148bec483cc4b421562b4bcedb8e28a3b84fcc8f0aa4418e10898f3c2c0eb9b"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d1f21af4c1539051049796a0f50aa342f9a27cde57318f2fc41ed50b0dbc4ac"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b9ac09853b2a3e0d0082104036579809679e7715671cfbf89d83c1cb2a30f58"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ebedc192abbc7fd13c5ee800e83a6df252bec691eb2c4bedc9f8b2e2903f5e2a"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d8a993c0a0ffd5f2d3bda23d0cd75e7086736f8f8268de8a82fbc4bd0ac6791e"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:be6b7b8d42d3090b6c80793524fa66c57ad7ee3fe9722b258aec6d0672543fd0"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4023e2efc35a30e66e938de5aef42b520c20e7eda7bb5fb12c35e5d09a4c43f6"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d47840dc05e0ba04fe2e26f15126de7c755496d5a8aae4a08bda4dd8d646c54"}, + {file = "regex-2023.10.3-cp311-cp311-win32.whl", hash = "sha256:9145f092b5d1977ec8c0ab46e7b3381b2fd069957b9862a43bd383e5c01d18c2"}, + {file = "regex-2023.10.3-cp311-cp311-win_amd64.whl", hash = "sha256:b6104f9a46bd8743e4f738afef69b153c4b8b592d35ae46db07fc28ae3d5fb7c"}, + {file = "regex-2023.10.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bff507ae210371d4b1fe316d03433ac099f184d570a1a611e541923f78f05037"}, + {file = "regex-2023.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be5e22bbb67924dea15039c3282fa4cc6cdfbe0cbbd1c0515f9223186fc2ec5f"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a992f702c9be9c72fa46f01ca6e18d131906a7180950958f766c2aa294d4b41"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7434a61b158be563c1362d9071358f8ab91b8d928728cd2882af060481244c9e"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2169b2dcabf4e608416f7f9468737583ce5f0a6e8677c4efbf795ce81109d7c"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9e908ef5889cda4de038892b9accc36d33d72fb3e12c747e2799a0e806ec841"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12bd4bc2c632742c7ce20db48e0d99afdc05e03f0b4c1af90542e05b809a03d9"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bc72c231f5449d86d6c7d9cc7cd819b6eb30134bb770b8cfdc0765e48ef9c420"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bce8814b076f0ce5766dc87d5a056b0e9437b8e0cd351b9a6c4e1134a7dfbda9"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:ba7cd6dc4d585ea544c1412019921570ebd8a597fabf475acc4528210d7c4a6f"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b0c7d2f698e83f15228ba41c135501cfe7d5740181d5903e250e47f617eb4292"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5a8f91c64f390ecee09ff793319f30a0f32492e99f5dc1c72bc361f23ccd0a9a"}, + {file = "regex-2023.10.3-cp312-cp312-win32.whl", hash = "sha256:ad08a69728ff3c79866d729b095872afe1e0557251da4abb2c5faff15a91d19a"}, + {file = "regex-2023.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:39cdf8d141d6d44e8d5a12a8569d5a227f645c87df4f92179bd06e2e2705e76b"}, + {file = "regex-2023.10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4a3ee019a9befe84fa3e917a2dd378807e423d013377a884c1970a3c2792d293"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76066d7ff61ba6bf3cb5efe2428fc82aac91802844c022d849a1f0f53820502d"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe50b61bab1b1ec260fa7cd91106fa9fece57e6beba05630afe27c71259c59b"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fd88f373cb71e6b59b7fa597e47e518282455c2734fd4306a05ca219a1991b0"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ab05a182c7937fb374f7e946f04fb23a0c0699c0450e9fb02ef567412d2fa3"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dac37cf08fcf2094159922edc7a2784cfcc5c70f8354469f79ed085f0328ebdf"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e54ddd0bb8fb626aa1f9ba7b36629564544954fff9669b15da3610c22b9a0991"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3367007ad1951fde612bf65b0dffc8fd681a4ab98ac86957d16491400d661302"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:16f8740eb6dbacc7113e3097b0a36065a02e37b47c936b551805d40340fb9971"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:f4f2ca6df64cbdd27f27b34f35adb640b5d2d77264228554e68deda54456eb11"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:39807cbcbe406efca2a233884e169d056c35aa7e9f343d4e78665246a332f597"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7eece6fbd3eae4a92d7c748ae825cbc1ee41a89bb1c3db05b5578ed3cfcfd7cb"}, + {file = "regex-2023.10.3-cp37-cp37m-win32.whl", hash = "sha256:ce615c92d90df8373d9e13acddd154152645c0dc060871abf6bd43809673d20a"}, + {file = "regex-2023.10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0f649fa32fe734c4abdfd4edbb8381c74abf5f34bc0b3271ce687b23729299ed"}, + {file = "regex-2023.10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b98b7681a9437262947f41c7fac567c7e1f6eddd94b0483596d320092004533"}, + {file = "regex-2023.10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:91dc1d531f80c862441d7b66c4505cd6ea9d312f01fb2f4654f40c6fdf5cc37a"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82fcc1f1cc3ff1ab8a57ba619b149b907072e750815c5ba63e7aa2e1163384a4"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7979b834ec7a33aafae34a90aad9f914c41fd6eaa8474e66953f3f6f7cbd4368"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef71561f82a89af6cfcbee47f0fabfdb6e63788a9258e913955d89fdd96902ab"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd829712de97753367153ed84f2de752b86cd1f7a88b55a3a775eb52eafe8a94"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00e871d83a45eee2f8688d7e6849609c2ca2a04a6d48fba3dff4deef35d14f07"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:706e7b739fdd17cb89e1fbf712d9dc21311fc2333f6d435eac2d4ee81985098c"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cc3f1c053b73f20c7ad88b0d1d23be7e7b3901229ce89f5000a8399746a6e039"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f85739e80d13644b981a88f529d79c5bdf646b460ba190bffcaf6d57b2a9863"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:741ba2f511cc9626b7561a440f87d658aabb3d6b744a86a3c025f866b4d19e7f"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e77c90ab5997e85901da85131fd36acd0ed2221368199b65f0d11bca44549711"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:979c24cbefaf2420c4e377ecd1f165ea08cc3d1fbb44bdc51bccbbf7c66a2cb4"}, + {file = "regex-2023.10.3-cp38-cp38-win32.whl", hash = "sha256:58837f9d221744d4c92d2cf7201c6acd19623b50c643b56992cbd2b745485d3d"}, + {file = "regex-2023.10.3-cp38-cp38-win_amd64.whl", hash = "sha256:c55853684fe08d4897c37dfc5faeff70607a5f1806c8be148f1695be4a63414b"}, + {file = "regex-2023.10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2c54e23836650bdf2c18222c87f6f840d4943944146ca479858404fedeb9f9af"}, + {file = "regex-2023.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69c0771ca5653c7d4b65203cbfc5e66db9375f1078689459fe196fe08b7b4930"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ac965a998e1388e6ff2e9781f499ad1eaa41e962a40d11c7823c9952c77123e"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c0e8fae5b27caa34177bdfa5a960c46ff2f78ee2d45c6db15ae3f64ecadde14"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c56c3d47da04f921b73ff9415fbaa939f684d47293f071aa9cbb13c94afc17d"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ef1e014eed78ab650bef9a6a9cbe50b052c0aebe553fb2881e0453717573f52"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d29338556a59423d9ff7b6eb0cb89ead2b0875e08fe522f3e068b955c3e7b59b"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9c6d0ced3c06d0f183b73d3c5920727268d2201aa0fe6d55c60d68c792ff3588"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:994645a46c6a740ee8ce8df7911d4aee458d9b1bc5639bc968226763d07f00fa"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:66e2fe786ef28da2b28e222c89502b2af984858091675044d93cb50e6f46d7af"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:11175910f62b2b8c055f2b089e0fedd694fe2be3941b3e2633653bc51064c528"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:06e9abc0e4c9ab4779c74ad99c3fc10d3967d03114449acc2c2762ad4472b8ca"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fb02e4257376ae25c6dd95a5aec377f9b18c09be6ebdefa7ad209b9137b73d48"}, + {file = "regex-2023.10.3-cp39-cp39-win32.whl", hash = "sha256:3b2c3502603fab52d7619b882c25a6850b766ebd1b18de3df23b2f939360e1bd"}, + {file = "regex-2023.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:adbccd17dcaff65704c856bd29951c58a1bd4b2b0f8ad6b826dbd543fe740988"}, + {file = "regex-2023.10.3.tar.gz", hash = "sha256:3fef4f844d2290ee0ba57addcec17eec9e3df73f10a2748485dfd6a3a188cc0f"}, +] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "restructuredtext-lint" +version = "1.4.0" +description = "reStructuredText linter" +optional = false +python-versions = "*" +files = [ + {file = "restructuredtext_lint-1.4.0.tar.gz", hash = "sha256:1b235c0c922341ab6c530390892eb9e92f90b9b75046063e047cacfb0f050c45"}, +] + +[package.dependencies] +docutils = ">=0.11,<1.0" + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +description = "Pure python rfc3986 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, + {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, +] + +[[package]] +name = "rich" +version = "13.7.0" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "rich-13.7.0-py3-none-any.whl", hash = "sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235"}, + {file = "rich-13.7.0.tar.gz", hash = "sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + +[[package]] +name = "rpds-py" +version = "0.13.2" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "rpds_py-0.13.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:1ceebd0ae4f3e9b2b6b553b51971921853ae4eebf3f54086be0565d59291e53d"}, + {file = "rpds_py-0.13.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:46e1ed994a0920f350a4547a38471217eb86f57377e9314fbaaa329b71b7dfe3"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee353bb51f648924926ed05e0122b6a0b1ae709396a80eb583449d5d477fcdf7"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:530190eb0cd778363bbb7596612ded0bb9fef662daa98e9d92a0419ab27ae914"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29d311e44dd16d2434d5506d57ef4d7036544fc3c25c14b6992ef41f541b10fb"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e72f750048b32d39e87fc85c225c50b2a6715034848dbb196bf3348aa761fa1"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db09b98c7540df69d4b47218da3fbd7cb466db0fb932e971c321f1c76f155266"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2ac26f50736324beb0282c819668328d53fc38543fa61eeea2c32ea8ea6eab8d"}, + {file = "rpds_py-0.13.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:12ecf89bd54734c3c2c79898ae2021dca42750c7bcfb67f8fb3315453738ac8f"}, + {file = "rpds_py-0.13.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a44c8440183b43167fd1a0819e8356692bf5db1ad14ce140dbd40a1485f2dea"}, + {file = "rpds_py-0.13.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bcef4f2d3dc603150421de85c916da19471f24d838c3c62a4f04c1eb511642c1"}, + {file = "rpds_py-0.13.2-cp310-none-win32.whl", hash = "sha256:ee6faebb265e28920a6f23a7d4c362414b3f4bb30607141d718b991669e49ddc"}, + {file = "rpds_py-0.13.2-cp310-none-win_amd64.whl", hash = "sha256:ac96d67b37f28e4b6ecf507c3405f52a40658c0a806dffde624a8fcb0314d5fd"}, + {file = "rpds_py-0.13.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:b5f6328e8e2ae8238fc767703ab7b95785521c42bb2b8790984e3477d7fa71ad"}, + {file = "rpds_py-0.13.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:729408136ef8d45a28ee9a7411917c9e3459cf266c7e23c2f7d4bb8ef9e0da42"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65cfed9c807c27dee76407e8bb29e6f4e391e436774bcc769a037ff25ad8646e"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aefbdc934115d2f9278f153952003ac52cd2650e7313750390b334518c589568"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d48db29bd47814671afdd76c7652aefacc25cf96aad6daefa82d738ee87461e2"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c55d7f2d817183d43220738270efd3ce4e7a7b7cbdaefa6d551ed3d6ed89190"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6aadae3042f8e6db3376d9e91f194c606c9a45273c170621d46128f35aef7cd0"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5feae2f9aa7270e2c071f488fab256d768e88e01b958f123a690f1cc3061a09c"}, + {file = "rpds_py-0.13.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:51967a67ea0d7b9b5cd86036878e2d82c0b6183616961c26d825b8c994d4f2c8"}, + {file = "rpds_py-0.13.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d0c10d803549427f427085ed7aebc39832f6e818a011dcd8785e9c6a1ba9b3e"}, + {file = "rpds_py-0.13.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:603d5868f7419081d616dab7ac3cfa285296735e7350f7b1e4f548f6f953ee7d"}, + {file = "rpds_py-0.13.2-cp311-none-win32.whl", hash = "sha256:b8996ffb60c69f677245f5abdbcc623e9442bcc91ed81b6cd6187129ad1fa3e7"}, + {file = "rpds_py-0.13.2-cp311-none-win_amd64.whl", hash = "sha256:5379e49d7e80dca9811b36894493d1c1ecb4c57de05c36f5d0dd09982af20211"}, + {file = "rpds_py-0.13.2-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:8a776a29b77fe0cc28fedfd87277b0d0f7aa930174b7e504d764e0b43a05f381"}, + {file = "rpds_py-0.13.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2a1472956c5bcc49fb0252b965239bffe801acc9394f8b7c1014ae9258e4572b"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f252dfb4852a527987a9156cbcae3022a30f86c9d26f4f17b8c967d7580d65d2"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f0d320e70b6b2300ff6029e234e79fe44e9dbbfc7b98597ba28e054bd6606a57"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ade2ccb937060c299ab0dfb2dea3d2ddf7e098ed63ee3d651ebfc2c8d1e8632a"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9d121be0217787a7d59a5c6195b0842d3f701007333426e5154bf72346aa658"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fa6bd071ec6d90f6e7baa66ae25820d57a8ab1b0a3c6d3edf1834d4b26fafa2"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c918621ee0a3d1fe61c313f2489464f2ae3d13633e60f520a8002a5e910982ee"}, + {file = "rpds_py-0.13.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:25b28b3d33ec0a78e944aaaed7e5e2a94ac811bcd68b557ca48a0c30f87497d2"}, + {file = "rpds_py-0.13.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:31e220a040b89a01505128c2f8a59ee74732f666439a03e65ccbf3824cdddae7"}, + {file = "rpds_py-0.13.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:15253fff410873ebf3cfba1cc686a37711efcd9b8cb30ea21bb14a973e393f60"}, + {file = "rpds_py-0.13.2-cp312-none-win32.whl", hash = "sha256:b981a370f8f41c4024c170b42fbe9e691ae2dbc19d1d99151a69e2c84a0d194d"}, + {file = "rpds_py-0.13.2-cp312-none-win_amd64.whl", hash = "sha256:4c4e314d36d4f31236a545696a480aa04ea170a0b021e9a59ab1ed94d4c3ef27"}, + {file = "rpds_py-0.13.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:80e5acb81cb49fd9f2d5c08f8b74ffff14ee73b10ca88297ab4619e946bcb1e1"}, + {file = "rpds_py-0.13.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:efe093acc43e869348f6f2224df7f452eab63a2c60a6c6cd6b50fd35c4e075ba"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c2a61c0e4811012b0ba9f6cdcb4437865df5d29eab5d6018ba13cee1c3064a0"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:751758d9dd04d548ec679224cc00e3591f5ebf1ff159ed0d4aba6a0746352452"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ba8858933f0c1a979781272a5f65646fca8c18c93c99c6ddb5513ad96fa54b1"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bfdfbe6a36bc3059fff845d64c42f2644cf875c65f5005db54f90cdfdf1df815"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa0379c1935c44053c98826bc99ac95f3a5355675a297ac9ce0dfad0ce2d50ca"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d5593855b5b2b73dd8413c3fdfa5d95b99d657658f947ba2c4318591e745d083"}, + {file = "rpds_py-0.13.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2a7bef6977043673750a88da064fd513f89505111014b4e00fbdd13329cd4e9a"}, + {file = "rpds_py-0.13.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:3ab96754d23372009638a402a1ed12a27711598dd49d8316a22597141962fe66"}, + {file = "rpds_py-0.13.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:e06cfea0ece444571d24c18ed465bc93afb8c8d8d74422eb7026662f3d3f779b"}, + {file = "rpds_py-0.13.2-cp38-none-win32.whl", hash = "sha256:5493569f861fb7b05af6d048d00d773c6162415ae521b7010197c98810a14cab"}, + {file = "rpds_py-0.13.2-cp38-none-win_amd64.whl", hash = "sha256:b07501b720cf060c5856f7b5626e75b8e353b5f98b9b354a21eb4bfa47e421b1"}, + {file = "rpds_py-0.13.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:881df98f0a8404d32b6de0fd33e91c1b90ed1516a80d4d6dc69d414b8850474c"}, + {file = "rpds_py-0.13.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d79c159adea0f1f4617f54aa156568ac69968f9ef4d1e5fefffc0a180830308e"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38d4f822ee2f338febcc85aaa2547eb5ba31ba6ff68d10b8ec988929d23bb6b4"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5d75d6d220d55cdced2f32cc22f599475dbe881229aeddba6c79c2e9df35a2b3"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d97e9ae94fb96df1ee3cb09ca376c34e8a122f36927230f4c8a97f469994bff"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67a429520e97621a763cf9b3ba27574779c4e96e49a27ff8a1aa99ee70beb28a"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:188435794405c7f0573311747c85a96b63c954a5f2111b1df8018979eca0f2f0"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:38f9bf2ad754b4a45b8210a6c732fe876b8a14e14d5992a8c4b7c1ef78740f53"}, + {file = "rpds_py-0.13.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a6ba2cb7d676e9415b9e9ac7e2aae401dc1b1e666943d1f7bc66223d3d73467b"}, + {file = "rpds_py-0.13.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:eaffbd8814bb1b5dc3ea156a4c5928081ba50419f9175f4fc95269e040eff8f0"}, + {file = "rpds_py-0.13.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a4c1058cdae6237d97af272b326e5f78ee7ee3bbffa6b24b09db4d828810468"}, + {file = "rpds_py-0.13.2-cp39-none-win32.whl", hash = "sha256:b5267feb19070bef34b8dea27e2b504ebd9d31748e3ecacb3a4101da6fcb255c"}, + {file = "rpds_py-0.13.2-cp39-none-win_amd64.whl", hash = "sha256:ddf23960cb42b69bce13045d5bc66f18c7d53774c66c13f24cf1b9c144ba3141"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:97163a1ab265a1073a6372eca9f4eeb9f8c6327457a0b22ddfc4a17dcd613e74"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:25ea41635d22b2eb6326f58e608550e55d01df51b8a580ea7e75396bafbb28e9"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d59d4d451ba77f08cb4cd9268dec07be5bc65f73666302dbb5061989b17198"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7c564c58cf8f248fe859a4f0fe501b050663f3d7fbc342172f259124fb59933"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61dbc1e01dc0c5875da2f7ae36d6e918dc1b8d2ce04e871793976594aad8a57a"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fdb82eb60d31b0c033a8e8ee9f3fc7dfbaa042211131c29da29aea8531b4f18f"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d204957169f0b3511fb95395a9da7d4490fb361763a9f8b32b345a7fe119cb45"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c45008ca79bad237cbc03c72bc5205e8c6f66403773929b1b50f7d84ef9e4d07"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:79bf58c08f0756adba691d480b5a20e4ad23f33e1ae121584cf3a21717c36dfa"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e86593bf8637659e6a6ed58854b6c87ec4e9e45ee8a4adfd936831cef55c2d21"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:d329896c40d9e1e5c7715c98529e4a188a1f2df51212fd65102b32465612b5dc"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4a5375c5fff13f209527cd886dc75394f040c7d1ecad0a2cb0627f13ebe78a12"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:06d218e4464d31301e943b65b2c6919318ea6f69703a351961e1baaf60347276"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1f41d32a2ddc5a94df4b829b395916a4b7f103350fa76ba6de625fcb9e773ac"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6bc568b05e02cd612be53900c88aaa55012e744930ba2eeb56279db4c6676eb3"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d94d78418203904730585efa71002286ac4c8ac0689d0eb61e3c465f9e608ff"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bed0252c85e21cf73d2d033643c945b460d6a02fc4a7d644e3b2d6f5f2956c64"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:244e173bb6d8f3b2f0c4d7370a1aa341f35da3e57ffd1798e5b2917b91731fd3"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7f55cd9cf1564b7b03f238e4c017ca4794c05b01a783e9291065cb2858d86ce4"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:f03a1b3a4c03e3e0161642ac5367f08479ab29972ea0ffcd4fa18f729cd2be0a"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:f5f4424cb87a20b016bfdc157ff48757b89d2cc426256961643d443c6c277007"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c82bbf7e03748417c3a88c1b0b291288ce3e4887a795a3addaa7a1cfd9e7153e"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:c0095b8aa3e432e32d372e9a7737e65b58d5ed23b9620fea7cb81f17672f1fa1"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:4c2d26aa03d877c9730bf005621c92da263523a1e99247590abbbe252ccb7824"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96f2975fb14f39c5fe75203f33dd3010fe37d1c4e33177feef1107b5ced750e3"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4dcc5ee1d0275cb78d443fdebd0241e58772a354a6d518b1d7af1580bbd2c4e8"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61d42d2b08430854485135504f672c14d4fc644dd243a9c17e7c4e0faf5ed07e"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d3a61e928feddc458a55110f42f626a2a20bea942ccedb6fb4cee70b4830ed41"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7de12b69d95072394998c622cfd7e8cea8f560db5fca6a62a148f902a1029f8b"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:87a90f5545fd61f6964e65eebde4dc3fa8660bb7d87adb01d4cf17e0a2b484ad"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:9c95a1a290f9acf7a8f2ebbdd183e99215d491beea52d61aa2a7a7d2c618ddc6"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:35f53c76a712e323c779ca39b9a81b13f219a8e3bc15f106ed1e1462d56fcfe9"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:96fb0899bb2ab353f42e5374c8f0789f54e0a94ef2f02b9ac7149c56622eaf31"}, + {file = "rpds_py-0.13.2.tar.gz", hash = "sha256:f8eae66a1304de7368932b42d801c67969fd090ddb1a7a24f27b435ed4bed68f"}, +] + +[[package]] +name = "scipy" +version = "1.9.3" +description = "Fundamental algorithms for scientific computing in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "scipy-1.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1884b66a54887e21addf9c16fb588720a8309a57b2e258ae1c7986d4444d3bc0"}, + {file = "scipy-1.9.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:83b89e9586c62e787f5012e8475fbb12185bafb996a03257e9675cd73d3736dd"}, + {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a72d885fa44247f92743fc20732ae55564ff2a519e8302fb7e18717c5355a8b"}, + {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d01e1dd7b15bd2449c8bfc6b7cc67d630700ed655654f0dfcf121600bad205c9"}, + {file = "scipy-1.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:68239b6aa6f9c593da8be1509a05cb7f9efe98b80f43a5861cd24c7557e98523"}, + {file = "scipy-1.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b41bc822679ad1c9a5f023bc93f6d0543129ca0f37c1ce294dd9d386f0a21096"}, + {file = "scipy-1.9.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:90453d2b93ea82a9f434e4e1cba043e779ff67b92f7a0e85d05d286a3625df3c"}, + {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83c06e62a390a9167da60bedd4575a14c1f58ca9dfde59830fc42e5197283dab"}, + {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abaf921531b5aeaafced90157db505e10345e45038c39e5d9b6c7922d68085cb"}, + {file = "scipy-1.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:06d2e1b4c491dc7d8eacea139a1b0b295f74e1a1a0f704c375028f8320d16e31"}, + {file = "scipy-1.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a04cd7d0d3eff6ea4719371cbc44df31411862b9646db617c99718ff68d4840"}, + {file = "scipy-1.9.3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:545c83ffb518094d8c9d83cce216c0c32f8c04aaf28b92cc8283eda0685162d5"}, + {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d54222d7a3ba6022fdf5773931b5d7c56efe41ede7f7128c7b1637700409108"}, + {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cff3a5295234037e39500d35316a4c5794739433528310e117b8a9a0c76d20fc"}, + {file = "scipy-1.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:2318bef588acc7a574f5bfdff9c172d0b1bf2c8143d9582e05f878e580a3781e"}, + {file = "scipy-1.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d644a64e174c16cb4b2e41dfea6af722053e83d066da7343f333a54dae9bc31c"}, + {file = "scipy-1.9.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:da8245491d73ed0a994ed9c2e380fd058ce2fa8a18da204681f2fe1f57f98f95"}, + {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4db5b30849606a95dcf519763dd3ab6fe9bd91df49eba517359e450a7d80ce2e"}, + {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c68db6b290cbd4049012990d7fe71a2abd9ffbe82c0056ebe0f01df8be5436b0"}, + {file = "scipy-1.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:5b88e6d91ad9d59478fafe92a7c757d00c59e3bdc3331be8ada76a4f8d683f58"}, + {file = "scipy-1.9.3.tar.gz", hash = "sha256:fbc5c05c85c1a02be77b1ff591087c83bc44579c6d2bd9fb798bb64ea5e1a027"}, +] + +[package.dependencies] +numpy = ">=1.18.5,<1.26.0" + +[package.extras] +dev = ["flake8", "mypy", "pycodestyle", "typing_extensions"] +doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-panels (>=0.5.2)", "sphinx-tabs"] +test = ["asv", "gmpy2", "mpmath", "pytest", "pytest-cov", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + +[[package]] +name = "send2trash" +version = "1.8.2" +description = "Send file to trash natively under Mac OS X, Windows and Linux" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"}, + {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"}, +] + +[package.extras] +nativelib = ["pyobjc-framework-Cocoa", "pywin32"] +objc = ["pyobjc-framework-Cocoa"] +win32 = ["pywin32"] + +[[package]] +name = "setuptools" +version = "69.0.2" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-69.0.2-py3-none-any.whl", hash = "sha256:1e8fdff6797d3865f37397be788a4e3cba233608e9b509382a2777d25ebde7f2"}, + {file = "setuptools-69.0.2.tar.gz", hash = "sha256:735896e78a4742605974de002ac60562d286fa8051a7e2299445e8e8fbb01aa6"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "smmap" +version = "5.0.1" +description = "A pure Python implementation of a sliding window memory map manager" +optional = false +python-versions = ">=3.7" +files = [ + {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, + {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, +] + +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, + {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, +] + +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +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.5" +description = "A modern CSS selector implementation for Beautiful Soup." +optional = false +python-versions = ">=3.8" +files = [ + {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"}, + {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +description = "Extract data from python stack frames and tracebacks for informative displays" +optional = false +python-versions = "*" +files = [ + {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, + {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, +] + +[package.dependencies] +asttokens = ">=2.1.0" +executing = ">=1.2.0" +pure-eval = "*" + +[package.extras] +tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] + +[[package]] +name = "starlette" +version = "0.27.0" +description = "The little ASGI library that shines." +optional = false +python-versions = ">=3.7" +files = [ + {file = "starlette-0.27.0-py3-none-any.whl", hash = "sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91"}, + {file = "starlette-0.27.0.tar.gz", hash = "sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75"}, +] + +[package.dependencies] +anyio = ">=3.4.0,<5" +typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} + +[package.extras] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"] + +[[package]] +name = "stevedore" +version = "5.1.0" +description = "Manage dynamic plugins for Python applications" +optional = false +python-versions = ">=3.8" +files = [ + {file = "stevedore-5.1.0-py3-none-any.whl", hash = "sha256:8cc040628f3cea5d7128f2e76cf486b2251a4e543c7b938f58d9a377f6694a2d"}, + {file = "stevedore-5.1.0.tar.gz", hash = "sha256:a54534acf9b89bc7ed264807013b505bf07f74dbe4bcfa37d32bd063870b087c"}, +] + +[package.dependencies] +pbr = ">=2.0.0,<2.1.0 || >2.1.0" + +[[package]] +name = "terminado" +version = "0.18.0" +description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +optional = false +python-versions = ">=3.8" +files = [ + {file = "terminado-0.18.0-py3-none-any.whl", hash = "sha256:87b0d96642d0fe5f5abd7783857b9cab167f221a39ff98e3b9619a788a3c0f2e"}, + {file = "terminado-0.18.0.tar.gz", hash = "sha256:1ea08a89b835dd1b8c0c900d92848147cef2537243361b2e3f4dc15df9b6fded"}, +] + +[package.dependencies] +ptyprocess = {version = "*", markers = "os_name != \"nt\""} +pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} +tornado = ">=6.1.0" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] +typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] + +[[package]] +name = "timm" +version = "0.5.4" +description = "(Unofficial) PyTorch Image Models" +optional = false +python-versions = ">=3.6" +files = [ + {file = "timm-0.5.4-py3-none-any.whl", hash = "sha256:0592c8fd2d46d0769c0b7e954b3dacea93769eee40dabb4bd7f2acb85243b588"}, + {file = "timm-0.5.4.tar.gz", hash = "sha256:5d7b92e66a76c432009aba90d515ea7a882aae573415a7c5269e3617df901c1f"}, +] + +[package.dependencies] +torch = ">=1.4" +torchvision = "*" + +[[package]] +name = "tinycss2" +version = "1.2.1" +description = "A tiny CSS parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, + {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, +] + +[package.dependencies] +webencodings = ">=0.4" + +[package.extras] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["flake8", "isort", "pytest"] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +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 = "torch" +version = "1.10.2" +description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" +optional = false +python-versions = ">=3.6.2" +files = [ + {file = "torch-1.10.2-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:8f3fd2e3ffc3bb867133fdf7fbcc8a0bb2e62a5c0696396f51856f5abf9045a8"}, + {file = "torch-1.10.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:258a0729fb77a3457d5822d84b536057cd119b08049a8d3c41dc3dcdeb48d56e"}, + {file = "torch-1.10.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:935e5ac804c5093c79f23a7e6ca5b912c166071aa9d8b4a0a3d6a85126d6a47b"}, + {file = "torch-1.10.2-cp36-cp36m-win_amd64.whl", hash = "sha256:65fd02ed889c63fd82bf1a440c5a94c1310c29f3e6f9f62add416d34da355d97"}, + {file = "torch-1.10.2-cp36-none-macosx_10_9_x86_64.whl", hash = "sha256:6a81f886823bbd15edc2dc0908fa214070df61c9f7ab8831f0a03630275cca5a"}, + {file = "torch-1.10.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:3eee3cf53c1f8fb3f1fe107a22025a8501fc6440d14e09599ba7153002531f84"}, + {file = "torch-1.10.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:ef99b8cca5f9358119b07956915faf6e7906f433ab4a603c160ae9de88918371"}, + {file = "torch-1.10.2-cp37-cp37m-win_amd64.whl", hash = "sha256:d43bc3f3a2d89ae185ef96d903c935c335219231e57685658648396984e2a67a"}, + {file = "torch-1.10.2-cp37-none-macosx_10_9_x86_64.whl", hash = "sha256:6da1b877880435440a5aa9678ef0f01986d4886416844db1d97ebfb7fd1778d0"}, + {file = "torch-1.10.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:ab77a9f838874f295ed5410c0686fa22547456e0116efb281c66ef5f9d46fe28"}, + {file = "torch-1.10.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:9ef4c004f9e5168bd1c1930c6aff25fed5b097de81db6271ffbb2e4fb8b89319"}, + {file = "torch-1.10.2-cp38-cp38-win_amd64.whl", hash = "sha256:376fc18407add20daa6bbaaffc5a5e06d733abe53bcbd60ef2532bfed34bc091"}, + {file = "torch-1.10.2-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:f281438ee99bd72ad65c0bba1026a32e45c3b636bc067fc145ad291e9ea2faab"}, + {file = "torch-1.10.2-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:3592d3dd62b32760c82624e7586222747fe2281240e8653970b35f1d6d4a434c"}, + {file = "torch-1.10.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:fbaf18c1b3e0b31af194a9d853e3739464cf982d279df9d34dd18f1c2a471878"}, + {file = "torch-1.10.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:97b7b0c667e8b0dd1fc70137a36e0a4841ec10ef850bda60500ad066bef3e2de"}, + {file = "torch-1.10.2-cp39-cp39-win_amd64.whl", hash = "sha256:901b52787baeb2e9e1357ca7037da0028bc6ad743f530e0040ae96ef8e27156c"}, + {file = "torch-1.10.2-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:5b68e9108bd7ebd99eee941686046c517cfaac5331f757bcf440fe02f2e3ced1"}, + {file = "torch-1.10.2-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:b07ef01e36b716d0d65ca60c4db0ac9d094a0e797d9b55290da4dcda91463b6c"}, +] + +[package.dependencies] +typing-extensions = "*" + +[[package]] +name = "torchmetrics" +version = "1.2.0" +description = "PyTorch native Metrics" +optional = false +python-versions = ">=3.8" +files = [ + {file = "torchmetrics-1.2.0-py3-none-any.whl", hash = "sha256:da2cb18822b285786d082c40efb9e1d861aac425f58230234fe6ce233cf002f8"}, + {file = "torchmetrics-1.2.0.tar.gz", hash = "sha256:7eb28340bde45e13187a9ad54a4a7010a50417815d8181a5df6131f116ffe1b7"}, +] + +[package.dependencies] +lightning-utilities = ">=0.8.0" +numpy = ">1.20.0" +torch = ">=1.8.1" + +[package.extras] +all = ["SciencePlots (>=2.0.0)", "lpips (<=0.1.4)", "matplotlib (>=3.2.0)", "mypy (==1.5.1)", "nltk (>=3.6)", "piq (<=0.8.0)", "pycocotools (>2.0.0)", "pystoi (>=0.3.0)", "regex (>=2021.9.24)", "scipy (>1.0.0)", "torch-fidelity (<=0.4.0)", "torchaudio (>=0.10.0)", "torchvision (>=0.8)", "tqdm (>=4.41.0)", "transformers (>4.4.0)", "transformers (>=4.10.0)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate"] +audio = ["pystoi (>=0.3.0)", "torchaudio (>=0.10.0)"] +detection = ["pycocotools (>2.0.0)", "torchvision (>=0.8)"] +dev = ["SciencePlots (>=2.0.0)", "bert-score (==0.3.13)", "cloudpickle (>1.3)", "coverage (==7.3.1)", "dython (<=0.7.4)", "fairlearn", "fast-bss-eval (>=0.1.0)", "faster-coco-eval (>=1.3.3)", "fire (<=0.5.0)", "huggingface-hub (<0.18)", "jiwer (>=2.3.0)", "kornia (>=0.6.7)", "lpips (<=0.1.4)", "matplotlib (>=3.2.0)", "mir-eval (>=0.6)", "mypy (==1.5.1)", "netcal (>1.0.0)", "nltk (>=3.6)", "numpy (<1.25.0)", "pandas (>1.0.0)", "pandas (>=1.4.0)", "phmdoctest (==1.4.0)", "piq (<=0.8.0)", "psutil (<=5.9.5)", "pycocotools (>2.0.0)", "pystoi (>=0.3.0)", "pytest (==7.4.2)", "pytest-cov (==4.1.0)", "pytest-doctestplus (==1.0.0)", "pytest-rerunfailures (==12.0)", "pytest-timeout (==2.1.0)", "pytorch-msssim (==1.0.0)", "regex (>=2021.9.24)", "requests (<=2.31.0)", "rouge-score (>0.1.0)", "sacrebleu (>=2.0.0)", "scikit-image (>=0.19.0)", "scikit-learn (>=1.1.1)", "scipy (>1.0.0)", "sewar (>=0.4.4)", "statsmodels (>0.13.5)", "torch-complex (<=0.4.3)", "torch-fidelity (<=0.4.0)", "torchaudio (>=0.10.0)", "torchvision (>=0.8)", "tqdm (>=4.41.0)", "transformers (>4.4.0)", "transformers (>=4.10.0)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate"] +image = ["lpips (<=0.1.4)", "scipy (>1.0.0)", "torch-fidelity (<=0.4.0)", "torchvision (>=0.8)"] +multimodal = ["piq (<=0.8.0)", "transformers (>=4.10.0)"] +test = ["bert-score (==0.3.13)", "cloudpickle (>1.3)", "coverage (==7.3.1)", "dython (<=0.7.4)", "fairlearn", "fast-bss-eval (>=0.1.0)", "faster-coco-eval (>=1.3.3)", "fire (<=0.5.0)", "huggingface-hub (<0.18)", "jiwer (>=2.3.0)", "kornia (>=0.6.7)", "mir-eval (>=0.6)", "netcal (>1.0.0)", "numpy (<1.25.0)", "pandas (>1.0.0)", "pandas (>=1.4.0)", "phmdoctest (==1.4.0)", "psutil (<=5.9.5)", "pytest (==7.4.2)", "pytest-cov (==4.1.0)", "pytest-doctestplus (==1.0.0)", "pytest-rerunfailures (==12.0)", "pytest-timeout (==2.1.0)", "pytorch-msssim (==1.0.0)", "requests (<=2.31.0)", "rouge-score (>0.1.0)", "sacrebleu (>=2.0.0)", "scikit-image (>=0.19.0)", "scikit-learn (>=1.1.1)", "scipy (>1.0.0)", "sewar (>=0.4.4)", "statsmodels (>0.13.5)", "torch-complex (<=0.4.3)"] +text = ["nltk (>=3.6)", "regex (>=2021.9.24)", "tqdm (>=4.41.0)", "transformers (>4.4.0)"] +typing = ["mypy (==1.5.1)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate"] +visual = ["SciencePlots (>=2.0.0)", "matplotlib (>=3.2.0)"] + +[[package]] +name = "torchvision" +version = "0.11.3" +description = "image and video datasets and models for torch deep learning" +optional = false +python-versions = "*" +files = [ + {file = "torchvision-0.11.3-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:8bc8a7db80c97ca254be362ba883a202192e361ba2f6dff7ff5bb010d4bfc23a"}, + {file = "torchvision-0.11.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:55c226803d0ab17972e3f61054ba5d931ca005846c34ec0ae219c17289600813"}, + {file = "torchvision-0.11.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:abb8ace93194a1bc93a6fc5609d6e9518451c5c82b559abfdc77b758014276d1"}, + {file = "torchvision-0.11.3-cp36-cp36m-win_amd64.whl", hash = "sha256:870496b022c49f1c200ac26881481e8c3916360fe86185ae86b950a7ecbef7dc"}, + {file = "torchvision-0.11.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6137eb2694688adf863134dc04336159b3326c30a5de66bb773634ea10ef837e"}, + {file = "torchvision-0.11.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:253e389529df26d39a934512b57bd3fafd7a2a79c3bcad70d3dacab64de95d17"}, + {file = "torchvision-0.11.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:a8cafd5fd5e583730532b40587149d39f9e496023019f1cd86b083e3ca219e6d"}, + {file = "torchvision-0.11.3-cp37-cp37m-win_amd64.whl", hash = "sha256:7a2ea29054274aa391f4acb403c55a9bafc0df7c0395c811522a9bbb18044fa8"}, + {file = "torchvision-0.11.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:63647dfb9b0354bc8c5bb120f2dc15a123cee7f5fd6a8e84561da46cc2c89e3a"}, + {file = "torchvision-0.11.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a82d7d383fabb45fb54aa569ab216b87b98f9eb9de75b3cbfedab555a71209fa"}, + {file = "torchvision-0.11.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:0eda00afc5176b35e69eddd018ee633e3e3d74bbcf139eccdc150781c4ae83a7"}, + {file = "torchvision-0.11.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:b237b39e1c558ad5c9043b6e56bc568ee745f7f064f53270a3fceb53b9725c4b"}, + {file = "torchvision-0.11.3-cp38-cp38-win_amd64.whl", hash = "sha256:dc144114d5991a33bf8909277b02ea082d99cee4cdcf3f7a9c6b48f0c6c8ddde"}, + {file = "torchvision-0.11.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3380211bf061d114c380f52fb33f55d2fbe483e2fd297f6aa596803f7cbdb408"}, + {file = "torchvision-0.11.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a3997b63bd8fac985323b6068e689c9617b0b36e1126616f7b380e17c501aefa"}, + {file = "torchvision-0.11.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:eca0b0f7a0e462bdecf7926d89faae6dcd51da418ca0cf70e725981ed775a11b"}, + {file = "torchvision-0.11.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:25e72231be8ce03467a77806d9c3f5fd34b9cd23b9543d3e999bf57622377532"}, + {file = "torchvision-0.11.3-cp39-cp39-win_amd64.whl", hash = "sha256:5263770a9a91011206b3566b33bbba040b92932885c63cfe5ac9c720ed1fdaca"}, +] + +[package.dependencies] +numpy = "*" +pillow = ">=5.3.0,<8.3.0 || >8.3.0" +torch = "1.10.2" + +[package.extras] +scipy = ["scipy"] + +[[package]] +name = "tornado" +version = "6.4" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +optional = false +python-versions = ">= 3.8" +files = [ + {file = "tornado-6.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0"}, + {file = "tornado-6.4-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:27787de946a9cffd63ce5814c33f734c627a87072ec7eed71f7fc4417bb16263"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7894c581ecdcf91666a0912f18ce5e757213999e183ebfc2c3fdbf4d5bd764e"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e43bc2e5370a6a8e413e1e1cd0c91bedc5bd62a74a532371042a18ef19e10579"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0251554cdd50b4b44362f73ad5ba7126fc5b2c2895cc62b14a1c2d7ea32f212"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fd03192e287fbd0899dd8f81c6fb9cbbc69194d2074b38f384cb6fa72b80e9c2"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:88b84956273fbd73420e6d4b8d5ccbe913c65d31351b4c004ae362eba06e1f78"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:71ddfc23a0e03ef2df1c1397d859868d158c8276a0603b96cf86892bff58149f"}, + {file = "tornado-6.4-cp38-abi3-win32.whl", hash = "sha256:6f8a6c77900f5ae93d8b4ae1196472d0ccc2775cc1dfdc9e7727889145c45052"}, + {file = "tornado-6.4-cp38-abi3-win_amd64.whl", hash = "sha256:10aeaa8006333433da48dec9fe417877f8bcc21f48dda8d661ae79da357b2a63"}, + {file = "tornado-6.4.tar.gz", hash = "sha256:72291fa6e6bc84e626589f1c29d90a5a6d593ef5ae68052ee2ef000dfd273dee"}, +] + +[[package]] +name = "tqdm" +version = "4.66.1" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, + {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "traitlets" +version = "5.14.0" +description = "Traitlets Python configuration system" +optional = false +python-versions = ">=3.8" +files = [ + {file = "traitlets-5.14.0-py3-none-any.whl", hash = "sha256:f14949d23829023013c47df20b4a76ccd1a85effb786dc060f34de7948361b33"}, + {file = "traitlets-5.14.0.tar.gz", hash = "sha256:fcdaa8ac49c04dfa0ed3ee3384ef6dfdb5d6f3741502be247279407679296772"}, +] + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] + +[[package]] +name = "types-python-dateutil" +version = "2.8.19.14" +description = "Typing stubs for python-dateutil" +optional = false +python-versions = "*" +files = [ + {file = "types-python-dateutil-2.8.19.14.tar.gz", hash = "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b"}, + {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"}, +] + +[[package]] +name = "types-requests" +version = "2.31.0.10" +description = "Typing stubs for requests" +optional = false +python-versions = ">=3.7" +files = [ + {file = "types-requests-2.31.0.10.tar.gz", hash = "sha256:dc5852a76f1eaf60eafa81a2e50aefa3d1f015c34cf0cba130930866b1b22a92"}, + {file = "types_requests-2.31.0.10-py3-none-any.whl", hash = "sha256:b32b9a86beffa876c0c3ac99a4cd3b8b51e973fb8e3bd4e0a6bb32c7efad80fc"}, +] + +[package.dependencies] +urllib3 = ">=2" + +[[package]] +name = "typing" +version = "3.7.4.3" +description = "Type Hints for Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "typing-3.7.4.3-py2-none-any.whl", hash = "sha256:283d868f5071ab9ad873e5e52268d611e851c870a2ba354193026f2dfb29d8b5"}, + {file = "typing-3.7.4.3.tar.gz", hash = "sha256:1187fb9c82fd670d10aa07bbb6cfcfe4bdda42d6fab8d5134f04e8c4d0b71cc9"}, +] + +[[package]] +name = "typing-extensions" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, +] + +[[package]] +name = "ujson" +version = "5.8.0" +description = "Ultra fast JSON encoder and decoder for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "ujson-5.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1"}, + {file = "ujson-5.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75"}, + {file = "ujson-5.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76"}, + {file = "ujson-5.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a"}, + {file = "ujson-5.8.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7"}, + {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2"}, + {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba"}, + {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf"}, + {file = "ujson-5.8.0-cp310-cp310-win32.whl", hash = "sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a"}, + {file = "ujson-5.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0"}, + {file = "ujson-5.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f"}, + {file = "ujson-5.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8"}, + {file = "ujson-5.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405"}, + {file = "ujson-5.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4"}, + {file = "ujson-5.8.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e"}, + {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3"}, + {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5"}, + {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa"}, + {file = "ujson-5.8.0-cp311-cp311-win32.whl", hash = "sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879"}, + {file = "ujson-5.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721"}, + {file = "ujson-5.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c"}, + {file = "ujson-5.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6"}, + {file = "ujson-5.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae"}, + {file = "ujson-5.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b"}, + {file = "ujson-5.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296"}, + {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7"}, + {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08"}, + {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30"}, + {file = "ujson-5.8.0-cp312-cp312-win32.whl", hash = "sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916"}, + {file = "ujson-5.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6"}, + {file = "ujson-5.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb"}, + {file = "ujson-5.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b"}, + {file = "ujson-5.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582"}, + {file = "ujson-5.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c"}, + {file = "ujson-5.8.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7"}, + {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67"}, + {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9"}, + {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07"}, + {file = "ujson-5.8.0-cp38-cp38-win32.whl", hash = "sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564"}, + {file = "ujson-5.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5"}, + {file = "ujson-5.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c"}, + {file = "ujson-5.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a"}, + {file = "ujson-5.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207"}, + {file = "ujson-5.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042"}, + {file = "ujson-5.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3"}, + {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95"}, + {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c"}, + {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc"}, + {file = "ujson-5.8.0-cp39-cp39-win32.whl", hash = "sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903"}, + {file = "ujson-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3"}, + {file = "ujson-5.8.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec"}, + {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282"}, + {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83"}, + {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c"}, + {file = "ujson-5.8.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109"}, + {file = "ujson-5.8.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377"}, + {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f"}, + {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130"}, + {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f"}, + {file = "ujson-5.8.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94"}, + {file = "ujson-5.8.0.tar.gz", hash = "sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425"}, +] + +[[package]] +name = "uri-template" +version = "1.3.0" +description = "RFC 6570 URI Template Processor" +optional = false +python-versions = ">=3.7" +files = [ + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, +] + +[package.extras] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] + +[[package]] +name = "urllib3" +version = "2.1.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, + {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "urwid" +version = "2.2.3" +description = "A full-featured console (xterm et al.) user interface library" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "urwid-2.2.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7bbc35b54546975df692ab198a272eb459f883dc9b20a19d56eb19ff50838e9a"}, + {file = "urwid-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:64a3d49f5a8d083198a6bd80ea4c93f45ab1e0cc0735433217925b5df7c32c86"}, + {file = "urwid-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c1c9c088dc9aff393489c61edd35e3a16930f9b62da3c78e419fc0880aa1291f"}, + {file = "urwid-2.2.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:746dfc58c745360705d004f75c8799fa6782ebb635666ad36f6e0e3e5fada8fe"}, + {file = "urwid-2.2.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:604facd127f7d9b535885291154144611fa0aad52f144e88e92e676e4fa09792"}, + {file = "urwid-2.2.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e241ea0cc3b9f62e74749a143118877cc04a49c00688acd0ecd97cfc907027b"}, + {file = "urwid-2.2.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0607961f0ce4a60fd4701138bcd198579caafdc020c11fff2db8c7d295786817"}, + {file = "urwid-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b17dd1dd21926ca1dfbb7b0cfd43f18afe087fba2f488d29795d05a1fe763449"}, + {file = "urwid-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:deb48828224cdc8a70269973ebe2830de5ab05d9837651af529418ec0de06355"}, + {file = "urwid-2.2.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7264f82f765339218297b09441d35f5bf90e3bb800a413b5116949729f91ba04"}, + {file = "urwid-2.2.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1bbb1a2b8beecdaea4b2f6657efb6ca62c53e4156cfae156cb96bab90c738147"}, + {file = "urwid-2.2.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc1b894918813f170dff2a3f0127e972cfb7c6def3f1fb819a09d903d1383d15"}, + {file = "urwid-2.2.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b3aab4fedbb2fa1b7c0d8fb1c537285c16a46e6c72b54ca4423b779306662f7f"}, + {file = "urwid-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8f73bb89aa79fd4604d24d59c3093adc6d472a22f604fad4df140b124ee9edcd"}, + {file = "urwid-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f7a9fb6d13595fa2f51a2c9927559c9d3706e1a788cbaf2d661631c65b5162bd"}, + {file = "urwid-2.2.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efcff1822c71d4f9980c75bbfd91f9b45739c629b0b881646f9fa9dcf8bac27c"}, + {file = "urwid-2.2.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0719114584eeda539e4dd649e8e434a64d0a38ba9769fe4f80d1286e19850713"}, + {file = "urwid-2.2.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5706994d3197124ffc57762e8d088b492b2e89f4d1b21cf51a9199d67355c4f3"}, + {file = "urwid-2.2.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b0f9f62a82df0cfb15e8a23ae1f6e6fa856c3415677d98724bc2b8a5702477d1"}, + {file = "urwid-2.2.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36a856fd0cb38c05fda2ee785f395684ea4f682b1f830ccdab7d0784543f9d13"}, + {file = "urwid-2.2.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f55eb74095dcbeb0f53dc32b7d809d5c34792c7b9b372c3d24fe1ffaaef1863b"}, + {file = "urwid-2.2.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59dac9f19020f53a9400f8a0ba2b18b4389fd1deeab88c8319736fd108244d72"}, + {file = "urwid-2.2.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5a4ee4072e64b414075f32373fc5f63967a4686708ada3e8f8df52d4a2ada8a7"}, + {file = "urwid-2.2.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bd036997b600c84b33c7bc49b98f029990f49a70d4b21d3399ae7aeba73f0c4e"}, + {file = "urwid-2.2.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c094b9d00aeb95496372bc27d5c3a2127546f2efc75cafcad019a99c4ab98d9b"}, + {file = "urwid-2.2.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42224c6aca61459b992c30b6740cbe9f4f0f420e8770a9345b7f3f09f19b2409"}, + {file = "urwid-2.2.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:efc234c8d74bf839896eeae9333be91e0fa832dee552f2c764e300080d06d2e2"}, + {file = "urwid-2.2.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf7819bd19ceaa9c1baa5bd50d304b5d4d759591e6a2a7edb1727d1a9f16782d"}, + {file = "urwid-2.2.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cd8c5f617807f2a8bb5750f851edd3305fb0417230c04b84f4782c51c58c19ea"}, + {file = "urwid-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b50c7a06a620320b5c124fb3af7d339f7720fec29bf49d5486ec4115ec3df8ff"}, + {file = "urwid-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:58950a17f3917b4a4a44e167d2ed1d59931f71a1be927c4d0204a035c51ebfd2"}, + {file = "urwid-2.2.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4352f2a971c7b9dc236d5fce7c4492858441344ead85ce4b1cb1dd513098bbe"}, + {file = "urwid-2.2.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80260cf2bd4be3eca611e978ee2926fc0338e9550702c77932efc80ca6b0b09d"}, + {file = "urwid-2.2.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:238ec0be47cbca99320f12864143638e4ebd1722a509f8037ff92ef66b0e9394"}, + {file = "urwid-2.2.3.tar.gz", hash = "sha256:e4516d55dcee6bd012b3e72a10c75f2866c63a740f0ec4e1ada05c1e1cc02e34"}, +] + +[package.extras] +glib = ["PyGObject"] +lcd = ["pyserial"] +serial = ["pyserial"] +tornado = ["tornado"] +trio = ["trio"] +twisted = ["twisted"] +zmq = ["zmq"] + +[[package]] +name = "urwid-readline" +version = "0.13" +description = "A textbox edit widget for urwid that supports readline shortcuts" +optional = false +python-versions = "*" +files = [ + {file = "urwid_readline-0.13.tar.gz", hash = "sha256:018020cbc864bb5ed87be17dc26b069eae2755cb29f3a9c569aac3bded1efaf4"}, +] + +[package.dependencies] +urwid = "*" + +[package.extras] +dev = ["black", "pytest"] + +[[package]] +name = "uvicorn" +version = "0.24.0.post1" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.8" +files = [ + {file = "uvicorn-0.24.0.post1-py3-none-any.whl", hash = "sha256:7c84fea70c619d4a710153482c0d230929af7bcf76c7bfa6de151f0a3a80121e"}, + {file = "uvicorn-0.24.0.post1.tar.gz", hash = "sha256:09c8e5a79dc466bdf28dead50093957db184de356fcdc48697bad3bde4c2588e"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} +h11 = ">=0.8" +httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""} +python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} +typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} +uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""} +watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} + +[package.extras] +standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] + +[[package]] +name = "uvloop" +version = "0.19.0" +description = "Fast implementation of asyncio event loop on top of libuv" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"}, + {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"}, + {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b1fd71c3843327f3bbc3237bedcdb6504fd50368ab3e04d0410e52ec293f5b8"}, + {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a05128d315e2912791de6088c34136bfcdd0c7cbc1cf85fd6fd1bb321b7c849"}, + {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cd81bdc2b8219cb4b2556eea39d2e36bfa375a2dd021404f90a62e44efaaf957"}, + {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f17766fb6da94135526273080f3455a112f82570b2ee5daa64d682387fe0dcd"}, + {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4ce6b0af8f2729a02a5d1575feacb2a94fc7b2e983868b009d51c9a9d2149bef"}, + {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:31e672bb38b45abc4f26e273be83b72a0d28d074d5b370fc4dcf4c4eb15417d2"}, + {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:570fc0ed613883d8d30ee40397b79207eedd2624891692471808a95069a007c1"}, + {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5138821e40b0c3e6c9478643b4660bd44372ae1e16a322b8fc07478f92684e24"}, + {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:91ab01c6cd00e39cde50173ba4ec68a1e578fee9279ba64f5221810a9e786533"}, + {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:47bf3e9312f63684efe283f7342afb414eea4d3011542155c7e625cd799c3b12"}, + {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:da8435a3bd498419ee8c13c34b89b5005130a476bda1d6ca8cfdde3de35cd650"}, + {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:02506dc23a5d90e04d4f65c7791e65cf44bd91b37f24cfc3ef6cf2aff05dc7ec"}, + {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693049be9d36fef81741fddb3f441673ba12a34a704e7b4361efb75cf30befc"}, + {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7010271303961c6f0fe37731004335401eb9075a12680738731e9c92ddd96ad6"}, + {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5daa304d2161d2918fa9a17d5635099a2f78ae5b5960e742b2fcfbb7aefaa593"}, + {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7207272c9520203fea9b93843bb775d03e1cf88a80a936ce760f60bb5add92f3"}, + {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:78ab247f0b5671cc887c31d33f9b3abfb88d2614b84e4303f1a63b46c046c8bd"}, + {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:472d61143059c84947aa8bb74eabbace30d577a03a1805b77933d6bd13ddebbd"}, + {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45bf4c24c19fb8a50902ae37c5de50da81de4922af65baf760f7c0c42e1088be"}, + {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271718e26b3e17906b28b67314c45d19106112067205119dddbd834c2b7ce797"}, + {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:34175c9fd2a4bc3adc1380e1261f60306344e3407c20a4d684fd5f3be010fa3d"}, + {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e27f100e1ff17f6feeb1f33968bc185bf8ce41ca557deee9d9bbbffeb72030b7"}, + {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13dfdf492af0aa0a0edf66807d2b465607d11c4fa48f4a1fd41cbea5b18e8e8b"}, + {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e3d4e85ac060e2342ff85e90d0c04157acb210b9ce508e784a944f852a40e67"}, + {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca4956c9ab567d87d59d49fa3704cf29e37109ad348f2d5223c9bf761a332e7"}, + {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f467a5fd23b4fc43ed86342641f3936a68ded707f4627622fa3f82a120e18256"}, + {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:492e2c32c2af3f971473bc22f086513cedfc66a130756145a931a90c3958cb17"}, + {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2df95fca285a9f5bfe730e51945ffe2fa71ccbfdde3b0da5772b4ee4f2e770d5"}, + {file = "uvloop-0.19.0.tar.gz", hash = "sha256:0246f4fd1bf2bf702e06b0d45ee91677ee5c31242f39aab4ea6fe0c51aedd0fd"}, +] + +[package.extras] +docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] +test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] + +[[package]] +name = "virtualenv" +version = "20.24.7" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.7" +files = [ + {file = "virtualenv-20.24.7-py3-none-any.whl", hash = "sha256:a18b3fd0314ca59a2e9f4b556819ed07183b3e9a3702ecfe213f593d44f7b3fd"}, + {file = "virtualenv-20.24.7.tar.gz", hash = "sha256:69050ffb42419c91f6c1284a7b24e0475d793447e35929b488bf6a0aade39353"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] + +[[package]] +name = "watchfiles" +version = "0.21.0" +description = "Simple, modern and high performance file watching and code reload in python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "watchfiles-0.21.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:27b4035013f1ea49c6c0b42d983133b136637a527e48c132d368eb19bf1ac6aa"}, + {file = "watchfiles-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c81818595eff6e92535ff32825f31c116f867f64ff8cdf6562cd1d6b2e1e8f3e"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c107ea3cf2bd07199d66f156e3ea756d1b84dfd43b542b2d870b77868c98c03"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d9ac347653ebd95839a7c607608703b20bc07e577e870d824fa4801bc1cb124"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5eb86c6acb498208e7663ca22dbe68ca2cf42ab5bf1c776670a50919a56e64ab"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f564bf68404144ea6b87a78a3f910cc8de216c6b12a4cf0b27718bf4ec38d303"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d0f32ebfaa9c6011f8454994f86108c2eb9c79b8b7de00b36d558cadcedaa3d"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6d45d9b699ecbac6c7bd8e0a2609767491540403610962968d258fd6405c17c"}, + {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:aff06b2cac3ef4616e26ba17a9c250c1fe9dd8a5d907d0193f84c499b1b6e6a9"}, + {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d9792dff410f266051025ecfaa927078b94cc7478954b06796a9756ccc7e14a9"}, + {file = "watchfiles-0.21.0-cp310-none-win32.whl", hash = "sha256:214cee7f9e09150d4fb42e24919a1e74d8c9b8a9306ed1474ecaddcd5479c293"}, + {file = "watchfiles-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:1ad7247d79f9f55bb25ab1778fd47f32d70cf36053941f07de0b7c4e96b5d235"}, + {file = "watchfiles-0.21.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:668c265d90de8ae914f860d3eeb164534ba2e836811f91fecc7050416ee70aa7"}, + {file = "watchfiles-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a23092a992e61c3a6a70f350a56db7197242f3490da9c87b500f389b2d01eef"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e7941bbcfdded9c26b0bf720cb7e6fd803d95a55d2c14b4bd1f6a2772230c586"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11cd0c3100e2233e9c53106265da31d574355c288e15259c0d40a4405cbae317"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78f30cbe8b2ce770160d3c08cff01b2ae9306fe66ce899b73f0409dc1846c1b"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6674b00b9756b0af620aa2a3346b01f8e2a3dc729d25617e1b89cf6af4a54eb1"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd7ac678b92b29ba630d8c842d8ad6c555abda1b9ef044d6cc092dacbfc9719d"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c873345680c1b87f1e09e0eaf8cf6c891b9851d8b4d3645e7efe2ec20a20cc7"}, + {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49f56e6ecc2503e7dbe233fa328b2be1a7797d31548e7a193237dcdf1ad0eee0"}, + {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:02d91cbac553a3ad141db016e3350b03184deaafeba09b9d6439826ee594b365"}, + {file = "watchfiles-0.21.0-cp311-none-win32.whl", hash = "sha256:ebe684d7d26239e23d102a2bad2a358dedf18e462e8808778703427d1f584400"}, + {file = "watchfiles-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:4566006aa44cb0d21b8ab53baf4b9c667a0ed23efe4aaad8c227bfba0bf15cbe"}, + {file = "watchfiles-0.21.0-cp311-none-win_arm64.whl", hash = "sha256:c550a56bf209a3d987d5a975cdf2063b3389a5d16caf29db4bdddeae49f22078"}, + {file = "watchfiles-0.21.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:51ddac60b96a42c15d24fbdc7a4bfcd02b5a29c047b7f8bf63d3f6f5a860949a"}, + {file = "watchfiles-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:511f0b034120cd1989932bf1e9081aa9fb00f1f949fbd2d9cab6264916ae89b1"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cfb92d49dbb95ec7a07511bc9efb0faff8fe24ef3805662b8d6808ba8409a71a"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f92944efc564867bbf841c823c8b71bb0be75e06b8ce45c084b46411475a915"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:642d66b75eda909fd1112d35c53816d59789a4b38c141a96d62f50a3ef9b3360"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d23bcd6c8eaa6324fe109d8cac01b41fe9a54b8c498af9ce464c1aeeb99903d6"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18d5b4da8cf3e41895b34e8c37d13c9ed294954907929aacd95153508d5d89d7"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b8d1eae0f65441963d805f766c7e9cd092f91e0c600c820c764a4ff71a0764c"}, + {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1fd9a5205139f3c6bb60d11f6072e0552f0a20b712c85f43d42342d162be1235"}, + {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a1e3014a625bcf107fbf38eece0e47fa0190e52e45dc6eee5a8265ddc6dc5ea7"}, + {file = "watchfiles-0.21.0-cp312-none-win32.whl", hash = "sha256:9d09869f2c5a6f2d9df50ce3064b3391d3ecb6dced708ad64467b9e4f2c9bef3"}, + {file = "watchfiles-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:18722b50783b5e30a18a8a5db3006bab146d2b705c92eb9a94f78c72beb94094"}, + {file = "watchfiles-0.21.0-cp312-none-win_arm64.whl", hash = "sha256:a3b9bec9579a15fb3ca2d9878deae789df72f2b0fdaf90ad49ee389cad5edab6"}, + {file = "watchfiles-0.21.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:4ea10a29aa5de67de02256a28d1bf53d21322295cb00bd2d57fcd19b850ebd99"}, + {file = "watchfiles-0.21.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:40bca549fdc929b470dd1dbfcb47b3295cb46a6d2c90e50588b0a1b3bd98f429"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9b37a7ba223b2f26122c148bb8d09a9ff312afca998c48c725ff5a0a632145f7"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec8c8900dc5c83650a63dd48c4d1d245343f904c4b64b48798c67a3767d7e165"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ad3fe0a3567c2f0f629d800409cd528cb6251da12e81a1f765e5c5345fd0137"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d353c4cfda586db2a176ce42c88f2fc31ec25e50212650c89fdd0f560ee507b"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:83a696da8922314ff2aec02987eefb03784f473281d740bf9170181829133765"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a03651352fc20975ee2a707cd2d74a386cd303cc688f407296064ad1e6d1562"}, + {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3ad692bc7792be8c32918c699638b660c0de078a6cbe464c46e1340dadb94c19"}, + {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06247538e8253975bdb328e7683f8515ff5ff041f43be6c40bff62d989b7d0b0"}, + {file = "watchfiles-0.21.0-cp38-none-win32.whl", hash = "sha256:9a0aa47f94ea9a0b39dd30850b0adf2e1cd32a8b4f9c7aa443d852aacf9ca214"}, + {file = "watchfiles-0.21.0-cp38-none-win_amd64.whl", hash = "sha256:8d5f400326840934e3507701f9f7269247f7c026d1b6cfd49477d2be0933cfca"}, + {file = "watchfiles-0.21.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:7f762a1a85a12cc3484f77eee7be87b10f8c50b0b787bb02f4e357403cad0c0e"}, + {file = "watchfiles-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6e9be3ef84e2bb9710f3f777accce25556f4a71e15d2b73223788d528fcc2052"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4c48a10d17571d1275701e14a601e36959ffada3add8cdbc9e5061a6e3579a5d"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c889025f59884423428c261f212e04d438de865beda0b1e1babab85ef4c0f01"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:66fac0c238ab9a2e72d026b5fb91cb902c146202bbd29a9a1a44e8db7b710b6f"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a21f71885aa2744719459951819e7bf5a906a6448a6b2bbce8e9cc9f2c8128"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c9198c989f47898b2c22201756f73249de3748e0fc9de44adaf54a8b259cc0c"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f57c4461cd24fda22493109c45b3980863c58a25b8bec885ca8bea6b8d4b28"}, + {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:853853cbf7bf9408b404754b92512ebe3e3a83587503d766d23e6bf83d092ee6"}, + {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d5b1dc0e708fad9f92c296ab2f948af403bf201db8fb2eb4c8179db143732e49"}, + {file = "watchfiles-0.21.0-cp39-none-win32.whl", hash = "sha256:59137c0c6826bd56c710d1d2bda81553b5e6b7c84d5a676747d80caf0409ad94"}, + {file = "watchfiles-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:6cb8fdc044909e2078c248986f2fc76f911f72b51ea4a4fbbf472e01d14faa58"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ab03a90b305d2588e8352168e8c5a1520b721d2d367f31e9332c4235b30b8994"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:927c589500f9f41e370b0125c12ac9e7d3a2fd166b89e9ee2828b3dda20bfe6f"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd467213195e76f838caf2c28cd65e58302d0254e636e7c0fca81efa4a2e62c"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02b73130687bc3f6bb79d8a170959042eb56eb3a42df3671c79b428cd73f17cc"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:08dca260e85ffae975448e344834d765983237ad6dc308231aa16e7933db763e"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:3ccceb50c611c433145502735e0370877cced72a6c70fd2410238bcbc7fe51d8"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57d430f5fb63fea141ab71ca9c064e80de3a20b427ca2febcbfcef70ff0ce895"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dd5fad9b9c0dd89904bbdea978ce89a2b692a7ee8a0ce19b940e538c88a809c"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:be6dd5d52b73018b21adc1c5d28ac0c68184a64769052dfeb0c5d9998e7f56a2"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b3cab0e06143768499384a8a5efb9c4dc53e19382952859e4802f294214f36ec"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6ed10c2497e5fedadf61e465b3ca12a19f96004c15dcffe4bd442ebadc2d85"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43babacef21c519bc6631c5fce2a61eccdfc011b4bcb9047255e9620732c8097"}, + {file = "watchfiles-0.21.0.tar.gz", hash = "sha256:c76c635fabf542bb78524905718c39f736a98e5ab25b23ec6d4abede1a85a6a3"}, +] + +[package.dependencies] +anyio = ">=3.0.0" + +[[package]] +name = "wcwidth" +version = "0.2.12" +description = "Measures the displayed width of unicode strings in a terminal" +optional = false +python-versions = "*" +files = [ + {file = "wcwidth-0.2.12-py2.py3-none-any.whl", hash = "sha256:f26ec43d96c8cbfed76a5075dac87680124fa84e0855195a6184da9c187f133c"}, + {file = "wcwidth-0.2.12.tar.gz", hash = "sha256:f01c104efdf57971bcb756f054dd58ddec5204dd15fa31d6503ea57947d97c02"}, +] + +[[package]] +name = "webcolors" +version = "1.13" +description = "A library for working with the color formats defined by HTML and CSS." +optional = false +python-versions = ">=3.7" +files = [ + {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, + {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, +] + +[package.extras] +docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +optional = false +python-versions = "*" +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] + +[[package]] +name = "websocket-client" +version = "1.6.4" +description = "WebSocket client for Python with low level API options" +optional = false +python-versions = ">=3.8" +files = [ + {file = "websocket-client-1.6.4.tar.gz", hash = "sha256:b3324019b3c28572086c4a319f91d1dcd44e6e11cd340232978c684a7650d0df"}, + {file = "websocket_client-1.6.4-py3-none-any.whl", hash = "sha256:084072e0a7f5f347ef2ac3d8698a5e0b4ffbfcab607628cadabc650fc9a83a24"}, +] + +[package.extras] +docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + +[[package]] +name = "websockets" +version = "12.0" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "websockets-12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374"}, + {file = "websockets-12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be"}, + {file = "websockets-12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603"}, + {file = "websockets-12.0-cp310-cp310-win32.whl", hash = "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f"}, + {file = "websockets-12.0-cp310-cp310-win_amd64.whl", hash = "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf"}, + {file = "websockets-12.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4"}, + {file = "websockets-12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f"}, + {file = "websockets-12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53"}, + {file = "websockets-12.0-cp311-cp311-win32.whl", hash = "sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402"}, + {file = "websockets-12.0-cp311-cp311-win_amd64.whl", hash = "sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b"}, + {file = "websockets-12.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df"}, + {file = "websockets-12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc"}, + {file = "websockets-12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113"}, + {file = "websockets-12.0-cp312-cp312-win32.whl", hash = "sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d"}, + {file = "websockets-12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f"}, + {file = "websockets-12.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438"}, + {file = "websockets-12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2"}, + {file = "websockets-12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7"}, + {file = "websockets-12.0-cp38-cp38-win32.whl", hash = "sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62"}, + {file = "websockets-12.0-cp38-cp38-win_amd64.whl", hash = "sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892"}, + {file = "websockets-12.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d"}, + {file = "websockets-12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28"}, + {file = "websockets-12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9"}, + {file = "websockets-12.0-cp39-cp39-win32.whl", hash = "sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6"}, + {file = "websockets-12.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8"}, + {file = "websockets-12.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b"}, + {file = "websockets-12.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30"}, + {file = "websockets-12.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2"}, + {file = "websockets-12.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468"}, + {file = "websockets-12.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611"}, + {file = "websockets-12.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370"}, + {file = "websockets-12.0-py3-none-any.whl", hash = "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e"}, + {file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"}, +] + +[[package]] +name = "wemake-python-styleguide" +version = "0.18.0" +description = "The strictest and most opinionated python linter ever" +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "wemake_python_styleguide-0.18.0-py3-none-any.whl", hash = "sha256:2219be145185edcd5e01f4ce49e3dea11acc34f2c377face0c175bb6ea6ac988"}, + {file = "wemake_python_styleguide-0.18.0.tar.gz", hash = "sha256:69139858cf5b2a9ba09dac136e2873a4685515768f68fdef2684ebefd7b1dafd"}, +] + +[package.dependencies] +astor = ">=0.8,<0.9" +attrs = "*" +darglint = ">=1.2,<2.0" +flake8 = ">5" +flake8-bandit = ">=4.1,<5.0" +flake8-broken-line = ">=1.0,<2.0" +flake8-bugbear = ">=23.5,<24.0" +flake8-commas = ">=2.0,<3.0" +flake8-comprehensions = ">=3.1,<4.0" +flake8-debugger = ">=4.0,<5.0" +flake8-docstrings = ">=1.3,<2.0" +flake8-eradicate = ">=1.5,<2.0" +flake8-isort = ">=6.0,<7.0" +flake8-quotes = ">=3.0,<4.0" +flake8-rst-docstrings = ">=0.3,<0.4" +flake8-string-format = ">=0.3,<0.4" +pep8-naming = ">=0.13,<0.14" +pygments = ">=2.4,<3.0" +setuptools = "*" +typing_extensions = ">=4.0,<5.0" + +[[package]] +name = "widgetsnbextension" +version = "4.0.9" +description = "Jupyter interactive widgets for Jupyter Notebook" +optional = false +python-versions = ">=3.7" +files = [ + {file = "widgetsnbextension-4.0.9-py3-none-any.whl", hash = "sha256:91452ca8445beb805792f206e560c1769284267a30ceb1cec9f5bcc887d15175"}, + {file = "widgetsnbextension-4.0.9.tar.gz", hash = "sha256:3c1f5e46dc1166dfd40a42d685e6a51396fd34ff878742a3e47c6f0cc4a2a385"}, +] + +[[package]] +name = "win32-setctime" +version = "1.1.0" +description = "A small Python utility to set file creation time on Windows" +optional = false +python-versions = ">=3.5" +files = [ + {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, + {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, +] + +[package.extras] +dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] + +[[package]] +name = "yacs" +version = "0.1.8" +description = "Yet Another Configuration System" +optional = false +python-versions = "*" +files = [ + {file = "yacs-0.1.8-py2-none-any.whl", hash = "sha256:d43d1854c1ffc4634c5b349d1c1120f86f05c3a294c9d141134f282961ab5d94"}, + {file = "yacs-0.1.8-py3-none-any.whl", hash = "sha256:99f893e30497a4b66842821bac316386f7bd5c4f47ad35c9073ef089aa33af32"}, + {file = "yacs-0.1.8.tar.gz", hash = "sha256:efc4c732942b3103bea904ee89af98bcd27d01f0ac12d8d4d369f1e7a2914384"}, +] + +[package.dependencies] +PyYAML = "*" + +[[package]] +name = "yarl" +version = "1.9.3" +description = "Yet another URL library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "yarl-1.9.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32435d134414e01d937cd9d6cc56e8413a8d4741dea36af5840c7750f04d16ab"}, + {file = "yarl-1.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9a5211de242754b5e612557bca701f39f8b1a9408dff73c6db623f22d20f470e"}, + {file = "yarl-1.9.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:525cd69eff44833b01f8ef39aa33a9cc53a99ff7f9d76a6ef6a9fb758f54d0ff"}, + {file = "yarl-1.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc94441bcf9cb8c59f51f23193316afefbf3ff858460cb47b5758bf66a14d130"}, + {file = "yarl-1.9.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e36021db54b8a0475805acc1d6c4bca5d9f52c3825ad29ae2d398a9d530ddb88"}, + {file = "yarl-1.9.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0f17d1df951336a02afc8270c03c0c6e60d1f9996fcbd43a4ce6be81de0bd9d"}, + {file = "yarl-1.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5f3faeb8100a43adf3e7925d556801d14b5816a0ac9e75e22948e787feec642"}, + {file = "yarl-1.9.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aed37db837ecb5962469fad448aaae0f0ee94ffce2062cf2eb9aed13328b5196"}, + {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:721ee3fc292f0d069a04016ef2c3a25595d48c5b8ddc6029be46f6158d129c92"}, + {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b8bc5b87a65a4e64bc83385c05145ea901b613d0d3a434d434b55511b6ab0067"}, + {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:dd952b9c64f3b21aedd09b8fe958e4931864dba69926d8a90c90d36ac4e28c9a"}, + {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:c405d482c320a88ab53dcbd98d6d6f32ada074f2d965d6e9bf2d823158fa97de"}, + {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9df9a0d4c5624790a0dea2e02e3b1b3c69aed14bcb8650e19606d9df3719e87d"}, + {file = "yarl-1.9.3-cp310-cp310-win32.whl", hash = "sha256:d34c4f80956227f2686ddea5b3585e109c2733e2d4ef12eb1b8b4e84f09a2ab6"}, + {file = "yarl-1.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:cf7a4e8de7f1092829caef66fd90eaf3710bc5efd322a816d5677b7664893c93"}, + {file = "yarl-1.9.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d61a0ca95503867d4d627517bcfdc28a8468c3f1b0b06c626f30dd759d3999fd"}, + {file = "yarl-1.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:73cc83f918b69110813a7d95024266072d987b903a623ecae673d1e71579d566"}, + {file = "yarl-1.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d81657b23e0edb84b37167e98aefb04ae16cbc5352770057893bd222cdc6e45f"}, + {file = "yarl-1.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a1a8443091c7fbc17b84a0d9f38de34b8423b459fb853e6c8cdfab0eacf613"}, + {file = "yarl-1.9.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe34befb8c765b8ce562f0200afda3578f8abb159c76de3ab354c80b72244c41"}, + {file = "yarl-1.9.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c757f64afe53a422e45e3e399e1e3cf82b7a2f244796ce80d8ca53e16a49b9f"}, + {file = "yarl-1.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72a57b41a0920b9a220125081c1e191b88a4cdec13bf9d0649e382a822705c65"}, + {file = "yarl-1.9.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:632c7aeb99df718765adf58eacb9acb9cbc555e075da849c1378ef4d18bf536a"}, + {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b0b8c06afcf2bac5a50b37f64efbde978b7f9dc88842ce9729c020dc71fae4ce"}, + {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1d93461e2cf76c4796355494f15ffcb50a3c198cc2d601ad8d6a96219a10c363"}, + {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4003f380dac50328c85e85416aca6985536812c082387255c35292cb4b41707e"}, + {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4d6d74a97e898c1c2df80339aa423234ad9ea2052f66366cef1e80448798c13d"}, + {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b61e64b06c3640feab73fa4ff9cb64bd8182de52e5dc13038e01cfe674ebc321"}, + {file = "yarl-1.9.3-cp311-cp311-win32.whl", hash = "sha256:29beac86f33d6c7ab1d79bd0213aa7aed2d2f555386856bb3056d5fdd9dab279"}, + {file = "yarl-1.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:f7271d6bd8838c49ba8ae647fc06469137e1c161a7ef97d778b72904d9b68696"}, + {file = "yarl-1.9.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:dd318e6b75ca80bff0b22b302f83a8ee41c62b8ac662ddb49f67ec97e799885d"}, + {file = "yarl-1.9.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c4b1efb11a8acd13246ffb0bee888dd0e8eb057f8bf30112e3e21e421eb82d4a"}, + {file = "yarl-1.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c6f034386e5550b5dc8ded90b5e2ff7db21f0f5c7de37b6efc5dac046eb19c10"}, + {file = "yarl-1.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd49a908cb6d387fc26acee8b7d9fcc9bbf8e1aca890c0b2fdfd706057546080"}, + {file = "yarl-1.9.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa4643635f26052401750bd54db911b6342eb1a9ac3e74f0f8b58a25d61dfe41"}, + {file = "yarl-1.9.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e741bd48e6a417bdfbae02e088f60018286d6c141639359fb8df017a3b69415a"}, + {file = "yarl-1.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c86d0d0919952d05df880a1889a4f0aeb6868e98961c090e335671dea5c0361"}, + {file = "yarl-1.9.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3d5434b34100b504aabae75f0622ebb85defffe7b64ad8f52b8b30ec6ef6e4b9"}, + {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79e1df60f7c2b148722fb6cafebffe1acd95fd8b5fd77795f56247edaf326752"}, + {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:44e91a669c43f03964f672c5a234ae0d7a4d49c9b85d1baa93dec28afa28ffbd"}, + {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:3cfa4dbe17b2e6fca1414e9c3bcc216f6930cb18ea7646e7d0d52792ac196808"}, + {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:88d2c3cc4b2f46d1ba73d81c51ec0e486f59cc51165ea4f789677f91a303a9a7"}, + {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cccdc02e46d2bd7cb5f38f8cc3d9db0d24951abd082b2f242c9e9f59c0ab2af3"}, + {file = "yarl-1.9.3-cp312-cp312-win32.whl", hash = "sha256:96758e56dceb8a70f8a5cff1e452daaeff07d1cc9f11e9b0c951330f0a2396a7"}, + {file = "yarl-1.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:c4472fe53ebf541113e533971bd8c32728debc4c6d8cc177f2bff31d011ec17e"}, + {file = "yarl-1.9.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:126638ab961633f0940a06e1c9d59919003ef212a15869708dcb7305f91a6732"}, + {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c99ddaddb2fbe04953b84d1651149a0d85214780e4d0ee824e610ab549d98d92"}, + {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dab30b21bd6fb17c3f4684868c7e6a9e8468078db00f599fb1c14e324b10fca"}, + {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:828235a2a169160ee73a2fcfb8a000709edf09d7511fccf203465c3d5acc59e4"}, + {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc391e3941045fd0987c77484b2799adffd08e4b6735c4ee5f054366a2e1551d"}, + {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:51382c72dd5377861b573bd55dcf680df54cea84147c8648b15ac507fbef984d"}, + {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:28a108cb92ce6cf867690a962372996ca332d8cda0210c5ad487fe996e76b8bb"}, + {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8f18a7832ff85dfcd77871fe677b169b1bc60c021978c90c3bb14f727596e0ae"}, + {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:7eaf13af79950142ab2bbb8362f8d8d935be9aaf8df1df89c86c3231e4ff238a"}, + {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:66a6dbf6ca7d2db03cc61cafe1ee6be838ce0fbc97781881a22a58a7c5efef42"}, + {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a0a4f3aaa18580038cfa52a7183c8ffbbe7d727fe581300817efc1e96d1b0e9"}, + {file = "yarl-1.9.3-cp37-cp37m-win32.whl", hash = "sha256:946db4511b2d815979d733ac6a961f47e20a29c297be0d55b6d4b77ee4b298f6"}, + {file = "yarl-1.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:2dad8166d41ebd1f76ce107cf6a31e39801aee3844a54a90af23278b072f1ccf"}, + {file = "yarl-1.9.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:bb72d2a94481e7dc7a0c522673db288f31849800d6ce2435317376a345728225"}, + {file = "yarl-1.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9a172c3d5447b7da1680a1a2d6ecdf6f87a319d21d52729f45ec938a7006d5d8"}, + {file = "yarl-1.9.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2dc72e891672343b99db6d497024bf8b985537ad6c393359dc5227ef653b2f17"}, + {file = "yarl-1.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8d51817cf4b8d545963ec65ff06c1b92e5765aa98831678d0e2240b6e9fd281"}, + {file = "yarl-1.9.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53ec65f7eee8655bebb1f6f1607760d123c3c115a324b443df4f916383482a67"}, + {file = "yarl-1.9.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cfd77e8e5cafba3fb584e0f4b935a59216f352b73d4987be3af51f43a862c403"}, + {file = "yarl-1.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e73db54c967eb75037c178a54445c5a4e7461b5203b27c45ef656a81787c0c1b"}, + {file = "yarl-1.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09c19e5f4404574fcfb736efecf75844ffe8610606f3fccc35a1515b8b6712c4"}, + {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6280353940f7e5e2efaaabd686193e61351e966cc02f401761c4d87f48c89ea4"}, + {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c25ec06e4241e162f5d1f57c370f4078797ade95c9208bd0c60f484834f09c96"}, + {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7217234b10c64b52cc39a8d82550342ae2e45be34f5bff02b890b8c452eb48d7"}, + {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4ce77d289f8d40905c054b63f29851ecbfd026ef4ba5c371a158cfe6f623663e"}, + {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5f74b015c99a5eac5ae589de27a1201418a5d9d460e89ccb3366015c6153e60a"}, + {file = "yarl-1.9.3-cp38-cp38-win32.whl", hash = "sha256:8a2538806be846ea25e90c28786136932ec385c7ff3bc1148e45125984783dc6"}, + {file = "yarl-1.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:6465d36381af057d0fab4e0f24ef0e80ba61f03fe43e6eeccbe0056e74aadc70"}, + {file = "yarl-1.9.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2f3c8822bc8fb4a347a192dd6a28a25d7f0ea3262e826d7d4ef9cc99cd06d07e"}, + {file = "yarl-1.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7831566595fe88ba17ea80e4b61c0eb599f84c85acaa14bf04dd90319a45b90"}, + {file = "yarl-1.9.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ff34cb09a332832d1cf38acd0f604c068665192c6107a439a92abfd8acf90fe2"}, + {file = "yarl-1.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe8080b4f25dfc44a86bedd14bc4f9d469dfc6456e6f3c5d9077e81a5fedfba7"}, + {file = "yarl-1.9.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8535e111a064f3bdd94c0ed443105934d6f005adad68dd13ce50a488a0ad1bf3"}, + {file = "yarl-1.9.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d155a092bf0ebf4a9f6f3b7a650dc5d9a5bbb585ef83a52ed36ba46f55cc39d"}, + {file = "yarl-1.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:778df71c8d0c8c9f1b378624b26431ca80041660d7be7c3f724b2c7a6e65d0d6"}, + {file = "yarl-1.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9f9cafaf031c34d95c1528c16b2fa07b710e6056b3c4e2e34e9317072da5d1a"}, + {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ca6b66f69e30f6e180d52f14d91ac854b8119553b524e0e28d5291a724f0f423"}, + {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e0e7e83f31e23c5d00ff618045ddc5e916f9e613d33c5a5823bc0b0a0feb522f"}, + {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:af52725c7c39b0ee655befbbab5b9a1b209e01bb39128dce0db226a10014aacc"}, + {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0ab5baaea8450f4a3e241ef17e3d129b2143e38a685036b075976b9c415ea3eb"}, + {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6d350388ba1129bc867c6af1cd17da2b197dff0d2801036d2d7d83c2d771a682"}, + {file = "yarl-1.9.3-cp39-cp39-win32.whl", hash = "sha256:e2a16ef5fa2382af83bef4a18c1b3bcb4284c4732906aa69422cf09df9c59f1f"}, + {file = "yarl-1.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:d92d897cb4b4bf915fbeb5e604c7911021a8456f0964f3b8ebbe7f9188b9eabb"}, + {file = "yarl-1.9.3-py3-none-any.whl", hash = "sha256:271d63396460b6607b588555ea27a1a02b717ca2e3f2cf53bdde4013d7790929"}, + {file = "yarl-1.9.3.tar.gz", hash = "sha256:4a14907b597ec55740f63e52d7fee0e9ee09d5b9d57a4f399a7423268e457b57"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + +[[package]] +name = "zipp" +version = "3.17.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + +[metadata] +lock-version = "2.0" +python-versions = ">=3.9,<3.10" +content-hash = "9d63553871750d24ee34f83c41abaee93b4562f52709fa3f11d094a67a6feb17" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..dd8bbb6 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,104 @@ +[tool.poetry] +name = "emma-perception" +version = "1.13.0" +description = "" +authors = [ + "Amit Parekh ", + "Alessandro Suglia ", +] +readme = "README.md" +repository = "https://github.com/emma-simbot/perception" + +packages = [{ include = "emma_perception", from = "src" }] + +[tool.poe.tasks] + +[tool.poe.tasks.format] +help = "Format using the pre-commit hooks" +cmd = "pre-commit run --all-files" + +[tool.poe.tasks.typecheck] +help = "Check types with mypy" +cmd = "mypy ." + +[tool.poe.tasks.lint] +help = "Lint with flake8" +cmd = "flake8 ." + +[tool.poe.tasks.test] +help = "Run the fast Python tests" +cmd = "pytest --cov=src -m 'not slow'" + +[tool.poe.tasks.test-everything] +help = "Run all the tests and get the coverage" +cmd = "pytest -v --junitxml=pytest.xml --cov=src -m 'not slow and not multiprocessing'" + + +[tool.poe.tasks.install-correct-torch-wheel] +## See https://github.com/python-poetry/poetry/issues/2543 +help = "Update torch to use the latest CUDA version" +shell = "python scripts/update_torch_cuda.py" + + +[tool.poetry.dependencies] +python = ">=3.9,<3.10" +torch = "1.10.2" +torchvision = "0.11.3" +pytorch-lightning = ">=1.5,<2" +pydantic = { extras = ["dotenv"], version = ">=1.9.0,<2" } +rich = ">=12.2.0" +overrides = ">=6.1.0" +requests = ">=2.27.1" +fastapi = ">=0.88.0" +h5py = "3.7.0" +nltk = "3.8" +joblib = "1.2.0" +pandas = ">=1.4.2,<2" +scipy = "1.9.3" +ninja = "1.11.1" +yacs = "0.1.8" +Cython = ">=0.29.28" +tqdm = ">=4.64.0" +numpy = "<1.24" +einops = ">=0.4.1" +timm = "0.5.4" +pycocotools = "2.0.6" +cityscapesScripts = "2.2.1" +opencv-python-headless = ">=4.5.5,<5" +orjson = ">=3.8.3" +maskrcnn-benchmark = { git = "https://github.com/emma-heriot-watt/scene-graph-benchmark.git" } +emma-common = { git = "https://github.com/emma-heriot-watt/common.git" } + + +[tool.poetry.group.dev.dependencies] +wemake-python-styleguide = ">=0.16.1" +flake8 = ">=4.0" +mypy = ">=0.942" +pytest = ">=7.1.2" +ipykernel = ">=6.13.0" +pre-commit = ">=2.18.1" +poethepoet = ">=0.13.1" +pytest-cov = ">=3.0.0" +pudb = ">=2022.1" +isort = ">=5.10.1" +pytest-cases = ">=3.6.11" +types-requests = ">=2.27.16" +jupyterlab = ">=3.3.3" +jupyter = ">=1.0.0" +ipython = ">=8.2.0" +matplotlib = ">=3.5.1,<4" + + +[tool.black] +line-length = 99 + +[tool.isort] +profile = "black" +combine_as_imports = true +lines_after_imports = 2 +line_length = 99 +known_first_party = ["emma_perception"] + +[build-system] +requires = ["poetry-core>=1.0.0", "setuptools"] +build-backend = "poetry.core.masonry.api" diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..e367cf0 --- /dev/null +++ b/pytest.ini @@ -0,0 +1,12 @@ +[pytest] + +testpaths = + tests + +filterwarnings = + ignore::UserWarning + ignore::DeprecationWarning + +markers = + slow: mark test as slow + multiprocessing: mark test as using multiprocessing diff --git a/scripts/.gitkeep b/scripts/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/scripts/merge_nlvr_image_features.py b/scripts/merge_nlvr_image_features.py new file mode 100644 index 0000000..a6ab153 --- /dev/null +++ b/scripts/merge_nlvr_image_features.py @@ -0,0 +1,58 @@ +import argparse +import glob +from pathlib import Path, PurePath + +import torch +from tqdm import tqdm + + +def merge_nlvr_image_features(input_path: Path, output_path: Path) -> None: + """Merge NLVR image features into video features.""" + output_path.mkdir(exist_ok=True) + + img_left_paths = sorted(glob.glob(str(input_path.joinpath("*img0.pt")))) + img_right_paths = sorted(glob.glob(str(input_path.joinpath("*img1.pt")))) + if len(img_left_paths) != len(img_right_paths): + raise AssertionError( + f"The number of 0-indexed images {len(img_left_paths)} should match the number of 1-indexed images {len(img_right_paths)}" + ) + + img_file_paths = list(zip(img_left_paths, img_right_paths)) + for img_left_path, img_right_path in tqdm(img_file_paths): + if img_left_path.split("img0")[0] != img_right_path.split("img1")[0]: + raise AssertionError(f"Found unpaired images {img_left_path} {img_right_path}") + img_left_features = torch.load(img_left_path) + img_right_features = torch.load(img_right_path) + + features_dict = { + "frames": [ + {"image": PurePath(img_left_path).name, "features": img_left_features}, + {"image": PurePath(img_right_path).name, "features": img_right_features}, + ] + } + + output_file_path = output_path.joinpath( + PurePath(f"{img_left_path.split('img0')[0][:-1]}.pt").name + ) + torch.save(features_dict, output_file_path) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + + parser.add_argument( + "--input_path", + type=Path, + help="Path to input nlvr image features", + required=True, + ) + + parser.add_argument( + "--output_path", + type=Path, + help="Path to input nlvr image features", + required=True, + ) + + args = parser.parse_args() + merge_nlvr_image_features(input_path=args.input_path, output_path=args.output_path) diff --git a/scripts/update_torch_cuda.py b/scripts/update_torch_cuda.py new file mode 100644 index 0000000..cc7e177 --- /dev/null +++ b/scripts/update_torch_cuda.py @@ -0,0 +1,164 @@ +import logging +import subprocess +import sys +from typing import Optional + +from rich.console import Console +from rich.logging import RichHandler + + +console = Console() + +logging.basicConfig( + level="NOTSET", + format="%(message)s", + datefmt="[%X]", + handlers=[RichHandler(console=console, markup=True, rich_tracebacks=True)], +) +log = logging.getLogger("rich") + + +def is_cuda_available() -> bool: + """Check if CUDA is available, without global torch import.""" + import torch + + return torch.cuda.is_available() + + +def get_torch_version() -> tuple[str, Optional[str]]: + """Get the current version of PyTorch, without global torch import. + + If it is for a specific version, it will have the '+cu11x' suffix. + """ + import torch + + version = torch.__version__ + + log.info(f"Current `torch` verison: {version}") + + if "+" not in version: + return version, None + + return version.split("+")[0], version.split("+")[1] + + +def get_torchvision_version() -> tuple[str, Optional[str]]: + """Get the current version of torchvision, without global importing. + + If it is for a specific version, it will have the '+cu11x' suffix. + """ + import torchvision + + version = torchvision.__version__ + + log.info(f"Current `torchvision` verison: {version}") + + if "+" not in version: + return version, None + + return version.split("+")[0], version.split("+")[1] + + +def get_supported_cuda_version() -> float: + """Get the highest supported CUDA version. + + NVIDIA-SMI seems to be the most consistent version display, so needed to use subprocess to get + it out. + """ + nvidia_smi_process = subprocess.Popen( + ["nvidia-smi"], stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + + nvidia_smi_stdout, _ = nvidia_smi_process.communicate() + + cuda_version_line = nvidia_smi_stdout.decode().split("\n")[2] + cuda_version_list = list(filter(None, cuda_version_line.split(" "))) + cuda_version = float(cuda_version_list[-2]) + + log.info(f"Supported CUDA version: {cuda_version}") + + return cuda_version + + +def get_torch_cuda_suffix(cuda_version: float) -> str: + """Get the relevant CUDA suffix from the version.""" + if cuda_version > 11 and cuda_version < 11.3: + return "cu111" + if cuda_version > 11.3: + return "cu113" + + return "" + + +def update_torch(torch_version: tuple[str, str], torchvision_version: tuple[str, str]) -> None: + """Install the desired torch and torchvision versions.""" + torch_package_version = f"{torch_version[0]}+{torch_version[1]}" + torchvision_package_version = f"{torchvision_version[0]}+{torchvision_version[1]}" + log.info( + f"Installing torch=={torch_package_version} and torchvision=={torchvision_package_version}" + ) + + process_args = [ + sys.executable, + "-m", + "pip", + "install", + f"torch=={torch_package_version}", + f"torchvision=={torchvision_package_version}", + "-f", + "https://download.pytorch.org/whl/torch_stable.html", + ] + + with subprocess.Popen( + process_args, stdout=subprocess.PIPE, universal_newlines=True + ) as process: + if process.stdout is not None: + for line in iter(process.stdout.readlines()): + console.log(line) + + +def main(force_update: bool = False) -> None: + """Run the script.""" + if not is_cuda_available(): + log.warning("CUDA is not available. Are you sure about running this script?") + return + + if force_update: + log.info("`force_update` is True") + + should_update = force_update + + log.debug("Get supported CUDA version") + supported_cuda_version = get_supported_cuda_version() + + log.debug("Getting ideal torch suffix.") + torch_suffix = get_torch_cuda_suffix(supported_cuda_version) + + log.debug("Getting torch version") + torch_version = get_torch_version() + + log.debug("Getting torchvision version") + torchvision_version = get_torchvision_version() + + if torch_version[1] != torch_suffix or should_update: + should_update = True + torch_version = (torch_version[0], torch_suffix) + + if torchvision_version[1] != torch_suffix or should_update: + should_update = True + torchvision_version = (torchvision_version[0], torch_suffix) + + if should_update: + log.debug("Updating torch and torchvision") + update_torch(torch_version, torchvision_version) # type: ignore[arg-type] + + if not should_update: + log.info( + "No update to torch is needed. The best wheel for the current CUDA version is already installed." + ) + + log.info("Done") + + +if __name__ == "__main__": + main(True) diff --git a/src/emma_perception/__init__.py b/src/emma_perception/__init__.py new file mode 100644 index 0000000..46a88aa --- /dev/null +++ b/src/emma_perception/__init__.py @@ -0,0 +1 @@ +from emma_perception._version import __version__ diff --git a/src/emma_perception/_version.py b/src/emma_perception/_version.py new file mode 100644 index 0000000..6099c81 --- /dev/null +++ b/src/emma_perception/_version.py @@ -0,0 +1,7 @@ +# Store the version here so: +# 1) we don't load dependencies by storing it in __init__.py +# 2) we can import it in setup.py for the same reason +# 3) we can import it into your module module +# +# This is automatic, therefore DO NOT manually change this file! +__version__ = "1.13.0" diff --git a/src/emma_perception/api/__init__.py b/src/emma_perception/api/__init__.py new file mode 100644 index 0000000..59dc94f --- /dev/null +++ b/src/emma_perception/api/__init__.py @@ -0,0 +1,3 @@ +from emma_perception.api.api_dataset import ApiDataset +from emma_perception.api.datamodels import ApiSettings, ApiStore, parse_api_args +from emma_perception.api.extract_features import extract_features_for_batch diff --git a/src/emma_perception/api/api_dataset.py b/src/emma_perception/api/api_dataset.py new file mode 100644 index 0000000..f68d0da --- /dev/null +++ b/src/emma_perception/api/api_dataset.py @@ -0,0 +1,42 @@ +import random +import string +from typing import Optional, Union + +from PIL.Image import Image +from torch.utils.data import Dataset + +from emma_perception.datamodules.visual_extraction_dataset import DatasetReturn +from emma_perception.models.vinvl_extractor import VinVLTransform + + +class ApiDataset(Dataset[DatasetReturn]): + """Simple dataset of images from an API call.""" + + def __init__( + self, images: Union[Image, list[Image]], transform: Optional[VinVLTransform] = None + ) -> None: + if not isinstance(images, list): + images = [images] + + self.dataset = images + self.dataset_size = len(self.dataset) + self.transform = transform + + def __len__(self) -> int: + """Return dataset size.""" + return self.dataset_size + + def __getitem__(self, idx: int) -> DatasetReturn: + """Return a sample.""" + img = self.dataset[idx] + img_size = img.size + + if self.transform is not None: + img = self.transform(img) + + return DatasetReturn( + img=img, ids=self._make_sample_id(), width=img_size[0], height=img_size[1] + ) + + def _make_sample_id(self, num_charas: int = 12) -> str: + return "".join(random.sample(string.ascii_lowercase, num_charas)) diff --git a/src/emma_perception/api/datamodels.py b/src/emma_perception/api/datamodels.py new file mode 100644 index 0000000..3427d7c --- /dev/null +++ b/src/emma_perception/api/datamodels.py @@ -0,0 +1,83 @@ +import argparse +import json +from dataclasses import dataclass +from typing import Literal, Optional, TypedDict + +import torch +from pydantic import BaseSettings + +from emma_perception.constants import ( + VINVL_ALFRED_CLASS_MAP_PATH, + VINVL_CLASS_MAP_PATH, + VINVL_SIMBOT_CLASS_MAP_PATH, + VINVL_SIMBOT_CONFIG_PATH, +) +from emma_perception.models.simbot_entity_classifier import SimBotMLPEntityClassifier +from emma_perception.models.vinvl_extractor import VinVLExtractor, VinVLTransform + + +ClassmapType = Literal["alfred", "original", "simbot"] + + +class AlfredClassMap(TypedDict): + """Classmap for class to idx.""" + + label_to_idx: dict[str, int] + idx_to_label: dict[str, str] + + +class ApiSettings(BaseSettings): + """Common settings, which can also be got from the environment vars.""" + + port: int = 5500 + host: str = "0.0.0.0" # noqa: S104 + num_workers: int = 1 + # Use a positive number to index the GPU, or a negative number for the CPU + device_id: int = -1 + log_level: str = "info" + # Dictionary containing the class information for the object detector + classmap_type: ClassmapType = "simbot" + # batch size used to extract visual features + batch_size: int = 2 + + def object_classmap(self) -> AlfredClassMap: + """Get the mapping of objects to class indices.""" + if self.classmap_type == "alfred": + classmap_file = VINVL_ALFRED_CLASS_MAP_PATH + elif self.classmap_type == "original": + classmap_file = VINVL_CLASS_MAP_PATH + elif self.classmap_type == "simbot": + classmap_file = VINVL_SIMBOT_CLASS_MAP_PATH + else: + raise ValueError(f"Invalid classmap type: {self.classmap_type}") + + with open(classmap_file) as in_file: + return json.load(in_file) + + +@dataclass(init=False) +class ApiStore: + """Common state for the API.""" + + extractor: VinVLExtractor + transform: VinVLTransform + device: torch.device + entity_classifier: Optional[SimBotMLPEntityClassifier] = None + + +def parse_api_args() -> argparse.Namespace: + """Defines arguments.""" + parser = argparse.ArgumentParser() + parser.add_argument( + "--config_file", + metavar="FILE", + help="path to VinVL config file", + default=VINVL_SIMBOT_CONFIG_PATH.as_posix(), + ) + parser.add_argument( + "opts", + default=None, + nargs=argparse.REMAINDER, + help="Modify config options using the command-line. Used for VinVL extraction", + ) + return parser.parse_args() diff --git a/src/emma_perception/api/extract_features.py b/src/emma_perception/api/extract_features.py new file mode 100644 index 0000000..8f9d44e --- /dev/null +++ b/src/emma_perception/api/extract_features.py @@ -0,0 +1,86 @@ +from typing import Optional, Union + +import torch +from emma_common.datamodels import EmmaExtractedFeatures +from loguru import logger +from PIL import Image +from torch.utils.data import DataLoader + +from emma_perception.api.api_dataset import ApiDataset +from emma_perception.api.datamodels import ApiSettings, ApiStore +from emma_perception.models.simbot_entity_classifier import SimBotMLPEntityClassifier +from emma_perception.models.vinvl_extractor import VinVLExtractor + + +settings = ApiSettings() +object_classmap = settings.object_classmap() + + +@torch.inference_mode() +def get_batch_features( + extractor: VinVLExtractor, + batch: dict[str, torch.Tensor], + device: torch.device, + entity_classifier: Optional[SimBotMLPEntityClassifier] = None, +) -> list[EmmaExtractedFeatures]: + """Low-level implementation of the visual feature extraction process.""" + logger.debug("Inference step") + cnn_features: list[torch.Tensor] = [] + hook = extractor.extractor.backbone.register_forward_hook( + lambda module, inp, output: cnn_features.append(output) + ) + + batch_predictions = extractor.extractor(batch["img"].to(device)) + hook.remove() + cnn_feats = cnn_features[0][0] + + batch_features: list[EmmaExtractedFeatures] = [] + + logger.debug("Post-process batch") + for batch_idx, predictions in enumerate(batch_predictions): + # assumes that all the images have the same size + predictions = predictions.resize((batch["width"][batch_idx], batch["height"][batch_idx])) + + bbox_probas = predictions.get_field("scores_all") + idx_labels = bbox_probas.argmax(dim=1) + class_labels = [object_classmap["idx_to_label"][str(idx.item())] for idx in idx_labels] + entity_labels = None + bbox_features = predictions.get_field("box_features") + + if entity_classifier is not None: + entity_labels = entity_classifier(bbox_features, class_labels) + + features = EmmaExtractedFeatures( + bbox_features=bbox_features, + bbox_coords=predictions.bbox, + bbox_probas=bbox_probas, + cnn_features=cnn_feats[batch_idx].mean(dim=(-2, -1)), + class_labels=class_labels, + entity_labels=entity_labels, + width=int(batch["width"][batch_idx].item()), + height=int(batch["height"][batch_idx].item()), + ) + + batch_features.append(features) + + return batch_features + + +def extract_features_for_batch( + images: Union[Image.Image, list[Image.Image]], api_store: ApiStore, batch_size: int = 2 +) -> list[EmmaExtractedFeatures]: + """Extracts visual features for a batch of images.""" + logger.debug("Build dataloader") + dataset = ApiDataset(images, transform=api_store.transform) + loader = DataLoader(dataset, batch_size=batch_size) + + all_features: list[EmmaExtractedFeatures] = [] + + for batch in loader: + all_features.extend( + get_batch_features( + api_store.extractor, batch, api_store.device, api_store.entity_classifier + ) + ) + + return all_features diff --git a/src/emma_perception/callbacks/__init__.py b/src/emma_perception/callbacks/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/emma_perception/callbacks/callbacks.py b/src/emma_perception/callbacks/callbacks.py new file mode 100644 index 0000000..40becc1 --- /dev/null +++ b/src/emma_perception/callbacks/callbacks.py @@ -0,0 +1,40 @@ +import os +from typing import Any + +import pytorch_lightning as pl +import torch +from pytorch_lightning.callbacks import Callback + + +class VisualExtractionCacheCallback(Callback): + """A simple callback used for caching predictions.""" + + def __init__(self, cache_dir: str = "image_cache", cache_suffix: str = ".pt") -> None: + self.cache_dir = cache_dir + self.cache_suffix = cache_suffix + + os.makedirs(self.cache_dir, exist_ok=True) + + def on_predict_batch_end( + self, + trainer: pl.Trainer, + pl_module: pl.LightningModule, + outputs: Any, + batch: Any, + batch_idx: int, + dataloader_idx: int, + ) -> None: + """Store the predictions for a batch.""" + for ex_id, output in outputs.items(): + cache_fname = os.path.join( + self.cache_dir, os.path.splitext(ex_id)[0] + self.cache_suffix + ) + features_dict = { + "bbox_features": output["bbox_features"].to("cpu"), + "bbox_coords": output["bbox_coords"].to("cpu"), + "bbox_probas": output["bbox_probas"].to("cpu"), + "cnn_features": output["cnn_features"].to("cpu"), + "width": output["width"].to("cpu").item(), + "height": output["height"].to("cpu").item(), + } + torch.save(features_dict, cache_fname) diff --git a/src/emma_perception/commands/__init__.py b/src/emma_perception/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/emma_perception/commands/download_checkpoints.py b/src/emma_perception/commands/download_checkpoints.py new file mode 100644 index 0000000..84058b3 --- /dev/null +++ b/src/emma_perception/commands/download_checkpoints.py @@ -0,0 +1,27 @@ +from pathlib import Path + +from emma_common import logger +from emma_common.hf import download_file + + +HF_REPO_ID = "emma-heriot-watt/models" +VINVL_CHECKPOINT_NAME = "vinvl_pretrained.pth" +ARENA_CHECKPOINT_NAME = "vinvl_finetune_arena.ckpt" + + +def download_arena_checkpoint( + *, hf_repo_id: str = HF_REPO_ID, file_name: str = ARENA_CHECKPOINT_NAME +) -> Path: + """Download the fine-tuned checkpoint on the Alexa Arena.""" + file_path = download_file(repo_id=hf_repo_id, repo_type="model", filename=file_name) + logger.info(f"Downloaded {file_name}") + return file_path + + +def download_vinvl_checkpoint( + *, hf_repo_id: str = HF_REPO_ID, file_name: str = VINVL_CHECKPOINT_NAME +) -> Path: + """Download the pre-trained VinVL checkpoint.""" + file_path = download_file(repo_id=hf_repo_id, repo_type="model", filename=file_name) + logger.info(f"Downloaded {file_name}") + return file_path diff --git a/src/emma_perception/commands/extract_visual_features.py b/src/emma_perception/commands/extract_visual_features.py new file mode 100644 index 0000000..a2ddee5 --- /dev/null +++ b/src/emma_perception/commands/extract_visual_features.py @@ -0,0 +1,83 @@ +import argparse + +from maskrcnn_benchmark.config import cfg +from pytorch_lightning import Trainer +from scene_graph_benchmark.config import sg_cfg + +from emma_perception.callbacks.callbacks import VisualExtractionCacheCallback +from emma_perception.commands.download_checkpoints import ( + download_arena_checkpoint, + download_vinvl_checkpoint, +) +from emma_perception.datamodules.visual_extraction_dataset import ImageDataset, PredictDataModule +from emma_perception.models.vinvl_extractor import VinVLExtractor, VinVLTransform + + +def parse_args() -> argparse.Namespace: + """Defines arguments.""" + parser = argparse.ArgumentParser() + parser = Trainer.add_argparse_args(parser) # type: ignore[assignment] + parser.add_argument( + "-i", + "--images_dir", + required=True, + help="Path to a folder of images to extract features from", + ) + parser.add_argument( + "--is_arena", + action="store_true", + help="If we are extracting features from the Arena images, use the Arena checkpoint", + ) + parser.add_argument("-b", "--batch_size", type=int, default=2) + parser.add_argument("-w", "--num_workers", type=int, default=0) + parser.add_argument( + "-c", "--output_dir", default="storage/data/cache", help="Path to store visual features" + ) + parser.add_argument( + "--num_gpus", + type=int, + default=None, + help="Number of GPUs to use for visual feature extraction", + ) + parser.add_argument( + "opts", + default=None, + nargs=argparse.REMAINDER, + help="Modify config options using the command-line. Used for VinVL extraction", + ) + + return parser.parse_args() + + +def main() -> None: + """Main function for visual feature extraction.""" + args = parse_args() + + cfg.set_new_allowed(True) + cfg.merge_from_other_cfg(sg_cfg) + cfg.set_new_allowed(False) + cfg.merge_from_file(args.config_file) + cfg.merge_from_list(args.opts) + cfg.freeze() + + if args.is_arena: + cfg.MODEL.WEIGHT = download_arena_checkpoint().as_posix() + else: + cfg.MODEL.WEIGHT = download_vinvl_checkpoint().as_posix() + + dataset = ImageDataset( + input_path=args.images_dir, preprocess_transform=VinVLTransform(cfg=cfg) + ) + dm = PredictDataModule( + dataset=dataset, batch_size=args.batch_size, num_workers=args.num_workers + ) + extractor = VinVLExtractor(cfg=cfg) + trainer = Trainer( + gpus=args.num_gpus, + callbacks=[VisualExtractionCacheCallback(cache_dir=args.output_dir, cache_suffix=".pt")], + ) + trainer.predict(extractor, dm) + + +if __name__ == "__main__": + main() diff --git a/src/emma_perception/commands/run_server.py b/src/emma_perception/commands/run_server.py new file mode 100644 index 0000000..1d55bd5 --- /dev/null +++ b/src/emma_perception/commands/run_server.py @@ -0,0 +1,210 @@ +from io import BytesIO +from pathlib import Path + +import torch +import uvicorn +from emma_common.api.response import TorchResponse +from emma_common.logging import logger, setup_rich_logging +from fastapi import FastAPI, HTTPException, Response, UploadFile, status +from maskrcnn_benchmark.config import cfg +from PIL import Image +from pydantic import BaseModel +from scene_graph_benchmark.config import sg_cfg + +from emma_perception.api import ApiSettings, ApiStore, extract_features_for_batch, parse_api_args +from emma_perception.commands.download_checkpoints import download_arena_checkpoint +from emma_perception.constants import ( + SIMBOT_ENTITY_MLPCLASSIFIER_CLASSMAP_PATH, + SIMBOT_ENTITY_MLPCLASSIFIER_PATH, +) +from emma_perception.models.simbot_entity_classifier import SimBotMLPEntityClassifier +from emma_perception.models.vinvl_extractor import VinVLExtractor, VinVLTransform + + +settings = ApiSettings() +api_store = ApiStore() +app = FastAPI() + + +@app.on_event("startup") +async def startup_event() -> None: + """Run specific functions when starting up the API.""" + args = parse_api_args() + cfg.set_new_allowed(True) + cfg.merge_from_other_cfg(sg_cfg) + cfg.set_new_allowed(False) + cfg.merge_from_file(args.config_file) + cfg.merge_from_list(args.opts) + + model_path = Path(cfg.MODEL.WEIGHT) + if not model_path.exists(): + cfg.MODEL.WEIGHT = download_arena_checkpoint().as_posix() + + if torch.cuda.is_available() and settings.device_id != -1: + num_gpus = torch.cuda.device_count() + + if settings.device_id >= num_gpus: + msg = f"You selected {settings.device_id} gpu but there are only {num_gpus} available" + raise OSError(msg) + + device = torch.device(settings.device_id) + cfg.MODEL.DEVICE = settings.device_id + else: + device = torch.device("cpu") + cfg.MODEL.DEVICE = "cpu" + + cfg.freeze() + logger.info(f"Config:{cfg}") + + api_store.device = device + + logger.info(f"Setting up VinVL Extractor on device: {device}") + extractor = VinVLExtractor(cfg=cfg) + extractor.to(device) + extractor.eval() + + logger.info("Setting up the VinVL transform") + transform = VinVLTransform(cfg=cfg) + + api_store.extractor = extractor + api_store.transform = transform + if settings.classmap_type == "simbot": + api_store.entity_classifier = SimBotMLPEntityClassifier( + model_path=SIMBOT_ENTITY_MLPCLASSIFIER_PATH, + classmap_path=SIMBOT_ENTITY_MLPCLASSIFIER_CLASSMAP_PATH, + device=device, + ) + + logger.info("Setup complete!") + + +@app.get("/") +@app.get("/ping") +@app.get("/test") +async def root(response: Response) -> str: + """Ping the API to make sure it is responding.""" + response.status_code = status.HTTP_200_OK + return "success" + + +class DeviceRequestBody(BaseModel): + """Pydantic model for the request body when updating the model device. + + This is used because the device is passed as a request body. + """ + + device: str + + +@app.post("/update_model_device", status_code=status.HTTP_200_OK) +async def update_model_device(device: DeviceRequestBody) -> str: + """Update the device used by the model.""" + new_device = torch.device(device.device) + try: + api_store.extractor.to(new_device) + except Exception as err: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail="Failed to change the model device from {current_device} to {requested_device}".format( + current_device=api_store.extractor.device, requested_device=device.device + ), + ) from err + + if api_store.entity_classifier is not None: + try: + api_store.entity_classifier.move_to_device(new_device) + except Exception as other_err: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail="Failed to change the entity classifier device from {current_device} to {requested_device}".format( + current_device=api_store.entity_classifier.device, + requested_device=device.device, + ), + ) from other_err + + return "success" + + +@app.post("/features", response_class=TorchResponse) +def get_features_for_image(input_file: UploadFile) -> TorchResponse: + """Endpoint for receiving features for a binary image. + + Example: + import requests + url = "http://127.0.0.1:8000/features" + files = {"input_file": open("cat.jpg", "rb")} + response = requests.post(url, files=files) + data = response.json() + + Args: + input_file (UploadFile): The binary image received from a post request + + Returns: + features (ExtractedFeaturesAPI): A pydantic BaseModel with the features of the bounding boxes + coordinates, and their probabilities as well as the global cnn features. + """ + logger.debug("Load image") + image_bytes = input_file.file.read() + pil_image = Image.open(BytesIO(image_bytes)) + + features = extract_features_for_batch(pil_image, api_store, settings.batch_size) + + logger.debug("Build response") + response = TorchResponse(features[0]) + + return response + + +@app.post("/batch_features", response_class=TorchResponse) +def get_features_for_images(images: list[UploadFile]) -> TorchResponse: + """Endpoint for receiving features for a batch of binary images. + + Example: + import requests + url = "http://127.0.0.1:8000/batch_features" + files = [ + ("images", ("file1", open("storage/data/alfred/000000000.jpg", "rb"))), + ("images", ("file2", open("storage/data/alfred/000000001.jpg", "rb"))) + ] + response = requests.post(url, files=files) + data = response.json() + + Args: + images (list[UploadFile]): A batch of binary images received from a post request. Assumes they all have the same size. + + Returns: + features (ExtractedFeaturesAPI): A pydantic BaseModel with the features of the bounding boxes + coordinates, and their probabilities as well as the global cnn features. + """ + open_images: list[Image.Image] = [] + + logger.debug("Load images") + for input_file in images: + byte_image = input_file.file.read() + io_image = BytesIO(byte_image) + io_image.seek(0) + open_images.append(Image.open(io_image)) + + extracted_features = extract_features_for_batch(open_images, api_store, settings.batch_size) + + logger.debug("Build response") + response = TorchResponse(extracted_features) + + return response + + +def main() -> None: + """Run the API, exactly the same as the way TEACh does it.""" + setup_rich_logging(rich_traceback_show_locals=False) + + uvicorn.run( + app, + host=settings.host, + port=settings.port, + log_level=settings.log_level, + workers=settings.num_workers, + ) + + +if __name__ == "__main__": + main() diff --git a/src/emma_perception/constants/__init__.py b/src/emma_perception/constants/__init__.py new file mode 100644 index 0000000..05e8ef4 --- /dev/null +++ b/src/emma_perception/constants/__init__.py @@ -0,0 +1,23 @@ +from pathlib import Path + + +CONSTANTS_DIR_PATH = Path(__file__).parent.resolve() + + +VINVL_CONFIG_PATH = CONSTANTS_DIR_PATH.joinpath("vinvl_x152c4.yaml") +VINVL_ALFRED_CONFIG_PATH = CONSTANTS_DIR_PATH.joinpath("vinvl_x152c4_alfred.yaml") +VINVL_SIMBOT_CONFIG_PATH = CONSTANTS_DIR_PATH.joinpath("vinvl_x152c4_simbot_customised.yaml") + + +VINVL_ALFRED_CLASS_MAP_PATH = CONSTANTS_DIR_PATH.joinpath("vinvl_x152c4_alfred_classmap.json") +VINVL_CLASS_MAP_PATH = CONSTANTS_DIR_PATH.joinpath("vinvl_x152c4_classmap.json") +# VINVL_SIMBOT_CLASS_MAP_PATH = CONSTANTS_DIR_PATH.joinpath("vinvl_x152c4_simbot_classmap.json") +# VINVL_SIMBOT_CLASS_MAP_PATH = CONSTANTS_DIR_PATH.joinpath("vinvl_x152c4_simbot_classmap_v124.json") +VINVL_SIMBOT_CLASS_MAP_PATH = CONSTANTS_DIR_PATH.joinpath( + "vinvl_x152c4_simbot_classmap_v124_customised.json" +) +SIMBOT_ENTITY_CLASSIFER_CENTROID_PATH = CONSTANTS_DIR_PATH.joinpath("entity_centroids.pt") +SIMBOT_ENTITY_MLPCLASSIFIER_PATH = CONSTANTS_DIR_PATH.joinpath("entity_classifier.ckpt") +SIMBOT_ENTITY_MLPCLASSIFIER_CLASSMAP_PATH = CONSTANTS_DIR_PATH.joinpath( + "entity_classlabel_map.json" +) diff --git a/src/emma_perception/constants/entity_centroids.pt b/src/emma_perception/constants/entity_centroids.pt new file mode 100644 index 0000000..ce14a75 Binary files /dev/null and b/src/emma_perception/constants/entity_centroids.pt differ diff --git a/src/emma_perception/constants/entity_centroids_knn.pt b/src/emma_perception/constants/entity_centroids_knn.pt new file mode 100644 index 0000000..12c4d89 Binary files /dev/null and b/src/emma_perception/constants/entity_centroids_knn.pt differ diff --git a/src/emma_perception/constants/entity_classifier.ckpt b/src/emma_perception/constants/entity_classifier.ckpt new file mode 100644 index 0000000..e903d2c Binary files /dev/null and b/src/emma_perception/constants/entity_classifier.ckpt differ diff --git a/src/emma_perception/constants/entity_classlabel_map.json b/src/emma_perception/constants/entity_classlabel_map.json new file mode 100644 index 0000000..14ff558 --- /dev/null +++ b/src/emma_perception/constants/entity_classlabel_map.json @@ -0,0 +1,53 @@ +{ + "label2idx": { + "Blue Button": "0", + "Blue Desk": "1", + "Bookshelf": "2", + "Button": "3", + "Computer": "4", + "Desk": "5", + "Embiggenator Monitor": "6", + "Emotion Tester": "7", + "Freeze Ray Monitor": "8", + "Freeze Ray Shelf": "9", + "Gravity Monitor": "10", + "Green Button": "11", + "Green Desk": "12", + "Laser Monitor": "13", + "Laser Shelf": "14", + "Portal Generator Monitor": "15", + "Reception Desk": "16", + "Red Button": "17", + "Red Desk": "18", + "Security Button": "19", + "Shelf": "20", + "Table": "21", + "Yellow Desk": "22" + }, + "idx2label": { + "0": "Blue Button", + "1": "Blue Desk", + "2": "Bookshelf", + "3": "Button", + "4": "Computer", + "5": "Desk", + "6": "Embiggenator Monitor", + "7": "Emotion Tester", + "8": "Freeze Ray Monitor", + "9": "Freeze Ray Shelf", + "10": "Gravity Monitor", + "11": "Green Button", + "12": "Green Desk", + "13": "Laser Monitor", + "14": "Laser Shelf", + "15": "Portal Generator Monitor", + "16": "Reception Desk", + "17": "Red Button", + "18": "Red Desk", + "19": "Security Button", + "20": "Shelf", + "21": "Table", + "22": "Yellow Desk" + }, + "class_labels": ["Button", "Computer", "Shelf", "Table", "Wall Shelf"] +} diff --git a/src/emma_perception/constants/vinvl_x152c4.yaml b/src/emma_perception/constants/vinvl_x152c4.yaml new file mode 100644 index 0000000..fbb0e7e --- /dev/null +++ b/src/emma_perception/constants/vinvl_x152c4.yaml @@ -0,0 +1,59 @@ +MODEL: + META_ARCHITECTURE: "AttrRCNN" + WEIGHT: "storage/model/vinvl_vg_x152c4.pth" + BACKBONE: + CONV_BODY: "R-152-C4" + RESNETS: + BACKBONE_OUT_CHANNELS: 1024 + STRIDE_IN_1X1: False + NUM_GROUPS: 32 + WIDTH_PER_GROUP: 8 + RPN: + PRE_NMS_TOP_N_TEST: 6000 + POST_NMS_TOP_N_TEST: 300 + ROI_HEADS: + BATCH_SIZE_PER_IMAGE: 384 # 512 + POSITIVE_FRACTION: 0.5 # 0.25 + SCORE_THRESH: 0.2 # 0.0001 + DETECTIONS_PER_IMG: 36 # 600 + MIN_DETECTIONS_PER_IMG: 10 + NMS_FILTER: 1 + ROI_BOX_HEAD: + NUM_CLASSES: 1595 + ROI_ATTRIBUTE_HEAD: + NUM_ATTRIBUTES: 525 + POSTPROCESS_ATTRIBUTES_THRESHOLD: 0.05 + ATTRIBUTE_ON: True +INPUT: + MIN_SIZE_TEST: 600 + MAX_SIZE_TEST: 1000 + PIXEL_MEAN: [103.530, 116.280, 123.675] +DATASETS: + # FACTORY_TEST: ("ODTSVDataset",) + # TEST: ("flickr30k/tsv/flickr30k.yaml",) + LABELMAP_FILE: "visualgenome/VG-SGG-dicts-vgoi6-clipped.json" + TRAIN: ("visualgenome/train_vgoi6_clipped.yaml",) + TEST: ("visualgenome/test_vgoi6_clipped.yaml",) + FACTORY_TRAIN: ("VGTSVDataset",) + FACTORY_TEST: ("VGTSVDataset",) +DATALOADER: + NUM_WORKERS: 0 +SOLVER: + BASE_LR: 0.01 + WEIGHT_DECAY: 0.0001 + MAX_ITER: 90000 + STEPS: (49000, 65000) + IMS_PER_BATCH: 1 + CHECKPOINT_PERIOD: 10000 +TEST: + IMS_PER_BATCH: 1 + SKIP_PERFORMANCE_EVAL: True + SAVE_PREDICTIONS: True + SAVE_RESULTS_TO_TSV: True + TSV_SAVE_SUBSET: ["rect", "class", "conf", "feature"] + OUTPUT_FEATURE: True + GATHER_ON_CPU: True + IGNORE_BOX_REGRESSION: False +OUTPUT_DIR: "./output/X152C5_test" +DATA_DIR: "./datasets" +DISTRIBUTED_BACKEND: "gloo" diff --git a/src/emma_perception/constants/vinvl_x152c4_alfred.yaml b/src/emma_perception/constants/vinvl_x152c4_alfred.yaml new file mode 100644 index 0000000..f80084d --- /dev/null +++ b/src/emma_perception/constants/vinvl_x152c4_alfred.yaml @@ -0,0 +1,55 @@ +MODEL: + META_ARCHITECTURE: "AttrRCNN" + WEIGHT: "pretrained/vinvl_vg_x152c4.pth" + BACKBONE: + CONV_BODY: "R-152-C4" + RESNETS: + BACKBONE_OUT_CHANNELS: 1024 + STRIDE_IN_1X1: False + NUM_GROUPS: 32 + WIDTH_PER_GROUP: 8 + RPN: + PRE_NMS_TOP_N_TEST: 6000 + POST_NMS_TOP_N_TEST: 300 + ROI_HEADS: + BATCH_SIZE_PER_IMAGE: 384 # 512 + POSITIVE_FRACTION: 0.5 # 0.25 + SCORE_THRESH: 0.1 # 0.0001 + DETECTIONS_PER_IMG: 36 # 600 + MIN_DETECTIONS_PER_IMG: 1 + ROI_BOX_HEAD: + NUM_CLASSES: 117 + ATTRIBUTE_ON: False + RELATION_ON: False +INPUT: + MIN_SIZE_TEST: 800 + MAX_SIZE_TEST: 1200 + PIXEL_MEAN: [103.530, 116.280, 123.675] +DATASETS: + # FACTORY_TEST: ("ODTSVDataset",) + # TEST: ("flickr30k/tsv/flickr30k.yaml",) + TRAIN: ("train/train.yaml",) + TEST: ("valid_seen/train.yaml",) + FACTORY_TRAIN: ("VGTSVDataset",) + FACTORY_TEST: ("VGTSVDataset",) +DATALOADER: + NUM_WORKERS: 0 +SOLVER: + BASE_LR: 0.0001 + WEIGHT_DECAY: 0.00001 + MAX_ITER: 36000 + STEPS: (15000, 25000) + IMS_PER_BATCH: 16 + CHECKPOINT_PERIOD: 5000 + TEST_PERIOD: 4000 +TEST: + IMS_PER_BATCH: 16 + SKIP_PERFORMANCE_EVAL: False + SAVE_PREDICTIONS: True + SAVE_RESULTS_TO_TSV: True + TSV_SAVE_SUBSET: ["rect", "class", "conf", "feature"] + GATHER_ON_CPU: False + OUTPUT_FEATURE: True +OUTPUT_DIR: "./output/X152C4_test_weight_e2" +DATA_DIR: "datasets/alfred/" +DISTRIBUTED_BACKEND: "gloo" diff --git a/src/emma_perception/constants/vinvl_x152c4_alfred_classmap.json b/src/emma_perception/constants/vinvl_x152c4_alfred_classmap.json new file mode 100644 index 0000000..8a26dfd --- /dev/null +++ b/src/emma_perception/constants/vinvl_x152c4_alfred_classmap.json @@ -0,0 +1,240 @@ +{ + "label_to_idx": { + "Background": 0, + "AlarmClock": 1, + "Apple": 2, + "AppleSliced": 3, + "ArmChair": 4, + "BaseballBat": 5, + "BasketBall": 6, + "Bathtub": 7, + "BathtubBasin": 8, + "Bed": 9, + "Blinds": 10, + "Book": 11, + "Boots": 12, + "Bowl": 13, + "Box": 14, + "Bread": 15, + "BreadSliced": 16, + "ButterKnife": 17, + "CD": 18, + "Cabinet": 19, + "Candle": 20, + "Cart": 21, + "CellPhone": 22, + "Chair": 23, + "Cloth": 24, + "CoffeeMachine": 25, + "CoffeeTable": 26, + "CounterTop": 27, + "CreditCard": 28, + "Cup": 29, + "Curtains": 30, + "Desk": 31, + "DeskLamp": 32, + "DiningTable": 33, + "DishSponge": 34, + "Drawer": 35, + "Dresser": 36, + "Egg": 37, + "EggCracked": 38, + "Faucet": 39, + "FloorLamp": 40, + "Footstool": 41, + "Fork": 42, + "Fridge": 43, + "GarbageCan": 44, + "Glassbottle": 45, + "HandTowel": 46, + "HandTowelHolder": 47, + "HousePlant": 48, + "Kettle": 49, + "KeyChain": 50, + "Knife": 51, + "Ladle": 52, + "Lamp": 53, + "Laptop": 54, + "LaundryHamper": 55, + "LaundryHamperLid": 56, + "Lettuce": 57, + "LettuceSliced": 58, + "LightSwitch": 59, + "Microwave": 60, + "Mirror": 61, + "Mug": 62, + "Newspaper": 63, + "Ottoman": 64, + "Painting": 65, + "Pan": 66, + "PaperTowelRoll": 67, + "Pen": 68, + "Pencil": 69, + "PepperShaker": 70, + "Pillow": 71, + "Plate": 72, + "Plunger": 73, + "Poster": 74, + "Pot": 75, + "Potato": 76, + "PotatoSliced": 77, + "RemoteControl": 78, + "Safe": 79, + "SaltShaker": 80, + "ScrubBrush": 81, + "Shelf": 82, + "ShowerCurtain": 83, + "ShowerDoor": 84, + "ShowerGlass": 85, + "ShowerHead": 86, + "SideTable": 87, + "Sink": 88, + "SinkBasin": 89, + "SoapBar": 90, + "SoapBottle": 91, + "Sofa": 92, + "Spatula": 93, + "Spoon": 94, + "SprayBottle": 95, + "Statue": 96, + "StoveBurner": 97, + "StoveKnob": 98, + "TVStand": 99, + "TeddyBear": 100, + "Television": 101, + "TennisRacket": 102, + "TissueBox": 103, + "Toaster": 104, + "Toilet": 105, + "ToiletPaper": 106, + "ToiletPaperHanger": 107, + "Tomato": 108, + "TomatoSliced": 109, + "Towel": 110, + "TowelHolder": 111, + "Vase": 112, + "Watch": 113, + "WateringCan": 114, + "Window": 115, + "WineBottle": 116 + }, + "idx_to_label": { + "0": "Background", + "1": "AlarmClock", + "2": "Apple", + "3": "AppleSliced", + "4": "ArmChair", + "5": "BaseballBat", + "6": "BasketBall", + "7": "Bathtub", + "8": "BathtubBasin", + "9": "Bed", + "10": "Blinds", + "11": "Book", + "12": "Boots", + "13": "Bowl", + "14": "Box", + "15": "Bread", + "16": "BreadSliced", + "17": "ButterKnife", + "18": "CD", + "19": "Cabinet", + "20": "Candle", + "21": "Cart", + "22": "CellPhone", + "23": "Chair", + "24": "Cloth", + "25": "CoffeeMachine", + "26": "CoffeeTable", + "27": "CounterTop", + "28": "CreditCard", + "29": "Cup", + "30": "Curtains", + "31": "Desk", + "32": "DeskLamp", + "33": "DiningTable", + "34": "DishSponge", + "35": "Drawer", + "36": "Dresser", + "37": "Egg", + "38": "EggCracked", + "39": "Faucet", + "40": "FloorLamp", + "41": "Footstool", + "42": "Fork", + "43": "Fridge", + "44": "GarbageCan", + "45": "Glassbottle", + "46": "HandTowel", + "47": "HandTowelHolder", + "48": "HousePlant", + "49": "Kettle", + "50": "KeyChain", + "51": "Knife", + "52": "Ladle", + "53": "Lamp", + "54": "Laptop", + "55": "LaundryHamper", + "56": "LaundryHamperLid", + "57": "Lettuce", + "58": "LettuceSliced", + "59": "LightSwitch", + "60": "Microwave", + "61": "Mirror", + "62": "Mug", + "63": "Newspaper", + "64": "Ottoman", + "65": "Painting", + "66": "Pan", + "67": "PaperTowelRoll", + "68": "Pen", + "69": "Pencil", + "70": "PepperShaker", + "71": "Pillow", + "72": "Plate", + "73": "Plunger", + "74": "Poster", + "75": "Pot", + "76": "Potato", + "77": "PotatoSliced", + "78": "RemoteControl", + "79": "Safe", + "80": "SaltShaker", + "81": "ScrubBrush", + "82": "Shelf", + "83": "ShowerCurtain", + "84": "ShowerDoor", + "85": "ShowerGlass", + "86": "ShowerHead", + "87": "SideTable", + "88": "Sink", + "89": "SinkBasin", + "90": "SoapBar", + "91": "SoapBottle", + "92": "Sofa", + "93": "Spatula", + "94": "Spoon", + "95": "SprayBottle", + "96": "Statue", + "97": "StoveBurner", + "98": "StoveKnob", + "99": "TVStand", + "100": "TeddyBear", + "101": "Television", + "102": "TennisRacket", + "103": "TissueBox", + "104": "Toaster", + "105": "Toilet", + "106": "ToiletPaper", + "107": "ToiletPaperHanger", + "108": "Tomato", + "109": "TomatoSliced", + "110": "Towel", + "111": "TowelHolder", + "112": "Vase", + "113": "Watch", + "114": "WateringCan", + "115": "Window", + "116": "WineBottle" + } +} diff --git a/src/emma_perception/constants/vinvl_x152c4_classmap.json b/src/emma_perception/constants/vinvl_x152c4_classmap.json new file mode 100644 index 0000000..36f9077 --- /dev/null +++ b/src/emma_perception/constants/vinvl_x152c4_classmap.json @@ -0,0 +1,6526 @@ +{ + "label_to_idx": { + "unknown": 0, + "ad": 1, + "adult": 2, + "advertisement": 3, + "air": 4, + "air conditioner": 5, + "air vent": 6, + "aircraft": 7, + "airplane": 8, + "airport": 9, + "alarm clock": 10, + "alcohol": 11, + "alley": 12, + "almond": 13, + "ambulance": 14, + "american flag": 15, + "animal": 16, + "ankle": 17, + "antelope": 18, + "antenna": 19, + "apartment": 20, + "apartment building": 21, + "apple": 22, + "apple logo": 23, + "appliance": 24, + "apron": 25, + "aquarium": 26, + "arch": 27, + "archway": 28, + "area": 29, + "area rug": 30, + "arm": 31, + "armchair": 32, + "armrest": 33, + "arrow": 34, + "art": 35, + "artichoke": 36, + "artwork": 37, + "asparagus": 38, + "asphalt": 39, + "athlete": 40, + "athletic shoe": 41, + "audience": 42, + "avocado": 43, + "awning": 44, + "baby": 45, + "back": 46, + "back pack": 47, + "background": 48, + "backpack": 49, + "backsplash": 50, + "backyard": 51, + "bacon": 52, + "badge": 53, + "bag": 54, + "bagel": 55, + "baked good": 56, + "balcony": 57, + "ball": 58, + "ball cap": 59, + "balloon": 60, + "bamboo": 61, + "banana": 62, + "banana bunch": 63, + "banana peel": 64, + "banana slice": 65, + "band": 66, + "bandage": 67, + "bandana": 68, + "bang": 69, + "bank": 70, + "banner": 71, + "bar": 72, + "bar stool": 73, + "bark": 74, + "barn": 75, + "barrel": 76, + "barricade": 77, + "barrier": 78, + "base": 79, + "baseball": 80, + "baseball bat": 81, + "baseball cap": 82, + "baseball field": 83, + "baseball game": 84, + "baseball glove": 85, + "baseball mitt": 86, + "baseball player": 87, + "baseball players": 88, + "baseball uniform": 89, + "baseboard": 90, + "baseline": 91, + "basil": 92, + "basin": 93, + "basket": 94, + "bat": 95, + "bath towel": 96, + "bath tub": 97, + "bathing suit": 98, + "bathroom": 99, + "bathroom sink": 100, + "bathtub": 101, + "batter": 102, + "battery": 103, + "beach": 104, + "beach chair": 105, + "beach umbrella": 106, + "bead": 107, + "beak": 108, + "beam": 109, + "bean": 110, + "beanie": 111, + "bear": 112, + "beard": 113, + "bed": 114, + "bed frame": 115, + "bedding": 116, + "bedroom": 117, + "bedspread": 118, + "beef": 119, + "beer": 120, + "beer bottle": 121, + "beet": 122, + "bell": 123, + "belt": 124, + "bench": 125, + "berry": 126, + "beverage": 127, + "bib": 128, + "bicycle": 129, + "bicyclist": 130, + "bike": 131, + "bike rack": 132, + "biker": 133, + "bikini": 134, + "billboard": 135, + "bin": 136, + "binder": 137, + "bird": 138, + "bird cage": 139, + "birthday cake": 140, + "biscuit": 141, + "black": 142, + "blackberry": 143, + "blade": 144, + "blanket": 145, + "blazer": 146, + "bleacher": 147, + "blender": 148, + "blind": 149, + "block": 150, + "blood": 151, + "blossom": 152, + "blouse": 153, + "blueberry": 154, + "board": 155, + "boardwalk": 156, + "boat": 157, + "body": 158, + "bolt": 159, + "bone": 160, + "book": 161, + "book shelf": 162, + "bookcase": 163, + "bookshelf": 164, + "boot": 165, + "booth": 166, + "border": 167, + "bottle": 168, + "bottle cap": 169, + "bottom": 170, + "boulder": 171, + "bouquet": 172, + "bow": 173, + "bow tie": 174, + "bowl": 175, + "box": 176, + "boy": 177, + "bracelet": 178, + "bracket": 179, + "brake light": 180, + "branch": 181, + "bread": 182, + "breakfast": 183, + "breast": 184, + "brick": 185, + "brick wall": 186, + "bride": 187, + "bridge": 188, + "bridle": 189, + "briefcase": 190, + "brim": 191, + "broccoli": 192, + "brocolli": 193, + "broom": 194, + "brownie": 195, + "brush": 196, + "bubble": 197, + "bucket": 198, + "buckle": 199, + "bud": 200, + "buffalo": 201, + "bug": 202, + "building": 203, + "bull": 204, + "bumper": 205, + "bun": 206, + "bunch": 207, + "bunny": 208, + "buoy": 209, + "burger": 210, + "burner": 211, + "bus": 212, + "bus driver": 213, + "bus stop": 214, + "bush": 215, + "butter": 216, + "butter knife": 217, + "butterfly": 218, + "button": 219, + "cab": 220, + "cabbage": 221, + "cabin": 222, + "cabinet": 223, + "cabinet door": 224, + "cable": 225, + "caboose": 226, + "cactus": 227, + "cafe": 228, + "cage": 229, + "cake": 230, + "calculator": 231, + "calendar": 232, + "calf": 233, + "camera": 234, + "can": 235, + "canal": 236, + "candle": 237, + "candle holder": 238, + "candy": 239, + "cane": 240, + "canister": 241, + "canoe": 242, + "canopy": 243, + "cap": 244, + "car": 245, + "card": 246, + "cardboard": 247, + "cardboard box": 248, + "cargo": 249, + "carpet": 250, + "carriage": 251, + "carrot": 252, + "cart": 253, + "carton": 254, + "case": 255, + "castle": 256, + "cat": 257, + "catcher": 258, + "catchers mitt": 259, + "cattle": 260, + "cauliflower": 261, + "cd": 262, + "ceiling": 263, + "ceiling fan": 264, + "ceiling light": 265, + "celery": 266, + "cell phone": 267, + "cellphone": 268, + "cement": 269, + "cereal": 270, + "chain": 271, + "chair": 272, + "chalkboard": 273, + "chandelier": 274, + "character": 275, + "charger": 276, + "cheek": 277, + "cheese": 278, + "chef": 279, + "cherry": 280, + "chest": 281, + "chicken": 282, + "child": 283, + "chili": 284, + "chimney": 285, + "chin": 286, + "chip": 287, + "chocolate": 288, + "chopstick": 289, + "christmas light": 290, + "christmas tree": 291, + "church": 292, + "cigarette": 293, + "circle": 294, + "city": 295, + "classroom": 296, + "claw": 297, + "clay": 298, + "cleat": 299, + "cliff": 300, + "clock": 301, + "clock face": 302, + "clock hand": 303, + "clock tower": 304, + "closet": 305, + "cloth": 306, + "clothes": 307, + "clothing": 308, + "cloud": 309, + "coach": 310, + "coaster": 311, + "coat": 312, + "cockpit": 313, + "coconut": 314, + "coffee": 315, + "coffee cup": 316, + "coffee maker": 317, + "coffee mug": 318, + "coffee pot": 319, + "coffee table": 320, + "coin": 321, + "coin slot": 322, + "coke": 323, + "collar": 324, + "column": 325, + "comb": 326, + "comforter": 327, + "computer": 328, + "computer desk": 329, + "computer keyboard": 330, + "computer monitor": 331, + "computer mouse": 332, + "computer screen": 333, + "concrete": 334, + "condiment": 335, + "conductor": 336, + "cone": 337, + "console": 338, + "container": 339, + "control": 340, + "control panel": 341, + "controller": 342, + "cooker": 343, + "cookie": 344, + "cooking utensil": 345, + "cooler": 346, + "copyright": 347, + "cord": 348, + "corn": 349, + "costume": 350, + "couch": 351, + "countertop": 352, + "couple": 353, + "court": 354, + "courtyard": 355, + "cover": 356, + "cow": 357, + "cowboy": 358, + "cowboy hat": 359, + "cpu": 360, + "crab": 361, + "cracker": 362, + "crane": 363, + "crate": 364, + "cream": 365, + "croissant": 366, + "cross": 367, + "crosswalk": 368, + "crowd": 369, + "crown": 370, + "crumb": 371, + "crust": 372, + "cub": 373, + "cucumber": 374, + "cuff": 375, + "cup": 376, + "cupboard": 377, + "cupcake": 378, + "curb": 379, + "curtain": 380, + "cushion": 381, + "customer": 382, + "cutting board": 383, + "cycle": 384, + "cyclist": 385, + "daisy": 386, + "dashboard": 387, + "date": 388, + "day": 389, + "decal": 390, + "deck": 391, + "decoration": 392, + "deer": 393, + "desert": 394, + "design": 395, + "desk": 396, + "desk lamp": 397, + "dessert": 398, + "device": 399, + "dial": 400, + "diamond": 401, + "dining room": 402, + "dining table": 403, + "dinner": 404, + "dinosaur": 405, + "dip": 406, + "dirt": 407, + "dirt bike": 408, + "dirt road": 409, + "disc": 410, + "dish": 411, + "dish soap": 412, + "dishwasher": 413, + "dispenser": 414, + "display": 415, + "display case": 416, + "distance": 417, + "dock": 418, + "dog": 419, + "doll": 420, + "dome": 421, + "donkey": 422, + "donut": 423, + "door": 424, + "door frame": 425, + "door handle": 426, + "door knob": 427, + "doorknob": 428, + "doorway": 429, + "dot": 430, + "dough": 431, + "dragon": 432, + "drain": 433, + "drape": 434, + "drawer": 435, + "drawing": 436, + "dress": 437, + "dress shirt": 438, + "dresser": 439, + "dressing": 440, + "drink": 441, + "driver": 442, + "driveway": 443, + "drum": 444, + "dryer": 445, + "duck": 446, + "dugout": 447, + "dumpster": 448, + "dvd": 449, + "dvd player": 450, + "eagle": 451, + "ear": 452, + "earphone": 453, + "earring": 454, + "easel": 455, + "egg": 456, + "eggplant": 457, + "elbow": 458, + "elbow pad": 459, + "electrical outlet": 460, + "electronics": 461, + "elephant": 462, + "emblem": 463, + "employee": 464, + "enclosure": 465, + "end": 466, + "end table": 467, + "engine": 468, + "engineer": 469, + "entertainment center": 470, + "entrance": 471, + "envelope": 472, + "exhaust pipe": 473, + "eye": 474, + "eyebrow": 475, + "face": 476, + "face mask": 477, + "facial hair": 478, + "family": 479, + "fan": 480, + "farm": 481, + "father": 482, + "faucet": 483, + "feather": 484, + "feeder": 485, + "female": 486, + "fence": 487, + "fence post": 488, + "fencing": 489, + "fender": 490, + "fern": 491, + "field": 492, + "figure": 493, + "figurine": 494, + "fin": 495, + "finger": 496, + "fingernail": 497, + "fire": 498, + "fire escape": 499, + "fire extinguisher": 500, + "fire hydrant": 501, + "fire truck": 502, + "fireplace": 503, + "fish": 504, + "fixture": 505, + "flag": 506, + "flame": 507, + "flamingo": 508, + "flip flop": 509, + "floor": 510, + "floor lamp": 511, + "flooring": 512, + "floret": 513, + "flour": 514, + "flower": 515, + "flower pot": 516, + "foam": 517, + "fog": 518, + "foil": 519, + "folder": 520, + "folding chair": 521, + "foliage": 522, + "food": 523, + "food truck": 524, + "foot": 525, + "foot print": 526, + "football": 527, + "footboard": 528, + "footprint": 529, + "foreground": 530, + "forehead": 531, + "forest": 532, + "fork": 533, + "fountain": 534, + "frame": 535, + "freezer": 536, + "french fries": 537, + "french fry": 538, + "frisbee": 539, + "frog": 540, + "front": 541, + "front legs": 542, + "front window": 543, + "frosting": 544, + "fruit": 545, + "fruit stand": 546, + "fry": 547, + "fur": 548, + "furniture": 549, + "fuselage": 550, + "gadget": 551, + "game": 552, + "game controller": 553, + "garage": 554, + "garage door": 555, + "garbage can": 556, + "garden": 557, + "garland": 558, + "garlic": 559, + "garment": 560, + "garnish": 561, + "gas station": 562, + "gas tank": 563, + "gate": 564, + "gazebo": 565, + "gazelle": 566, + "gear": 567, + "gentleman": 568, + "gift": 569, + "giraffe": 570, + "giraffe head": 571, + "girl": 572, + "glass": 573, + "glass door": 574, + "glass window": 575, + "glasses": 576, + "glaze": 577, + "globe": 578, + "glove": 579, + "goal": 580, + "goat": 581, + "goatee": 582, + "goggles": 583, + "goose": 584, + "gown": 585, + "graffiti": 586, + "grafitti": 587, + "grape": 588, + "grapefruit": 589, + "grass": 590, + "grass field": 591, + "grate": 592, + "gravel": 593, + "gravy": 594, + "green": 595, + "grill": 596, + "grinder": 597, + "groom": 598, + "ground": 599, + "group": 600, + "guard rail": 601, + "guitar": 602, + "gun": 603, + "guy": 604, + "hair": 605, + "hair dryer": 606, + "half": 607, + "hallway": 608, + "halter": 609, + "ham": 610, + "hamburger": 611, + "hammer": 612, + "hand": 613, + "hand towel": 614, + "handbag": 615, + "handle": 616, + "handle bars": 617, + "handlebar": 618, + "hangar": 619, + "hanger": 620, + "harbor": 621, + "harness": 622, + "hat": 623, + "hay": 624, + "head": 625, + "head band": 626, + "head light": 627, + "headband": 628, + "headboard": 629, + "headlight": 630, + "headphone": 631, + "heart": 632, + "heater": 633, + "hedge": 634, + "heel": 635, + "helicopter": 636, + "helmet": 637, + "herb": 638, + "herd": 639, + "highway": 640, + "hill": 641, + "hill side": 642, + "hillside": 643, + "hilltop": 644, + "holder": 645, + "hole": 646, + "home": 647, + "home plate": 648, + "honey": 649, + "hood": 650, + "hoodie": 651, + "hoof": 652, + "hook": 653, + "horizon": 654, + "horn": 655, + "horse": 656, + "hose": 657, + "hot dog": 658, + "hotel": 659, + "hotel room": 660, + "hour hand": 661, + "house": 662, + "hubcap": 663, + "hurdle": 664, + "hut": 665, + "ice": 666, + "ice cream": 667, + "icing": 668, + "icon": 669, + "image": 670, + "infield": 671, + "ingredient": 672, + "inside": 673, + "instruction": 674, + "instrument": 675, + "intersection": 676, + "iphone": 677, + "ipod": 678, + "island": 679, + "item": 680, + "ivy": 681, + "jacket": 682, + "jar": 683, + "jean": 684, + "jeep": 685, + "jersey": 686, + "jet": 687, + "jet engine": 688, + "jockey": 689, + "jug": 690, + "juice": 691, + "jumpsuit": 692, + "kayak": 693, + "ketchup": 694, + "ketchup bottle": 695, + "kettle": 696, + "key": 697, + "keyboard": 698, + "keypad": 699, + "kickstand": 700, + "kid": 701, + "kiosk": 702, + "kitchen": 703, + "kite": 704, + "kitten": 705, + "kitty": 706, + "kiwi": 707, + "knee": 708, + "knee pad": 709, + "kneepad": 710, + "knife": 711, + "knife block": 712, + "knob": 713, + "knot": 714, + "label": 715, + "ladder": 716, + "ladle": 717, + "lady": 718, + "lake": 719, + "lamb": 720, + "lamp": 721, + "lamp post": 722, + "lamp shade": 723, + "lampshade": 724, + "land": 725, + "landing gear": 726, + "landscape": 727, + "lane": 728, + "lantern": 729, + "lanyard": 730, + "lapel": 731, + "laptop": 732, + "laptop computer": 733, + "latch": 734, + "lawn": 735, + "layer": 736, + "leaf": 737, + "leash": 738, + "ledge": 739, + "leg": 740, + "legging": 741, + "lemon": 742, + "letter": 743, + "lettering": 744, + "lettuce": 745, + "license": 746, + "license plate": 747, + "lid": 748, + "life jacket": 749, + "life preserver": 750, + "life vest": 751, + "lift": 752, + "light": 753, + "light bulb": 754, + "light fixture": 755, + "light pole": 756, + "light post": 757, + "light switch": 758, + "lighter": 759, + "lighthouse": 760, + "limb": 761, + "lime": 762, + "line": 763, + "lion": 764, + "lip": 765, + "lipstick": 766, + "liquid": 767, + "little girl": 768, + "living room": 769, + "lock": 770, + "locomotive": 771, + "log": 772, + "logo": 773, + "lot": 774, + "lotion": 775, + "lounge chair": 776, + "luggage": 777, + "luggage cart": 778, + "lunch": 779, + "macaroni": 780, + "machine": 781, + "magazine": 782, + "magnet": 783, + "mailbox": 784, + "male": 785, + "man": 786, + "mane": 787, + "mango": 788, + "manhole": 789, + "manhole cover": 790, + "mannequin": 791, + "mantle": 792, + "map": 793, + "marina": 794, + "marker": 795, + "market": 796, + "mask": 797, + "mast": 798, + "mat": 799, + "match": 800, + "mattress": 801, + "meadow": 802, + "meal": 803, + "meat": 804, + "meatball": 805, + "median": 806, + "medicine cabinet": 807, + "melon": 808, + "menu": 809, + "mesh": 810, + "metal": 811, + "meter": 812, + "microphone": 813, + "microwave": 814, + "milk": 815, + "minivan": 816, + "minute hand": 817, + "mirror": 818, + "mitt": 819, + "mitten": 820, + "mixer": 821, + "mixing bowl": 822, + "money": 823, + "monitor": 824, + "monkey": 825, + "monument": 826, + "moon": 827, + "moped": 828, + "moss": 829, + "mother": 830, + "motor": 831, + "motor bike": 832, + "motorbike": 833, + "motorcycle": 834, + "motorcyclist": 835, + "mound": 836, + "mountain": 837, + "mountain range": 838, + "mountain side": 839, + "mountain top": 840, + "mountainside": 841, + "mouse": 842, + "mouse pad": 843, + "mousepad": 844, + "moustache": 845, + "mouth": 846, + "mozzarella": 847, + "mud": 848, + "muffin": 849, + "muffler": 850, + "mug": 851, + "mulch": 852, + "museum": 853, + "mushroom": 854, + "mustache": 855, + "mustard": 856, + "muzzle": 857, + "nail": 858, + "name": 859, + "name tag": 860, + "napkin": 861, + "neck": 862, + "neck tie": 863, + "necklace": 864, + "necktie": 865, + "nest": 866, + "net": 867, + "netting": 868, + "newspaper": 869, + "night": 870, + "nightstand": 871, + "noodle": 872, + "nose": 873, + "nostril": 874, + "notebook": 875, + "notepad": 876, + "number": 877, + "numeral": 878, + "nut": 879, + "oar": 880, + "object": 881, + "obstacle": 882, + "ocean": 883, + "ocean water": 884, + "office": 885, + "office chair": 886, + "officer": 887, + "oil": 888, + "olive": 889, + "onion": 890, + "onion ring": 891, + "orange": 892, + "ornament": 893, + "ostrich": 894, + "ottoman": 895, + "outfield": 896, + "outfit": 897, + "outlet": 898, + "outside": 899, + "oven": 900, + "oven door": 901, + "overall": 902, + "overhang": 903, + "overpass": 904, + "owl": 905, + "ox": 906, + "pack": 907, + "package": 908, + "packet": 909, + "pad": 910, + "paddle": 911, + "page": 912, + "paint": 913, + "painting": 914, + "pajama": 915, + "palm": 916, + "palm tree": 917, + "pan": 918, + "pancake": 919, + "panda": 920, + "pane": 921, + "panel": 922, + "pant": 923, + "paper": 924, + "paper plate": 925, + "paper towel": 926, + "parachute": 927, + "parade": 928, + "parasail": 929, + "parasol": 930, + "park": 931, + "park bench": 932, + "parking lot": 933, + "parking meter": 934, + "parking sign": 935, + "parrot": 936, + "parsley": 937, + "passenger": 938, + "passenger car": 939, + "passenger train": 940, + "pasta": 941, + "pastry": 942, + "pasture": 943, + "patch": 944, + "path": 945, + "pathway": 946, + "patio": 947, + "pavement": 948, + "paw": 949, + "pea": 950, + "peach": 951, + "peak": 952, + "peanut": 953, + "pear": 954, + "pebble": 955, + "pedal": 956, + "pedestrian": 957, + "peel": 958, + "pen": 959, + "pencil": 960, + "penguin": 961, + "pepper": 962, + "pepper shaker": 963, + "pepperoni": 964, + "person": 965, + "petal": 966, + "phone": 967, + "photo": 968, + "photograph": 969, + "photographer": 970, + "piano": 971, + "pickle": 972, + "pickup truck": 973, + "picnic table": 974, + "picture": 975, + "picture frame": 976, + "pie": 977, + "piece": 978, + "pier": 979, + "pig": 980, + "pigeon": 981, + "pile": 982, + "pillar": 983, + "pillow": 984, + "pillow case": 985, + "pillowcase": 986, + "pilot": 987, + "pin": 988, + "pine tree": 989, + "pineapple": 990, + "pipe": 991, + "pitcher": 992, + "pitchers mound": 993, + "pizza": 994, + "pizza box": 995, + "pizza crust": 996, + "pizza cutter": 997, + "pizza slice": 998, + "placemat": 999, + "plain": 1000, + "plant": 1001, + "plantain": 1002, + "planter": 1003, + "plaque": 1004, + "plastic": 1005, + "plate": 1006, + "platform": 1007, + "platter": 1008, + "player": 1009, + "playground": 1010, + "plug": 1011, + "plumbing": 1012, + "pocket": 1013, + "polar bear": 1014, + "pole": 1015, + "police": 1016, + "police car": 1017, + "police officer": 1018, + "policeman": 1019, + "polo shirt": 1020, + "pond": 1021, + "pony": 1022, + "pony tail": 1023, + "ponytail": 1024, + "pool": 1025, + "porch": 1026, + "portrait": 1027, + "post": 1028, + "poster": 1029, + "pot": 1030, + "potato": 1031, + "pouch": 1032, + "powder": 1033, + "powdered sugar": 1034, + "power line": 1035, + "power pole": 1036, + "price tag": 1037, + "print": 1038, + "printer": 1039, + "produce": 1040, + "product": 1041, + "projector": 1042, + "prong": 1043, + "propeller": 1044, + "puddle": 1045, + "pump": 1046, + "pumpkin": 1047, + "puppy": 1048, + "purse": 1049, + "quilt": 1050, + "rabbit": 1051, + "racer": 1052, + "rack": 1053, + "racket": 1054, + "radiator": 1055, + "radio": 1056, + "radish": 1057, + "raft": 1058, + "rail": 1059, + "railing": 1060, + "railroad": 1061, + "railroad tracks": 1062, + "railway": 1063, + "rain": 1064, + "rainbow": 1065, + "raincoat": 1066, + "raisin": 1067, + "ram": 1068, + "ramp": 1069, + "range": 1070, + "raspberry": 1071, + "receipt": 1072, + "recliner": 1073, + "referee": 1074, + "reflection": 1075, + "reflector": 1076, + "refrigerator": 1077, + "reign": 1078, + "remote": 1079, + "remote control": 1080, + "restaurant": 1081, + "restroom": 1082, + "rib": 1083, + "ribbon": 1084, + "rice": 1085, + "rider": 1086, + "rim": 1087, + "ring": 1088, + "ripple": 1089, + "river": 1090, + "road": 1091, + "roadside": 1092, + "roadway": 1093, + "robe": 1094, + "rock": 1095, + "rock wall": 1096, + "rod": 1097, + "roll": 1098, + "roman numeral": 1099, + "roman numerals": 1100, + "roof": 1101, + "rooftop": 1102, + "room": 1103, + "rope": 1104, + "rose": 1105, + "router": 1106, + "rug": 1107, + "runway": 1108, + "sack": 1109, + "saddle": 1110, + "safety cone": 1111, + "safety jacket": 1112, + "sail": 1113, + "sailboat": 1114, + "salad": 1115, + "salt": 1116, + "salt shaker": 1117, + "sand": 1118, + "sandal": 1119, + "sandwhich": 1120, + "sandwich": 1121, + "satellite dish": 1122, + "sauce": 1123, + "saucer": 1124, + "sausage": 1125, + "scaffolding": 1126, + "scale": 1127, + "scarf": 1128, + "scene": 1129, + "school bus": 1130, + "scissor": 1131, + "scissors": 1132, + "sconce": 1133, + "scooter": 1134, + "scoreboard": 1135, + "screen": 1136, + "screw": 1137, + "sculpture": 1138, + "sea": 1139, + "sea foam": 1140, + "seagull": 1141, + "seal": 1142, + "seasoning": 1143, + "seat": 1144, + "seaweed": 1145, + "second floor": 1146, + "sedan": 1147, + "seed": 1148, + "serving tray": 1149, + "shack": 1150, + "shade": 1151, + "shadow": 1152, + "shaker": 1153, + "shampoo": 1154, + "she": 1155, + "shed": 1156, + "sheep": 1157, + "sheet": 1158, + "shelf": 1159, + "shelter": 1160, + "shield": 1161, + "shin guard": 1162, + "shin guards": 1163, + "shingle": 1164, + "ship": 1165, + "shirt": 1166, + "shoe": 1167, + "shoelace": 1168, + "shop": 1169, + "shopping bag": 1170, + "shore": 1171, + "shoreline": 1172, + "short": 1173, + "shoulder": 1174, + "shovel": 1175, + "shower": 1176, + "shower curtain": 1177, + "shower door": 1178, + "shower head": 1179, + "shrimp": 1180, + "shrub": 1181, + "shutter": 1182, + "side mirror": 1183, + "side table": 1184, + "side window": 1185, + "sidewalk": 1186, + "sign": 1187, + "sign post": 1188, + "signal": 1189, + "signal light": 1190, + "silverware": 1191, + "sink": 1192, + "skate park": 1193, + "skateboard": 1194, + "skateboard ramp": 1195, + "skateboarder": 1196, + "skatepark": 1197, + "skater": 1198, + "ski": 1199, + "ski boot": 1200, + "ski boots": 1201, + "ski goggles": 1202, + "ski jacket": 1203, + "ski lift": 1204, + "ski pants": 1205, + "ski pole": 1206, + "ski poles": 1207, + "ski slope": 1208, + "ski suit": 1209, + "ski tracks": 1210, + "skier": 1211, + "skiier": 1212, + "skiis": 1213, + "skillet": 1214, + "skin": 1215, + "skirt": 1216, + "skull": 1217, + "sky": 1218, + "skylight": 1219, + "skyscraper": 1220, + "slab": 1221, + "slack": 1222, + "slat": 1223, + "sled": 1224, + "sleeve": 1225, + "slice": 1226, + "slope": 1227, + "slot": 1228, + "smartphone": 1229, + "smile": 1230, + "smoke": 1231, + "smoke stack": 1232, + "snack": 1233, + "sneaker": 1234, + "snout": 1235, + "snow": 1236, + "snow board": 1237, + "snow pants": 1238, + "snow suit": 1239, + "snowboard": 1240, + "snowboarder": 1241, + "snowflake": 1242, + "snowman": 1243, + "snowsuit": 1244, + "soap": 1245, + "soap bottle": 1246, + "soap dish": 1247, + "soap dispenser": 1248, + "soccer ball": 1249, + "soccer field": 1250, + "soccer player": 1251, + "sock": 1252, + "socket": 1253, + "soda": 1254, + "soda bottle": 1255, + "soda can": 1256, + "sofa": 1257, + "soil": 1258, + "soldier": 1259, + "soup": 1260, + "spatula": 1261, + "speaker": 1262, + "spear": 1263, + "spectator": 1264, + "spice": 1265, + "spinach": 1266, + "spire": 1267, + "splash": 1268, + "spoke": 1269, + "sponge": 1270, + "spoon": 1271, + "spot": 1272, + "spray": 1273, + "spray bottle": 1274, + "sprinkle": 1275, + "squash": 1276, + "stabilizer": 1277, + "stack": 1278, + "stadium": 1279, + "stage": 1280, + "stain": 1281, + "stair": 1282, + "staircase": 1283, + "stairway": 1284, + "stall": 1285, + "stand": 1286, + "stapler": 1287, + "star": 1288, + "station": 1289, + "station wagon": 1290, + "statue": 1291, + "steak": 1292, + "steam": 1293, + "steeple": 1294, + "steering wheel": 1295, + "stem": 1296, + "step": 1297, + "stereo": 1298, + "stick": 1299, + "sticker": 1300, + "stone": 1301, + "stone wall": 1302, + "stool": 1303, + "stop": 1304, + "stop light": 1305, + "stop sign": 1306, + "stoplight": 1307, + "store": 1308, + "storefront": 1309, + "stove": 1310, + "stove top": 1311, + "strap": 1312, + "straw": 1313, + "strawberry": 1314, + "stream": 1315, + "streamer": 1316, + "street": 1317, + "street lamp": 1318, + "street light": 1319, + "street sign": 1320, + "string": 1321, + "strip": 1322, + "stripe": 1323, + "stroller": 1324, + "structure": 1325, + "student": 1326, + "stuffed animal": 1327, + "stuffed bear": 1328, + "stump": 1329, + "sugar": 1330, + "suit": 1331, + "suit jacket": 1332, + "suitcase": 1333, + "sun": 1334, + "sunflower": 1335, + "sunglasses": 1336, + "sunset": 1337, + "surf": 1338, + "surface": 1339, + "surfboard": 1340, + "surfer": 1341, + "surfing": 1342, + "suspender": 1343, + "suv": 1344, + "swan": 1345, + "sweat band": 1346, + "sweatband": 1347, + "sweater": 1348, + "sweatpants": 1349, + "sweatshirt": 1350, + "sweet potato": 1351, + "swim trunks": 1352, + "swimming pool": 1353, + "swimsuit": 1354, + "switch": 1355, + "sword": 1356, + "symbol": 1357, + "syrup": 1358, + "table": 1359, + "table cloth": 1360, + "table lamp": 1361, + "tablecloth": 1362, + "tablet": 1363, + "tabletop": 1364, + "tag": 1365, + "tail": 1366, + "tail feathers": 1367, + "tail fin": 1368, + "tail light": 1369, + "tail lights": 1370, + "tail wing": 1371, + "tangerine": 1372, + "tank": 1373, + "tank top": 1374, + "tap": 1375, + "tape": 1376, + "tarmac": 1377, + "tarp": 1378, + "tattoo": 1379, + "taxi": 1380, + "taxi cab": 1381, + "tea": 1382, + "tea kettle": 1383, + "tea pot": 1384, + "team": 1385, + "teapot": 1386, + "teddy": 1387, + "teddy bear": 1388, + "tee shirt": 1389, + "teeth": 1390, + "telephone": 1391, + "telephone pole": 1392, + "television": 1393, + "tennis": 1394, + "tennis ball": 1395, + "tennis court": 1396, + "tennis match": 1397, + "tennis net": 1398, + "tennis player": 1399, + "tennis racket": 1400, + "tennis shoe": 1401, + "tent": 1402, + "terminal": 1403, + "text": 1404, + "throw pillow": 1405, + "thumb": 1406, + "tie": 1407, + "tiger": 1408, + "tights": 1409, + "tile": 1410, + "tile floor": 1411, + "tine": 1412, + "tire": 1413, + "tissue": 1414, + "tissue box": 1415, + "toast": 1416, + "toaster": 1417, + "toaster oven": 1418, + "toddler": 1419, + "toe": 1420, + "tofu": 1421, + "toilet": 1422, + "toilet bowl": 1423, + "toilet brush": 1424, + "toilet lid": 1425, + "toilet paper": 1426, + "toilet seat": 1427, + "toilet tank": 1428, + "toiletry": 1429, + "tomato": 1430, + "tomato sauce": 1431, + "tomato slice": 1432, + "tongs": 1433, + "tongue": 1434, + "tool": 1435, + "toothbrush": 1436, + "toothpaste": 1437, + "toothpick": 1438, + "top": 1439, + "topping": 1440, + "tortilla": 1441, + "touchpad": 1442, + "tourist": 1443, + "towel": 1444, + "towel rack": 1445, + "tower": 1446, + "town": 1447, + "toy": 1448, + "track": 1449, + "tractor": 1450, + "traffic": 1451, + "traffic cone": 1452, + "traffic light": 1453, + "traffic sign": 1454, + "traffic signal": 1455, + "trail": 1456, + "trailer": 1457, + "train": 1458, + "train car": 1459, + "train cars": 1460, + "train engine": 1461, + "train front": 1462, + "train platform": 1463, + "train station": 1464, + "train track": 1465, + "train tracks": 1466, + "trash": 1467, + "trash bag": 1468, + "trash bin": 1469, + "trash can": 1470, + "trashcan": 1471, + "tray": 1472, + "tree": 1473, + "tree branch": 1474, + "tree leaves": 1475, + "tree line": 1476, + "tree trunk": 1477, + "triangle": 1478, + "trick": 1479, + "tripod": 1480, + "trolley": 1481, + "trough": 1482, + "trousers": 1483, + "truck": 1484, + "trunk": 1485, + "tshirt": 1486, + "tub": 1487, + "tube": 1488, + "tulip": 1489, + "tunnel": 1490, + "turbine": 1491, + "turf": 1492, + "turkey": 1493, + "tusk": 1494, + "tv stand": 1495, + "twig": 1496, + "umbrella": 1497, + "umpire": 1498, + "undershirt": 1499, + "underwear": 1500, + "uniform": 1501, + "urinal": 1502, + "urn": 1503, + "utensil": 1504, + "utility pole": 1505, + "valley": 1506, + "van": 1507, + "vane": 1508, + "vanity": 1509, + "vase": 1510, + "vegetable": 1511, + "veggie": 1512, + "vehicle": 1513, + "vending machine": 1514, + "vent": 1515, + "vest": 1516, + "video camera": 1517, + "video game": 1518, + "view": 1519, + "village": 1520, + "vine": 1521, + "visor": 1522, + "wagon": 1523, + "waist": 1524, + "wake": 1525, + "walkway": 1526, + "wall": 1527, + "wallet": 1528, + "wallpaper": 1529, + "walnut": 1530, + "washer": 1531, + "washing machine": 1532, + "waste basket": 1533, + "watch": 1534, + "water": 1535, + "water bottle": 1536, + "water tank": 1537, + "waterfall": 1538, + "watermark": 1539, + "watermelon": 1540, + "wave": 1541, + "weather": 1542, + "weather vane": 1543, + "website": 1544, + "weed": 1545, + "wet suit": 1546, + "wetsuit": 1547, + "wheel": 1548, + "wheelchair": 1549, + "whipped cream": 1550, + "whisk": 1551, + "whisker": 1552, + "whiteboard": 1553, + "wig": 1554, + "wii": 1555, + "wii controller": 1556, + "wii remote": 1557, + "wild": 1558, + "wildflower": 1559, + "window": 1560, + "window frame": 1561, + "window sill": 1562, + "windowsill": 1563, + "windshield": 1564, + "windshield wiper": 1565, + "windshield wipers": 1566, + "wine": 1567, + "wine bottle": 1568, + "wing": 1569, + "wiper": 1570, + "wire": 1571, + "wire fence": 1572, + "woman": 1573, + "wood": 1574, + "wool": 1575, + "word": 1576, + "worker": 1577, + "wrapper": 1578, + "wrist": 1579, + "wrist band": 1580, + "wrist watch": 1581, + "wristband": 1582, + "wristwatch": 1583, + "writing": 1584, + "yacht": 1585, + "yard": 1586, + "yellow": 1587, + "yogurt": 1588, + "yolk": 1589, + "young man": 1590, + "zebra": 1591, + "zipper": 1592, + "zoo": 1593, + "zucchini": 1594 + }, + "idx_to_label": { + "0": "unknown", + "1": "ad", + "2": "adult", + "3": "advertisement", + "4": "air", + "5": "air conditioner", + "6": "air vent", + "7": "aircraft", + "8": "airplane", + "9": "airport", + "10": "alarm clock", + "11": "alcohol", + "12": "alley", + "13": "almond", + "14": "ambulance", + "15": "american flag", + "16": "animal", + "17": "ankle", + "18": "antelope", + "19": "antenna", + "20": "apartment", + "21": "apartment building", + "22": "apple", + "23": "apple logo", + "24": "appliance", + "25": "apron", + "26": "aquarium", + "27": "arch", + "28": "archway", + "29": "area", + "30": "area rug", + "31": "arm", + "32": "armchair", + "33": "armrest", + "34": "arrow", + "35": "art", + "36": "artichoke", + "37": "artwork", + "38": "asparagus", + "39": "asphalt", + "40": "athlete", + "41": "athletic shoe", + "42": "audience", + "43": "avocado", + "44": "awning", + "45": "baby", + "46": "back", + "47": "back pack", + "48": "background", + "49": "backpack", + "50": "backsplash", + "51": "backyard", + "52": "bacon", + "53": "badge", + "54": "bag", + "55": "bagel", + "56": "baked good", + "57": "balcony", + "58": "ball", + "59": "ball cap", + "60": "balloon", + "61": "bamboo", + "62": "banana", + "63": "banana bunch", + "64": "banana peel", + "65": "banana slice", + "66": "band", + "67": "bandage", + "68": "bandana", + "69": "bang", + "70": "bank", + "71": "banner", + "72": "bar", + "73": "bar stool", + "74": "bark", + "75": "barn", + "76": "barrel", + "77": "barricade", + "78": "barrier", + "79": "base", + "80": "baseball", + "81": "baseball bat", + "82": "baseball cap", + "83": "baseball field", + "84": "baseball game", + "85": "baseball glove", + "86": "baseball mitt", + "87": "baseball player", + "88": "baseball players", + "89": "baseball uniform", + "90": "baseboard", + "91": "baseline", + "92": "basil", + "93": "basin", + "94": "basket", + "95": "bat", + "96": "bath towel", + "97": "bath tub", + "98": "bathing suit", + "99": "bathroom", + "100": "bathroom sink", + "101": "bathtub", + "102": "batter", + "103": "battery", + "104": "beach", + "105": "beach chair", + "106": "beach umbrella", + "107": "bead", + "108": "beak", + "109": "beam", + "110": "bean", + "111": "beanie", + "112": "bear", + "113": "beard", + "114": "bed", + "115": "bed frame", + "116": "bedding", + "117": "bedroom", + "118": "bedspread", + "119": "beef", + "120": "beer", + "121": "beer bottle", + "122": "beet", + "123": "bell", + "124": "belt", + "125": "bench", + "126": "berry", + "127": "beverage", + "128": "bib", + "129": "bicycle", + "130": "bicyclist", + "131": "bike", + "132": "bike rack", + "133": "biker", + "134": "bikini", + "135": "billboard", + "136": "bin", + "137": "binder", + "138": "bird", + "139": "bird cage", + "140": "birthday cake", + "141": "biscuit", + "142": "black", + "143": "blackberry", + "144": "blade", + "145": "blanket", + "146": "blazer", + "147": "bleacher", + "148": "blender", + "149": "blind", + "150": "block", + "151": "blood", + "152": "blossom", + "153": "blouse", + "154": "blueberry", + "155": "board", + "156": "boardwalk", + "157": "boat", + "158": "body", + "159": "bolt", + "160": "bone", + "161": "book", + "162": "book shelf", + "163": "bookcase", + "164": "bookshelf", + "165": "boot", + "166": "booth", + "167": "border", + "168": "bottle", + "169": "bottle cap", + "170": "bottom", + "171": "boulder", + "172": "bouquet", + "173": "bow", + "174": "bow tie", + "175": "bowl", + "176": "box", + "177": "boy", + "178": "bracelet", + "179": "bracket", + "180": "brake light", + "181": "branch", + "182": "bread", + "183": "breakfast", + "184": "breast", + "185": "brick", + "186": "brick wall", + "187": "bride", + "188": "bridge", + "189": "bridle", + "190": "briefcase", + "191": "brim", + "192": "broccoli", + "193": "brocolli", + "194": "broom", + "195": "brownie", + "196": "brush", + "197": "bubble", + "198": "bucket", + "199": "buckle", + "200": "bud", + "201": "buffalo", + "202": "bug", + "203": "building", + "204": "bull", + "205": "bumper", + "206": "bun", + "207": "bunch", + "208": "bunny", + "209": "buoy", + "210": "burger", + "211": "burner", + "212": "bus", + "213": "bus driver", + "214": "bus stop", + "215": "bush", + "216": "butter", + "217": "butter knife", + "218": "butterfly", + "219": "button", + "220": "cab", + "221": "cabbage", + "222": "cabin", + "223": "cabinet", + "224": "cabinet door", + "225": "cable", + "226": "caboose", + "227": "cactus", + "228": "cafe", + "229": "cage", + "230": "cake", + "231": "calculator", + "232": "calendar", + "233": "calf", + "234": "camera", + "235": "can", + "236": "canal", + "237": "candle", + "238": "candle holder", + "239": "candy", + "240": "cane", + "241": "canister", + "242": "canoe", + "243": "canopy", + "244": "cap", + "245": "car", + "246": "card", + "247": "cardboard", + "248": "cardboard box", + "249": "cargo", + "250": "carpet", + "251": "carriage", + "252": "carrot", + "253": "cart", + "254": "carton", + "255": "case", + "256": "castle", + "257": "cat", + "258": "catcher", + "259": "catchers mitt", + "260": "cattle", + "261": "cauliflower", + "262": "cd", + "263": "ceiling", + "264": "ceiling fan", + "265": "ceiling light", + "266": "celery", + "267": "cell phone", + "268": "cellphone", + "269": "cement", + "270": "cereal", + "271": "chain", + "272": "chair", + "273": "chalkboard", + "274": "chandelier", + "275": "character", + "276": "charger", + "277": "cheek", + "278": "cheese", + "279": "chef", + "280": "cherry", + "281": "chest", + "282": "chicken", + "283": "child", + "284": "chili", + "285": "chimney", + "286": "chin", + "287": "chip", + "288": "chocolate", + "289": "chopstick", + "290": "christmas light", + "291": "christmas tree", + "292": "church", + "293": "cigarette", + "294": "circle", + "295": "city", + "296": "classroom", + "297": "claw", + "298": "clay", + "299": "cleat", + "300": "cliff", + "301": "clock", + "302": "clock face", + "303": "clock hand", + "304": "clock tower", + "305": "closet", + "306": "cloth", + "307": "clothes", + "308": "clothing", + "309": "cloud", + "310": "coach", + "311": "coaster", + "312": "coat", + "313": "cockpit", + "314": "coconut", + "315": "coffee", + "316": "coffee cup", + "317": "coffee maker", + "318": "coffee mug", + "319": "coffee pot", + "320": "coffee table", + "321": "coin", + "322": "coin slot", + "323": "coke", + "324": "collar", + "325": "column", + "326": "comb", + "327": "comforter", + "328": "computer", + "329": "computer desk", + "330": "computer keyboard", + "331": "computer monitor", + "332": "computer mouse", + "333": "computer screen", + "334": "concrete", + "335": "condiment", + "336": "conductor", + "337": "cone", + "338": "console", + "339": "container", + "340": "control", + "341": "control panel", + "342": "controller", + "343": "cooker", + "344": "cookie", + "345": "cooking utensil", + "346": "cooler", + "347": "copyright", + "348": "cord", + "349": "corn", + "350": "costume", + "351": "couch", + "352": "countertop", + "353": "couple", + "354": "court", + "355": "courtyard", + "356": "cover", + "357": "cow", + "358": "cowboy", + "359": "cowboy hat", + "360": "cpu", + "361": "crab", + "362": "cracker", + "363": "crane", + "364": "crate", + "365": "cream", + "366": "croissant", + "367": "cross", + "368": "crosswalk", + "369": "crowd", + "370": "crown", + "371": "crumb", + "372": "crust", + "373": "cub", + "374": "cucumber", + "375": "cuff", + "376": "cup", + "377": "cupboard", + "378": "cupcake", + "379": "curb", + "380": "curtain", + "381": "cushion", + "382": "customer", + "383": "cutting board", + "384": "cycle", + "385": "cyclist", + "386": "daisy", + "387": "dashboard", + "388": "date", + "389": "day", + "390": "decal", + "391": "deck", + "392": "decoration", + "393": "deer", + "394": "desert", + "395": "design", + "396": "desk", + "397": "desk lamp", + "398": "dessert", + "399": "device", + "400": "dial", + "401": "diamond", + "402": "dining room", + "403": "dining table", + "404": "dinner", + "405": "dinosaur", + "406": "dip", + "407": "dirt", + "408": "dirt bike", + "409": "dirt road", + "410": "disc", + "411": "dish", + "412": "dish soap", + "413": "dishwasher", + "414": "dispenser", + "415": "display", + "416": "display case", + "417": "distance", + "418": "dock", + "419": "dog", + "420": "doll", + "421": "dome", + "422": "donkey", + "423": "donut", + "424": "door", + "425": "door frame", + "426": "door handle", + "427": "door knob", + "428": "doorknob", + "429": "doorway", + "430": "dot", + "431": "dough", + "432": "dragon", + "433": "drain", + "434": "drape", + "435": "drawer", + "436": "drawing", + "437": "dress", + "438": "dress shirt", + "439": "dresser", + "440": "dressing", + "441": "drink", + "442": "driver", + "443": "driveway", + "444": "drum", + "445": "dryer", + "446": "duck", + "447": "dugout", + "448": "dumpster", + "449": "dvd", + "450": "dvd player", + "451": "eagle", + "452": "ear", + "453": "earphone", + "454": "earring", + "455": "easel", + "456": "egg", + "457": "eggplant", + "458": "elbow", + "459": "elbow pad", + "460": "electrical outlet", + "461": "electronics", + "462": "elephant", + "463": "emblem", + "464": "employee", + "465": "enclosure", + "466": "end", + "467": "end table", + "468": "engine", + "469": "engineer", + "470": "entertainment center", + "471": "entrance", + "472": "envelope", + "473": "exhaust pipe", + "474": "eye", + "475": "eyebrow", + "476": "face", + "477": "face mask", + "478": "facial hair", + "479": "family", + "480": "fan", + "481": "farm", + "482": "father", + "483": "faucet", + "484": "feather", + "485": "feeder", + "486": "female", + "487": "fence", + "488": "fence post", + "489": "fencing", + "490": "fender", + "491": "fern", + "492": "field", + "493": "figure", + "494": "figurine", + "495": "fin", + "496": "finger", + "497": "fingernail", + "498": "fire", + "499": "fire escape", + "500": "fire extinguisher", + "501": "fire hydrant", + "502": "fire truck", + "503": "fireplace", + "504": "fish", + "505": "fixture", + "506": "flag", + "507": "flame", + "508": "flamingo", + "509": "flip flop", + "510": "floor", + "511": "floor lamp", + "512": "flooring", + "513": "floret", + "514": "flour", + "515": "flower", + "516": "flower pot", + "517": "foam", + "518": "fog", + "519": "foil", + "520": "folder", + "521": "folding chair", + "522": "foliage", + "523": "food", + "524": "food truck", + "525": "foot", + "526": "foot print", + "527": "football", + "528": "footboard", + "529": "footprint", + "530": "foreground", + "531": "forehead", + "532": "forest", + "533": "fork", + "534": "fountain", + "535": "frame", + "536": "freezer", + "537": "french fries", + "538": "french fry", + "539": "frisbee", + "540": "frog", + "541": "front", + "542": "front legs", + "543": "front window", + "544": "frosting", + "545": "fruit", + "546": "fruit stand", + "547": "fry", + "548": "fur", + "549": "furniture", + "550": "fuselage", + "551": "gadget", + "552": "game", + "553": "game controller", + "554": "garage", + "555": "garage door", + "556": "garbage can", + "557": "garden", + "558": "garland", + "559": "garlic", + "560": "garment", + "561": "garnish", + "562": "gas station", + "563": "gas tank", + "564": "gate", + "565": "gazebo", + "566": "gazelle", + "567": "gear", + "568": "gentleman", + "569": "gift", + "570": "giraffe", + "571": "giraffe head", + "572": "girl", + "573": "glass", + "574": "glass door", + "575": "glass window", + "576": "glasses", + "577": "glaze", + "578": "globe", + "579": "glove", + "580": "goal", + "581": "goat", + "582": "goatee", + "583": "goggles", + "584": "goose", + "585": "gown", + "586": "graffiti", + "587": "grafitti", + "588": "grape", + "589": "grapefruit", + "590": "grass", + "591": "grass field", + "592": "grate", + "593": "gravel", + "594": "gravy", + "595": "green", + "596": "grill", + "597": "grinder", + "598": "groom", + "599": "ground", + "600": "group", + "601": "guard rail", + "602": "guitar", + "603": "gun", + "604": "guy", + "605": "hair", + "606": "hair dryer", + "607": "half", + "608": "hallway", + "609": "halter", + "610": "ham", + "611": "hamburger", + "612": "hammer", + "613": "hand", + "614": "hand towel", + "615": "handbag", + "616": "handle", + "617": "handle bars", + "618": "handlebar", + "619": "hangar", + "620": "hanger", + "621": "harbor", + "622": "harness", + "623": "hat", + "624": "hay", + "625": "head", + "626": "head band", + "627": "head light", + "628": "headband", + "629": "headboard", + "630": "headlight", + "631": "headphone", + "632": "heart", + "633": "heater", + "634": "hedge", + "635": "heel", + "636": "helicopter", + "637": "helmet", + "638": "herb", + "639": "herd", + "640": "highway", + "641": "hill", + "642": "hill side", + "643": "hillside", + "644": "hilltop", + "645": "holder", + "646": "hole", + "647": "home", + "648": "home plate", + "649": "honey", + "650": "hood", + "651": "hoodie", + "652": "hoof", + "653": "hook", + "654": "horizon", + "655": "horn", + "656": "horse", + "657": "hose", + "658": "hot dog", + "659": "hotel", + "660": "hotel room", + "661": "hour hand", + "662": "house", + "663": "hubcap", + "664": "hurdle", + "665": "hut", + "666": "ice", + "667": "ice cream", + "668": "icing", + "669": "icon", + "670": "image", + "671": "infield", + "672": "ingredient", + "673": "inside", + "674": "instruction", + "675": "instrument", + "676": "intersection", + "677": "iphone", + "678": "ipod", + "679": "island", + "680": "item", + "681": "ivy", + "682": "jacket", + "683": "jar", + "684": "jean", + "685": "jeep", + "686": "jersey", + "687": "jet", + "688": "jet engine", + "689": "jockey", + "690": "jug", + "691": "juice", + "692": "jumpsuit", + "693": "kayak", + "694": "ketchup", + "695": "ketchup bottle", + "696": "kettle", + "697": "key", + "698": "keyboard", + "699": "keypad", + "700": "kickstand", + "701": "kid", + "702": "kiosk", + "703": "kitchen", + "704": "kite", + "705": "kitten", + "706": "kitty", + "707": "kiwi", + "708": "knee", + "709": "knee pad", + "710": "kneepad", + "711": "knife", + "712": "knife block", + "713": "knob", + "714": "knot", + "715": "label", + "716": "ladder", + "717": "ladle", + "718": "lady", + "719": "lake", + "720": "lamb", + "721": "lamp", + "722": "lamp post", + "723": "lamp shade", + "724": "lampshade", + "725": "land", + "726": "landing gear", + "727": "landscape", + "728": "lane", + "729": "lantern", + "730": "lanyard", + "731": "lapel", + "732": "laptop", + "733": "laptop computer", + "734": "latch", + "735": "lawn", + "736": "layer", + "737": "leaf", + "738": "leash", + "739": "ledge", + "740": "leg", + "741": "legging", + "742": "lemon", + "743": "letter", + "744": "lettering", + "745": "lettuce", + "746": "license", + "747": "license plate", + "748": "lid", + "749": "life jacket", + "750": "life preserver", + "751": "life vest", + "752": "lift", + "753": "light", + "754": "light bulb", + "755": "light fixture", + "756": "light pole", + "757": "light post", + "758": "light switch", + "759": "lighter", + "760": "lighthouse", + "761": "limb", + "762": "lime", + "763": "line", + "764": "lion", + "765": "lip", + "766": "lipstick", + "767": "liquid", + "768": "little girl", + "769": "living room", + "770": "lock", + "771": "locomotive", + "772": "log", + "773": "logo", + "774": "lot", + "775": "lotion", + "776": "lounge chair", + "777": "luggage", + "778": "luggage cart", + "779": "lunch", + "780": "macaroni", + "781": "machine", + "782": "magazine", + "783": "magnet", + "784": "mailbox", + "785": "male", + "786": "man", + "787": "mane", + "788": "mango", + "789": "manhole", + "790": "manhole cover", + "791": "mannequin", + "792": "mantle", + "793": "map", + "794": "marina", + "795": "marker", + "796": "market", + "797": "mask", + "798": "mast", + "799": "mat", + "800": "match", + "801": "mattress", + "802": "meadow", + "803": "meal", + "804": "meat", + "805": "meatball", + "806": "median", + "807": "medicine cabinet", + "808": "melon", + "809": "menu", + "810": "mesh", + "811": "metal", + "812": "meter", + "813": "microphone", + "814": "microwave", + "815": "milk", + "816": "minivan", + "817": "minute hand", + "818": "mirror", + "819": "mitt", + "820": "mitten", + "821": "mixer", + "822": "mixing bowl", + "823": "money", + "824": "monitor", + "825": "monkey", + "826": "monument", + "827": "moon", + "828": "moped", + "829": "moss", + "830": "mother", + "831": "motor", + "832": "motor bike", + "833": "motorbike", + "834": "motorcycle", + "835": "motorcyclist", + "836": "mound", + "837": "mountain", + "838": "mountain range", + "839": "mountain side", + "840": "mountain top", + "841": "mountainside", + "842": "mouse", + "843": "mouse pad", + "844": "mousepad", + "845": "moustache", + "846": "mouth", + "847": "mozzarella", + "848": "mud", + "849": "muffin", + "850": "muffler", + "851": "mug", + "852": "mulch", + "853": "museum", + "854": "mushroom", + "855": "mustache", + "856": "mustard", + "857": "muzzle", + "858": "nail", + "859": "name", + "860": "name tag", + "861": "napkin", + "862": "neck", + "863": "neck tie", + "864": "necklace", + "865": "necktie", + "866": "nest", + "867": "net", + "868": "netting", + "869": "newspaper", + "870": "night", + "871": "nightstand", + "872": "noodle", + "873": "nose", + "874": "nostril", + "875": "notebook", + "876": "notepad", + "877": "number", + "878": "numeral", + "879": "nut", + "880": "oar", + "881": "object", + "882": "obstacle", + "883": "ocean", + "884": "ocean water", + "885": "office", + "886": "office chair", + "887": "officer", + "888": "oil", + "889": "olive", + "890": "onion", + "891": "onion ring", + "892": "orange", + "893": "ornament", + "894": "ostrich", + "895": "ottoman", + "896": "outfield", + "897": "outfit", + "898": "outlet", + "899": "outside", + "900": "oven", + "901": "oven door", + "902": "overall", + "903": "overhang", + "904": "overpass", + "905": "owl", + "906": "ox", + "907": "pack", + "908": "package", + "909": "packet", + "910": "pad", + "911": "paddle", + "912": "page", + "913": "paint", + "914": "painting", + "915": "pajama", + "916": "palm", + "917": "palm tree", + "918": "pan", + "919": "pancake", + "920": "panda", + "921": "pane", + "922": "panel", + "923": "pant", + "924": "paper", + "925": "paper plate", + "926": "paper towel", + "927": "parachute", + "928": "parade", + "929": "parasail", + "930": "parasol", + "931": "park", + "932": "park bench", + "933": "parking lot", + "934": "parking meter", + "935": "parking sign", + "936": "parrot", + "937": "parsley", + "938": "passenger", + "939": "passenger car", + "940": "passenger train", + "941": "pasta", + "942": "pastry", + "943": "pasture", + "944": "patch", + "945": "path", + "946": "pathway", + "947": "patio", + "948": "pavement", + "949": "paw", + "950": "pea", + "951": "peach", + "952": "peak", + "953": "peanut", + "954": "pear", + "955": "pebble", + "956": "pedal", + "957": "pedestrian", + "958": "peel", + "959": "pen", + "960": "pencil", + "961": "penguin", + "962": "pepper", + "963": "pepper shaker", + "964": "pepperoni", + "965": "person", + "966": "petal", + "967": "phone", + "968": "photo", + "969": "photograph", + "970": "photographer", + "971": "piano", + "972": "pickle", + "973": "pickup truck", + "974": "picnic table", + "975": "picture", + "976": "picture frame", + "977": "pie", + "978": "piece", + "979": "pier", + "980": "pig", + "981": "pigeon", + "982": "pile", + "983": "pillar", + "984": "pillow", + "985": "pillow case", + "986": "pillowcase", + "987": "pilot", + "988": "pin", + "989": "pine tree", + "990": "pineapple", + "991": "pipe", + "992": "pitcher", + "993": "pitchers mound", + "994": "pizza", + "995": "pizza box", + "996": "pizza crust", + "997": "pizza cutter", + "998": "pizza slice", + "999": "placemat", + "1000": "plain", + "1001": "plant", + "1002": "plantain", + "1003": "planter", + "1004": "plaque", + "1005": "plastic", + "1006": "plate", + "1007": "platform", + "1008": "platter", + "1009": "player", + "1010": "playground", + "1011": "plug", + "1012": "plumbing", + "1013": "pocket", + "1014": "polar bear", + "1015": "pole", + "1016": "police", + "1017": "police car", + "1018": "police officer", + "1019": "policeman", + "1020": "polo shirt", + "1021": "pond", + "1022": "pony", + "1023": "pony tail", + "1024": "ponytail", + "1025": "pool", + "1026": "porch", + "1027": "portrait", + "1028": "post", + "1029": "poster", + "1030": "pot", + "1031": "potato", + "1032": "pouch", + "1033": "powder", + "1034": "powdered sugar", + "1035": "power line", + "1036": "power pole", + "1037": "price tag", + "1038": "print", + "1039": "printer", + "1040": "produce", + "1041": "product", + "1042": "projector", + "1043": "prong", + "1044": "propeller", + "1045": "puddle", + "1046": "pump", + "1047": "pumpkin", + "1048": "puppy", + "1049": "purse", + "1050": "quilt", + "1051": "rabbit", + "1052": "racer", + "1053": "rack", + "1054": "racket", + "1055": "radiator", + "1056": "radio", + "1057": "radish", + "1058": "raft", + "1059": "rail", + "1060": "railing", + "1061": "railroad", + "1062": "railroad tracks", + "1063": "railway", + "1064": "rain", + "1065": "rainbow", + "1066": "raincoat", + "1067": "raisin", + "1068": "ram", + "1069": "ramp", + "1070": "range", + "1071": "raspberry", + "1072": "receipt", + "1073": "recliner", + "1074": "referee", + "1075": "reflection", + "1076": "reflector", + "1077": "refrigerator", + "1078": "reign", + "1079": "remote", + "1080": "remote control", + "1081": "restaurant", + "1082": "restroom", + "1083": "rib", + "1084": "ribbon", + "1085": "rice", + "1086": "rider", + "1087": "rim", + "1088": "ring", + "1089": "ripple", + "1090": "river", + "1091": "road", + "1092": "roadside", + "1093": "roadway", + "1094": "robe", + "1095": "rock", + "1096": "rock wall", + "1097": "rod", + "1098": "roll", + "1099": "roman numeral", + "1100": "roman numerals", + "1101": "roof", + "1102": "rooftop", + "1103": "room", + "1104": "rope", + "1105": "rose", + "1106": "router", + "1107": "rug", + "1108": "runway", + "1109": "sack", + "1110": "saddle", + "1111": "safety cone", + "1112": "safety jacket", + "1113": "sail", + "1114": "sailboat", + "1115": "salad", + "1116": "salt", + "1117": "salt shaker", + "1118": "sand", + "1119": "sandal", + "1120": "sandwhich", + "1121": "sandwich", + "1122": "satellite dish", + "1123": "sauce", + "1124": "saucer", + "1125": "sausage", + "1126": "scaffolding", + "1127": "scale", + "1128": "scarf", + "1129": "scene", + "1130": "school bus", + "1131": "scissor", + "1132": "scissors", + "1133": "sconce", + "1134": "scooter", + "1135": "scoreboard", + "1136": "screen", + "1137": "screw", + "1138": "sculpture", + "1139": "sea", + "1140": "sea foam", + "1141": "seagull", + "1142": "seal", + "1143": "seasoning", + "1144": "seat", + "1145": "seaweed", + "1146": "second floor", + "1147": "sedan", + "1148": "seed", + "1149": "serving tray", + "1150": "shack", + "1151": "shade", + "1152": "shadow", + "1153": "shaker", + "1154": "shampoo", + "1155": "she", + "1156": "shed", + "1157": "sheep", + "1158": "sheet", + "1159": "shelf", + "1160": "shelter", + "1161": "shield", + "1162": "shin guard", + "1163": "shin guards", + "1164": "shingle", + "1165": "ship", + "1166": "shirt", + "1167": "shoe", + "1168": "shoelace", + "1169": "shop", + "1170": "shopping bag", + "1171": "shore", + "1172": "shoreline", + "1173": "short", + "1174": "shoulder", + "1175": "shovel", + "1176": "shower", + "1177": "shower curtain", + "1178": "shower door", + "1179": "shower head", + "1180": "shrimp", + "1181": "shrub", + "1182": "shutter", + "1183": "side mirror", + "1184": "side table", + "1185": "side window", + "1186": "sidewalk", + "1187": "sign", + "1188": "sign post", + "1189": "signal", + "1190": "signal light", + "1191": "silverware", + "1192": "sink", + "1193": "skate park", + "1194": "skateboard", + "1195": "skateboard ramp", + "1196": "skateboarder", + "1197": "skatepark", + "1198": "skater", + "1199": "ski", + "1200": "ski boot", + "1201": "ski boots", + "1202": "ski goggles", + "1203": "ski jacket", + "1204": "ski lift", + "1205": "ski pants", + "1206": "ski pole", + "1207": "ski poles", + "1208": "ski slope", + "1209": "ski suit", + "1210": "ski tracks", + "1211": "skier", + "1212": "skiier", + "1213": "skiis", + "1214": "skillet", + "1215": "skin", + "1216": "skirt", + "1217": "skull", + "1218": "sky", + "1219": "skylight", + "1220": "skyscraper", + "1221": "slab", + "1222": "slack", + "1223": "slat", + "1224": "sled", + "1225": "sleeve", + "1226": "slice", + "1227": "slope", + "1228": "slot", + "1229": "smartphone", + "1230": "smile", + "1231": "smoke", + "1232": "smoke stack", + "1233": "snack", + "1234": "sneaker", + "1235": "snout", + "1236": "snow", + "1237": "snow board", + "1238": "snow pants", + "1239": "snow suit", + "1240": "snowboard", + "1241": "snowboarder", + "1242": "snowflake", + "1243": "snowman", + "1244": "snowsuit", + "1245": "soap", + "1246": "soap bottle", + "1247": "soap dish", + "1248": "soap dispenser", + "1249": "soccer ball", + "1250": "soccer field", + "1251": "soccer player", + "1252": "sock", + "1253": "socket", + "1254": "soda", + "1255": "soda bottle", + "1256": "soda can", + "1257": "sofa", + "1258": "soil", + "1259": "soldier", + "1260": "soup", + "1261": "spatula", + "1262": "speaker", + "1263": "spear", + "1264": "spectator", + "1265": "spice", + "1266": "spinach", + "1267": "spire", + "1268": "splash", + "1269": "spoke", + "1270": "sponge", + "1271": "spoon", + "1272": "spot", + "1273": "spray", + "1274": "spray bottle", + "1275": "sprinkle", + "1276": "squash", + "1277": "stabilizer", + "1278": "stack", + "1279": "stadium", + "1280": "stage", + "1281": "stain", + "1282": "stair", + "1283": "staircase", + "1284": "stairway", + "1285": "stall", + "1286": "stand", + "1287": "stapler", + "1288": "star", + "1289": "station", + "1290": "station wagon", + "1291": "statue", + "1292": "steak", + "1293": "steam", + "1294": "steeple", + "1295": "steering wheel", + "1296": "stem", + "1297": "step", + "1298": "stereo", + "1299": "stick", + "1300": "sticker", + "1301": "stone", + "1302": "stone wall", + "1303": "stool", + "1304": "stop", + "1305": "stop light", + "1306": "stop sign", + "1307": "stoplight", + "1308": "store", + "1309": "storefront", + "1310": "stove", + "1311": "stove top", + "1312": "strap", + "1313": "straw", + "1314": "strawberry", + "1315": "stream", + "1316": "streamer", + "1317": "street", + "1318": "street lamp", + "1319": "street light", + "1320": "street sign", + "1321": "string", + "1322": "strip", + "1323": "stripe", + "1324": "stroller", + "1325": "structure", + "1326": "student", + "1327": "stuffed animal", + "1328": "stuffed bear", + "1329": "stump", + "1330": "sugar", + "1331": "suit", + "1332": "suit jacket", + "1333": "suitcase", + "1334": "sun", + "1335": "sunflower", + "1336": "sunglasses", + "1337": "sunset", + "1338": "surf", + "1339": "surface", + "1340": "surfboard", + "1341": "surfer", + "1342": "surfing", + "1343": "suspender", + "1344": "suv", + "1345": "swan", + "1346": "sweat band", + "1347": "sweatband", + "1348": "sweater", + "1349": "sweatpants", + "1350": "sweatshirt", + "1351": "sweet potato", + "1352": "swim trunks", + "1353": "swimming pool", + "1354": "swimsuit", + "1355": "switch", + "1356": "sword", + "1357": "symbol", + "1358": "syrup", + "1359": "table", + "1360": "table cloth", + "1361": "table lamp", + "1362": "tablecloth", + "1363": "tablet", + "1364": "tabletop", + "1365": "tag", + "1366": "tail", + "1367": "tail feathers", + "1368": "tail fin", + "1369": "tail light", + "1370": "tail lights", + "1371": "tail wing", + "1372": "tangerine", + "1373": "tank", + "1374": "tank top", + "1375": "tap", + "1376": "tape", + "1377": "tarmac", + "1378": "tarp", + "1379": "tattoo", + "1380": "taxi", + "1381": "taxi cab", + "1382": "tea", + "1383": "tea kettle", + "1384": "tea pot", + "1385": "team", + "1386": "teapot", + "1387": "teddy", + "1388": "teddy bear", + "1389": "tee shirt", + "1390": "teeth", + "1391": "telephone", + "1392": "telephone pole", + "1393": "television", + "1394": "tennis", + "1395": "tennis ball", + "1396": "tennis court", + "1397": "tennis match", + "1398": "tennis net", + "1399": "tennis player", + "1400": "tennis racket", + "1401": "tennis shoe", + "1402": "tent", + "1403": "terminal", + "1404": "text", + "1405": "throw pillow", + "1406": "thumb", + "1407": "tie", + "1408": "tiger", + "1409": "tights", + "1410": "tile", + "1411": "tile floor", + "1412": "tine", + "1413": "tire", + "1414": "tissue", + "1415": "tissue box", + "1416": "toast", + "1417": "toaster", + "1418": "toaster oven", + "1419": "toddler", + "1420": "toe", + "1421": "tofu", + "1422": "toilet", + "1423": "toilet bowl", + "1424": "toilet brush", + "1425": "toilet lid", + "1426": "toilet paper", + "1427": "toilet seat", + "1428": "toilet tank", + "1429": "toiletry", + "1430": "tomato", + "1431": "tomato sauce", + "1432": "tomato slice", + "1433": "tongs", + "1434": "tongue", + "1435": "tool", + "1436": "toothbrush", + "1437": "toothpaste", + "1438": "toothpick", + "1439": "top", + "1440": "topping", + "1441": "tortilla", + "1442": "touchpad", + "1443": "tourist", + "1444": "towel", + "1445": "towel rack", + "1446": "tower", + "1447": "town", + "1448": "toy", + "1449": "track", + "1450": "tractor", + "1451": "traffic", + "1452": "traffic cone", + "1453": "traffic light", + "1454": "traffic sign", + "1455": "traffic signal", + "1456": "trail", + "1457": "trailer", + "1458": "train", + "1459": "train car", + "1460": "train cars", + "1461": "train engine", + "1462": "train front", + "1463": "train platform", + "1464": "train station", + "1465": "train track", + "1466": "train tracks", + "1467": "trash", + "1468": "trash bag", + "1469": "trash bin", + "1470": "trash can", + "1471": "trashcan", + "1472": "tray", + "1473": "tree", + "1474": "tree branch", + "1475": "tree leaves", + "1476": "tree line", + "1477": "tree trunk", + "1478": "triangle", + "1479": "trick", + "1480": "tripod", + "1481": "trolley", + "1482": "trough", + "1483": "trousers", + "1484": "truck", + "1485": "trunk", + "1486": "tshirt", + "1487": "tub", + "1488": "tube", + "1489": "tulip", + "1490": "tunnel", + "1491": "turbine", + "1492": "turf", + "1493": "turkey", + "1494": "tusk", + "1495": "tv stand", + "1496": "twig", + "1497": "umbrella", + "1498": "umpire", + "1499": "undershirt", + "1500": "underwear", + "1501": "uniform", + "1502": "urinal", + "1503": "urn", + "1504": "utensil", + "1505": "utility pole", + "1506": "valley", + "1507": "van", + "1508": "vane", + "1509": "vanity", + "1510": "vase", + "1511": "vegetable", + "1512": "veggie", + "1513": "vehicle", + "1514": "vending machine", + "1515": "vent", + "1516": "vest", + "1517": "video camera", + "1518": "video game", + "1519": "view", + "1520": "village", + "1521": "vine", + "1522": "visor", + "1523": "wagon", + "1524": "waist", + "1525": "wake", + "1526": "walkway", + "1527": "wall", + "1528": "wallet", + "1529": "wallpaper", + "1530": "walnut", + "1531": "washer", + "1532": "washing machine", + "1533": "waste basket", + "1534": "watch", + "1535": "water", + "1536": "water bottle", + "1537": "water tank", + "1538": "waterfall", + "1539": "watermark", + "1540": "watermelon", + "1541": "wave", + "1542": "weather", + "1543": "weather vane", + "1544": "website", + "1545": "weed", + "1546": "wet suit", + "1547": "wetsuit", + "1548": "wheel", + "1549": "wheelchair", + "1550": "whipped cream", + "1551": "whisk", + "1552": "whisker", + "1553": "whiteboard", + "1554": "wig", + "1555": "wii", + "1556": "wii controller", + "1557": "wii remote", + "1558": "wild", + "1559": "wildflower", + "1560": "window", + "1561": "window frame", + "1562": "window sill", + "1563": "windowsill", + "1564": "windshield", + "1565": "windshield wiper", + "1566": "windshield wipers", + "1567": "wine", + "1568": "wine bottle", + "1569": "wing", + "1570": "wiper", + "1571": "wire", + "1572": "wire fence", + "1573": "woman", + "1574": "wood", + "1575": "wool", + "1576": "word", + "1577": "worker", + "1578": "wrapper", + "1579": "wrist", + "1580": "wrist band", + "1581": "wrist watch", + "1582": "wristband", + "1583": "wristwatch", + "1584": "writing", + "1585": "yacht", + "1586": "yard", + "1587": "yellow", + "1588": "yogurt", + "1589": "yolk", + "1590": "young man", + "1591": "zebra", + "1592": "zipper", + "1593": "zoo", + "1594": "zucchini" + }, + "attribute_to_idx": { + "above": 1, + "adult": 2, + "airborne": 3, + "alone": 4, + "aluminum": 5, + "american": 6, + "antique": 7, + "apple": 8, + "arched": 9, + "asian": 10, + "asphalt": 11, + "assorted": 12, + "athletic": 13, + "attached": 14, + "baby": 15, + "back": 16, + "backwards": 17, + "baked": 18, + "bald": 19, + "balding": 20, + "bare": 21, + "barefoot": 22, + "barren": 23, + "baseball": 24, + "bathroom": 25, + "batting": 26, + "beautiful": 27, + "beige": 28, + "bending": 29, + "bending over": 30, + "bent": 31, + "big": 32, + "birthday": 33, + "black": 34, + "black and white": 35, + "blank": 36, + "blond": 37, + "blowing": 38, + "blue": 39, + "blurry": 40, + "brake": 41, + "brass": 42, + "brick": 43, + "bricked": 44, + "bright": 45, + "bright blue": 46, + "broken": 47, + "brown": 48, + "browned": 49, + "brunette": 50, + "bunch": 51, + "bunched": 52, + "burgundy": 53, + "burned": 54, + "burnt": 55, + "bushy": 56, + "busy": 57, + "cake": 58, + "calm": 59, + "camouflage": 60, + "cardboard": 61, + "cargo": 62, + "carpeted": 63, + "cast": 64, + "caucasian": 65, + "cement": 66, + "ceramic": 67, + "chain link": 68, + "chalk": 69, + "checkered": 70, + "cheese": 71, + "chinese": 72, + "chipped": 73, + "chocolate": 74, + "chopped": 75, + "choppy": 76, + "christmas": 77, + "chrome": 78, + "circular": 79, + "clay": 80, + "clean": 81, + "clear": 82, + "clock": 83, + "closed": 84, + "cloudless": 85, + "cloudy": 86, + "cluttered": 87, + "coffee": 88, + "collared": 89, + "colorful": 90, + "computer": 91, + "concrete": 92, + "cooked": 93, + "cooking": 94, + "copper": 95, + "cotton": 96, + "covered": 97, + "covering": 98, + "cracked": 99, + "crashing": 100, + "cream colored": 101, + "crispy": 102, + "crossed": 103, + "crouched": 104, + "crouching": 105, + "crumpled": 106, + "crying": 107, + "curled": 108, + "curly": 109, + "curved": 110, + "cut": 111, + "dark": 112, + "dark blue": 113, + "dark brown": 114, + "dark colored": 115, + "daytime": 116, + "dead": 117, + "decorated": 118, + "decorative": 119, + "deep": 120, + "deep blue": 121, + "delicious": 122, + "denim": 123, + "designed": 124, + "digital": 125, + "dirt": 126, + "dirty": 127, + "displayed": 128, + "distant": 129, + "docked": 130, + "door": 131, + "dotted": 132, + "double decker": 133, + "down": 134, + "dress": 135, + "dried": 136, + "drinking": 137, + "driving": 138, + "dry": 139, + "dusty": 140, + "eating": 141, + "elderly": 142, + "electric": 143, + "electrical": 144, + "electronic": 145, + "elevated": 146, + "empty": 147, + "evergreen": 148, + "extended": 149, + "faded": 150, + "fake": 151, + "fallen": 152, + "fancy": 153, + "fat": 154, + "female": 155, + "filled": 156, + "fire": 157, + "flat": 158, + "flat screen": 159, + "floating": 160, + "floppy": 161, + "floral": 162, + "flowered": 163, + "flowing": 164, + "fluffy": 165, + "fluorescent": 166, + "flying": 167, + "foamy": 168, + "foggy": 169, + "folded": 170, + "for sale": 171, + "framed": 172, + "fresh": 173, + "fried": 174, + "frosted": 175, + "fruit": 176, + "full": 177, + "furry": 178, + "fuzzy": 179, + "giant": 180, + "glass": 181, + "glazed": 182, + "glowing": 183, + "gold": 184, + "golden": 185, + "golden brown": 186, + "granite": 187, + "grass": 188, + "grassy": 189, + "gravel": 190, + "gray": 191, + "grazing": 192, + "green": 193, + "greenish": 194, + "grilled": 195, + "grouped": 196, + "growing": 197, + "hairy": 198, + "half": 199, + "half full": 200, + "halved": 201, + "hanging": 202, + "happy": 203, + "hard": 204, + "hardwood": 205, + "hazy": 206, + "healthy": 207, + "heavy": 208, + "herd": 209, + "high": 210, + "hilly": 211, + "hitting": 212, + "holding": 213, + "home": 214, + "horizontal": 215, + "huge": 216, + "illuminated": 217, + "in air": 218, + "indoors": 219, + "iron": 220, + "ivory": 221, + "jumping": 222, + "khaki": 223, + "kitchen": 224, + "kneeling": 225, + "knit": 226, + "landing": 227, + "laptop": 228, + "large": 229, + "laughing": 230, + "laying": 231, + "leafless": 232, + "leafy": 233, + "leaning": 234, + "leather": 235, + "letter": 236, + "license": 237, + "light": 238, + "light blue": 239, + "light brown": 240, + "light colored": 241, + "lighted": 242, + "lime green": 243, + "lined": 244, + "lit": 245, + "little": 246, + "long": 247, + "long sleeved": 248, + "looking": 249, + "looking down": 250, + "loose": 251, + "low": 252, + "lush": 253, + "lying": 254, + "made": 255, + "male": 256, + "manicured": 257, + "marble": 258, + "maroon": 259, + "massive": 260, + "melted": 261, + "mesh": 262, + "messy": 263, + "metal": 264, + "metallic": 265, + "military": 266, + "modern": 267, + "mountain": 268, + "mounted": 269, + "moving": 270, + "muddy": 271, + "multi colored": 272, + "murky": 273, + "muscular": 274, + "narrow": 275, + "navy": 276, + "neon": 277, + "neon green": 278, + "new": 279, + "night": 280, + "nike": 281, + "number": 282, + "numbered": 283, + "ocean": 284, + "octagonal": 285, + "off": 286, + "old": 287, + "old fashioned": 288, + "older": 289, + "on": 290, + "one way": 291, + "open": 292, + "opened": 293, + "orange": 294, + "ornate": 295, + "outdoor": 296, + "outdoors": 297, + "outstretched": 298, + "oval": 299, + "overcast": 300, + "overgrown": 301, + "overhead": 302, + "padded": 303, + "painted": 304, + "pale": 305, + "palm": 306, + "paper": 307, + "park": 308, + "parked": 309, + "parking": 310, + "patchy": 311, + "patterned": 312, + "paved": 313, + "peeled": 314, + "peeling": 315, + "perched": 316, + "performing": 317, + "pile": 318, + "piled": 319, + "pine": 320, + "pink": 321, + "plaid": 322, + "plain": 323, + "plastic": 324, + "playing": 325, + "playing tennis": 326, + "plush": 327, + "pointed": 328, + "pointing": 329, + "pointy": 330, + "polar": 331, + "police": 332, + "polka dot": 333, + "porcelain": 334, + "posing": 335, + "potted": 336, + "powdered": 337, + "power": 338, + "pretty": 339, + "printed": 340, + "protective": 341, + "public": 342, + "puffy": 343, + "pulled back": 344, + "purple": 345, + "racing": 346, + "railroad": 347, + "rainbow colored": 348, + "raised": 349, + "raw": 350, + "reaching": 351, + "reading": 352, + "recessed": 353, + "rectangular": 354, + "red": 355, + "reflected": 356, + "reflecting": 357, + "reflective": 358, + "resting": 359, + "riding": 360, + "ripe": 361, + "rippled": 362, + "rock": 363, + "rocky": 364, + "roll": 365, + "rolled": 366, + "rolling": 367, + "roman": 368, + "rough": 369, + "round": 370, + "rounded": 371, + "rubber": 372, + "running": 373, + "rusted": 374, + "rusty": 375, + "safety": 376, + "salt": 377, + "sand": 378, + "sandy": 379, + "scattered": 380, + "seasoned": 381, + "serving": 382, + "shaded": 383, + "shaggy": 384, + "shallow": 385, + "shaped": 386, + "sharp": 387, + "shaved": 388, + "sheer": 389, + "shining": 390, + "shiny": 391, + "shirtless": 392, + "short": 393, + "short sleeved": 394, + "shredded": 395, + "side view": 396, + "silver": 397, + "singing": 398, + "sitting": 399, + "skate": 400, + "skateboarding": 401, + "skating": 402, + "ski": 403, + "skiing": 404, + "skinny": 405, + "slanted": 406, + "sleeping": 407, + "sleeveless": 408, + "slice": 409, + "sliced": 410, + "sliding": 411, + "small": 412, + "smiling": 413, + "smooth": 414, + "snow": 415, + "snow covered": 416, + "snowboarding": 417, + "snowy": 418, + "soap": 419, + "soccer": 420, + "soda": 421, + "soft": 422, + "sparse": 423, + "speckled": 424, + "spiky": 425, + "splashing": 426, + "spotted": 427, + "spread": 428, + "square": 429, + "squatting": 430, + "stack": 431, + "stacked": 432, + "stained": 433, + "stainless": 434, + "stainless steel": 435, + "standing": 436, + "staring": 437, + "statue": 438, + "steamed": 439, + "steel": 440, + "steep": 441, + "sticking out": 442, + "still": 443, + "stone": 444, + "stop": 445, + "straight": 446, + "straw": 447, + "street": 448, + "striped": 449, + "stripes": 450, + "stuffed": 451, + "styrofoam": 452, + "sunny": 453, + "surfing": 454, + "swimming": 455, + "swinging": 456, + "taking off": 457, + "talking": 458, + "tall": 459, + "tan": 460, + "tarmacked": 461, + "teal": 462, + "telephone": 463, + "tennis": 464, + "textile": 465, + "textured": 466, + "thick": 467, + "thin": 468, + "throwing": 469, + "tied": 470, + "tile": 471, + "tiled": 472, + "tilted": 473, + "tinted": 474, + "tiny": 475, + "toasted": 476, + "toilet": 477, + "toilet paper": 478, + "tomato": 479, + "toy": 480, + "traffic": 481, + "train": 482, + "transparent": 483, + "triangle": 484, + "triangular": 485, + "trimmed": 486, + "turned": 487, + "unmade": 488, + "unripe": 489, + "up": 490, + "upside down": 491, + "used": 492, + "vertical": 493, + "vintage": 494, + "waiting": 495, + "walking": 496, + "warm": 497, + "watching": 498, + "water": 499, + "waving": 500, + "wavy": 501, + "wearing": 502, + "wet": 503, + "white": 504, + "whole": 505, + "wicker": 506, + "wide": 507, + "wii": 508, + "wild": 509, + "windshield": 510, + "wine": 511, + "winter": 512, + "wire": 513, + "wireless": 514, + "wispy": 515, + "wood": 516, + "worn": 517, + "woven": 518, + "wrapped": 519, + "wrinkled": 520, + "wrist": 521, + "written": 522, + "yellow": 523, + "young": 524 + }, + "idx_to_attribute": { + "1": "above", + "2": "adult", + "3": "airborne", + "4": "alone", + "5": "aluminum", + "6": "american", + "7": "antique", + "8": "apple", + "9": "arched", + "10": "asian", + "11": "asphalt", + "12": "assorted", + "13": "athletic", + "14": "attached", + "15": "baby", + "16": "back", + "17": "backwards", + "18": "baked", + "19": "bald", + "20": "balding", + "21": "bare", + "22": "barefoot", + "23": "barren", + "24": "baseball", + "25": "bathroom", + "26": "batting", + "27": "beautiful", + "28": "beige", + "29": "bending", + "30": "bending over", + "31": "bent", + "32": "big", + "33": "birthday", + "34": "black", + "35": "black and white", + "36": "blank", + "37": "blond", + "38": "blowing", + "39": "blue", + "40": "blurry", + "41": "brake", + "42": "brass", + "43": "brick", + "44": "bricked", + "45": "bright", + "46": "bright blue", + "47": "broken", + "48": "brown", + "49": "browned", + "50": "brunette", + "51": "bunch", + "52": "bunched", + "53": "burgundy", + "54": "burned", + "55": "burnt", + "56": "bushy", + "57": "busy", + "58": "cake", + "59": "calm", + "60": "camouflage", + "61": "cardboard", + "62": "cargo", + "63": "carpeted", + "64": "cast", + "65": "caucasian", + "66": "cement", + "67": "ceramic", + "68": "chain link", + "69": "chalk", + "70": "checkered", + "71": "cheese", + "72": "chinese", + "73": "chipped", + "74": "chocolate", + "75": "chopped", + "76": "choppy", + "77": "christmas", + "78": "chrome", + "79": "circular", + "80": "clay", + "81": "clean", + "82": "clear", + "83": "clock", + "84": "closed", + "85": "cloudless", + "86": "cloudy", + "87": "cluttered", + "88": "coffee", + "89": "collared", + "90": "colorful", + "91": "computer", + "92": "concrete", + "93": "cooked", + "94": "cooking", + "95": "copper", + "96": "cotton", + "97": "covered", + "98": "covering", + "99": "cracked", + "100": "crashing", + "101": "cream colored", + "102": "crispy", + "103": "crossed", + "104": "crouched", + "105": "crouching", + "106": "crumpled", + "107": "crying", + "108": "curled", + "109": "curly", + "110": "curved", + "111": "cut", + "112": "dark", + "113": "dark blue", + "114": "dark brown", + "115": "dark colored", + "116": "daytime", + "117": "dead", + "118": "decorated", + "119": "decorative", + "120": "deep", + "121": "deep blue", + "122": "delicious", + "123": "denim", + "124": "designed", + "125": "digital", + "126": "dirt", + "127": "dirty", + "128": "displayed", + "129": "distant", + "130": "docked", + "131": "door", + "132": "dotted", + "133": "double decker", + "134": "down", + "135": "dress", + "136": "dried", + "137": "drinking", + "138": "driving", + "139": "dry", + "140": "dusty", + "141": "eating", + "142": "elderly", + "143": "electric", + "144": "electrical", + "145": "electronic", + "146": "elevated", + "147": "empty", + "148": "evergreen", + "149": "extended", + "150": "faded", + "151": "fake", + "152": "fallen", + "153": "fancy", + "154": "fat", + "155": "female", + "156": "filled", + "157": "fire", + "158": "flat", + "159": "flat screen", + "160": "floating", + "161": "floppy", + "162": "floral", + "163": "flowered", + "164": "flowing", + "165": "fluffy", + "166": "fluorescent", + "167": "flying", + "168": "foamy", + "169": "foggy", + "170": "folded", + "171": "for sale", + "172": "framed", + "173": "fresh", + "174": "fried", + "175": "frosted", + "176": "fruit", + "177": "full", + "178": "furry", + "179": "fuzzy", + "180": "giant", + "181": "glass", + "182": "glazed", + "183": "glowing", + "184": "gold", + "185": "golden", + "186": "golden brown", + "187": "granite", + "188": "grass", + "189": "grassy", + "190": "gravel", + "191": "gray", + "192": "grazing", + "193": "green", + "194": "greenish", + "195": "grilled", + "196": "grouped", + "197": "growing", + "198": "hairy", + "199": "half", + "200": "half full", + "201": "halved", + "202": "hanging", + "203": "happy", + "204": "hard", + "205": "hardwood", + "206": "hazy", + "207": "healthy", + "208": "heavy", + "209": "herd", + "210": "high", + "211": "hilly", + "212": "hitting", + "213": "holding", + "214": "home", + "215": "horizontal", + "216": "huge", + "217": "illuminated", + "218": "in air", + "219": "indoors", + "220": "iron", + "221": "ivory", + "222": "jumping", + "223": "khaki", + "224": "kitchen", + "225": "kneeling", + "226": "knit", + "227": "landing", + "228": "laptop", + "229": "large", + "230": "laughing", + "231": "laying", + "232": "leafless", + "233": "leafy", + "234": "leaning", + "235": "leather", + "236": "letter", + "237": "license", + "238": "light", + "239": "light blue", + "240": "light brown", + "241": "light colored", + "242": "lighted", + "243": "lime green", + "244": "lined", + "245": "lit", + "246": "little", + "247": "long", + "248": "long sleeved", + "249": "looking", + "250": "looking down", + "251": "loose", + "252": "low", + "253": "lush", + "254": "lying", + "255": "made", + "256": "male", + "257": "manicured", + "258": "marble", + "259": "maroon", + "260": "massive", + "261": "melted", + "262": "mesh", + "263": "messy", + "264": "metal", + "265": "metallic", + "266": "military", + "267": "modern", + "268": "mountain", + "269": "mounted", + "270": "moving", + "271": "muddy", + "272": "multi colored", + "273": "murky", + "274": "muscular", + "275": "narrow", + "276": "navy", + "277": "neon", + "278": "neon green", + "279": "new", + "280": "night", + "281": "nike", + "282": "number", + "283": "numbered", + "284": "ocean", + "285": "octagonal", + "286": "off", + "287": "old", + "288": "old fashioned", + "289": "older", + "290": "on", + "291": "one way", + "292": "open", + "293": "opened", + "294": "orange", + "295": "ornate", + "296": "outdoor", + "297": "outdoors", + "298": "outstretched", + "299": "oval", + "300": "overcast", + "301": "overgrown", + "302": "overhead", + "303": "padded", + "304": "painted", + "305": "pale", + "306": "palm", + "307": "paper", + "308": "park", + "309": "parked", + "310": "parking", + "311": "patchy", + "312": "patterned", + "313": "paved", + "314": "peeled", + "315": "peeling", + "316": "perched", + "317": "performing", + "318": "pile", + "319": "piled", + "320": "pine", + "321": "pink", + "322": "plaid", + "323": "plain", + "324": "plastic", + "325": "playing", + "326": "playing tennis", + "327": "plush", + "328": "pointed", + "329": "pointing", + "330": "pointy", + "331": "polar", + "332": "police", + "333": "polka dot", + "334": "porcelain", + "335": "posing", + "336": "potted", + "337": "powdered", + "338": "power", + "339": "pretty", + "340": "printed", + "341": "protective", + "342": "public", + "343": "puffy", + "344": "pulled back", + "345": "purple", + "346": "racing", + "347": "railroad", + "348": "rainbow colored", + "349": "raised", + "350": "raw", + "351": "reaching", + "352": "reading", + "353": "recessed", + "354": "rectangular", + "355": "red", + "356": "reflected", + "357": "reflecting", + "358": "reflective", + "359": "resting", + "360": "riding", + "361": "ripe", + "362": "rippled", + "363": "rock", + "364": "rocky", + "365": "roll", + "366": "rolled", + "367": "rolling", + "368": "roman", + "369": "rough", + "370": "round", + "371": "rounded", + "372": "rubber", + "373": "running", + "374": "rusted", + "375": "rusty", + "376": "safety", + "377": "salt", + "378": "sand", + "379": "sandy", + "380": "scattered", + "381": "seasoned", + "382": "serving", + "383": "shaded", + "384": "shaggy", + "385": "shallow", + "386": "shaped", + "387": "sharp", + "388": "shaved", + "389": "sheer", + "390": "shining", + "391": "shiny", + "392": "shirtless", + "393": "short", + "394": "short sleeved", + "395": "shredded", + "396": "side view", + "397": "silver", + "398": "singing", + "399": "sitting", + "400": "skate", + "401": "skateboarding", + "402": "skating", + "403": "ski", + "404": "skiing", + "405": "skinny", + "406": "slanted", + "407": "sleeping", + "408": "sleeveless", + "409": "slice", + "410": "sliced", + "411": "sliding", + "412": "small", + "413": "smiling", + "414": "smooth", + "415": "snow", + "416": "snow covered", + "417": "snowboarding", + "418": "snowy", + "419": "soap", + "420": "soccer", + "421": "soda", + "422": "soft", + "423": "sparse", + "424": "speckled", + "425": "spiky", + "426": "splashing", + "427": "spotted", + "428": "spread", + "429": "square", + "430": "squatting", + "431": "stack", + "432": "stacked", + "433": "stained", + "434": "stainless", + "435": "stainless steel", + "436": "standing", + "437": "staring", + "438": "statue", + "439": "steamed", + "440": "steel", + "441": "steep", + "442": "sticking out", + "443": "still", + "444": "stone", + "445": "stop", + "446": "straight", + "447": "straw", + "448": "street", + "449": "striped", + "450": "stripes", + "451": "stuffed", + "452": "styrofoam", + "453": "sunny", + "454": "surfing", + "455": "swimming", + "456": "swinging", + "457": "taking off", + "458": "talking", + "459": "tall", + "460": "tan", + "461": "tarmacked", + "462": "teal", + "463": "telephone", + "464": "tennis", + "465": "textile", + "466": "textured", + "467": "thick", + "468": "thin", + "469": "throwing", + "470": "tied", + "471": "tile", + "472": "tiled", + "473": "tilted", + "474": "tinted", + "475": "tiny", + "476": "toasted", + "477": "toilet", + "478": "toilet paper", + "479": "tomato", + "480": "toy", + "481": "traffic", + "482": "train", + "483": "transparent", + "484": "triangle", + "485": "triangular", + "486": "trimmed", + "487": "turned", + "488": "unmade", + "489": "unripe", + "490": "up", + "491": "upside down", + "492": "used", + "493": "vertical", + "494": "vintage", + "495": "waiting", + "496": "walking", + "497": "warm", + "498": "watching", + "499": "water", + "500": "waving", + "501": "wavy", + "502": "wearing", + "503": "wet", + "504": "white", + "505": "whole", + "506": "wicker", + "507": "wide", + "508": "wii", + "509": "wild", + "510": "windshield", + "511": "wine", + "512": "winter", + "513": "wire", + "514": "wireless", + "515": "wispy", + "516": "wood", + "517": "worn", + "518": "woven", + "519": "wrapped", + "520": "wrinkled", + "521": "wrist", + "522": "written", + "523": "yellow", + "524": "young" + }, + "predicate_to_idx": { + "above": 1, + "across": 2, + "against": 3, + "along": 4, + "and": 5, + "at": 6, + "attached to": 7, + "behind": 8, + "belonging to": 9, + "between": 10, + "carrying": 11, + "covered in": 12, + "covering": 13, + "eating": 14, + "flying in": 15, + "for": 16, + "from": 17, + "growing on": 18, + "hanging from": 19, + "has": 20, + "holding": 21, + "in": 22, + "in front of": 23, + "laying on": 24, + "looking at": 25, + "lying on": 26, + "made of": 27, + "mounted on": 28, + "near": 29, + "of": 30, + "on": 31, + "on back of": 32, + "over": 33, + "painted on": 34, + "parked on": 35, + "part of": 36, + "playing": 37, + "riding": 38, + "says": 39, + "sitting on": 40, + "standing on": 41, + "to": 42, + "under": 43, + "using": 44, + "walking in": 45, + "walking on": 46, + "watching": 47, + "wearing": 48, + "wears": 49, + "with": 50 + }, + "idx_to_predicate": { + "1": "above", + "2": "across", + "3": "against", + "4": "along", + "5": "and", + "6": "at", + "7": "attached to", + "8": "behind", + "9": "belonging to", + "10": "between", + "11": "carrying", + "12": "covered in", + "13": "covering", + "14": "eating", + "15": "flying in", + "16": "for", + "17": "from", + "18": "growing on", + "19": "hanging from", + "20": "has", + "21": "holding", + "22": "in", + "23": "in front of", + "24": "laying on", + "25": "looking at", + "26": "lying on", + "27": "made of", + "28": "mounted on", + "29": "near", + "30": "of", + "31": "on", + "32": "on back of", + "33": "over", + "34": "painted on", + "35": "parked on", + "36": "part of", + "37": "playing", + "38": "riding", + "39": "says", + "40": "sitting on", + "41": "standing on", + "42": "to", + "43": "under", + "44": "using", + "45": "walking in", + "46": "walking on", + "47": "watching", + "48": "wearing", + "49": "wears", + "50": "with" + }, + "object_count": { + "window": 53848, + "tree": 50339, + "man": 47202, + "person": 43031, + "shirt": 38238, + "wall": 33657, + "building": 32011, + "sky": 28823, + "ground": 28021, + "sign": 26645, + "leg": 24309, + "pole": 24135, + "head": 23661, + "hand": 23461, + "grass": 22855, + "light": 22109, + "leaf": 20743, + "hair": 20318, + "car": 18932, + "table": 18437, + "woman": 18051, + "cloud": 17308, + "ear": 16695, + "line": 16635, + "water": 15336, + "shoe": 14865, + "pant": 14288, + "door": 14049, + "wheel": 13405, + "eye": 13383, + "shadow": 13378, + "letter": 12170, + "fence": 12104, + "chair": 12089, + "plate": 11608, + "floor": 11555, + "flower": 11411, + "arm": 11410, + "jacket": 11082, + "stripe": 10799, + "handle": 10577, + "hat": 10481, + "road": 10247, + "nose": 10003, + "rock": 9815, + "tail": 9552, + "foot": 9536, + "face": 9501, + "street": 9438, + "snow": 9299, + "sidewalk": 9077, + "short": 8764, + "tile": 8438, + "bag": 7944, + "field": 7780, + "tire": 7698, + "helmet": 7646, + "bush": 7557, + "glass": 7440, + "spot": 7322, + "boy": 7270, + "number": 6968, + "background": 6935, + "bottle": 6930, + "post": 6872, + "roof": 6846, + "umbrella": 6843, + "track": 6665, + "plant": 6554, + "branch": 6423, + "boat": 6422, + "logo": 6404, + "jean": 6403, + "glasses": 6177, + "girl": 6147, + "picture": 6083, + "train": 5928, + "brick": 5846, + "top": 5793, + "box": 5778, + "bench": 5773, + "shelf": 5703, + "wave": 5692, + "cap": 5625, + "food": 5587, + "dirt": 5551, + "countertop": 5464, + "mouth": 5425, + "glove": 5319, + "pillow": 5310, + "bowl": 5288, + "mirror": 5270, + "clock": 5235, + "horse": 5226, + "trunk": 5180, + "banana": 5168, + "bus": 5140, + "bird": 5084, + "book": 5047, + "airplane": 5043, + "neck": 4943, + "house": 4850, + "paper": 4808, + "writing": 4777, + "board": 4718, + "reflection": 4691, + "coat": 4643, + "wing": 4592, + "elephant": 4558, + "cup": 4537, + "mountain": 4531, + "seat": 4519, + "button": 4500, + "sock": 4485, + "giraffe": 4477, + "cabinet": 4473, + "kite": 4419, + "lamp": 4394, + "hill": 4376, + "dog": 4366, + "cow": 4278, + "truck": 4270, + "flag": 4231, + "headlight": 4230, + "bike": 4220, + "surfboard": 4108, + "frame": 3981, + "sand": 3978, + "wire": 3963, + "zebra": 3962, + "sheep": 3957, + "skateboard": 3950, + "motorcycle": 3949, + "word": 3900, + "ski": 3829, + "finger": 3820, + "back": 3682, + "ceiling": 3646, + "beach": 3605, + "design": 3544, + "animal": 3478, + "sink": 3450, + "ball": 3409, + "cat": 3407, + "pizza": 3326, + "container": 3323, + "curtain": 3270, + "bed": 3265, + "bear": 3193, + "sunglasses": 3133, + "windshield": 3120, + "towel": 3116, + "player": 3095, + "boot": 3071, + "vehicle": 3000, + "vase": 2986, + "railing": 2977, + "wood": 2977, + "paw": 2955, + "ocean": 2933, + "desk": 2887, + "tie": 2884, + "donut": 2875, + "stand": 2859, + "engine": 2847, + "racket": 2846, + "child": 2836, + "tower": 2789, + "photo": 2783, + "pot": 2736, + "stone": 2733, + "lady": 2711, + "phone": 2697, + "orange": 2691, + "basket": 2690, + "horn": 2680, + "laptop": 2644, + "lettering": 2643, + "collar": 2640, + "bar": 2624, + "drawer": 2621, + "stem": 2588, + "toilet": 2571, + "apple": 2568, + "backpack": 2550, + "strap": 2549, + "lid": 2547, + "knob": 2545, + "sticker": 2539, + "fruit": 2508, + "sleeve": 2501, + "uniform": 2478, + "fork": 2428, + "cord": 2427, + "blanket": 2410, + "cheese": 2397, + "screen": 2383, + "fur": 2378, + "napkin": 2367, + "air": 2357, + "dress": 2353, + "knife": 2344, + "rail": 2334, + "mane": 2317, + "bicycle": 2309, + "guy": 2298, + "room": 2284, + "hoof": 2281, + "keyboard": 2280, + "sneaker": 2278, + "carrot": 2256, + "object": 2245, + "sweater": 2210, + "patch": 2209, + "wrist": 2201, + "bat": 2196, + "curb": 2189, + "couch": 2172, + "cake": 2168, + "suit": 2146, + "arrow": 2139, + "tag": 2129, + "vegetable": 2126, + "front": 2125, + "hole": 2123, + "tray": 2115, + "faucet": 2112, + "base": 2097, + "tomato": 2094, + "frisbee": 2065, + "bread": 2059, + "key": 2055, + "street light": 2023, + "knee": 2015, + "pipe": 2014, + "pavement": 2003, + "watch": 1999, + "court": 1987, + "broccoli": 1940, + "camera": 1926, + "tshirt": 1922, + "television": 1922, + "platform": 1920, + "circle": 1893, + "ripple": 1870, + "bathroom": 1863, + "stick": 1858, + "rope": 1858, + "cloth": 1839, + "distance": 1835, + "paint": 1832, + "suitcase": 1828, + "cone": 1827, + "step": 1824, + "belt": 1817, + "banner": 1811, + "dish": 1810, + "traffic light": 1803, + "computer": 1800, + "area": 1794, + "shade": 1787, + "bridge": 1782, + "vest": 1782, + "van": 1774, + "carpet": 1771, + "sauce": 1765, + "license plate": 1759, + "rack": 1736, + "spoon": 1729, + "pillar": 1693, + "string": 1689, + "black": 1675, + "can": 1649, + "balcony": 1647, + "candle": 1637, + "surface": 1631, + "meat": 1627, + "label": 1612, + "body": 1585, + "chain": 1574, + "onion": 1555, + "jersey": 1538, + "feather": 1536, + "bottom": 1533, + "gravel": 1519, + "weed": 1518, + "pepper": 1516, + "sandwich": 1511, + "awning": 1508, + "column": 1501, + "fire hydrant": 1500, + "item": 1498, + "goggles": 1479, + "skier": 1478, + "kitchen": 1477, + "cover": 1473, + "skirt": 1473, + "stair": 1452, + "shoulder": 1449, + "park": 1437, + "band": 1436, + "stove": 1427, + "name": 1419, + "rug": 1416, + "refrigerator": 1412, + "spectator": 1394, + "ramp": 1390, + "snowboard": 1376, + "monitor": 1375, + "tree trunk": 1371, + "whisker": 1371, + "gate": 1368, + "panel": 1365, + "pocket": 1364, + "luggage": 1360, + "statue": 1339, + "blind": 1327, + "shore": 1312, + "clothes": 1308, + "ring": 1307, + "metal": 1304, + "beak": 1304, + "purse": 1293, + "concrete": 1277, + "log": 1275, + "kid": 1272, + "cell phone": 1271, + "pen": 1270, + "bracelet": 1268, + "scarf": 1264, + "graffiti": 1256, + "crust": 1255, + "green": 1251, + "ski pole": 1237, + "cushion": 1230, + "wetsuit": 1230, + "mouse": 1228, + "hot dog": 1223, + "necklace": 1219, + "doorway": 1217, + "piece": 1213, + "shrub": 1209, + "net": 1187, + "palm tree": 1180, + "path": 1179, + "beard": 1165, + "oven": 1155, + "holder": 1153, + "advertisement": 1151, + "wine": 1146, + "sheet": 1146, + "tusk": 1145, + "sun": 1138, + "topping": 1135, + "pan": 1132, + "walkway": 1132, + "remote": 1129, + "structure": 1125, + "cart": 1120, + "slice": 1119, + "tennis court": 1099, + "vent": 1097, + "hood": 1094, + "group": 1089, + "catcher": 1089, + "speaker": 1088, + "scene": 1084, + "sandal": 1084, + "forest": 1082, + "rim": 1076, + "bun": 1076, + "painting": 1074, + "tennis racket": 1068, + "outlet": 1064, + "poster": 1056, + "tent": 1053, + "star": 1052, + "chimney": 1051, + "runway": 1049, + "street sign": 1044, + "cable": 1042, + "text": 1037, + "outfit": 1036, + "bolt": 1022, + "jar": 1019, + "cellphone": 1008, + "city": 998, + "decoration": 997, + "river": 973, + "surfer": 971, + "elbow": 970, + "wiper": 968, + "slope": 966, + "block": 958, + "frosting": 950, + "bucket": 950, + "bumper": 950, + "trash can": 947, + "tank": 947, + "lettuce": 936, + "fan": 936, + "teddy bear": 935, + "store": 932, + "parking lot": 925, + "tablecloth": 923, + "dot": 923, + "utensil": 917, + "case": 906, + "power line": 894, + "border": 893, + "petal": 892, + "pane": 890, + "controller": 889, + "eyebrow": 887, + "microwave": 885, + "ribbon": 885, + "propeller": 882, + "crowd": 879, + "clothing": 876, + "chest": 876, + "cockpit": 876, + "slat": 875, + "display": 862, + "baby": 859, + "thumb": 858, + "symbol": 856, + "liquid": 850, + "baseball player": 847, + "beam": 843, + "batter": 839, + "foam": 833, + "pepperoni": 829, + "toy": 823, + "train car": 818, + "couple": 816, + "olive": 811, + "teeth": 809, + "footprint": 808, + "print": 805, + "lip": 804, + "hoodie": 804, + "sofa": 803, + "straw": 800, + "skin": 800, + "lamp post": 799, + "land": 795, + "wristband": 794, + "headboard": 793, + "blade": 783, + "umpire": 782, + "mug": 775, + "mushroom": 773, + "potato": 771, + "brush": 767, + "cleat": 763, + "signal": 750, + "ladder": 749, + "barrier": 748, + "arch": 740, + "pile": 738, + "dock": 732, + "game": 731, + "bin": 730, + "hillside": 729, + "cement": 728, + "ledge": 723, + "planter": 721, + "drink": 720, + "mat": 712, + "smoke": 711, + "egg": 709, + "grill": 709, + "mask": 703, + "shutter": 701, + "jet": 701, + "pad": 697, + "suv": 695, + "strip": 694, + "canopy": 694, + "toothbrush": 692, + "spoke": 685, + "baseball": 682, + "station": 679, + "lake": 672, + "burner": 670, + "tail light": 667, + "ponytail": 666, + "handlebar": 665, + "image": 664, + "crosswalk": 660, + "numeral": 660, + "tank top": 657, + "rod": 656, + "airport": 656, + "chicken": 655, + "zipper": 655, + "hay": 654, + "pond": 651, + "stain": 646, + "headband": 645, + "tongue": 635, + "nail": 634, + "duck": 634, + "tennis shoe": 631, + "scissors": 626, + "stool": 626, + "trash": 625, + "pitcher": 622, + "landing gear": 622, + "lot": 621, + "yellow": 621, + "stop sign": 619, + "tarmac": 615, + "chin": 613, + "drain": 613, + "boulder": 613, + "bow": 611, + "pine tree": 606, + "train tracks": 604, + "foliage": 598, + "claw": 596, + "nostril": 594, + "skateboarder": 594, + "strawberry": 590, + "tarp": 586, + "light pole": 585, + "enclosure": 585, + "passenger": 583, + "horizon": 580, + "grape": 574, + "crate": 573, + "twig": 573, + "emblem": 572, + "rose": 571, + "toilet paper": 570, + "cross": 567, + "sprinkle": 567, + "icing": 565, + "lawn": 560, + "leash": 560, + "tub": 559, + "wet suit": 555, + "roll": 553, + "visor": 552, + "magnet": 551, + "roman numeral": 550, + "earring": 549, + "salad": 548, + "beer": 547, + "bean": 547, + "balloon": 546, + "tape": 544, + "sweatshirt": 537, + "sail": 533, + "end": 529, + "tennis ball": 529, + "smile": 525, + "antenna": 524, + "plastic": 523, + "apron": 521, + "meter": 514, + "home plate": 514, + "lemon": 513, + "shower": 512, + "moss": 512, + "pastry": 510, + "tree branch": 509, + "screw": 509, + "outside": 508, + "yard": 507, + "mound": 507, + "hook": 506, + "nightstand": 505, + "cupcake": 504, + "magazine": 500, + "heart": 500, + "tattoo": 500, + "fixture": 498, + "bunch": 497, + "mitt": 496, + "fencing": 494, + "asphalt": 493, + "grate": 493, + "soap": 491, + "crumb": 488, + "fireplace": 488, + "gear": 488, + "trail": 487, + "switch": 485, + "bark": 481, + "puddle": 480, + "goat": 479, + "dispenser": 476, + "bathtub": 475, + "saddle": 474, + "cupboard": 473, + "hose": 472, + "baseball field": 471, + "motorbike": 470, + "tennis": 470, + "fry": 467, + "stack": 466, + "comforter": 466, + "driver": 466, + "entrance": 464, + "deck": 464, + "restaurant": 464, + "fin": 464, + "hedge": 462, + "archway": 459, + "mast": 458, + "street lamp": 456, + "harness": 455, + "billboard": 454, + "zoo": 452, + "saucer": 451, + "baseball bat": 451, + "rice": 444, + "coffee table": 443, + "baseball cap": 443, + "trailer": 443, + "snout": 443, + "dresser": 441, + "scooter": 439, + "steeple": 438, + "fingernail": 437, + "ice": 436, + "machine": 433, + "cab": 433, + "forehead": 431, + "barrel": 430, + "coffee": 427, + "toilet seat": 427, + "drawing": 427, + "pasture": 426, + "snowboarder": 425, + "light fixture": 419, + "ketchup": 417, + "cookie": 415, + "blouse": 413, + "table cloth": 412, + "home": 411, + "marker": 410, + "sausage": 410, + "chip": 410, + "bedroom": 409, + "card": 408, + "art": 407, + "glass window": 407, + "juice": 405, + "bell": 405, + "ski poles": 405, + "pedestrian": 404, + "crane": 402, + "day": 401, + "mustache": 401, + "cucumber": 399, + "fish": 398, + "bookshelf": 397, + "menu": 396, + "flip flop": 396, + "rider": 396, + "parking meter": 392, + "lock": 392, + "knot": 389, + "mud": 388, + "intersection": 387, + "plug": 384, + "tissue": 384, + "dugout": 383, + "traffic": 381, + "living room": 381, + "reflector": 381, + "bracket": 381, + "stuffed animal": 381, + "windshield wiper": 380, + "fender": 379, + "bleacher": 375, + "traffic signal": 374, + "brick wall": 373, + "pier": 372, + "figure": 372, + "clock face": 371, + "ad": 368, + "bacon": 368, + "stroller": 367, + "cooler": 367, + "knee pad": 365, + "cutting board": 364, + "cabinet door": 364, + "foreground": 364, + "newspaper": 363, + "dome": 362, + "light switch": 362, + "nut": 362, + "cage": 361, + "carriage": 359, + "ship": 358, + "stop": 358, + "toe": 358, + "diamond": 356, + "wool": 356, + "triangle": 355, + "porch": 354, + "sailboat": 352, + "light post": 352, + "chocolate": 351, + "dessert": 349, + "spinach": 347, + "sea": 347, + "tennis player": 347, + "shop": 346, + "pickle": 346, + "headphone": 345, + "silverware": 345, + "control": 343, + "limb": 342, + "buckle": 342, + "noodle": 341, + "cheek": 341, + "trousers": 340, + "spire": 340, + "shoreline": 340, + "fence post": 340, + "mustard": 339, + "garbage can": 339, + "bubble": 339, + "staircase": 337, + "lamb": 337, + "clock tower": 336, + "splash": 336, + "male": 335, + "lamp shade": 335, + "pebble": 332, + "water bottle": 331, + "telephone": 328, + "island": 328, + "urinal": 327, + "dial": 324, + "wrist band": 324, + "pedal": 323, + "bridle": 321, + "tube": 318, + "front legs": 318, + "placemat": 316, + "female": 315, + "microphone": 313, + "vine": 312, + "kickstand": 312, + "doll": 312, + "photograph": 312, + "shoelace": 312, + "computer monitor": 311, + "bank": 311, + "bedspread": 311, + "train station": 311, + "church": 310, + "artwork": 309, + "waist": 307, + "figurine": 306, + "candy": 306, + "mattress": 306, + "meal": 304, + "dishwasher": 303, + "adult": 303, + "berry": 302, + "device": 301, + "character": 301, + "bull": 300, + "remote control": 299, + "decal": 299, + "platter": 299, + "flooring": 297, + "sculpture": 297, + "cliff": 296, + "plaque": 294, + "cream": 294, + "soup": 292, + "garage": 290, + "trashcan": 289, + "shaker": 289, + "seed": 289, + "armrest": 288, + "wine bottle": 288, + "pigeon": 288, + "view": 285, + "hanger": 285, + "paper towel": 284, + "ham": 282, + "driveway": 281, + "veggie": 281, + "lampshade": 280, + "furniture": 280, + "paddle": 280, + "package": 277, + "kettle": 277, + "french fry": 276, + "soda": 274, + "globe": 273, + "drape": 272, + "tool": 272, + "beverage": 272, + "beanie": 272, + "ornament": 271, + "wrapper": 270, + "cabin": 269, + "barn": 268, + "ski lift": 268, + "toilet bowl": 267, + "sugar": 265, + "landscape": 265, + "coffee cup": 264, + "roman numerals": 264, + "cd": 263, + "inside": 263, + "corn": 262, + "bookcase": 261, + "spice": 261, + "bandana": 259, + "taxi": 257, + "pool": 257, + "cuff": 256, + "patio": 255, + "wallpaper": 254, + "window sill": 252, + "garden": 252, + "door handle": 252, + "bus stop": 249, + "spatula": 248, + "skyscraper": 247, + "blender": 247, + "pineapple": 247, + "soil": 244, + "steering wheel": 243, + "video game": 243, + "icon": 243, + "bead": 243, + "muzzle": 243, + "wii": 243, + "buoy": 242, + "pea": 242, + "palm": 241, + "aircraft": 241, + "pony tail": 240, + "baseball glove": 238, + "pathway": 237, + "latch": 237, + "carton": 236, + "stump": 236, + "spray": 236, + "oar": 235, + "stove top": 234, + "traffic sign": 234, + "slab": 234, + "heel": 234, + "handbag": 233, + "foil": 233, + "tunnel": 233, + "american flag": 233, + "moped": 232, + "side mirror": 232, + "stadium": 232, + "highway": 231, + "skater": 231, + "notebook": 230, + "chandelier": 230, + "watermark": 230, + "bikini": 230, + "tee shirt": 230, + "appliance": 228, + "pear": 228, + "rain": 228, + "family": 227, + "blueberry": 226, + "seagull": 226, + "butter": 225, + "railroad": 225, + "baseboard": 224, + "mantle": 224, + "stop light": 223, + "hubcap": 223, + "necktie": 223, + "costume": 223, + "calf": 223, + "herd": 223, + "herb": 222, + "train track": 222, + "shed": 221, + "telephone pole": 221, + "condiment": 221, + "milk": 220, + "wagon": 220, + "peak": 218, + "picture frame": 217, + "wake": 215, + "booth": 214, + "skiis": 214, + "shingle": 213, + "cattle": 213, + "lift": 213, + "mouse pad": 212, + "bang": 211, + "lanyard": 211, + "ski slope": 210, + "air conditioner": 209, + "motor": 209, + "roadway": 208, + "pencil": 208, + "stoplight": 207, + "toaster": 206, + "cabbage": 206, + "brake light": 206, + "pumpkin": 204, + "bouquet": 204, + "netting": 204, + "trick": 204, + "median": 202, + "stairway": 201, + "jug": 201, + "kitten": 201, + "canister": 200, + "cardboard": 200, + "pie": 199, + "flame": 198, + "coaster": 197, + "manhole": 197, + "radiator": 195, + "audience": 195, + "socket": 194, + "storefront": 194, + "freezer": 194, + "front window": 193, + "bud": 193, + "ankle": 193, + "ottoman": 191, + "badge": 191, + "cherry": 191, + "market": 191, + "guitar": 190, + "french fries": 190, + "handle bars": 190, + "basin": 190, + "officer": 190, + "biker": 190, + "muffin": 190, + "facial hair": 189, + "head light": 188, + "steam": 188, + "fountain": 187, + "dvd": 187, + "picnic table": 187, + "range": 187, + "date": 186, + "peel": 186, + "seaweed": 184, + "toothpick": 184, + "stall": 184, + "barricade": 183, + "shower head": 183, + "skate park": 183, + "lime": 182, + "end table": 180, + "jeep": 180, + "map": 180, + "lane": 180, + "mountain range": 180, + "train engine": 179, + "packet": 176, + "coffee mug": 176, + "stone wall": 176, + "sunset": 176, + "basil": 176, + "coffee maker": 175, + "pasta": 174, + "bagel": 173, + "shower curtain": 173, + "lantern": 171, + "salt shaker": 171, + "tine": 171, + "seasoning": 171, + "computer mouse": 170, + "pack": 170, + "soccer ball": 169, + "overpass": 169, + "computer screen": 168, + "robe": 168, + "shelter": 168, + "roadside": 168, + "gas tank": 168, + "valley": 168, + "utility pole": 168, + "sedan": 167, + "shrimp": 167, + "office": 166, + "town": 166, + "crown": 166, + "parasail": 166, + "flower pot": 165, + "mailbox": 165, + "baseball game": 165, + "peach": 165, + "harbor": 164, + "worker": 164, + "half": 164, + "towel rack": 162, + "window frame": 162, + "disc": 161, + "door knob": 161, + "stabilizer": 161, + "plain": 161, + "pin": 160, + "pizza slice": 160, + "vanity": 159, + "bow tie": 158, + "produce": 157, + "scale": 156, + "turf": 156, + "door frame": 155, + "binder": 155, + "sweatband": 155, + "printer": 154, + "undershirt": 154, + "pilot": 154, + "cauliflower": 153, + "blazer": 153, + "windowsill": 153, + "feeder": 152, + "fire truck": 152, + "mousepad": 151, + "folder": 151, + "hotel": 151, + "doorknob": 151, + "soap dispenser": 151, + "fog": 150, + "stream": 150, + "skull": 149, + "hallway": 148, + "prong": 148, + "streamer": 148, + "ski boot": 148, + "paper plate": 148, + "mannequin": 147, + "ivy": 147, + "tongs": 147, + "locomotive": 147, + "exhaust pipe": 147, + "layer": 147, + "calendar": 146, + "slot": 146, + "desert": 146, + "side window": 145, + "hour hand": 145, + "she": 144, + "canoe": 144, + "goatee": 144, + "squash": 144, + "toast": 144, + "electrical outlet": 143, + "tabletop": 143, + "breast": 143, + "bib": 143, + "butterfly": 142, + "chopstick": 142, + "candle holder": 142, + "dough": 142, + "toilet lid": 142, + "guard rail": 141, + "briefcase": 141, + "back pack": 141, + "cigarette": 141, + "wii remote": 141, + "avocado": 141, + "celery": 141, + "minivan": 140, + "scoreboard": 140, + "legging": 140, + "watermelon": 140, + "toothpaste": 140, + "clay": 139, + "foot print": 139, + "terminal": 139, + "snowsuit": 139, + "minute hand": 139, + "mesh": 139, + "trash bin": 138, + "mulch": 138, + "pancake": 138, + "toiletry": 138, + "quilt": 138, + "glaze": 138, + "ceiling light": 137, + "manhole cover": 137, + "face mask": 137, + "teapot": 136, + "salt": 136, + "garage door": 136, + "ram": 136, + "fire": 135, + "goose": 135, + "windshield wipers": 135, + "ice cream": 135, + "stage": 134, + "toilet tank": 134, + "fern": 134, + "tap": 132, + "railroad tracks": 132, + "backsplash": 131, + "overhang": 131, + "brocolli": 131, + "photographer": 131, + "beef": 131, + "lighthouse": 130, + "ski pants": 128, + "wristwatch": 127, + "name tag": 126, + "wallet": 125, + "side table": 124, + "closet": 124, + "cane": 124, + "page": 124, + "muffler": 124, + "hut": 124, + "rooftop": 124, + "shin guard": 124, + "wii controller": 124, + "heater": 123, + "apartment": 123, + "shield": 123, + "jockey": 123, + "team": 123, + "charger": 122, + "radio": 122, + "light bulb": 122, + "garnish": 122, + "raft": 122, + "website": 122, + "sign post": 121, + "oven door": 121, + "parsley": 121, + "skylight": 120, + "oil": 120, + "brim": 120, + "polar bear": 120, + "tangerine": 120, + "toddler": 119, + "policeman": 119, + "entertainment center": 118, + "swimsuit": 118, + "dumpster": 118, + "floret": 118, + "ski boots": 117, + "surf": 117, + "burger": 116, + "cardboard box": 116, + "game controller": 116, + "chef": 116, + "farm": 116, + "ipod": 116, + "flamingo": 116, + "lapel": 115, + "bike rack": 115, + "cycle": 115, + "night": 114, + "overall": 114, + "snowflake": 114, + "trolley": 114, + "outfield": 114, + "conductor": 114, + "cereal": 113, + "sponge": 113, + "baseball uniform": 113, + "cactus": 112, + "easel": 112, + "armchair": 112, + "tractor": 112, + "radish": 112, + "sack": 111, + "mother": 111, + "smoke stack": 111, + "moustache": 111, + "pump": 111, + "tea": 111, + "banana bunch": 111, + "kneepad": 111, + "moon": 110, + "boardwalk": 110, + "reign": 110, + "christmas tree": 110, + "ski tracks": 110, + "pajama": 110, + "ocean water": 110, + "castle": 109, + "soap dish": 109, + "tail feathers": 109, + "beer bottle": 109, + "elbow pad": 109, + "floor lamp": 108, + "meadow": 108, + "snack": 108, + "railway": 108, + "dinner": 108, + "suspender": 108, + "match": 108, + "parasol": 108, + "tablet": 107, + "goal": 107, + "cargo": 107, + "bathing suit": 107, + "gun": 107, + "syrup": 107, + "copyright": 107, + "tennis net": 107, + "cowboy hat": 107, + "rock wall": 106, + "powder": 106, + "envelope": 105, + "piano": 105, + "gravy": 105, + "skatepark": 105, + "deer": 104, + "pepper shaker": 104, + "keypad": 103, + "monkey": 103, + "scaffolding": 103, + "monument": 103, + "tv stand": 103, + "grass field": 103, + "life jacket": 102, + "snow board": 102, + "melon": 102, + "sunflower": 101, + "product": 101, + "bride": 101, + "pickup truck": 100, + "mountainside": 100, + "kayak": 100, + "coach": 100, + "broom": 99, + "cracker": 98, + "book shelf": 98, + "ceiling fan": 98, + "lunch": 98, + "drum": 98, + "train cars": 98, + "fuselage": 98, + "tomato sauce": 98, + "lipstick": 97, + "dryer": 97, + "tripod": 97, + "coffee pot": 97, + "bed frame": 97, + "life preserver": 97, + "hill side": 97, + "mango": 97, + "breakfast": 96, + "parachute": 96, + "mitten": 96, + "daisy": 96, + "sandwhich": 96, + "beach chair": 96, + "lion": 95, + "tree line": 95, + "police officer": 95, + "dressing": 95, + "license": 95, + "garlic": 95, + "dip": 94, + "flour": 94, + "playground": 94, + "bedding": 94, + "bath tub": 94, + "tourist": 94, + "tail wing": 94, + "coin": 93, + "tree leaves": 93, + "weather vane": 93, + "control panel": 93, + "wild": 93, + "surfing": 93, + "head band": 93, + "dress shirt": 92, + "tights": 92, + "turbine": 92, + "tissue box": 91, + "tail lights": 91, + "alarm clock": 91, + "traffic cone": 91, + "mountain top": 91, + "scissor": 91, + "air vent": 91, + "antelope": 91, + "ball cap": 91, + "clock hand": 91, + "fire escape": 90, + "wrist watch": 90, + "swan": 90, + "neck tie": 90, + "courtyard": 89, + "glass door": 89, + "butter knife": 89, + "groom": 89, + "motorcyclist": 89, + "tulip": 88, + "portrait": 88, + "blossom": 88, + "safety jacket": 88, + "pony": 88, + "signal light": 87, + "mixer": 87, + "catchers mitt": 87, + "snow pants": 87, + "ski suit": 87, + "tile floor": 86, + "pillowcase": 86, + "slack": 85, + "kiwi": 84, + "puppy": 84, + "electronics": 84, + "customer": 84, + "asparagus": 84, + "zucchini": 83, + "plantain": 83, + "bathroom sink": 82, + "footboard": 82, + "grafitti": 82, + "canal": 82, + "tomato slice": 82, + "biscuit": 82, + "police": 82, + "comb": 81, + "swim trunks": 81, + "dvd player": 81, + "dashboard": 81, + "passenger car": 81, + "baseline": 81, + "second floor": 80, + "soda can": 80, + "birthday cake": 80, + "skiier": 80, + "plumbing": 80, + "jet engine": 80, + "trough": 79, + "tail fin": 79, + "toilet brush": 79, + "panda": 79, + "shopping bag": 78, + "chalkboard": 78, + "cyclist": 78, + "rainbow": 78, + "suit jacket": 78, + "tea kettle": 78, + "pillow case": 78, + "athlete": 78, + "life vest": 78, + "passenger train": 78, + "tennis match": 78, + "bamboo": 78, + "restroom": 77, + "dining table": 77, + "fire extinguisher": 77, + "train platform": 77, + "train front": 77, + "hand towel": 76, + "safety cone": 76, + "soldier": 76, + "student": 76, + "pitchers mound": 76, + "shin guards": 76, + "bone": 76, + "hamburger": 76, + "computer keyboard": 75, + "gown": 75, + "console": 74, + "parrot": 74, + "raspberry": 74, + "pouch": 74, + "shower door": 74, + "snow suit": 74, + "dirt road": 74, + "display case": 73, + "gas station": 73, + "weather": 73, + "lotion": 72, + "marina": 72, + "gazebo": 72, + "steak": 72, + "referee": 72, + "skillet": 72, + "baseball players": 72, + "giraffe head": 72, + "pizza crust": 72, + "bar stool": 71, + "throw pillow": 71, + "tea pot": 71, + "receipt": 71, + "gazelle": 71, + "rib": 71, + "halter": 71, + "caboose": 71, + "jumpsuit": 71, + "infield": 71, + "brownie": 71, + "notepad": 70, + "alley": 70, + "battery": 70, + "turkey": 70, + "ingredient": 70, + "owl": 70, + "shovel": 69, + "power pole": 69, + "wheelchair": 69, + "hangar": 69, + "trash bag": 69, + "coconut": 69, + "yolk": 69, + "area rug": 68, + "food truck": 68, + "garment": 68, + "instruction": 68, + "bandage": 67, + "parade": 67, + "powdered sugar": 67, + "blood": 67, + "price tag": 66, + "urn": 66, + "gentleman": 66, + "whipped cream": 66, + "museum": 66, + "tortilla": 66, + "bicyclist": 66, + "stapler": 65, + "dinosaur": 65, + "penguin": 65, + "dining room": 64, + "croissant": 64, + "touchpad": 64, + "stereo": 64, + "soccer field": 64, + "buffalo": 63, + "alcohol": 63, + "vane": 63, + "sword": 63, + "raisin": 63, + "cafe": 62, + "apartment building": 62, + "raincoat": 62, + "chili": 62, + "beet": 62, + "eagle": 62, + "baseball mitt": 62, + "satellite dish": 61, + "donkey": 61, + "stuffed bear": 61, + "pizza box": 61, + "ostrich": 61, + "projector": 60, + "park bench": 60, + "dragon": 60, + "waterfall": 60, + "cowboy": 60, + "bus driver": 60, + "ski jacket": 60, + "ladle": 60, + "seal": 59, + "luggage cart": 59, + "earphone": 59, + "fruit stand": 59, + "yacht": 58, + "employee": 58, + "folding chair": 57, + "parking sign": 57, + "lighter": 57, + "macaroni": 57, + "knife block": 56, + "coin slot": 56, + "meatball": 56, + "apple logo": 56, + "grapefruit": 56, + "ox": 56, + "eggplant": 56, + "wire fence": 56, + "washer": 55, + "kiosk": 55, + "table lamp": 55, + "shack": 55, + "sea foam": 55, + "frog": 55, + "ski goggles": 55, + "teddy": 55, + "mozzarella": 55, + "almond": 55, + "polo shirt": 54, + "sweat band": 54, + "desk lamp": 53, + "laptop computer": 53, + "instrument": 53, + "school bus": 53, + "backyard": 53, + "hilltop": 53, + "bunny": 53, + "wig": 53, + "motor bike": 52, + "cooker": 52, + "football": 52, + "underwear": 52, + "onion ring": 52, + "money": 52, + "shampoo": 52, + "soccer player": 52, + "cpu": 51, + "calculator": 51, + "garland": 51, + "skateboard ramp": 51, + "young man": 51, + "office chair": 50, + "beach umbrella": 50, + "sconce": 49, + "coke": 49, + "baked good": 49, + "village": 49, + "water tank": 49, + "snowman": 49, + "yogurt": 49, + "banana slice": 49, + "recliner": 48, + "little girl": 48, + "sweatpants": 48, + "racer": 48, + "blackberry": 48, + "banana peel": 48, + "gift": 47, + "helicopter": 47, + "wildflower": 47, + "sled": 47, + "hair dryer": 46, + "father": 46, + "pig": 46, + "tiger": 45, + "hotel room": 45, + "engineer": 45, + "peanut": 44, + "video camera": 44, + "bird cage": 44, + "pizza cutter": 44, + "honey": 44, + "tofu": 44, + "taxi cab": 43, + "artichoke": 43, + "medicine cabinet": 42, + "vending machine": 42, + "waste basket": 42, + "spear": 42, + "sweet potato": 42, + "iphone": 42, + "bottle cap": 42, + "toaster oven": 41, + "classroom": 41, + "computer desk": 41, + "router": 41, + "mountain side": 41, + "rabbit": 41, + "bug": 41, + "police car": 41, + "station wagon": 40, + "nest": 40, + "smartphone": 40, + "obstacle": 40, + "walnut": 40, + "athletic shoe": 38, + "crab": 38, + "lounge chair": 37, + "ambulance": 37, + "gadget": 37, + "grinder": 37, + "dirt bike": 37, + "hurdle": 37, + "whiteboard": 36, + "washing machine": 36, + "dish soap": 36, + "spray bottle": 36, + "aquarium": 36, + "hammer": 35, + "christmas light": 35, + "bath towel": 33, + "whisk": 31, + "ketchup bottle": 30, + "cub": 29, + "soda bottle": 28, + "soap bottle": 28, + "kitty": 27, + "cooking utensil": 26, + "serving tray": 25, + "swimming pool": 22, + "mixing bowl": 16 + }, + "attribute_count": { + "white": 311225, + "black": 198963, + "blue": 121164, + "green": 117792, + "red": 109934, + "brown": 95534, + "yellow": 62068, + "gray": 60190, + "small": 44843, + "large": 43857, + "wood": 41159, + "silver": 32077, + "metal": 31196, + "orange": 30394, + "tall": 23224, + "long": 21305, + "dark": 20622, + "pink": 19990, + "clear": 14137, + "standing": 13755, + "round": 12712, + "tan": 11974, + "purple": 10506, + "glass": 10498, + "open": 10146, + "big": 9614, + "short": 9336, + "plastic": 9178, + "parked": 8772, + "sitting": 8502, + "walking": 7619, + "striped": 7562, + "brick": 7024, + "young": 6984, + "gold": 6583, + "old": 5966, + "hanging": 5960, + "empty": 5898, + "on": 5502, + "bright": 4976, + "concrete": 4954, + "blond": 4788, + "cloudy": 4773, + "colorful": 4730, + "beige": 4469, + "bare": 4436, + "wet": 4377, + "light": 4313, + "square": 4280, + "little": 4170, + "closed": 4147, + "stone": 4142, + "shiny": 3899, + "thin": 3627, + "dirty": 3597, + "flying": 3424, + "smiling": 3415, + "painted": 3403, + "thick": 3398, + "sliced": 2973, + "playing": 2918, + "tennis": 2870, + "calm": 2833, + "leather": 2819, + "distant": 2781, + "rectangular": 2727, + "looking": 2714, + "grassy": 2670, + "dry": 2664, + "multi colored": 2601, + "light brown": 2582, + "cement": 2485, + "leafy": 2470, + "wearing": 2432, + "light blue": 2350, + "tiled": 2345, + "cooked": 2327, + "baseball": 2325, + "curved": 2252, + "decorative": 2221, + "dead": 2216, + "eating": 2145, + "paper": 2124, + "paved": 2123, + "fluffy": 2120, + "lit": 2094, + "back": 2089, + "framed": 2056, + "plaid": 2036, + "dirt": 2025, + "watching": 2005, + "stuffed": 1969, + "dark brown": 1960, + "circular": 1959, + "clean": 1956, + "steel": 1874, + "stacked": 1866, + "covered": 1834, + "full": 1814, + "flat": 1786, + "street": 1785, + "skiing": 1756, + "baby": 1751, + "black and white": 1708, + "dark blue": 1699, + "beautiful": 1682, + "laying": 1670, + "ceramic": 1665, + "grazing": 1641, + "golden": 1627, + "sandy": 1627, + "blurry": 1613, + "chocolate": 1590, + "wide": 1548, + "growing": 1541, + "chrome": 1529, + "cut": 1497, + "bent": 1484, + "train": 1483, + "holding": 1456, + "water": 1448, + "up": 1419, + "arched": 1409, + "chain link": 1400, + "metallic": 1398, + "snowy": 1384, + "spotted": 1381, + "folded": 1371, + "electrical": 1358, + "pointy": 1348, + "leafless": 1341, + "running": 1341, + "electric": 1334, + "rusty": 1326, + "ripe": 1319, + "furry": 1312, + "traffic": 1305, + "rocky": 1291, + "tiny": 1290, + "down": 1287, + "fresh": 1279, + "snow covered": 1276, + "floral": 1270, + "stainless steel": 1252, + "high": 1240, + "surfing": 1240, + "off": 1235, + "leaning": 1223, + "moving": 1212, + "huge": 1181, + "checkered": 1164, + "maroon": 1152, + "broken": 1149, + "iron": 1143, + "patterned": 1123, + "worn": 1123, + "ski": 1096, + "overcast": 1089, + "waiting": 1086, + "rubber": 1067, + "riding": 1065, + "long sleeved": 1048, + "skinny": 1044, + "grass": 1033, + "porcelain": 1029, + "adult": 1017, + "wire": 1013, + "cloudless": 1013, + "curly": 1007, + "cardboard": 984, + "jumping": 983, + "tile": 979, + "pointed": 976, + "double decker": 972, + "light colored": 957, + "male": 951, + "smooth": 937, + "hazy": 932, + "computer": 912, + "older": 906, + "pine": 906, + "raised": 901, + "bald": 894, + "reflective": 886, + "narrow": 885, + "skateboarding": 885, + "khaki": 876, + "extended": 872, + "roman": 872, + "american": 860, + "puffy": 854, + "shining": 850, + "lush": 838, + "driving": 832, + "overhead": 823, + "piled": 822, + "opened": 808, + "wine": 805, + "sleeping": 798, + "rusted": 795, + "outdoors": 787, + "evergreen": 780, + "airborne": 779, + "oval": 778, + "vertical": 766, + "low": 765, + "illuminated": 756, + "stop": 754, + "marble": 750, + "melted": 744, + "talking": 742, + "wrinkled": 742, + "reflecting": 740, + "grouped": 739, + "resting": 739, + "splashing": 738, + "dark colored": 737, + "palm": 730, + "hardwood": 721, + "sharp": 708, + "straight": 701, + "asian": 699, + "sunny": 698, + "wicker": 696, + "upside down": 694, + "dried": 691, + "ornate": 683, + "shirtless": 672, + "posing": 668, + "written": 667, + "female": 666, + "snow": 659, + "wavy": 658, + "chopped": 655, + "rock": 654, + "glazed": 653, + "glowing": 651, + "bushy": 651, + "slice": 648, + "fried": 647, + "above": 639, + "rough": 637, + "decorated": 628, + "nike": 628, + "hairy": 626, + "happy": 626, + "wild": 619, + "in air": 616, + "triangular": 614, + "bathroom": 610, + "toilet": 608, + "toy": 607, + "textile": 606, + "coffee": 603, + "fuzzy": 602, + "muddy": 602, + "curled": 597, + "neon": 594, + "short sleeved": 593, + "printed": 592, + "horizontal": 590, + "daytime": 586, + "digital": 582, + "asphalt": 577, + "parking": 571, + "crashing": 569, + "burgundy": 562, + "denim": 554, + "bunch": 550, + "displayed": 547, + "outdoor": 542, + "brass": 540, + "teal": 536, + "plain": 535, + "fire": 534, + "floating": 527, + "fake": 525, + "burnt": 525, + "delicious": 525, + "ocean": 524, + "clay": 523, + "reflected": 523, + "pointing": 519, + "faded": 514, + "rounded": 514, + "swinging": 514, + "number": 514, + "filled": 512, + "hard": 509, + "drinking": 508, + "kitchen": 507, + "antique": 504, + "potted": 503, + "lined": 502, + "pale": 497, + "choppy": 497, + "soft": 494, + "frosted": 494, + "alone": 492, + "toasted": 491, + "apple": 490, + "lying": 483, + "rolling": 478, + "aluminum": 478, + "attached": 476, + "tinted": 471, + "bright blue": 469, + "barefoot": 469, + "skating": 469, + "deep": 466, + "playing tennis": 466, + "clock": 464, + "healthy": 462, + "grilled": 456, + "rainbow colored": 453, + "power": 452, + "crossed": 451, + "electronic": 448, + "foamy": 447, + "swimming": 441, + "trimmed": 441, + "heavy": 441, + "fancy": 439, + "baked": 438, + "giant": 437, + "tied": 432, + "crouching": 430, + "modern": 424, + "athletic": 422, + "soccer": 416, + "murky": 415, + "bending": 409, + "mounted": 408, + "floppy": 408, + "pile": 407, + "cracked": 406, + "safety": 405, + "rolled": 404, + "pretty": 404, + "snowboarding": 403, + "sleeveless": 400, + "still": 400, + "granite": 399, + "wispy": 398, + "straw": 397, + "wrapped": 396, + "protective": 394, + "bricked": 392, + "cream colored": 387, + "outstretched": 383, + "busy": 382, + "flat screen": 382, + "slanted": 382, + "cheese": 382, + "patchy": 378, + "vintage": 377, + "used": 375, + "half": 373, + "messy": 370, + "docked": 367, + "navy": 367, + "stainless": 363, + "fat": 363, + "kneeling": 360, + "shallow": 354, + "transparent": 352, + "cooking": 350, + "old fashioned": 345, + "license": 344, + "fallen": 340, + "whole": 335, + "ivory": 333, + "shredded": 332, + "gravel": 330, + "landing": 329, + "wii": 324, + "rippled": 323, + "laptop": 322, + "backwards": 314, + "lime green": 313, + "staring": 312, + "cotton": 312, + "stained": 311, + "designed": 310, + "crouched": 310, + "for sale": 310, + "new": 309, + "lighted": 306, + "balding": 303, + "stack": 300, + "woven": 299, + "barren": 296, + "letter": 296, + "plush": 295, + "turned": 295, + "sparse": 291, + "dusty": 290, + "chinese": 289, + "mesh": 289, + "knit": 289, + "squatting": 288, + "carpeted": 286, + "winter": 280, + "door": 278, + "flowered": 277, + "waving": 275, + "looking down": 271, + "shaggy": 270, + "reading": 269, + "sticking out": 268, + "shaded": 266, + "military": 265, + "railroad": 265, + "home": 265, + "brunette": 263, + "sand": 263, + "raw": 262, + "golden brown": 261, + "crispy": 259, + "serving": 258, + "polar": 258, + "overgrown": 257, + "copper": 257, + "scattered": 254, + "dotted": 254, + "public": 253, + "elderly": 252, + "assorted": 252, + "wireless": 251, + "roll": 250, + "sliding": 249, + "speckled": 248, + "crumpled": 246, + "styrofoam": 243, + "foggy": 243, + "triangle": 242, + "warm": 241, + "elevated": 239, + "peeled": 238, + "caucasian": 235, + "telephone": 233, + "tilted": 233, + "sheer": 233, + "covering": 233, + "recessed": 232, + "tomato": 231, + "shaped": 229, + "bunched": 228, + "fruit": 225, + "textured": 224, + "loose": 223, + "made": 223, + "collared": 223, + "steep": 220, + "peeling": 219, + "batting": 218, + "statue": 216, + "unripe": 216, + "one way": 214, + "police": 214, + "padded": 211, + "reaching": 208, + "halved": 206, + "cast": 204, + "cluttered": 202, + "park": 202, + "indoors": 201, + "chipped": 199, + "dress": 197, + "manicured": 193, + "christmas": 192, + "polka dot": 192, + "racing": 190, + "octagonal": 189, + "soda": 187, + "blowing": 187, + "chalk": 185, + "laughing": 183, + "spread": 182, + "stripes": 182, + "windshield": 182, + "burned": 177, + "seasoned": 177, + "cargo": 176, + "birthday": 176, + "salt": 175, + "herd": 175, + "spiky": 173, + "powdered": 173, + "half full": 172, + "side view": 172, + "numbered": 172, + "taking off": 171, + "perched": 169, + "soap": 165, + "camouflage": 164, + "fluorescent": 163, + "massive": 162, + "performing": 159, + "deep blue": 158, + "throwing": 158, + "wrist": 156, + "steamed": 156, + "cake": 155, + "shaved": 152, + "night": 149, + "blank": 148, + "mountain": 148, + "flowing": 147, + "neon green": 145, + "greenish": 144, + "hitting": 143, + "bending over": 137, + "skate": 135, + "browned": 133, + "pulled back": 129, + "tarmacked": 118, + "muscular": 115, + "toilet paper": 112, + "hilly": 110, + "brake": 109, + "unmade": 100, + "singing": 31, + "crying": 7 + }, + "predicate_count": { + "on": 712409, + "has": 277936, + "in": 251756, + "of": 146339, + "wearing": 136099, + "near": 96589, + "with": 66425, + "above": 47341, + "holding": 42722, + "behind": 41356, + "under": 22596, + "sitting on": 18643, + "wears": 15457, + "standing on": 14185, + "in front of": 13715, + "attached to": 10190, + "at": 9903, + "hanging from": 9894, + "over": 9317, + "for": 9145, + "riding": 8856, + "carrying": 5213, + "eating": 4688, + "walking on": 4613, + "playing": 3810, + "covering": 3806, + "laying on": 3739, + "along": 3624, + "watching": 3490, + "and": 3477, + "between": 3411, + "belonging to": 3288, + "painted on": 3095, + "against": 3092, + "looking at": 3083, + "from": 2945, + "parked on": 2721, + "to": 2517, + "made of": 2380, + "covered in": 2312, + "mounted on": 2253, + "says": 2241, + "part of": 2065, + "across": 1996, + "flying in": 1973, + "using": 1925, + "on back of": 1914, + "lying on": 1869, + "growing on": 1853, + "walking in": 1740 + } +} diff --git a/src/emma_perception/constants/vinvl_x152c4_forced_boxes.yaml b/src/emma_perception/constants/vinvl_x152c4_forced_boxes.yaml new file mode 100644 index 0000000..2e631fe --- /dev/null +++ b/src/emma_perception/constants/vinvl_x152c4_forced_boxes.yaml @@ -0,0 +1,60 @@ +MODEL: + META_ARCHITECTURE: "AttrRCNN" + WEIGHT: "./storage/model/original_vinvl_model.pth" + BACKBONE: + CONV_BODY: "R-152-C4" + RESNETS: + BACKBONE_OUT_CHANNELS: 1024 + STRIDE_IN_1X1: False + NUM_GROUPS: 32 + WIDTH_PER_GROUP: 8 + RPN: + PRE_NMS_TOP_N_TEST: 6000 + POST_NMS_TOP_N_TEST: 300 + FORCE_BOXES: True + ROI_HEADS: + BATCH_SIZE_PER_IMAGE: 384 # 512 + POSITIVE_FRACTION: 0.25 + SCORE_THRESH: 0.0001 + DETECTIONS_PER_IMG: 36 # 600 + MIN_DETECTIONS_PER_IMG: 1 + NMS_FILTER: 1 + ROI_BOX_HEAD: + NUM_CLASSES: 1595 + FORCE_BOXES: True + ROI_ATTRIBUTE_HEAD: + NUM_ATTRIBUTES: 525 + POSTPROCESS_ATTRIBUTES_THRESHOLD: 0.05 + ATTRIBUTE_ON: True +INPUT: + MIN_SIZE_TEST: 600 + MAX_SIZE_TEST: 1000 + PIXEL_MEAN: [103.530, 116.280, 123.675] +DATASETS: + # FACTORY_TEST: ("ODTSVDataset",) + TEST: ("coco_2014_train",) + LABELMAP_FILE: "./src/emma_perception/constants/vinvl_x152c4_classmap.json" + TRAIN: ("visualgenome/train_vgoi6_clipped.yaml",) + # TEST: ("visualgenome/test_vgoi6_clipped.yaml",) + FACTORY_TRAIN: ("VGTSVDataset",) + FACTORY_TEST: ("COCODataset",) +DATALOADER: + NUM_WORKERS: 0 +SOLVER: + BASE_LR: 0.01 + WEIGHT_DECAY: 0.0001 + MAX_ITER: 90000 + STEPS: (49000, 65000) + IMS_PER_BATCH: 1 + CHECKPOINT_PERIOD: 10000 +TEST: + IMS_PER_BATCH: 1 + SKIP_PERFORMANCE_EVAL: True + SAVE_PREDICTIONS: True + SAVE_RESULTS_TO_TSV: False + TSV_SAVE_SUBSET: ["rect", "class", "conf", "feature"] + OUTPUT_FEATURE: True + GATHER_ON_CPU: True +OUTPUT_DIR: "./output/X152C5_test" +DATA_DIR: "./datasets" +DISTRIBUTED_BACKEND: "gloo" diff --git a/src/emma_perception/constants/vinvl_x152c4_simbot.yaml b/src/emma_perception/constants/vinvl_x152c4_simbot.yaml new file mode 100644 index 0000000..7ef8860 --- /dev/null +++ b/src/emma_perception/constants/vinvl_x152c4_simbot.yaml @@ -0,0 +1,55 @@ +MODEL: + META_ARCHITECTURE: "AttrRCNN" + WEIGHT: "pre-trained/model_0220000.pth" + BACKBONE: + CONV_BODY: "R-152-C4" + RESNETS: + BACKBONE_OUT_CHANNELS: 1024 + STRIDE_IN_1X1: False + NUM_GROUPS: 32 + WIDTH_PER_GROUP: 8 + RPN: + PRE_NMS_TOP_N_TEST: 6000 + POST_NMS_TOP_N_TEST: 300 + ROI_HEADS: + BATCH_SIZE_PER_IMAGE: 384 # 512 + POSITIVE_FRACTION: 0.5 # 0.25 + SCORE_THRESH: 0.1# 0.0001 + DETECTIONS_PER_IMG: 36 # 600 + MIN_DETECTIONS_PER_IMG: 1 + ROI_BOX_HEAD: + NUM_CLASSES: 136 + ATTRIBUTE_ON: False + RELATION_ON: False +INPUT: + MIN_SIZE_TEST: 800 + MAX_SIZE_TEST: 1333 + PIXEL_MEAN: [103.530, 116.280, 123.675] +DATASETS: + # FACTORY_TEST: ("ODTSVDataset",) + # TEST: ("flickr30k/tsv/flickr30k.yaml",) + TRAIN: ("train/train.yaml",) + TEST: ("validation/valid.yaml",) + FACTORY_TRAIN: ("VGTSVDataset",) + FACTORY_TEST: ("VGTSVDataset",) +DATALOADER: + NUM_WORKERS: 0 +SOLVER: + BASE_LR: 0.0001 + WEIGHT_DECAY: 0.00001 + MAX_ITER: 312000 + STEPS: (55000, 75000) + IMS_PER_BATCH: 4 + CHECKPOINT_PERIOD: 10000 + TEST_PERIOD: 20000000 +TEST: + IMS_PER_BATCH: 4 + SKIP_PERFORMANCE_EVAL: False + SAVE_PREDICTIONS: True + SAVE_RESULTS_TO_TSV: True + TSV_SAVE_SUBSET: ["rect", "class", "conf", "feature"] + GATHER_ON_CPU: False + OUTPUT_FEATURE: True +OUTPUT_DIR: "./output/TL_X152C4_800-1333_lr1e-4_st1e-1_dpi36_bspi384_v7" +DATA_DIR: "datasets/teach/" +DISTRIBUTED_BACKEND: "gloo" diff --git a/src/emma_perception/constants/vinvl_x152c4_simbot_classmap.json b/src/emma_perception/constants/vinvl_x152c4_simbot_classmap.json new file mode 100644 index 0000000..1106fb9 --- /dev/null +++ b/src/emma_perception/constants/vinvl_x152c4_simbot_classmap.json @@ -0,0 +1,278 @@ +{ + "label_to_idx": { + "Background": 0, + "Action Figure": 1, + "Apple": 2, + "Banana": 3, + "Battery": 4, + "Blinds": 5, + "Board": 6, + "Books": 7, + "Bowl": 8, + "Boxes": 9, + "Bread Slice": 10, + "Button": 11, + "Cabinet": 12, + "Cable": 13, + "Cake": 14, + "Calendar": 15, + "Can": 16, + "Candy Bar": 17, + "Cardboard Box": 18, + "Carrot": 19, + "Cart": 20, + "Cereal Box": 21, + "Certificate": 22, + "Chair": 23, + "Circuit Board": 24, + "Clamp": 25, + "Clipboard": 26, + "Clock": 27, + "Coffee Beans": 28, + "Coffee Maker": 29, + "Coffee Pot": 30, + "Coffee Unmaker": 31, + "Color Changer": 32, + "Computer": 33, + "Control Panel": 34, + "Cooler": 35, + "Couch": 36, + "Counter": 37, + "Crates": 38, + "Cutting Board": 39, + "Dart": 40, + "Dart Board": 41, + "Desk": 42, + "Dolly": 43, + "Donut": 44, + "Door": 45, + "Drawer": 46, + "Drill Chuck": 47, + "Embiggenator": 48, + "Everything's A Carrot Machine": 49, + "Fan": 50, + "Fire Alarm": 51, + "Fire Extinguisher": 52, + "Floppy Disk": 53, + "Folder": 54, + "Folder Holder": 55, + "Fork": 56, + "Forklift": 57, + "Freeze Ray": 58, + "Freezer": 59, + "Fridge": 60, + "Fuse Box": 61, + "Generator": 62, + "Golf Ball": 63, + "Golf Club": 64, + "Gravity Pad": 65, + "Hammer": 66, + "Handsaw": 67, + "Jar": 68, + "Jelly": 69, + "Keyboard": 70, + "Knife": 71, + "Laser": 72, + "Laser Tip": 73, + "Laser Toy": 74, + "Lever": 75, + "Lid": 76, + "Light": 77, + "Light Bulb": 78, + "Light Switch": 79, + "Machine Panel": 80, + "Map": 81, + "Microwave": 82, + "Milk": 83, + "Mug": 84, + "Notepad": 85, + "Outlet": 86, + "Pallets": 87, + "Paper": 88, + "Paper Tray": 89, + "Peanut Butter": 90, + "Pear": 91, + "Pen": 92, + "Photocopier": 93, + "Pie": 94, + "Plant": 95, + "Plate": 96, + "Poster": 97, + "Power Boxes": 98, + "Print Tube": 99, + "Printer": 100, + "Printer Cartridge": 101, + "Puddle": 102, + "Radio": 103, + "Record": 104, + "Robot Arm": 105, + "Sandwich": 106, + "Scale": 107, + "Screw Driver": 108, + "Server": 109, + "Shelf": 110, + "Sign": 111, + "Sink": 112, + "Spoon": 113, + "Sticky Note": 114, + "Stool": 115, + "TAM Prototype": 116, + "Table": 117, + "Tank": 118, + "Tape": 119, + "Target": 120, + "Tesla Coil": 121, + "Time Machine": 122, + "Toast": 123, + "Toaster": 124, + "Tool Board": 125, + "Tool Box": 126, + "Trash": 127, + "Trash Can": 128, + "Tray": 129, + "Trophy": 130, + "Vending Machine": 131, + "Vent": 132, + "Water Barrel": 133, + "Water Tank": 134, + "Wire Coil": 135 + }, + "idx_to_label": { + "0": "Background", + "1": "Action Figure", + "2": "Apple", + "3": "Banana", + "4": "Battery", + "5": "Blinds", + "6": "Board", + "7": "Books", + "8": "Bowl", + "9": "Boxes", + "10": "Bread Slice", + "11": "Button", + "12": "Cabinet", + "13": "Cable", + "14": "Cake", + "15": "Calendar", + "16": "Can", + "17": "Candy Bar", + "18": "Cardboard Box", + "19": "Carrot", + "20": "Cart", + "21": "Cereal Box", + "22": "Certificate", + "23": "Chair", + "24": "Circuit Board", + "25": "Clamp", + "26": "Clipboard", + "27": "Clock", + "28": "Coffee Beans", + "29": "Coffee Maker", + "30": "Coffee Pot", + "31": "Coffee Unmaker", + "32": "Color Changer", + "33": "Computer", + "34": "Control Panel", + "35": "Cooler", + "36": "Couch", + "37": "Counter", + "38": "Crates", + "39": "Cutting Board", + "40": "Dart", + "41": "Dart Board", + "42": "Desk", + "43": "Dolly", + "44": "Donut", + "45": "Door", + "46": "Drawer", + "47": "Drill Chuck", + "48": "Embiggenator", + "49": "Everything's A Carrot Machine", + "50": "Fan", + "51": "Fire Alarm", + "52": "Fire Extinguisher", + "53": "Floppy Disk", + "54": "Folder", + "55": "Folder Holder", + "56": "Fork", + "57": "Forklift", + "58": "Freeze Ray", + "59": "Freezer", + "60": "Fridge", + "61": "Fuse Box", + "62": "Generator", + "63": "Golf Ball", + "64": "Golf Club", + "65": "Gravity Pad", + "66": "Hammer", + "67": "Handsaw", + "68": "Jar", + "69": "Jelly", + "70": "Keyboard", + "71": "Knife", + "72": "Laser", + "73": "Laser Tip", + "74": "Laser Toy", + "75": "Lever", + "76": "Lid", + "77": "Light", + "78": "Light Bulb", + "79": "Light Switch", + "80": "Machine Panel", + "81": "Map", + "82": "Microwave", + "83": "Milk", + "84": "Mug", + "85": "Notepad", + "86": "Outlet", + "87": "Pallets", + "88": "Paper", + "89": "Paper Tray", + "90": "Peanut Butter", + "91": "Pear", + "92": "Pen", + "93": "Photocopier", + "94": "Pie", + "95": "Plant", + "96": "Plate", + "97": "Poster", + "98": "Power Boxes", + "99": "Print Tube", + "100": "Printer", + "101": "Printer Cartridge", + "102": "Puddle", + "103": "Radio", + "104": "Record", + "105": "Robot Arm", + "106": "Sandwich", + "107": "Scale", + "108": "Screw Driver", + "109": "Server", + "110": "Shelf", + "111": "Sign", + "112": "Sink", + "113": "Spoon", + "114": "Sticky Note", + "115": "Stool", + "116": "TAM Prototype", + "117": "Table", + "118": "Tank", + "119": "Tape", + "120": "Target", + "121": "Tesla Coil", + "122": "Time Machine", + "123": "Toast", + "124": "Toaster", + "125": "Tool Board", + "126": "Tool Box", + "127": "Trash", + "128": "Trash Can", + "129": "Tray", + "130": "Trophy", + "131": "Vending Machine", + "132": "Vent", + "133": "Water Barrel", + "134": "Water Tank", + "135": "Wire Coil" + } +} diff --git a/src/emma_perception/constants/vinvl_x152c4_simbot_classmap_v124.json b/src/emma_perception/constants/vinvl_x152c4_simbot_classmap_v124.json new file mode 100644 index 0000000..4e6c706 --- /dev/null +++ b/src/emma_perception/constants/vinvl_x152c4_simbot_classmap_v124.json @@ -0,0 +1,274 @@ +{ + "label_to_idx": { + "Background": 0, + "Action Figure": 1, + "Apple": 2, + "Banana": 3, + "Battery": 4, + "Blinds": 5, + "Board": 6, + "Books": 7, + "Bowl": 8, + "Boxes": 9, + "Bread Slice": 10, + "Button": 11, + "Cabinet": 12, + "Cable": 13, + "Cake": 14, + "Calendar": 15, + "Can": 16, + "Candy Bar": 17, + "Cardboard Box": 18, + "Carrot": 19, + "Cart": 20, + "Cereal Box": 21, + "Chair": 22, + "Circuit Board": 23, + "Clamp": 24, + "Clipboard": 25, + "Clock": 26, + "Coffee Beans": 27, + "Coffee Maker": 28, + "Coffee Pot": 29, + "Coffee Unmaker": 30, + "Color Changer": 31, + "Computer": 32, + "Control Panel": 33, + "Cooler": 34, + "Couch": 35, + "Counter": 36, + "Crates": 37, + "Cutting Board": 38, + "Dart": 39, + "Dart Board": 40, + "Desk": 41, + "Dolly": 42, + "Donut": 43, + "Door": 44, + "Drawer": 45, + "Drill Chuck": 46, + "Embiggenator": 47, + "Everything's A Carrot Machine": 48, + "Fan": 49, + "Fire Alarm": 50, + "Fire Extinguisher": 51, + "Floppy Disk": 52, + "Folder": 53, + "Folder Holder": 54, + "Fork": 55, + "Forklift": 56, + "Freeze Ray": 57, + "Freezer": 58, + "Fridge": 59, + "Fuse Box": 60, + "Generator": 61, + "Golf Ball": 62, + "Golf Club": 63, + "Gravity Pad": 64, + "Hammer": 65, + "Handsaw": 66, + "Jar": 67, + "Jelly": 68, + "Keyboard": 69, + "Knife": 70, + "Laser": 71, + "Laser Tip": 72, + "Laser Toy": 73, + "Lever": 74, + "Lid": 75, + "Light": 76, + "Light Bulb": 77, + "Light Switch": 78, + "Machine Panel": 79, + "Map": 80, + "Microwave": 81, + "Milk": 82, + "Mug": 83, + "Notepad": 84, + "Outlet": 85, + "Pallets": 86, + "Paper": 87, + "Peanut Butter": 88, + "Pear": 89, + "Pen": 90, + "Photocopier": 91, + "Pie": 92, + "Plant": 93, + "Plate": 94, + "Poster": 95, + "Power Boxes": 96, + "Print Tube": 97, + "Printer": 98, + "Printer Cartridge": 99, + "Puddle": 100, + "Radio": 101, + "Record": 102, + "Robot Arm": 103, + "Sandwich": 104, + "Scale": 105, + "Screw Driver": 106, + "Shelf": 107, + "Sign": 108, + "Sink": 109, + "Spoon": 110, + "Sticky Note": 111, + "Stool": 112, + "TAM Prototype": 113, + "Table": 114, + "Tank": 115, + "Tape": 116, + "Target": 117, + "Tesla Coil": 118, + "Time Machine": 119, + "Toast": 120, + "Toaster": 121, + "Tool Board": 122, + "Tool Box": 123, + "Trash": 124, + "Trash Can": 125, + "Tray": 126, + "Trophy": 127, + "Vending Machine": 128, + "Vent": 129, + "Water Barrel": 130, + "Water Tank": 131, + "Wire Coil": 132, + "Unassigned": 133 + }, + "idx_to_label": { + "0": "Background", + "1": "Action Figure", + "2": "Apple", + "3": "Banana", + "4": "Battery", + "5": "Blinds", + "6": "Board", + "7": "Books", + "8": "Bowl", + "9": "Boxes", + "10": "Bread Slice", + "11": "Button", + "12": "Cabinet", + "13": "Cable", + "14": "Cake", + "15": "Calendar", + "16": "Can", + "17": "Candy Bar", + "18": "Cardboard Box", + "19": "Carrot", + "20": "Cart", + "21": "Cereal Box", + "22": "Chair", + "23": "Circuit Board", + "24": "Clamp", + "25": "Clipboard", + "26": "Clock", + "27": "Coffee Beans", + "28": "Coffee Maker", + "29": "Coffee Pot", + "30": "Coffee Unmaker", + "31": "Color Changer", + "32": "Computer", + "33": "Control Panel", + "34": "Cooler", + "35": "Couch", + "36": "Counter", + "37": "Crates", + "38": "Cutting Board", + "39": "Dart", + "40": "Dart Board", + "41": "Desk", + "42": "Dolly", + "43": "Donut", + "44": "Door", + "45": "Drawer", + "46": "Drill Chuck", + "47": "Embiggenator", + "48": "Everything's A Carrot Machine", + "49": "Fan", + "50": "Fire Alarm", + "51": "Fire Extinguisher", + "52": "Floppy Disk", + "53": "Folder", + "54": "Folder Holder", + "55": "Fork", + "56": "Forklift", + "57": "Freeze Ray", + "58": "Freezer", + "59": "Fridge", + "60": "Fuse Box", + "61": "Generator", + "62": "Golf Ball", + "63": "Golf Club", + "64": "Gravity Pad", + "65": "Hammer", + "66": "Handsaw", + "67": "Jar", + "68": "Jelly", + "69": "Keyboard", + "70": "Knife", + "71": "Laser", + "72": "Laser Tip", + "73": "Laser Toy", + "74": "Lever", + "75": "Lid", + "76": "Light", + "77": "Light Bulb", + "78": "Light Switch", + "79": "Machine Panel", + "80": "Map", + "81": "Microwave", + "82": "Milk", + "83": "Mug", + "84": "Notepad", + "85": "Outlet", + "86": "Pallets", + "87": "Paper", + "88": "Peanut Butter", + "89": "Pear", + "90": "Pen", + "91": "Photocopier", + "92": "Pie", + "93": "Plant", + "94": "Plate", + "95": "Poster", + "96": "Power Boxes", + "97": "Print Tube", + "98": "Printer", + "99": "Printer Cartridge", + "100": "Puddle", + "101": "Radio", + "102": "Record", + "103": "Robot Arm", + "104": "Sandwich", + "105": "Scale", + "106": "Screw Driver", + "107": "Shelf", + "108": "Sign", + "109": "Sink", + "110": "Spoon", + "111": "Sticky Note", + "112": "Stool", + "113": "TAM Prototype", + "114": "Table", + "115": "Tank", + "116": "Tape", + "117": "Target", + "118": "Tesla Coil", + "119": "Time Machine", + "120": "Toast", + "121": "Toaster", + "122": "Tool Board", + "123": "Tool Box", + "124": "Trash", + "125": "Trash Can", + "126": "Tray", + "127": "Trophy", + "128": "Vending Machine", + "129": "Vent", + "130": "Water Barrel", + "131": "Water Tank", + "132": "Wire Coil", + "133": "Unassigned" + } +} diff --git a/src/emma_perception/constants/vinvl_x152c4_simbot_classmap_v124_customised.json b/src/emma_perception/constants/vinvl_x152c4_simbot_classmap_v124_customised.json new file mode 100644 index 0000000..72c177e --- /dev/null +++ b/src/emma_perception/constants/vinvl_x152c4_simbot_classmap_v124_customised.json @@ -0,0 +1,272 @@ +{ + "label_to_idx": { + "Background": 0, + "Action Figure": 1, + "Apple": 2, + "Banana": 3, + "Battery": 4, + "Bed Toy": 5, + "Blinds": 6, + "Board": 7, + "Books": 8, + "Bowl": 9, + "Boxes": 10, + "Bread": 11, + "Burger": 12, + "Button": 13, + "Cabinet": 14, + "Cable": 15, + "Cake": 16, + "Calendar": 17, + "Can": 18, + "Candy Bar": 19, + "Carrot": 20, + "Cart": 21, + "Cereal Box": 22, + "Chair": 23, + "Circuit Board": 24, + "Clamp": 25, + "Clipboard": 26, + "Clock": 27, + "Coffee Beans": 28, + "Coffee Maker": 29, + "Coffee Pot": 30, + "Coffee Unmaker": 31, + "Color Changer": 32, + "Computer": 33, + "Control Panel": 34, + "Cooler": 35, + "Couch": 36, + "Counter": 37, + "Counter Top": 38, + "Crate": 39, + "Cup": 40, + "Cutting Board": 41, + "Dart": 42, + "Dart Board": 43, + "Donut": 44, + "Door": 45, + "Door Sign": 46, + "Drawer": 47, + "Drill Chuck": 48, + "Embiggenator": 49, + "Everything's A Carrot Machine": 50, + "Fan": 51, + "Fire Alarm": 52, + "Fire Extinguisher": 53, + "Floppy Disk": 54, + "Folder": 55, + "Folder Holder": 56, + "Fork": 57, + "Forklift": 58, + "Freeze Ray": 59, + "Freezer": 60, + "Fridge": 61, + "Fuse Box": 62, + "Generator": 63, + "Golf Ball": 64, + "Golf Club": 65, + "Gravity Pad": 66, + "Hammer": 67, + "Handsaw": 68, + "Jar": 69, + "Keyboard": 70, + "Knife": 71, + "Laser": 72, + "Laser Tip": 73, + "Laser Toy": 74, + "Lever": 75, + "Lid": 76, + "Light": 77, + "Light Bulb": 78, + "Light Switch": 79, + "Machine Panel": 80, + "Map": 81, + "Microwave": 82, + "Milk": 83, + "Mug": 84, + "Notepad": 85, + "Oxygen Tank": 86, + "Pallets": 87, + "Paper": 88, + "Pear": 89, + "Pen": 90, + "Photocopier": 91, + "Pie": 92, + "Plant": 93, + "Plate": 94, + "Poster": 95, + "Power Boxes": 96, + "Print Tube": 97, + "Printer": 98, + "Printer Cartridge": 99, + "Puddle": 100, + "Radio": 101, + "Record": 102, + "Robot Arm": 103, + "Sandwich": 104, + "Scale": 105, + "Screwdriver": 106, + "Server": 107, + "Shelf": 108, + "Sink": 109, + "Spoon": 110, + "Sticky Note": 111, + "Stool": 112, + "Table": 113, + "Tank": 114, + "Tape": 115, + "Target": 116, + "Tesla Coil": 117, + "Time Machine": 118, + "Toaster": 119, + "Tool Board": 120, + "Toolbox": 121, + "Trash Can": 122, + "Tray": 123, + "Trolley": 124, + "Trophy": 125, + "Vending Machine": 126, + "Vent": 127, + "Wall Shelf": 128, + "Warning Sign": 129, + "Water Barrel": 130, + "Whiteboard": 131, + "Unassigned": 132 + }, + "idx_to_label": { + "0": "Background", + "1": "Action Figure", + "2": "Apple", + "3": "Banana", + "4": "Battery", + "5": "Bed Toy", + "6": "Blinds", + "7": "Board", + "8": "Books", + "9": "Bowl", + "10": "Boxes", + "11": "Bread", + "12": "Burger", + "13": "Button", + "14": "Cabinet", + "15": "Cable", + "16": "Cake", + "17": "Calendar", + "18": "Can", + "19": "Candy Bar", + "20": "Carrot", + "21": "Cart", + "22": "Cereal Box", + "23": "Chair", + "24": "Circuit Board", + "25": "Clamp", + "26": "Clipboard", + "27": "Clock", + "28": "Coffee Beans", + "29": "Coffee Maker", + "30": "Coffee Pot", + "31": "Coffee Unmaker", + "32": "Color Changer", + "33": "Computer", + "34": "Control Panel", + "35": "Cooler", + "36": "Couch", + "37": "Counter", + "38": "Counter Top", + "39": "Crate", + "40": "Cup", + "41": "Cutting Board", + "42": "Dart", + "43": "Dart Board", + "44": "Donut", + "45": "Door", + "46": "Door Sign", + "47": "Drawer", + "48": "Drill Chuck", + "49": "Embiggenator", + "50": "Everything's A Carrot Machine", + "51": "Fan", + "52": "Fire Alarm", + "53": "Fire Extinguisher", + "54": "Floppy Disk", + "55": "Folder", + "56": "Folder Holder", + "57": "Fork", + "58": "Forklift", + "59": "Freeze Ray", + "60": "Freezer", + "61": "Fridge", + "62": "Fuse Box", + "63": "Generator", + "64": "Golf Ball", + "65": "Golf Club", + "66": "Gravity Pad", + "67": "Hammer", + "68": "Handsaw", + "69": "Jar", + "70": "Keyboard", + "71": "Knife", + "72": "Laser", + "73": "Laser Tip", + "74": "Laser Toy", + "75": "Lever", + "76": "Lid", + "77": "Light", + "78": "Light Bulb", + "79": "Light Switch", + "80": "Machine Panel", + "81": "Map", + "82": "Microwave", + "83": "Milk", + "84": "Mug", + "85": "Notepad", + "86": "Oxygen Tank", + "87": "Pallets", + "88": "Paper", + "89": "Pear", + "90": "Pen", + "91": "Photocopier", + "92": "Pie", + "93": "Plant", + "94": "Plate", + "95": "Poster", + "96": "Power Boxes", + "97": "Print Tube", + "98": "Printer", + "99": "Printer Cartridge", + "100": "Puddle", + "101": "Radio", + "102": "Record", + "103": "Robot Arm", + "104": "Sandwich", + "105": "Scale", + "106": "Screwdriver", + "107": "Server", + "108": "Shelf", + "109": "Sink", + "110": "Spoon", + "111": "Sticky Note", + "112": "Stool", + "113": "Table", + "114": "Tank", + "115": "Tape", + "116": "Target", + "117": "Tesla Coil", + "118": "Time Machine", + "119": "Toaster", + "120": "Tool Board", + "121": "Toolbox", + "122": "Trash Can", + "123": "Tray", + "124": "Trolley", + "125": "Trophy", + "126": "Vending Machine", + "127": "Vent", + "128": "Wall Shelf", + "129": "Warning Sign", + "130": "Water Barrel", + "131": "Whiteboard", + "132": "Unassigned" + } +} diff --git a/src/emma_perception/constants/vinvl_x152c4_simbot_customised.yaml b/src/emma_perception/constants/vinvl_x152c4_simbot_customised.yaml new file mode 100644 index 0000000..a4b20ff --- /dev/null +++ b/src/emma_perception/constants/vinvl_x152c4_simbot_customised.yaml @@ -0,0 +1,55 @@ +MODEL: + META_ARCHITECTURE: "AttrRCNN" + WEIGHT: "pre-trained/vinvl_vg_x152c4.pth" + BACKBONE: + CONV_BODY: "R-152-C4" + RESNETS: + BACKBONE_OUT_CHANNELS: 1024 + STRIDE_IN_1X1: False + NUM_GROUPS: 32 + WIDTH_PER_GROUP: 8 + RPN: + PRE_NMS_TOP_N_TEST: 6000 + POST_NMS_TOP_N_TEST: 300 + ROI_HEADS: + BATCH_SIZE_PER_IMAGE: 384 # 512 + POSITIVE_FRACTION: 0.5 # 0.25 + SCORE_THRESH: 0.2 # 0.0001 + DETECTIONS_PER_IMG: 36 # 600 + MIN_DETECTIONS_PER_IMG: 1 + NMS_FILTER: "1" + ROI_BOX_HEAD: + NUM_CLASSES: 133 + ATTRIBUTE_ON: False + RELATION_ON: False +INPUT: + MIN_SIZE_TEST: 800 + MAX_SIZE_TEST: 1333 + PIXEL_MEAN: [103.530, 116.280, 123.675] +DATASETS: + TRAIN: ("train/train.yaml",) + TEST: ("validation/validation.yaml",) + FACTORY_TRAIN: ("VGTSVDataset",) + FACTORY_TEST: ("VGTSVDataset",) +DATALOADER: + NUM_WORKERS: 0 +SOLVER: + BASE_LR: 0.0001 + WEIGHT_DECAY: 0.00001 + MAX_ITER: 600000 + STEPS: (55000, 75000) + IMS_PER_BATCH: 4 + CHECKPOINT_PERIOD: 10000 + TEST_PERIOD: 20000000 +TEST: + IMS_PER_BATCH: 4 + SKIP_PERFORMANCE_EVAL: False + SAVE_PREDICTIONS: True + SAVE_RESULTS_TO_TSV: True + TSV_SAVE_SUBSET: ["rect", "class", "conf", "feature"] + GATHER_ON_CPU: False + OUTPUT_FEATURE: True + IGNORE_BOX_REGRESSION: False +OUTPUT_DIR: "./output/v8_customized/" +DATA_DIR: "./datasets/teach/v8_customized" +DISTRIBUTED_BACKEND: "gloo" diff --git a/src/emma_perception/datamodels/__init__.py b/src/emma_perception/datamodels/__init__.py new file mode 100644 index 0000000..24ae82b --- /dev/null +++ b/src/emma_perception/datamodels/__init__.py @@ -0,0 +1 @@ +from emma_perception.datamodels.datamodels import ExtractedFeatures diff --git a/src/emma_perception/datamodels/datamodels.py b/src/emma_perception/datamodels/datamodels.py new file mode 100644 index 0000000..36bec19 --- /dev/null +++ b/src/emma_perception/datamodels/datamodels.py @@ -0,0 +1,17 @@ +from typing import Optional + +import torch +from pydantic import BaseModel + + +class ExtractedFeatures(BaseModel, arbitrary_types_allowed=True): + """Datamodel for returning extracted features.""" + + bbox_features: torch.Tensor + bbox_coords: torch.Tensor + bbox_probas: torch.Tensor + cnn_features: torch.Tensor + entity_labels: Optional[list[str]] = None + class_labels: list[str] + width: int + height: int diff --git a/src/emma_perception/datamodules/__init__.py b/src/emma_perception/datamodules/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/emma_perception/datamodules/parsers.py b/src/emma_perception/datamodules/parsers.py new file mode 100644 index 0000000..3514c85 --- /dev/null +++ b/src/emma_perception/datamodules/parsers.py @@ -0,0 +1,70 @@ +import csv +import os + +import numpy as np +from tqdm import tqdm + + +class EpicKitchensParser: + """Parser for EpicKitchens annotations.""" + + def __init__(self, annotation_csv: str, downsample: int = 0) -> None: + self.metadata = self.parse_annotations(annotation_csv) + self.downsample = downsample + + def parse_annotations(self, ann_csv: str) -> dict[str, dict[int, int]]: + """Parsers the annotation csv file into a dictionary. + + Currently storing only start and end times of annotations. + """ + metadata = {} + with open(ann_csv) as fp: + csv_reader = csv.reader(fp) + header = next(csv_reader) + indices = list(range(len(header))) + idx2column = dict(zip(header, indices)) + for row in tqdm(csv_reader, desc="Parsing epic kitchens annotations"): + video_id = row[idx2column["video_id"]] + start = int(row[idx2column["start_frame"]]) + end = int(row[idx2column["stop_frame"]]) + if video_id not in metadata: + metadata[video_id] = {start: end} + else: + metadata[video_id][start] = end + return metadata + + def valid(self, video_id: str, frame_file: str) -> bool: + """Checks if a frame corresponds to an annotation.""" + valid = False + if video_id in self.metadata.keys(): + start_fr, end_fr = ( + list(self.metadata[video_id].keys()), + list(self.metadata[video_id].values()), + ) + bname = os.path.splitext(os.path.basename(frame_file))[0] + frame_id = int(bname.split("_")[-1]) + start_valid = [start - 1 < frame_id for start in start_fr] + end_valid = [frame_id < end + 1 for end in end_fr] + overlap = [start and end for start, end in zip(start_valid, end_valid)] + valid = any(overlap) + + if self.downsample and valid: + overlap_indices = np.where(overlap)[0] + for idx in overlap_indices: + start, end = start_fr[idx], end_fr[idx] + num_frames = len(np.arange(start, end + 1)) + tick = float(num_frames / self.downsample) + downsampled_frames = [ + start + int(tick * idx) for idx in range(self.downsample) + ] + valid = frame_id in downsampled_frames + return valid + + def get_frames(self, video_path: str) -> list[str]: + """Return the frames that correspond to annotated segments for a given video.""" + frames = sorted(os.listdir(video_path)) + return [ + os.path.join(video_path, frame) + for frame in frames + if self.valid(os.path.basename(video_path), frame) + ] diff --git a/src/emma_perception/datamodules/visual_extraction_dataset.py b/src/emma_perception/datamodules/visual_extraction_dataset.py new file mode 100644 index 0000000..088401d --- /dev/null +++ b/src/emma_perception/datamodules/visual_extraction_dataset.py @@ -0,0 +1,239 @@ +import os +from typing import Any, Literal, Optional + +import cv2 +import torch +from maskrcnn_benchmark.structures.image_list import to_image_list # noqa: WPS347 +from PIL import Image, UnidentifiedImageError +from pytorch_lightning import LightningDataModule +from torch.utils.data import DataLoader, Dataset +from torchvision.transforms import Compose + +from emma_perception.datamodules.parsers import EpicKitchensParser +from emma_perception.utils import get_logger + + +log = get_logger(__name__) + + +class DatasetReturn(dict[str, Any]): + """Dictionary class for accessing samples from ImageDataset and VideoDataset.""" + + img: torch.Tensor + ids: str + width: int + height: int + + +ImageLoaderType = Literal["cv2", "pil"] + + +class ImageDataset(Dataset[DatasetReturn]): + """Simple dataset of images.""" + + def __init__( + self, + input_path: str, + image_loader: ImageLoaderType = "pil", + preprocess_transform: Optional[Compose] = None, + ) -> None: + self.input_path = input_path + self.dataset: list[str] = [] + self.image_loader = self._make_loader(image_loader) + for fname in os.listdir(self.input_path): + try: + Image.open(os.path.join(self.input_path, fname)) + except UnidentifiedImageError: + log.error(f"Could not read {os.path.join(self.input_path, fname)}") + continue + self.dataset.append(os.path.join(self.input_path, fname)) + self.dataset_size = len(self.dataset) + self.transform = preprocess_transform + + def __len__(self) -> int: + """Return dataset size.""" + return self.dataset_size + + def __getitem__(self, idx: int) -> DatasetReturn: + """Return a sample.""" + fname = self.dataset[idx] + img = self.image_loader(fname) + img_size = img.size + + if self.transform is not None: + img = self.transform(img) + return DatasetReturn( + img=img, ids=self._make_sample_id(fname), width=img_size[0], height=img_size[1] + ) + + def _make_loader(self, image_loader: ImageLoaderType) -> Any: + image_loader_func = None + if image_loader == "pil": + image_loader_func = self._pilimage + elif image_loader == "cv2": + image_loader_func = self._cv2image + else: + raise NotImplementedError(f"Unsupported image loader {image_loader}") + return image_loader_func + + def _pilimage(self, img_name: str) -> Image: + return Image.open(img_name).convert("RGB") + + def _cv2image(self, img_name: str) -> Image: + cv2_img = cv2.imread(img_name) + img = cv2.cvtColor(cv2_img, cv2.COLOR_BGR2RGB) + img = Image.fromarray(img) + return img + + def _make_sample_id(self, fname: str) -> str: + return os.path.basename(fname) + + +class VideoFrameDataset(Dataset[DatasetReturn]): + """Simple dataset of video frames.""" + + def __init__( + self, + input_path: str, + ann_csv: str, + ann_type: str, + image_loader: ImageLoaderType = "pil", + downsample: int = 0, + preprocess_transform: Optional[Compose] = None, + ) -> None: + self.input_path = input_path + self.dataset: list[str] = [] + self.image_loader = self._make_loader(image_loader) + self.parser = self.parse_annotations(ann_csv, ann_type, downsample) + + for _, dirnames, _ in os.walk(self.input_path): + for dirname in dirnames: + dirpath = os.path.join(self.input_path, dirname) + if self.parser: + files = self.parser.get_frames(dirpath) + else: + files = [os.path.join(dirpath, fname) for fname in os.listdir(dirpath)] + self.append_to_dataset(files) + + self.dataset_size = len(self.dataset) + self.transform = preprocess_transform + + def append_to_dataset(self, files: list[str]) -> None: + """Appends a list of files to the dataset.""" + for fname in files: + try: + Image.open(fname) + except UnidentifiedImageError: + log.error(f"Could not read {os.path.join(self.input_path, fname)}") + continue + self.dataset.append(fname) + + def parse_annotations( + self, ann_csv: str, ann_type: str, downsample: int + ) -> EpicKitchensParser: + """Parses the annotations of a video dataset with one of the available parsers.""" + parser = None + if ann_csv is not None: + if ann_type == "epic_kitchens": + parser = EpicKitchensParser(ann_csv, downsample) + else: + raise NotImplementedError(f"Unsupported annotation type {ann_type}") + return parser + + def __len__(self) -> int: + """Return dataset size.""" + return self.dataset_size + + def __getitem__(self, idx: int) -> DatasetReturn: + """Return a sample.""" + fname = self.dataset[idx] + img = self.image_loader(fname) + img_size = img.size + if self.transform is not None: + img = self.transform(img) + return DatasetReturn( + img=img, ids=self._make_sample_id(fname), width=img_size[0], height=img_size[1] + ) + + def _make_loader(self, image_loader: ImageLoaderType) -> Any: + image_loader_func = None + if image_loader == "pil": + image_loader_func = self._pilimage + elif image_loader == "cv2": + image_loader_func = self._cv2image + else: + raise NotImplementedError(f"Unsupported image loader {image_loader}") + return image_loader_func + + def _pilimage(self, img_name: str) -> Image: + return Image.open(img_name).convert("RGB") + + def _cv2image(self, img_name: str) -> Image: + cv2_img = cv2.imread(img_name) + img = cv2.cvtColor(cv2_img, cv2.COLOR_BGR2RGB) + img = Image.fromarray(img) + return img + + def _make_sample_id(self, fname: str) -> str: + prefix = os.path.basename(os.path.dirname(fname)) + return f"{prefix}_{os.path.basename(fname)}" + + +class BatchCollator: + """From a list of samples from the dataset, returns the batched images and targets. + + This should be passed to the DataLoader + """ + + def __init__(self, size_divisible: int = 0) -> None: + self.size_divisible = size_divisible + + def __call__(self, batch: list[DatasetReturn]) -> dict[str, Any]: + """Creates a batch of images potentially having varying sizes.""" + images = [] + img_ids = [] + width = [] + height = [] + + for elem in batch: + images.append(elem["img"]) + img_ids.append(elem["ids"]) + width.append(elem["width"]) + height.append(elem["height"]) + + images = to_image_list(images, self.size_divisible) + + return { + "img": images, + "ids": img_ids, + "width": torch.tensor(width), + "height": torch.tensor(height), + } + + +class PredictDataModule(LightningDataModule): + """A simple data module for predictions.""" + + def __init__( + self, + dataset: Dataset[DatasetReturn], + batch_size: int = 42, + num_workers: int = 0, + pin_memory: bool = False, + ) -> None: + super().__init__() + self.batch_size = batch_size + self.dataset = dataset + self.num_workers = num_workers + self.pin_memory = pin_memory + + def predict_dataloader(self) -> DataLoader: # type: ignore[type-arg] + """Defines the dataset to make predictions.""" + dataset_predict = DataLoader( + self.dataset, + self.batch_size, + num_workers=self.num_workers, + pin_memory=self.pin_memory, + collate_fn=BatchCollator(), + ) + return dataset_predict diff --git a/src/emma_perception/models/__init__.py b/src/emma_perception/models/__init__.py new file mode 100644 index 0000000..81cabac --- /dev/null +++ b/src/emma_perception/models/__init__.py @@ -0,0 +1 @@ +from emma_perception.models.attrcnn_global_features import AttrRCNNGlobalFeatures diff --git a/src/emma_perception/models/attrcnn_global_features.py b/src/emma_perception/models/attrcnn_global_features.py new file mode 100644 index 0000000..ab98409 --- /dev/null +++ b/src/emma_perception/models/attrcnn_global_features.py @@ -0,0 +1,23 @@ +from typing import Optional + +from maskrcnn_benchmark.structures.bounding_box import BoxList +from maskrcnn_benchmark.structures.image_list import ImageList +from scene_graph_benchmark.AttrRCNN import AttrRCNN + + +class AttrRCNNGlobalFeatures(AttrRCNN): # type: ignore[misc] + """AttrRCNN model extended to additionally return scene features.""" + + def forward(self, images: ImageList, targets: Optional[tuple[BoxList]] = None) -> None: + """Extract AttrRCNN and scene features.""" + cnn_features = [] + hook = self.backbone.register_forward_hook( + lambda module, inp, output: cnn_features.append(output) + ) + predictions = super().forward(images, targets) + hook.remove() + cnn_features = cnn_features[0][0] + for pred, feats in zip(predictions, cnn_features): + pred.add_field("cnn_features", feats.mean(dim=(-2, -1))) + + return predictions diff --git a/src/emma_perception/models/simbot_entity_classifier.py b/src/emma_perception/models/simbot_entity_classifier.py new file mode 100644 index 0000000..b3ab5b2 --- /dev/null +++ b/src/emma_perception/models/simbot_entity_classifier.py @@ -0,0 +1,208 @@ +import json +from collections import Counter +from pathlib import Path + +import numpy as np +import pytorch_lightning as pl +import torch +from numpy import typing +from torch.nn import BatchNorm1d, CosineSimilarity, Dropout, Linear, Module, Sequential + + +class SimBotEntityClassifier: + """SimBotEntityClassifer class.""" + + default_tensor_device: torch.device = torch.device("cpu") + + def __init__( + self, + class_centroids_path: Path, + device: torch.device = default_tensor_device, + ) -> None: + self.device = device + (centroids_vectors, centroids_names) = self._load_centroids(class_centroids_path) + self.centroids_vectors = centroids_vectors + self.centroids_names = centroids_names + self._cosine_distance = CosineSimilarity() + + def __call__(self, bbox_features: torch.Tensor, class_labels: list[str]) -> list[str]: + """Find the object entity for all detected objects.""" + entities = [] + for idx, class_label in enumerate(class_labels): + centroid_vectors = self.centroids_vectors.get(class_label, None) + if centroid_vectors is not None: + entity_index = self._cosine_distance(bbox_features[idx], centroid_vectors).argmax() + # TODO: remove this with the new entity classifier + entity = self.centroids_names[class_label][entity_index] + if entity == "Round Table": + entity = "Table" + entities.append(entity) + else: + entities.append(class_label) + return entities + + def move_to_device(self, device: torch.device) -> None: + """Moves all the centroids to the specified device.""" + for key, tensor in self.centroids_vectors.items(): + self.centroids_vectors[key] = tensor.to(device) + + def _load_centroids( + self, class_centroids_path: Path + ) -> tuple[dict[str, torch.Tensor], dict[str, list[str]]]: + centroids = torch.load(class_centroids_path, map_location=self.device) + object_class_centroids_vectors = {} + object_class_centroids_names = {} + for object_class, centroid_dict in centroids.items(): + vectors = torch.stack(list(centroid_dict.values())) + names_list = list(centroid_dict.keys()) + object_class_centroids_vectors[object_class] = vectors + object_class_centroids_names[object_class] = names_list + return object_class_centroids_vectors, object_class_centroids_names + + +class SimBotKNNEntityClassifier: + """SimBotKNNEntityClassifier class.""" + + default_tensor_device: torch.device = torch.device("cpu") + + def __init__( + self, + class_centroids_path: Path, + device: torch.device = default_tensor_device, + neighbors: int = 5, + ) -> None: + self.device = device + (centroids_vectors, centroids_names) = self._load_centroids(class_centroids_path) + self.centroids_vectors = centroids_vectors + self.centroids_names = centroids_names + self._cosine_distance = CosineSimilarity() + self._neighbors = neighbors + + def __call__(self, bbox_features: torch.Tensor, class_labels: list[str]) -> list[str]: + """Find the object entity for all detected objects.""" + entities = [] + for idx, class_label in enumerate(class_labels): + centroid_vectors = self.centroids_vectors.get(class_label, None) + if centroid_vectors is not None: + distances = self._cosine_distance(bbox_features[idx], centroid_vectors) + knn = distances.topk(self._neighbors, largest=True) + labels = self.centroids_names[class_label][knn.indices.tolist()] + entity: str = Counter(labels).most_common(1)[0][0] + + # TODO: remove this with the new entity classifier + if entity == "Round Table": + entity = "Table" + entities.append(entity) + else: + entities.append(class_label) + return entities + + def move_to_device(self, device: torch.device) -> None: + """Moves all the centroids to the specified device.""" + for key, tensor in self.centroids_vectors.items(): + self.centroids_vectors[key] = tensor.to(device) + + def _load_centroids( + self, class_centroids_path: Path + ) -> tuple[dict[str, torch.Tensor], dict[str, typing.NDArray[np.str_]]]: + centroids = torch.load(class_centroids_path, map_location=self.device) + centroid_vectors = {} + centroid_names = {} + for object_class, object_dict in centroids.items(): + centroid_vectors[object_class] = object_dict["features"] + centroid_names[object_class] = np.array(object_dict["labels"]) + return centroid_vectors, centroid_names + + +class SimBotMLPEntityClassifier: + """SimBotMLPEntityClassifier class.""" + + default_tensor_device: torch.device = torch.device("cpu") + + def __init__( + self, + model_path: Path, + classmap_path: Path, + device: torch.device = default_tensor_device, + ) -> None: + self.device = device + self.classifier = EntityPolicy.load_from_checkpoint(str(model_path)) + self.classifier.to(device) + self.classifier.eval() + with open(classmap_path) as fp: + self.classmap = json.load(fp) + + def __call__(self, bbox_features: torch.Tensor, class_labels: list[str]) -> list[str]: + """Find the object entity for all detected objects.""" + with torch.no_grad(): + predictions = self.classifier.inference_step({"features": bbox_features}) + + entities = [] + for idx, class_label in enumerate(class_labels): + if class_label in self.classmap["class_labels"]: + entity_int = predictions[idx] + entity_str = self.classmap["idx2label"][str(entity_int.item())] + + # TODO: remove this with the new entity classifier + if entity_str == "Round Table": + entity_str = "Table" + entities.append(entity_str) + else: + entities.append(class_label) + return entities + + def move_to_device(self, device: torch.device) -> None: + """Moves the mlp to the specified device.""" + self.classifier.to(device) + self.classifier.eval() + + +class EntityClassifier(Module): + """EntiyClassifer MLP.""" + + def __init__( + self, + in_features: int = 2048, + hidden_dim: int = 64, + dropout: float = 0.2, + num_classes: int = 23, + ): + super().__init__() + self._in_features = in_features + self._hidden_dim = hidden_dim + self._num_classes = num_classes + self._dropout = dropout + + self.classifier = self.make_layers() + + def make_layers(self) -> Sequential: + """Make a simple 2 layer MLP.""" + layers: list[torch.nn.Module] = [] + + layers.append(Linear(self._in_features, self._hidden_dim)) + layers.append(BatchNorm1d(self._hidden_dim)) + layers.append(Dropout(self._dropout)) + layers.append(Linear(self._hidden_dim, self._num_classes)) + + return Sequential(*layers) + + def forward(self, batch: dict[str, torch.Tensor]) -> dict[str, torch.Tensor]: + """Forward pass.""" + out = self.classifier(batch["features"]) + return {"out": out} + + +class EntityPolicy(pl.LightningModule): + """Entity Lightning Module.""" + + def __init__(self, num_classes: int = 23) -> None: + super().__init__() + + self.classifier = EntityClassifier(num_classes=num_classes) + + def inference_step(self, batch: dict[str, torch.Tensor]) -> torch.Tensor: + """Inference step.""" + output = self.classifier(batch) + out = output["out"] + + return torch.argmax(out, dim=1) diff --git a/src/emma_perception/models/vinvl_extractor.py b/src/emma_perception/models/vinvl_extractor.py new file mode 100644 index 0000000..46cb9a0 --- /dev/null +++ b/src/emma_perception/models/vinvl_extractor.py @@ -0,0 +1,67 @@ +from typing import Any + +import torch +from maskrcnn_benchmark.data.transforms import build_transforms +from maskrcnn_benchmark.utils.checkpoint import DetectronCheckpointer +from overrides import overrides +from pytorch_lightning import LightningModule +from scene_graph_benchmark.AttrRCNN import AttrRCNN +from scene_graph_benchmark.scene_parser import SceneParser + + +class VinVLTransform: + """VinVL preprocessing transform.""" + + def __init__(self, cfg: Any) -> None: + self.transforms = build_transforms(cfg, is_train=False) + + def __call__(self, img: Any) -> torch.Tensor: + """Apply preprocessing transformations to image.""" + img_transf, _ = self.transforms(img, target=None) + return img_transf + + +class VinVLExtractor(LightningModule): + """VinVL object detector wrapped in a lightining module.""" + + def __init__(self, cfg: Any) -> None: + super().__init__() + + if "OUTPUT_FEATURE" not in cfg.TEST and cfg.TEST.OUTPUT_FEATURE: + raise AttributeError("TEST.OUTPUT_FEATURE must be set to True on configuration file") + + if cfg.MODEL.META_ARCHITECTURE == "SceneParser": + model = SceneParser(cfg) + elif cfg.MODEL.META_ARCHITECTURE == "AttrRCNN": + model = AttrRCNN(cfg) + + checkpointer = DetectronCheckpointer(cfg, model, save_dir=cfg.OUTPUT_DIR) + checkpointer.load(cfg.MODEL.WEIGHT) + + self.extractor = model + + @overrides(check_signature=False) + def forward(self, batch: dict[str, Any]) -> dict[str, Any]: + """Extracts features, coordinates, and class probabilities for bounding boxes.""" + output = {} + cnn_features = [] + + hook = self.extractor.backbone.register_forward_hook( + lambda module, inp, output: cnn_features.append(output) + ) + predictions = self.extractor(batch["img"].to(self.device)) + hook.remove() + cnn_features = cnn_features[0][0] + out = zip(batch["ids"], batch["width"], batch["height"], predictions, cnn_features) + + for b_id, width, height, pred, cnn_feats in out: + pred = pred.resize((width, height)) + output[b_id] = { + "bbox_features": pred.get_field("box_features"), + "bbox_coords": pred.bbox, + "bbox_probas": pred.get_field("scores_all"), + "cnn_features": cnn_feats.mean(dim=(-2, -1)), + "width": width, + "height": height, + } + return output diff --git a/src/emma_perception/utils/__init__.py b/src/emma_perception/utils/__init__.py new file mode 100644 index 0000000..377a76c --- /dev/null +++ b/src/emma_perception/utils/__init__.py @@ -0,0 +1 @@ +from emma_perception.utils.get_logger import get_logger diff --git a/src/emma_perception/utils/forced_bbox_extraction.py b/src/emma_perception/utils/forced_bbox_extraction.py new file mode 100644 index 0000000..dc59a12 --- /dev/null +++ b/src/emma_perception/utils/forced_bbox_extraction.py @@ -0,0 +1,62 @@ +import argparse +from pathlib import Path + +import torch +from maskrcnn_benchmark.config import cfg +from maskrcnn_benchmark.utils.miscellaneous import mkdir +from scene_graph_benchmark.config import sg_cfg +from torch.utils.data import DataLoader + + +def prepare_configs(args: argparse.Namespace) -> None: + """Prepare the config.""" + cfg.set_new_allowed(True) + cfg.merge_from_other_cfg(sg_cfg) + cfg.set_new_allowed(False) + cfg.merge_from_file(args.config_file) + cfg.merge_from_list(args.opts) + cfg.freeze() + + +def make_output_folders( + dataset_names: list[str], + model_name: str, + output_dir: Path, +) -> list[Path]: + """Prepare the list of output folders.""" + output_folders = [] + if len(dataset_names) == 1: + output_folder = output_dir.joinpath("inference", model_name) + mkdir(output_folder) + output_folders = [output_folder] + else: + for dataset_name in dataset_names: + dataset_name1 = dataset_name.replace("/", "_") + output_folder = output_dir.joinpath("inference", dataset_name1, model_name) + + mkdir(output_folder) + output_folders.append(output_folder) + return output_folders + + +def post_process_outputs(dataloader: DataLoader, output_folder: Path) -> None: # type: ignore[type-arg] + """Post process predictions from a single file to one file per image.""" + id_to_img_map = dataloader.dataset.id_to_img_map + predictions = torch.load(output_folder.joinpath("predictions.pth")) + features_path = output_folder.joinpath("image_features_forced_bboxes") + Path.mkdir(features_path, exist_ok=True) + for idx, pred in predictions.items(): + image_info = dataloader.dataset.get_img_info(idx) + width = image_info["width"] + height = image_info["height"] + pred = pred.resize((width, height)) + feature_dict = { + "bbox_features": pred.get_field("box_features"), + "bbox_coords": pred.bbox, + "bbox_probas": pred.get_field("scores_all"), + "cnn_features": pred.get_field("cnn_features"), + "width": width, + "height": height, + } + features_file_name = f"{str(id_to_img_map[idx]).zfill(12)}.pt" # noqa: WPS432 + torch.save(feature_dict, features_path.joinpath(features_file_name)) diff --git a/src/emma_perception/utils/get_logger.py b/src/emma_perception/utils/get_logger.py new file mode 100644 index 0000000..058c1f7 --- /dev/null +++ b/src/emma_perception/utils/get_logger.py @@ -0,0 +1,29 @@ +import logging +from typing import Optional + +from pytorch_lightning.utilities import rank_zero_only + + +LOG_LEVELS = ( + "debug", + "info", + "warning", + "error", + "exception", + "fatal", + "critical", +) + + +def get_logger(name: Optional[str] = None) -> logging.Logger: + """Create logger with multi-GPU-friendly python command line logger. + + Ensure all logging levels get marked with the rank zero decorator, otherwise logs would get + multiplied for each GPU process in multi-GPU setup. + """ + logger = logging.getLogger(name) + + for level in LOG_LEVELS: + setattr(logger, level, rank_zero_only(getattr(logger, level))) + + return logger diff --git a/src/emma_perception/utils/visualizing_image.py b/src/emma_perception/utils/visualizing_image.py new file mode 100644 index 0000000..301bfed --- /dev/null +++ b/src/emma_perception/utils/visualizing_image.py @@ -0,0 +1,523 @@ +"""Coding=utf-8 Copyright 2018, Antonio Mendoza Hao Tan, Mohit Bansal Adapted From Facebook Inc, +Detectron2. + +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.import copy +""" +import colorsys +import io +import os + +import cv2 +import matplotlib as mpl +import matplotlib.colors as mplc +import matplotlib.figure as mplfigure +import numpy as np +import requests +import torch +from matplotlib.backends.backend_agg import FigureCanvasAgg +from PIL import Image + + +def get_image_from_url(url): + """Returns an image from a URL.""" + response = requests.get(url) + img = Image.open(io.BytesIO(response.content)) + return img + + +def img_tensorize(im, input_format="RGB"): + """Returns an array of the image in the given image format.""" + assert isinstance(im, str) + if os.path.isfile(im): + img = cv2.imread(im) + else: + img = get_image_from_url(im) + assert img is not None, f"could not connect to: {im}" + img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) + if input_format == "RGB": + img = img[:, :, ::-1] + return img + + +_SMALL_OBJ = 1000 + + +class SingleImageViz: + def __init__( + self, + img, + scale: float = 1.2, + edgecolor: str = "g", + alpha: float = 0.5, + linestyle: str = "-", + saveas: str = "test_out.jpg", + rgb: bool = True, + pynb: bool = False, + id2obj=None, + id2attr=None, + pad=0.7, + ): + """ + img: an RGB image of shape (H, W, 3). + """ + if isinstance(img, torch.Tensor): + img = img.numpy().astype("np.uint8") + if isinstance(img, str): + img = img_tensorize(img) + assert isinstance(img, np.ndarray) + + width, height = img.shape[1], img.shape[0] + fig = mplfigure.Figure(frameon=False) + dpi = fig.get_dpi() + width_in = (width * scale + 1e-2) / dpi + height_in = (height * scale + 1e-2) / dpi + fig.set_size_inches(width_in, height_in) + ax = fig.add_axes([0.0, 0.0, 1.0, 1.0]) + ax.axis("off") + ax.set_xlim(0.0, width) + ax.set_ylim(height) + + self.saveas = saveas + self.rgb = rgb + self.pynb = pynb + self.img = img + self.edgecolor = edgecolor + self.alpha = 0.5 + self.linestyle = linestyle + self.font_size = int(np.sqrt(min(height, width)) * scale // 3) + self.width = width + self.height = height + self.scale = scale + self.fig = fig + self.ax = ax + self.pad = pad + self.id2obj = id2obj + self.id2attr = id2attr + self.canvas = FigureCanvasAgg(fig) + + def add_box(self, box, color=None): + if color is None: + color = self.edgecolor + (x0, y0, x1, y1) = box + width = x1 - x0 + height = y1 - y0 + self.ax.add_patch( + mpl.patches.Rectangle( + (x0, y0), + width, + height, + fill=False, + edgecolor=color, + linewidth=self.font_size // 3, + alpha=self.alpha, + linestyle=self.linestyle, + ) + ) + + def draw_boxes(self, boxes, obj_ids=None, obj_scores=None, attr_ids=None, attr_scores=None): + if len(boxes.shape) > 2: + boxes = boxes[0] + if len(obj_ids.shape) > 1: + obj_ids = obj_ids[0] + if len(obj_scores.shape) > 1: + obj_scores = obj_scores[0] + if attr_ids is not None and len(attr_ids.shape) > 1: + attr_ids = attr_ids[0] + if attr_scores is not None and len(attr_scores.shape) > 1: + attr_scores = attr_scores[0] + if isinstance(boxes, torch.Tensor): + boxes = boxes.numpy() + if isinstance(boxes, list): + boxes = np.array(boxes) + assert isinstance(boxes, np.ndarray) + areas = np.prod(boxes[:, 2:] - boxes[:, :2], axis=1) + sorted_idxs = np.argsort(-areas).tolist() + boxes = boxes[sorted_idxs] if boxes is not None else None + obj_ids = obj_ids[sorted_idxs] if obj_ids is not None else None + obj_scores = obj_scores[sorted_idxs] if obj_scores is not None else None + attr_ids = attr_ids[sorted_idxs] if attr_ids is not None else None + attr_scores = attr_scores[sorted_idxs] if attr_scores is not None else None + + assigned_colors = [self._random_color(maximum=1) for _ in range(len(boxes))] + assigned_colors = [assigned_colors[idx] for idx in sorted_idxs] + if obj_ids is not None: + if attr_ids is not None and attr_scores is not None: + labels = self._create_text_labels_attr(obj_ids, obj_scores, attr_ids, attr_scores) + else: + labels = self._create_text_labels(obj_ids, obj_scores) + + for i in range(len(boxes)): + color = assigned_colors[i] + self.add_box(boxes[i], color) + self.draw_labels(labels[i], boxes[i], color) + + def draw_labels(self, label, box, color): + x0, y0, x1, y1 = box + text_pos = (x0, y0) + instance_area = (y1 - y0) * (x1 - x0) + small = _SMALL_OBJ * self.scale + if instance_area < small or y1 - y0 < 40 * self.scale: + if y1 >= self.height - 5: + text_pos = (x1, y0) + else: + text_pos = (x0, y1) + + height_ratio = (y1 - y0) / np.sqrt(self.height * self.width) + lighter_color = self._change_color_brightness(color, brightness_factor=0.7) + font_size = np.clip((height_ratio - 0.02) / 0.08 + 1, 1.2, 2) + font_size *= 0.75 * self.font_size + + self.draw_text( + text=label, + position=text_pos, + color=lighter_color, + ) + + def draw_text( + self, + text, + position, + color="g", + ha="left", + ): + rotation = 0 + font_size = self.font_size + color = np.maximum(list(mplc.to_rgb(color)), 0.2) + color[np.argmax(color)] = max(0.8, np.max(color)) + bbox = { + "facecolor": "black", + "alpha": self.alpha, + "pad": self.pad, + "edgecolor": "none", + } + x, y = position + self.ax.text( + x, + y, + text, + size=font_size * self.scale, + family="sans-serif", + bbox=bbox, + verticalalignment="top", + horizontalalignment=ha, + color=color, + zorder=10, + rotation=rotation, + ) + + def save(self, saveas=None): + if saveas is None: + saveas = self.saveas + if saveas.lower().endswith(".jpg") or saveas.lower().endswith(".png"): + cv2.imwrite( + saveas, + self._get_buffer()[:, :, ::-1], + ) + else: + self.fig.savefig(saveas) + + def _create_text_labels_attr(self, classes, scores, attr_classes, attr_scores): + labels = [self.id2obj[i] for i in classes] + attr_labels = [self.id2attr[i] for i in attr_classes] + labels = [ + f"{label} {score:.2f} {attr} {attr_score:.2f}" + for label, score, attr, attr_score in zip(labels, scores, attr_labels, attr_scores) + ] + return labels + + def _create_text_labels(self, classes, scores): + labels = [self.id2obj[i] for i in classes] + if scores is not None: + if labels is None: + labels = [f"{s * 100:.0f}%" for s in scores] + else: + labels = [f"{li} {s * 100:.0f}%" for li, s in zip(labels, scores)] + return labels + + def _random_color(self, maximum=255): + idx = np.random.randint(0, len(_COLORS)) + ret = _COLORS[idx] * maximum + if not self.rgb: + ret = ret[::-1] + return ret + + def _get_buffer(self): + if not self.pynb: + s, (width, height) = self.canvas.print_to_buffer() + if (width, height) != (self.width, self.height): + img = cv2.resize(self.img, (width, height)) + else: + img = self.img + else: + buf = io.BytesIO() # works for cairo backend + self.canvas.print_rgba(buf) + width, height = self.width, self.height + s = buf.getvalue() + img = self.img + + buffer = np.frombuffer(s, dtype="uint8") + img_rgba = buffer.reshape(height, width, 4) + rgb, alpha = np.split(img_rgba, [3], axis=2) + + try: + import numexpr as ne # fuse them with numexpr + + visualized_image = ne.evaluate("img * (1 - alpha / 255.0) + rgb * (alpha / 255.0)") + except ImportError: + alpha = alpha.astype("float32") / 255.0 + visualized_image = img * (1 - alpha) + rgb * alpha + + return visualized_image.astype("uint8") + + def _change_color_brightness(self, color, brightness_factor): + assert brightness_factor >= -1.0 and brightness_factor <= 1.0 + color = mplc.to_rgb(color) + polygon_color = colorsys.rgb_to_hls(*mplc.to_rgb(color)) + modified_lightness = polygon_color[1] + (brightness_factor * polygon_color[1]) + modified_lightness = 0.0 if modified_lightness < 0.0 else modified_lightness + modified_lightness = 1.0 if modified_lightness > 1.0 else modified_lightness + modified_color = colorsys.hls_to_rgb( + polygon_color[0], modified_lightness, polygon_color[2] + ) + return modified_color + + +# Color map +_COLORS = ( + np.array( + [ + 0.000, + 0.447, + 0.741, + 0.850, + 0.325, + 0.098, + 0.929, + 0.694, + 0.125, + 0.494, + 0.184, + 0.556, + 0.466, + 0.674, + 0.188, + 0.301, + 0.745, + 0.933, + 0.635, + 0.078, + 0.184, + 0.300, + 0.300, + 0.300, + 0.600, + 0.600, + 0.600, + 1.000, + 0.000, + 0.000, + 1.000, + 0.500, + 0.000, + 0.749, + 0.749, + 0.000, + 0.000, + 1.000, + 0.000, + 0.000, + 0.000, + 1.000, + 0.667, + 0.000, + 1.000, + 0.333, + 0.333, + 0.000, + 0.333, + 0.667, + 0.000, + 0.333, + 1.000, + 0.000, + 0.667, + 0.333, + 0.000, + 0.667, + 0.667, + 0.000, + 0.667, + 1.000, + 0.000, + 1.000, + 0.333, + 0.000, + 1.000, + 0.667, + 0.000, + 1.000, + 1.000, + 0.000, + 0.000, + 0.333, + 0.500, + 0.000, + 0.667, + 0.500, + 0.000, + 1.000, + 0.500, + 0.333, + 0.000, + 0.500, + 0.333, + 0.333, + 0.500, + 0.333, + 0.667, + 0.500, + 0.333, + 1.000, + 0.500, + 0.667, + 0.000, + 0.500, + 0.667, + 0.333, + 0.500, + 0.667, + 0.667, + 0.500, + 0.667, + 1.000, + 0.500, + 1.000, + 0.000, + 0.500, + 1.000, + 0.333, + 0.500, + 1.000, + 0.667, + 0.500, + 1.000, + 1.000, + 0.500, + 0.000, + 0.333, + 1.000, + 0.000, + 0.667, + 1.000, + 0.000, + 1.000, + 1.000, + 0.333, + 0.000, + 1.000, + 0.333, + 0.333, + 1.000, + 0.333, + 0.667, + 1.000, + 0.333, + 1.000, + 1.000, + 0.667, + 0.000, + 1.000, + 0.667, + 0.333, + 1.000, + 0.667, + 0.667, + 1.000, + 0.667, + 1.000, + 1.000, + 1.000, + 0.000, + 1.000, + 1.000, + 0.333, + 1.000, + 1.000, + 0.667, + 1.000, + 0.333, + 0.000, + 0.000, + 0.500, + 0.000, + 0.000, + 0.667, + 0.000, + 0.000, + 0.833, + 0.000, + 0.000, + 1.000, + 0.000, + 0.000, + 0.000, + 0.167, + 0.000, + 0.000, + 0.333, + 0.000, + 0.000, + 0.500, + 0.000, + 0.000, + 0.667, + 0.000, + 0.000, + 0.833, + 0.000, + 0.000, + 1.000, + 0.000, + 0.000, + 0.000, + 0.167, + 0.000, + 0.000, + 0.333, + 0.000, + 0.000, + 0.500, + 0.000, + 0.000, + 0.667, + 0.000, + 0.000, + 0.833, + 0.000, + 0.000, + 1.000, + 0.000, + 0.000, + 0.000, + 0.143, + 0.143, + 0.143, + 0.857, + 0.857, + 0.857, + 1.000, + 1.000, + 1.000, + ] + ) + .astype(np.float32) + .reshape(-1, 3) +) diff --git a/storage/.gitkeep b/storage/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/storage/data/.gitkeep b/storage/data/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/storage/model/.gitkeep b/storage/model/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..f90f7a6 --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1,6 @@ +from pathlib import Path + + +PROJECT_ROOT = Path.joinpath(Path(__file__).parent, "..").resolve() +TESTS_ROOT = Path.joinpath(PROJECT_ROOT, "tests") +FIXTURES_ROOT = Path.joinpath(PROJECT_ROOT, "storage", "fixtures") diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..96ef9a7 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,14 @@ +import os + +import pytest + + +if os.getenv("_PYTEST_RAISE", "0") != "0": + + @pytest.hookimpl(tryfirst=True) + def pytest_exception_interact(call): + raise call.excinfo.value + + @pytest.hookimpl(tryfirst=True) + def pytest_internalerror(excinfo): + raise excinfo.value diff --git a/tests/test_example.py b/tests/test_example.py new file mode 100644 index 0000000..886acc4 --- /dev/null +++ b/tests/test_example.py @@ -0,0 +1,3 @@ +def test_pytest_works(): + """Verify that pytest works, and give basic test to pass CI.""" + assert True # noqa: WPS444