├── .dockerignore ├── docker-compose.yaml ├── .gitattributes ├── .github └── workflows │ └── ci.yaml ├── LICENSE ├── pyproject.toml ├── docker └── Dockerfile ├── setup.cfg ├── .gitignore ├── README.md ├── Makefile ├── jumpcutter ├── __main__.py └── clip.py ├── .pylintrc └── poetry.lock /.dockerignore: -------------------------------------------------------------------------------- 1 | * 2 | 3 | !docker 4 | !jumpcutter/* 5 | !pyproject.toml 6 | !poetry.lock 7 | !README.md 8 | -------------------------------------------------------------------------------- /docker-compose.yaml: -------------------------------------------------------------------------------- 1 | services: 2 | app: 3 | user: "${UID:-1000}" 4 | container_name: jumpcutter-app 5 | build: 6 | network: host 7 | context: . 8 | dockerfile: ./docker/Dockerfile 9 | args: 10 | USER_ID: "${UID:-1000}" 11 | DEVELOPMENT: "1" 12 | command: "tail -f /dev/null" 13 | volumes: 14 | - ./:/app 15 | ipc: host 16 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.pxd text diff=python 2 | *.py text diff=python 3 | *.py3 text diff=python 4 | *.pyw text diff=python 5 | *.pyx text diff=python 6 | *.pyz text diff=python 7 | *.pyi text diff=python 8 | 9 | *.db binary 10 | *.p binary 11 | *.pkl binary 12 | *.pickle binary 13 | *.pyc binary 14 | *.pyd binary 15 | *.pyo binary 16 | 17 | *.ipynb text 18 | 19 | * text=auto 20 | -------------------------------------------------------------------------------- /.github/workflows/ci.yaml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: [push] 4 | 5 | jobs: 6 | ci: 7 | name: CI 8 | runs-on: ubuntu-latest 9 | env: 10 | COMPOSE_FILE: docker-compose.yaml 11 | steps: 12 | - name: Checkout code 13 | uses: actions/checkout@v2 14 | - name: Build docker image 15 | run: make build 16 | - name: Lint Check 17 | run: make lint 18 | - name: Type Check 19 | run: make check-type-annotations 20 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Kıvanç Yüksel 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "jumpcutter" 3 | version = "0.1.6" 4 | description = "Jumpcut silent parts of your videos automagically" 5 | authors = ["Kivanc Yuksel "] 6 | license="MIT" 7 | readme="README.md" 8 | repository="https://github.com/kivancyuksel/jumpcutter.git" 9 | classifiers= [ 10 | "Development Status :: 4 - Beta", 11 | "License :: OSI Approved :: MIT License", 12 | "Topic :: Multimedia :: Video", 13 | "Programming Language :: Python :: 3.6", 14 | "Natural Language :: English", 15 | ] 16 | packages = [ 17 | { include = "jumpcutter" }, 18 | ] 19 | 20 | [tool.poetry.dependencies] 21 | python = "^3.11" 22 | moviepy = "~=1.0.3" 23 | tqdm = "~=4.60.0" 24 | 25 | [tool.poetry.dev-dependencies] 26 | coverage = "~=5.3.0" 27 | pytest = "~=6.2.0" 28 | pytest-cov = "~=2.10.0" 29 | pytest-xdist = "~=2.2.0" 30 | pytest-sugar = "~=0.9.0" 31 | pytest-mock = "~=3.4.0" 32 | isort = "~=5.6.0" 33 | pylama = "~=7.7.1" 34 | pylama-pylint = "~=3.1.0" 35 | radon = "~=4.3.0" 36 | black = "==20.8b1" 37 | mypy = ">=0.790" 38 | boto3-stubs = "*" 39 | 40 | [tool.poetry.plugins] 41 | [tool.poetry.plugins."console_scripts"] 42 | "jumpcutter" = "jumpcutter.__main__:main" 43 | 44 | [build-system] 45 | requires = ["setuptools","poetry_core>=1.0.0"] 46 | build-backend = "poetry.core.masonry.api" 47 | 48 | -------------------------------------------------------------------------------- /docker/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.11-slim 2 | 3 | ARG USER_ID=1000 4 | ARG DEVELOPMENT=0 5 | ARG USER_NAME=emkademy 6 | 7 | ENV HOME="/home/${USER_NAME}" 8 | ENV LC_ALL C.UTF-8 9 | ENV \ 10 | PYTHONUNBUFFERED=1 \ 11 | PIPENV_RELEASE=2020.11.15 \ 12 | PIPENV_NOSPIN=1 \ 13 | PIPENV_TIMEOUT=900 \ 14 | VIRTUAL_ENV="${HOME}/venv" \ 15 | PATH="${HOME}/venv/bin:${PATH}" \ 16 | PYTHONPATH="/app:${PYTHONPATH}" \ 17 | BUILD_POETRY_LOCK="${HOME}/poetry.lock.build" 18 | 19 | RUN apt-get -qq update && apt-get -qq -y install curl vim 20 | 21 | RUN addgroup --system --gid "${USER_ID}" "${USER_NAME}" \ 22 | && adduser --system --home "${HOME}" --uid "${USER_ID}" \ 23 | --ingroup "${USER_NAME}" "${USER_NAME}" 24 | 25 | RUN mkdir -p /app/jumpcutter && chown -R "${USER_NAME}" /app 26 | 27 | USER "${USER_NAME}" 28 | 29 | RUN curl -sSL https://install.python-poetry.org | python3 - 30 | ENV PATH="${PATH}:${HOME}/.poetry/bin" 31 | 32 | COPY . /app 33 | WORKDIR /app 34 | 35 | RUN python3 -m venv $VIRTUAL_ENV \ 36 | && if [ $DEVELOPMENT -eq 1 ]; then \ 37 | poetry install; \ 38 | cp -f poetry.lock $BUILD_POETRY_LOCK; \ 39 | else \ 40 | [ -f poetry.lock ] || { echo 'No poetry.lock found' ; exit 1; }; \ 41 | poetry install --no-dev; \ 42 | fi \ 43 | && rm -rf $HOME/.cache/* 44 | 45 | CMD ["/bin/sh"] 46 | 47 | -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [pylama] 2 | skip = .git,*/tests/* 3 | linters = pycodestyle,pyflakes,radon 4 | format = pylint 5 | 6 | [pylama:pycodestyle] 7 | ignore = E731,W503 8 | max_line_length = 120 9 | 10 | [pylama:pydocstyle] 11 | ignore = D101,D100 12 | 13 | [pylama:pyflakes] 14 | builtins = _ 15 | ignore = W401 16 | 17 | [pylama:pylint] 18 | rcfile=.pylintrc 19 | disable = C0103,C0111,E1101,R0901,R0902,R0903,R0904,R0913,R0915,W0141,W0142,W0221,W0232,W0613,W0631,W0108 20 | 21 | [pylama:radon] 22 | complexity = 10 23 | show_closures = True 24 | no_assert = True 25 | 26 | [mypy] 27 | python_version = 3.8 28 | warn_redundant_casts = False 29 | warn_unused_ignores = True 30 | warn_unused_configs = True 31 | warn_return_any = True 32 | warn_no_return = True 33 | warn_incomplete_stub = True 34 | 35 | disallow_subclassing_any = False 36 | 37 | disallow_untyped_calls = True 38 | disallow_untyped_defs = True 39 | disallow_incomplete_defs = True 40 | disallow_untyped_decorators = True 41 | check_untyped_defs = True 42 | strict_optional = True 43 | ignore_missing_imports = True 44 | 45 | verbosity = 0 46 | 47 | [mypy-pytest] 48 | ignore_missing_imports = True 49 | 50 | [isort] 51 | line_length = 88 52 | indent = 4 53 | multi_line_output = 3 54 | lines_between_types = 1 55 | include_trailing_comma = True 56 | force_grid_wrap = 0 57 | known_first_party = jumpcutter 58 | default_section = THIRDPARTY 59 | sections = FUTURE,STDLIB,THIRDPARTY,FIRSTPARTY,LOCALFOLDER 60 | use_parentheses=True 61 | 62 | [coverage:run] 63 | branch = True 64 | source = . 65 | omit = *tests*, *conftest.py 66 | data_file = .unitreports/.coverage 67 | 68 | [coverage:xml] 69 | output = .unitreports/coverage.xml 70 | 71 | [coverage:report] 72 | skip_covered = True 73 | show_missing = True 74 | sort = Cover 75 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | *.log 55 | 56 | # Sphinx documentation 57 | docs/_build/ 58 | docs/build/ 59 | docs/source/_autosummary/ 60 | docs/source/reference/ 61 | docs/source/_build/ 62 | 63 | # PyBuilder 64 | target/ 65 | 66 | # Jupyter Notebook 67 | jupyter/ 68 | .ipynb_checkpoints 69 | 70 | # IPython 71 | profile_default/ 72 | ipython_config.py 73 | 74 | # pyenv 75 | .python-version 76 | 77 | 78 | __pypackages__/ 79 | 80 | # PyCharm 81 | /.idea/ 82 | 83 | # Environments 84 | .env 85 | .venv 86 | env/ 87 | venv/ 88 | ENV/ 89 | env.bak/ 90 | venv.bak/ 91 | 92 | # mkdocs documentation 93 | /site 94 | 95 | # mypy 96 | .mypy_cache/ 97 | .dmypy.json 98 | dmypy.json 99 | 100 | *.pyc 101 | *.bak 102 | .DS_Store 103 | 104 | .floo 105 | .flooignore 106 | .vscode 107 | .vs 108 | *.xml 109 | *.iml 110 | media 111 | .eggs/ 112 | build/ 113 | dist/ 114 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## What is jumpcutter? 2 | 3 | Jumpcutter is a program that is written in Python to automatically jump-cut silent parts of your videos. 4 | The purpose here is to ease your post recording work. 5 | 6 | Check out [the medium post](https://medium.com/@emkademy/how-to-jump-cut-silent-parts-of-your-videos-automatically-with-python-2e4b96320dc1) 7 | for more information. 8 | 9 | ## Installation 10 | You can install jumpcutter by simply: 11 | 12 | ```bash 13 | pip install jumpcutter 14 | ``` 15 | 16 | ## Demo 17 | 18 | [![Watch the video](https://img.youtube.com/vi/UDjzm_lzWOA/hqdefault.jpg)](https://youtu.be/UDjzm_lzWOA) 19 | 20 | ## How to run it? 21 | There are 11 command line arguments you can run the program with. 22 | Before explaining them, I would like to say that most of these parameters 23 | have a default value that “just works”. So, if you don’t want you don’t need to specify 24 | (or know) almost any of these parameters. You will be just fine with the default values. 25 | 26 | 1. `-i`, `--input`: Path to the video that you want to jump-cut. 27 | 2. `-o`, `--output`: Path to where you want to save the output video. 28 | 3. `-m`, `--magnitude-threshold-ratio`: The percentage of the maximum value of your audio signal that you would like to 29 | consider as silent a signal (default: 0.02). 30 | 4. `-d`, `--duration-threshold`: Minimum number of required seconds in silence to cut it out. For example if this parameter 31 | is 0.5, it means that the silence parts have to last minimum 0.5 seconds, otherwise they won't be jump-cut (default: 0.5). 32 | 5. `-f`, `--failure-tolerance-ratio`: Most of the times, there are 44100 audio signal values in 1 second of a video. 33 | Let's say the "--duration-threshold" was set to 0.5. This means that, we need to check minimum 22050 signal 34 | values to see if there is a silent part of not. What happens if we found 22049 values that we consider as silent, 35 | but there is 1 value that is above our threshold. Should we just throw this part of the video and consider it as a 36 | loud signal? I think we shouldn't. This parameter leaves some room for failure, it tolerates high signal values until 37 | some point. Let's say it is set to 0.1, it means that 10% of the signal that is currently being investigated can 38 | have values that are higher than our threshold, but they are still going to be considered as a silent part (default: 0.1). 39 | 6. `-s`, `--space-on-edges`: Leaves some space on the edges of silence cut. E.g. if it is found that there is 40 | silence between 10th and 20th second of the video, then instead of cutting it out directly, we cut out 41 | (10+space_on_edges)th and (20-space_on_edges)th seconds of the clip (default: 0.1). 42 | 7. `-x`, `--silence-part-speed` : If this parameter is given, instead of cutting the silent parts out, the script will 43 | speed them up "x" times. 44 | 8. `-l`, `--min-loud-part-duration`: If this parameter is given, loud parts of the video that are shorter then this 45 | parameter will also be cut. 46 | 9. `-c`, `--cut`: If you want, you can also cut voiced parts of the video (to have some fun :)). There are 3 choices 47 | you can make for this parameter: `silent`, `voiced`, `both`. If you choose `silent`, silent parts of the video will 48 | be cutted; if you choose `voiced`, voiced parts of the video will be cutted; if you choose `both` 2 videos will be 49 | saved: 1 for the silent parts, 1 for the voiced parts (default: silent). 50 | 10. `--codec`: Codec to use for image encoding. Can be any codec supported by ffmpeg. If the filename 51 | has extension ‘.mp4’, ‘.ogv’, ‘.webm’, the codec will be set accordingly, but you can still set 52 | it if you don’t like the default. For other extensions, the output filename must be set accordingly. 53 | Check [here](https://zulko.github.io/moviepy/ref/VideoClip/VideoClip.html#moviepy.video.compositing.CompositeVideoClip.CompositeVideoClip.write_videofile) 54 | 11. `bitrate`: Desired bitrate of the output video. Leave blank if you don't know what this is. 55 | 56 | ## Examples of running the program 57 | 58 | ```bash 59 | # The simplest way you can run the program 60 | jumpcutter -i input_video.mp4 -o output_video.mp4 61 | # If you want, you can also set the other parameters that was mentioned 62 | jumpcutter -i input_video.mp4 -o output_video.mp4 -m 0.05 -d 1.0 -f 0.2 -s 0.2 -x 2000 -l 1.0 -c both 63 | ``` 64 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: build clean down format lint lock_dependencies requirements run_testt sort test up 2 | 3 | ################################################################################# 4 | # GLOBALS # 5 | ################################################################################# 6 | 7 | PROJECT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) 8 | SHELL:=/bin/bash 9 | PROFILE = default 10 | PROJECT_NAME = jumpcutter 11 | PYTHON_INTERPRETER = python 12 | DOCKER_COMPOSE_RUN = docker compose run -w /app --rm app 13 | lock_dependencies: BUILD_POETRY_LOCK = ~/poetry.lock.build 14 | 15 | 16 | ################################################################################# 17 | # COMMANDS # 18 | ################################################################################# 19 | 20 | ## Build docker containers with docker-compose 21 | build: 22 | docker-compose build 23 | 24 | ## docker-compose up -d 25 | up: 26 | docker-compose up -d 27 | 28 | ## docker-compose down 29 | down: 30 | docker-compose down 31 | 32 | ## docker exec -it jumpcutter-app bash 33 | exec-in: up 34 | docker exec -it jumpcutter-app bash 35 | 36 | ## Delete all compiled Python files 37 | clean: 38 | find . -type f -name "*.py[co]" -delete 39 | find . -type d -name "__pycache__" -delete 40 | 41 | ## Lint using pylama, isort and black 42 | lint: 43 | $(DOCKER_COMPOSE_RUN) bash -c "pylama && isort --check-only --atomic ./jumpcutter && black --check ./jumpcutter" 44 | 45 | ## Sort imports 46 | sort: 47 | $(DOCKER_COMPOSE_RUN) isort --atomic ./jumpcutter 48 | 49 | ## Format code with black 50 | format: 51 | $(DOCKER_COMPOSE_RUN) black ./jumpcutter 52 | 53 | 54 | ## Check type annotations 55 | check-type-annotations: 56 | $(DOCKER_COMPOSE_RUN) mypy ./jumpcutter 57 | 58 | ## Lock dependencies with pipenv 59 | lock_dependencies: 60 | docker-compose run --rm -w /app app bash -c "if [ -e $(BUILD_POETRY_LOCK) ]; then cp $(BUILD_POETRY_LOCK) ./poetry.lock; else poetry lock; fi" 61 | 62 | ## Package the code and share it on PyPi 63 | package: 64 | docker-compose run --rm app poetry publish --build 65 | 66 | 67 | ################################################################################# 68 | # PROJECT RULES # 69 | ################################################################################# 70 | 71 | 72 | 73 | ################################################################################# 74 | # Self Documenting Commands # 75 | ################################################################################# 76 | 77 | .DEFAULT_GOAL := help 78 | 79 | # Inspired by 80 | # sed script explained: 81 | # /^##/: 82 | # * save line in hold space 83 | # * purge line 84 | # * Loop: 85 | # * append newline + line to hold space 86 | # * go to next line 87 | # * if line starts with doc comment, strip comment character off and loop 88 | # * remove target prerequisites 89 | # * append hold space (+ newline) to line 90 | # * replace newline plus comments by `---` 91 | # * print line 92 | # Separate expressions are necessary because labels cannot be delimited by 93 | # semicolon; see 94 | .PHONY: help 95 | help: 96 | @echo "$$(tput bold)Available rules:$$(tput sgr0)" 97 | @echo 98 | @sed -n -e "/^## / { \ 99 | h; \ 100 | s/.*//; \ 101 | :doc" \ 102 | -e "H; \ 103 | n; \ 104 | s/^## //; \ 105 | t doc" \ 106 | -e "s/:.*//; \ 107 | G; \ 108 | s/\\n## /---/; \ 109 | s/\\n/ /g; \ 110 | p; \ 111 | }" ${MAKEFILE_LIST} \ 112 | | LC_ALL='C' sort --ignore-case \ 113 | | awk -F '---' \ 114 | -v ncol=$$(tput cols) \ 115 | -v indent=19 \ 116 | -v col_on="$$(tput setaf 6)" \ 117 | -v col_off="$$(tput sgr0)" \ 118 | '{ \ 119 | printf "%s%*s%s ", col_on, -indent, $$1, col_off; \ 120 | n = split($$2, words, " "); \ 121 | line_length = ncol - indent; \ 122 | for (i = 1; i <= n; i++) { \ 123 | line_length -= length(words[i]) + 1; \ 124 | if (line_length <= 0) { \ 125 | line_length = ncol - indent - length(words[i]) - 1; \ 126 | printf "\n%*s ", -indent, " "; \ 127 | } \ 128 | printf "%s ", words[i]; \ 129 | } \ 130 | printf "\n"; \ 131 | }' \ 132 | | more $(shell test $(shell uname) = Darwin && echo '--no-init --raw-control-chars') 133 | -------------------------------------------------------------------------------- /jumpcutter/__main__.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | 3 | from pathlib import Path 4 | 5 | from jumpcutter.clip import Clip 6 | 7 | 8 | def main() -> None: 9 | parser = argparse.ArgumentParser() 10 | 11 | parser.add_argument( 12 | "--input", "-i", help="Path to the input video", type=Path, required=True 13 | ) 14 | parser.add_argument( 15 | "--output", 16 | "-o", 17 | help="Path to where you want to save the output video. " 18 | "Note: Not all extensions are supported. Checkout moviepy's documentation", 19 | type=Path, 20 | required=True, 21 | ) 22 | parser.add_argument( 23 | "--cut", 24 | "-c", 25 | choices=["silent", "voiced", "both"], 26 | help="Decides whether to cut silent parts, voiced parts, or both (creating 2 separate videos)", 27 | default="silent", 28 | ) 29 | parser.add_argument( 30 | "--magnitude-threshold-ratio", 31 | "-m", 32 | help="Audio signal's values ({x in R: -1 <= x <= 1}) that are: " 33 | "min_magnitude = min(abs(min(x)), max(x))" 34 | "magnitude_threshold = min_magnitude * magnitude_threshold_ratio" 35 | "abs(x) < magnitude_threshold" 36 | "will be threated as silence audio signal values.", 37 | type=float, 38 | default=0.02, 39 | ) 40 | parser.add_argument( 41 | "--duration-threshold", 42 | "-d", 43 | help="Minimum number of required seconds in silence to cut it out", 44 | type=float, 45 | default=0.5, 46 | ) 47 | parser.add_argument( 48 | "--failure-tolerance-ratio", 49 | "-f", 50 | help="Consequent x values are taken into account to find silence parts of the signal. " 51 | "Failure tolerance ratio leaves room for some error. For example if failure threshold " 52 | "ratio is 0.1, then in 1 second silence signal, it is allowed to have 0.1 seconds " 53 | "non silence signal, and it is still going to be treated as a silence signal.", 54 | type=float, 55 | default=0.1, 56 | ) 57 | parser.add_argument( 58 | "--space-on-edges", 59 | "-s", 60 | help="Leaves some space on the edges of silence cut. E.g. if it is found that there is silence " 61 | "between 10th and 20th second of the video, then instead of cutting it out directly, " 62 | "we cut out (10+space_on_edges)th and (20-space_on_edges)th seconds of the clip", 63 | type=float, 64 | default=0.1, 65 | ) 66 | parser.add_argument( 67 | "--silence-part-speed", 68 | "-x", 69 | help="If this parameter is set, it will speed up the silence parts x times instead of cutting them out", 70 | type=int, 71 | required=False, 72 | ) 73 | parser.add_argument( 74 | "--min-loud-part-duration", 75 | "-l", 76 | help="If this parameter is set, loud parts of the clip that are shorter than this parameter " 77 | "(in seconds) will also be cutted", 78 | type=int, 79 | required=False, 80 | default=-1, 81 | ) 82 | parser.add_argument( 83 | "--codec", 84 | help="Codec to use for image encoding. Can be any codec supported by ffmpeg. If the filename " 85 | "has extension ‘.mp4’, ‘.ogv’, ‘.webm’, the codec will be set accordingly, but you can still set " 86 | "it if you don’t like the default. For other extensions, the output filename must be set accordingly.", 87 | type=str, 88 | required=False, 89 | ) 90 | parser.add_argument( 91 | "--bitrate", 92 | help="Desired bitrate for the output video", 93 | type=int, 94 | required=False, 95 | ) 96 | 97 | args = parser.parse_args() 98 | print("Running with the arguments:") 99 | print(args) 100 | print(60 * "-") 101 | if args.duration_threshold / 2 <= args.space_on_edges: 102 | print(60 * "*") 103 | print("WARNING:") 104 | print( 105 | "You have selected space_on_edges >= duration_threshold/2. This may cause overlapping sequences" 106 | ) 107 | print(60 * "*") 108 | 109 | input_path = args.input.resolve() 110 | output_path = args.output.resolve() 111 | cuts = [args.cut] if args.cut != "both" else ["silent", "voiced"] 112 | codec = args.codec 113 | bitrate = args.bitrate 114 | 115 | clip = Clip(str(input_path), args.min_loud_part_duration, args.silence_part_speed) 116 | outputs = clip.jumpcut( 117 | cuts, 118 | args.magnitude_threshold_ratio, 119 | args.duration_threshold, 120 | args.failure_tolerance_ratio, 121 | args.space_on_edges, 122 | ) 123 | for cut_type, jumpcutted_clip in outputs.items(): 124 | if len(outputs) == 2: 125 | jumpcutted_clip.write_videofile( 126 | str( 127 | output_path.parent 128 | / f"{output_path.stem}_{cut_type}_parts_cutted{output_path.suffix}" 129 | ), 130 | codec=codec, 131 | bitrate=bitrate, 132 | ) 133 | else: 134 | jumpcutted_clip.write_videofile( 135 | str(output_path), codec=codec, bitrate=bitrate 136 | ) 137 | 138 | 139 | if __name__ == "__main__": 140 | main() 141 | -------------------------------------------------------------------------------- /jumpcutter/clip.py: -------------------------------------------------------------------------------- 1 | from typing import Dict, List, Tuple 2 | 3 | import numpy as np 4 | 5 | from moviepy.audio.io.AudioFileClip import AudioFileClip 6 | from moviepy.editor import concatenate_videoclips 7 | from moviepy.video.fx.all import speedx 8 | from moviepy.video.io.VideoFileClip import VideoFileClip 9 | from tqdm import tqdm 10 | 11 | 12 | class Clip: 13 | def __init__( 14 | self, clip_path: str, min_loud_part_duration: int, silence_part_speed: int 15 | ) -> None: 16 | self.clip = VideoFileClip(clip_path) 17 | self.audio = Audio(self.clip.audio) 18 | self.cut_to_method = { 19 | "silent": self.jumpcut_silent_parts, 20 | "voiced": self.jumpcut_voiced_parts, 21 | } 22 | self.min_loud_part_duration = min_loud_part_duration 23 | self.silence_part_speed = silence_part_speed 24 | 25 | def jumpcut( 26 | self, 27 | cuts: List[str], 28 | magnitude_threshold_ratio: float, 29 | duration_threshold_in_seconds: float, 30 | failure_tolerance_ratio: float, 31 | space_on_edges: float, 32 | ) -> Dict[str, VideoFileClip]: 33 | 34 | intervals_to_cut = self.audio.get_intervals_to_cut( 35 | magnitude_threshold_ratio, 36 | duration_threshold_in_seconds, 37 | failure_tolerance_ratio, 38 | space_on_edges, 39 | ) 40 | outputs = {} 41 | for cut in cuts: 42 | jumpcutted_clips = self.cut_to_method[cut](intervals_to_cut) 43 | outputs[cut] = concatenate_videoclips(jumpcutted_clips) 44 | 45 | return outputs 46 | 47 | def jumpcut_silent_parts( 48 | self, intervals_to_cut: List[Tuple[float, float]] 49 | ) -> List[VideoFileClip]: 50 | jumpcutted_clips = [] 51 | previous_stop = 0 52 | for start, stop in tqdm(intervals_to_cut, desc="Cutting silent intervals"): 53 | clip_before = self.clip.subclip(previous_stop, start) 54 | 55 | if clip_before.duration > self.min_loud_part_duration: 56 | jumpcutted_clips.append(clip_before) 57 | 58 | if self.silence_part_speed is not None: 59 | silence_clip = self.clip.subclip(start, stop) 60 | silence_clip = speedx( 61 | silence_clip, self.silence_part_speed 62 | ).without_audio() 63 | jumpcutted_clips.append(silence_clip) 64 | 65 | previous_stop = stop 66 | 67 | if previous_stop < self.clip.duration: 68 | last_clip = self.clip.subclip(previous_stop, self.clip.duration) 69 | jumpcutted_clips.append(last_clip) 70 | return jumpcutted_clips 71 | 72 | def jumpcut_voiced_parts( 73 | self, intervals_to_cut: List[Tuple[float, float]] 74 | ) -> List[VideoFileClip]: 75 | jumpcutted_clips = [] 76 | for start, stop in tqdm(intervals_to_cut, desc="Cutting voiced intervals"): 77 | if start < stop: 78 | silence_clip = self.clip.subclip(start, stop) 79 | jumpcutted_clips.append(silence_clip) 80 | return jumpcutted_clips 81 | 82 | 83 | class Audio: 84 | def __init__(self, audio: AudioFileClip) -> None: 85 | self.audio = audio 86 | self.fps = audio.fps 87 | # Extract the audio as a list of samples 88 | audio_samples = list(audio.iter_frames()) 89 | # Convert the list of samples to a NumPy array 90 | self.signal = np.array(audio_samples) 91 | if len(self.signal.shape) == 1: 92 | self.signal = self.signal.reshape(-1, 1) 93 | 94 | def get_intervals_to_cut( 95 | self, 96 | magnitude_threshold_ratio: float, 97 | duration_threshold_in_seconds: float, 98 | failure_tolerance_ratio: float, 99 | space_on_edges: float, 100 | ) -> List[Tuple[float, float]]: 101 | min_magnitude = min(abs(np.min(self.signal)), np.max(self.signal)) 102 | magnitude_threshold = min_magnitude * magnitude_threshold_ratio 103 | failure_tolerance = self.fps * failure_tolerance_ratio 104 | duration_threshold = self.fps * duration_threshold_in_seconds 105 | silence_counter = 0 106 | failure_counter = 0 107 | 108 | intervals_to_cut = [] 109 | absolute_signal = np.absolute(self.signal) 110 | for i, values in tqdm( 111 | enumerate(absolute_signal), 112 | desc="Getting silent intervals to cut", 113 | total=len(absolute_signal), 114 | ): 115 | silence = all([value < magnitude_threshold for value in values]) 116 | silence_counter += silence 117 | failure_counter += not silence 118 | if failure_counter >= failure_tolerance: 119 | if silence_counter >= duration_threshold: 120 | interval_end = (i - failure_counter) / self.fps 121 | interval_start = interval_end - (silence_counter / self.fps) 122 | 123 | interval_start += space_on_edges 124 | interval_end -= space_on_edges 125 | 126 | intervals_to_cut.append( 127 | (abs(interval_start), interval_end) 128 | ) # in seconds 129 | silence_counter = 0 130 | failure_counter = 0 131 | return intervals_to_cut 132 | -------------------------------------------------------------------------------- /.pylintrc: -------------------------------------------------------------------------------- 1 | [MASTER] 2 | 3 | # A comma-separated list of package or module names from where C extensions may 4 | # be loaded. Extensions are loading into the active Python interpreter and may 5 | # run arbitrary code 6 | extension-pkg-whitelist= 7 | 8 | # Add files or directories to the blacklist. They should be base names, not 9 | # paths. 10 | ignore= 11 | 12 | # Add files or directories matching the regex patterns to the blacklist. The 13 | # regex matches against base names, not paths. 14 | ignore-patterns= 15 | 16 | # Python code to execute, usually for sys.path manipulation such as 17 | # pygtk.require(). 18 | #init-hook= 19 | 20 | # Use multiple processes to speed up Pylint. 21 | jobs=1 22 | 23 | # List of plugins (as comma separated values of python modules names) to load, 24 | # usually to register additional checkers. 25 | load-plugins= 26 | 27 | # Pickle collected data for later comparisons. 28 | persistent=no 29 | 30 | # Specify a configuration file. 31 | #rcfile= 32 | 33 | # When enabled, pylint would attempt to guess common misconfiguration and emit 34 | # user-friendly hints instead of false-positive error messages 35 | suggestion-mode=yes 36 | 37 | # Allow loading of arbitrary C extensions. Extensions are imported into the 38 | # active Python interpreter and may run arbitrary code. 39 | unsafe-load-any-extension=no 40 | 41 | 42 | [MESSAGES CONTROL] 43 | 44 | # Only show warnings with the listed confidence levels. Leave empty to show 45 | # all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED 46 | confidence= 47 | 48 | # Disable the message, report, category or checker with the given id(s). You 49 | # can either give multiple identifiers separated by comma (,) or put this 50 | # option multiple times (only on the command line, not in the configuration 51 | # file where it should appear only once).You can also use "--disable=all" to 52 | # disable everything first and then reenable specific checks. For example, if 53 | # you want to run only the similarities checker, you can use "--disable=all 54 | # --enable=similarities". If you want to run only the classes checker, but have 55 | # no Warning level messages displayed, use"--disable=all --enable=classes 56 | # --disable=W" 57 | disable=print-statement, 58 | parameter-unpacking, 59 | unpacking-in-except, 60 | old-raise-syntax, 61 | backtick, 62 | long-suffix, 63 | old-ne-operator, 64 | old-octal-literal, 65 | import-star-module-level, 66 | non-ascii-bytes-literal, 67 | raw-checker-failed, 68 | bad-inline-option, 69 | locally-disabled, 70 | locally-enabled, 71 | file-ignored, 72 | suppressed-message, 73 | useless-suppression, 74 | deprecated-pragma, 75 | apply-builtin, 76 | basestring-builtin, 77 | buffer-builtin, 78 | cmp-builtin, 79 | coerce-builtin, 80 | execfile-builtin, 81 | file-builtin, 82 | long-builtin, 83 | raw_input-builtin, 84 | reduce-builtin, 85 | standarderror-builtin, 86 | unicode-builtin, 87 | xrange-builtin, 88 | coerce-method, 89 | delslice-method, 90 | getslice-method, 91 | setslice-method, 92 | no-absolute-import, 93 | old-division, 94 | dict-iter-method, 95 | dict-view-method, 96 | next-method-called, 97 | metaclass-assignment, 98 | indexing-exception, 99 | raising-string, 100 | reload-builtin, 101 | oct-method, 102 | hex-method, 103 | nonzero-method, 104 | cmp-method, 105 | input-builtin, 106 | round-builtin, 107 | intern-builtin, 108 | unichr-builtin, 109 | map-builtin-not-iterating, 110 | zip-builtin-not-iterating, 111 | range-builtin-not-iterating, 112 | filter-builtin-not-iterating, 113 | using-cmp-argument, 114 | eq-without-hash, 115 | div-method, 116 | idiv-method, 117 | rdiv-method, 118 | exception-message-attribute, 119 | invalid-str-codec, 120 | sys-max-int, 121 | bad-python3-import, 122 | deprecated-string-function, 123 | deprecated-str-translate-call, 124 | deprecated-itertools-function, 125 | deprecated-types-field, 126 | next-method-defined, 127 | dict-items-not-iterating, 128 | dict-keys-not-iterating, 129 | dict-values-not-iterating 130 | 131 | # Enable the message, report, category or checker with the given id(s). You can 132 | # either give multiple identifier separated by comma (,) or put this option 133 | # multiple time (only on the command line, not in the configuration file where 134 | # it should appear only once). See also the "--disable" option for examples. 135 | enable=import-error, 136 | used-before-assignment, 137 | undefined-all-variable, 138 | invalid-all-object, 139 | unpacking-non-sequence, 140 | c-extension-no-member, 141 | wildcard-import, 142 | deprecated-module, 143 | relative-import, 144 | reimported, 145 | import-self, 146 | misplaced-future, 147 | global-variable-undefined, 148 | global-variable-not-assigned, 149 | global-statement, 150 | global-at-module-level, 151 | unused-import, 152 | unused-variable, 153 | unused-wildcard-import, 154 | redefined-builtin, 155 | redefine-in-handler, 156 | undefined-loop-variable, 157 | cell-var-from-loop, 158 | bad-open-mode, 159 | boolean-datetime, 160 | redundant-unittest-assert 161 | 162 | 163 | [REPORTS] 164 | 165 | # Python expression which should return a note less than 10 (10 is the highest 166 | # note). You have access to the variables errors warning, statement which 167 | # respectively contain the number of errors / warnings messages and the total 168 | # number of statements analyzed. This is used by the global evaluation report 169 | # (RP0004). 170 | evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) 171 | 172 | # Template used to display messages. This is a python new-style format string 173 | # used to format the message information. See doc for all details 174 | #msg-template= 175 | 176 | # Set the output format. Available formats are text, parseable, colorized, json 177 | # and msvs (visual studio).You can also give a reporter class, eg 178 | # mypackage.mymodule.MyReporterClass. 179 | output-format=parseable 180 | 181 | # Tells whether to display a full report or only the messages 182 | reports=no 183 | 184 | # Activate the evaluation score. 185 | score=yes 186 | 187 | 188 | [REFACTORING] 189 | 190 | # Maximum number of nested blocks for function / method body 191 | max-nested-blocks=5 192 | 193 | # Complete name of functions that never returns. When checking for 194 | # inconsistent-return-statements if a never returning function is called then 195 | # it will be considered as an explicit return statement and no message will be 196 | # printed. 197 | never-returning-functions=optparse.Values,sys.exit 198 | 199 | 200 | [MISCELLANEOUS] 201 | 202 | # List of note tags to take in consideration, separated by a comma. 203 | notes=FIXME, 204 | XXX, 205 | TODO 206 | 207 | 208 | [SPELLING] 209 | 210 | # Limits count of emitted suggestions for spelling mistakes 211 | max-spelling-suggestions=4 212 | 213 | # Spelling dictionary name. Available dictionaries: none. To make it working 214 | # install python-enchant package. 215 | spelling-dict= 216 | 217 | # List of comma separated words that should not be checked. 218 | spelling-ignore-words= 219 | 220 | # A path to a file that contains private dictionary; one word per line. 221 | spelling-private-dict-file= 222 | 223 | # Tells whether to store unknown words to indicated private dictionary in 224 | # --spelling-private-dict-file option instead of raising a message. 225 | spelling-store-unknown-words=no 226 | 227 | 228 | [BASIC] 229 | 230 | # Naming style matching correct argument names 231 | argument-naming-style=snake_case 232 | 233 | # Regular expression matching correct argument names. Overrides argument- 234 | # naming-style 235 | argument-rgx=[a-z_][a-z0-9_]{2,30}$ 236 | 237 | # Naming style matching correct attribute names 238 | attr-naming-style=snake_case 239 | 240 | # Regular expression matching correct attribute names. Overrides attr-naming- 241 | # style 242 | attr-rgx=[a-z_][a-z0-9_]{2,30}$ 243 | 244 | # Bad variable names which should always be refused, separated by a comma 245 | bad-names=foo, 246 | bar, 247 | baz, 248 | toto, 249 | tutu, 250 | tata 251 | 252 | # Naming style matching correct class attribute names 253 | class-attribute-naming-style=any 254 | 255 | # Regular expression matching correct class attribute names. Overrides class- 256 | # attribute-naming-style 257 | class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ 258 | 259 | # Naming style matching correct class names 260 | class-naming-style=PascalCase 261 | 262 | # Regular expression matching correct class names. Overrides class-naming-style 263 | class-rgx=[A-Z_][a-zA-Z0-9]+$ 264 | 265 | # Naming style matching correct constant names 266 | const-naming-style=UPPER_CASE 267 | 268 | # Regular expression matching correct constant names. Overrides const-naming- 269 | # style 270 | const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$ 271 | 272 | # Minimum line length for functions/classes that require docstrings, shorter 273 | # ones are exempt. 274 | docstring-min-length=-1 275 | 276 | # Naming style matching correct function names 277 | function-naming-style=snake_case 278 | 279 | # Regular expression matching correct function names. Overrides function- 280 | # naming-style 281 | function-rgx=[a-z_][a-z0-9_]{2,30}$ 282 | 283 | # Good variable names which should always be accepted, separated by a comma 284 | good-names=i, 285 | j, 286 | k, 287 | ex, 288 | Run, 289 | _ 290 | 291 | # Include a hint for the correct naming format with invalid-name 292 | include-naming-hint=no 293 | 294 | # Naming style matching correct inline iteration names 295 | inlinevar-naming-style=any 296 | 297 | # Regular expression matching correct inline iteration names. Overrides 298 | # inlinevar-naming-style 299 | inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ 300 | 301 | # Naming style matching correct method names 302 | method-naming-style=snake_case 303 | 304 | # Regular expression matching correct method names. Overrides method-naming- 305 | # style 306 | method-rgx=[a-z_][a-z0-9_]{2,30}$ 307 | 308 | # Naming style matching correct module names 309 | module-naming-style=snake_case 310 | 311 | # Regular expression matching correct module names. Overrides module-naming- 312 | # style 313 | module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ 314 | 315 | # Colon-delimited sets of names that determine each other's naming style when 316 | # the name regexes allow several styles. 317 | name-group= 318 | 319 | # Regular expression which should only match function or class names that do 320 | # not require a docstring. 321 | no-docstring-rgx=^_ 322 | 323 | # List of decorators that produce properties, such as abc.abstractproperty. Add 324 | # to this list to register other decorators that produce valid properties. 325 | property-classes=abc.abstractproperty 326 | 327 | # Naming style matching correct variable names 328 | variable-naming-style=snake_case 329 | 330 | # Regular expression matching correct variable names. Overrides variable- 331 | # naming-style 332 | variable-rgx=[a-z_][a-z0-9_]{2,30}$ 333 | 334 | 335 | [LOGGING] 336 | 337 | # Logging modules to check that the string format arguments are in logging 338 | # function parameter format 339 | logging-modules=logging 340 | 341 | 342 | [VARIABLES] 343 | 344 | # List of additional names supposed to be defined in builtins. Remember that 345 | # you should avoid to define new builtins when possible. 346 | additional-builtins= 347 | 348 | # Tells whether unused global variables should be treated as a violation. 349 | allow-global-unused-variables=yes 350 | 351 | # List of strings which can identify a callback function by name. A callback 352 | # name must start or end with one of those strings. 353 | callbacks=cb_, 354 | _cb 355 | 356 | # A regular expression matching the name of dummy variables (i.e. expectedly 357 | # not used). 358 | dummy-variables-rgx=^_|^dummy 359 | 360 | # Argument names that match this expression will be ignored. Default to name 361 | # with leading underscore 362 | ignored-argument-names=_.* 363 | 364 | # Tells whether we should check for unused import in __init__ files. 365 | init-import=no 366 | 367 | # List of qualified module names which can have objects that can redefine 368 | # builtins. 369 | redefining-builtins-modules=six.moves,past.builtins,future.builtins 370 | 371 | 372 | [SIMILARITIES] 373 | 374 | # Ignore comments when computing similarities. 375 | ignore-comments=yes 376 | 377 | # Ignore docstrings when computing similarities. 378 | ignore-docstrings=yes 379 | 380 | # Ignore imports when computing similarities. 381 | ignore-imports=no 382 | 383 | # Minimum lines number of a similarity. 384 | min-similarity-lines=4 385 | 386 | 387 | [TYPECHECK] 388 | 389 | # List of decorators that produce context managers, such as 390 | # contextlib.contextmanager. Add to this list to register other decorators that 391 | # produce valid context managers. 392 | contextmanager-decorators=contextlib.contextmanager 393 | 394 | # List of members which are set dynamically and missed by pylint inference 395 | # system, and so shouldn't trigger E1101 when accessed. Python regular 396 | # expressions are accepted. 397 | generated-members= 398 | 399 | # Tells whether missing members accessed in mixin class should be ignored. A 400 | # mixin class is detected if its name ends with "mixin" (case insensitive). 401 | ignore-mixin-members=yes 402 | 403 | # This flag controls whether pylint should warn about no-member and similar 404 | # checks whenever an opaque object is returned when inferring. The inference 405 | # can return multiple potential results while evaluating a Python object, but 406 | # some branches might not be evaluated, which results in partial inference. In 407 | # that case, it might be useful to still emit no-member and other checks for 408 | # the rest of the inferred objects. 409 | ignore-on-opaque-inference=yes 410 | 411 | # List of class names for which member attributes should not be checked (useful 412 | # for classes with dynamically set attributes). This supports the use of 413 | # qualified names. 414 | ignored-classes= 415 | 416 | # List of module names for which member attributes should not be checked 417 | # (useful for modules/projects where namespaces are manipulated during runtime 418 | # and thus existing member attributes cannot be deduced by static analysis. It 419 | # supports qualified module names, as well as Unix pattern matching. 420 | ignored-modules= 421 | 422 | # Show a hint with possible names when a member name was not found. The aspect 423 | # of finding the hint is based on edit distance. 424 | missing-member-hint=yes 425 | 426 | # The minimum edit distance a name should have in order to be considered a 427 | # similar match for a missing member name. 428 | missing-member-hint-distance=1 429 | 430 | # The total number of similar names that should be taken in consideration when 431 | # showing a hint for a missing member. 432 | missing-member-max-choices=1 433 | 434 | 435 | [FORMAT] 436 | 437 | # Expected format of line ending, e.g. empty (any line ending), LF or CRLF. 438 | expected-line-ending-format= 439 | 440 | # Regexp for a line that is allowed to be longer than the limit. 441 | ignore-long-lines=^\s*(# )??$ 442 | 443 | # Number of spaces of indent required inside a hanging or continued line. 444 | indent-after-paren=4 445 | 446 | # String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 447 | # tab). 448 | indent-string=' ' 449 | 450 | # Maximum number of characters on a single line. 451 | max-line-length=120 452 | 453 | # Maximum number of lines in a module 454 | max-module-lines=1000 455 | 456 | # List of optional constructs for which whitespace checking is disabled. `dict- 457 | # separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. 458 | # `trailing-comma` allows a space between comma and closing bracket: (a, ). 459 | # `empty-line` allows space-only lines. 460 | no-space-check=trailing-comma, 461 | dict-separator 462 | 463 | # Allow the body of a class to be on the same line as the declaration if body 464 | # contains single statement. 465 | single-line-class-stmt=no 466 | 467 | # Allow the body of an if to be on the same line as the test if there is no 468 | # else. 469 | single-line-if-stmt=no 470 | 471 | 472 | [CLASSES] 473 | 474 | # List of method names used to declare (i.e. assign) instance attributes. 475 | defining-attr-methods=__init__, 476 | __new__, 477 | setUp 478 | 479 | # List of member names, which should be excluded from the protected access 480 | # warning. 481 | exclude-protected=_asdict, 482 | _fields, 483 | _replace, 484 | _source, 485 | _make 486 | 487 | # List of valid names for the first argument in a class method. 488 | valid-classmethod-first-arg=cls 489 | 490 | # List of valid names for the first argument in a metaclass class method. 491 | valid-metaclass-classmethod-first-arg=mcs 492 | 493 | 494 | [DESIGN] 495 | 496 | # Maximum number of arguments for function / method 497 | max-args=5 498 | 499 | # Maximum number of attributes for a class (see R0902). 500 | max-attributes=7 501 | 502 | # Maximum number of boolean expressions in a if statement 503 | max-bool-expr=5 504 | 505 | # Maximum number of branch for function / method body 506 | max-branches=12 507 | 508 | # Maximum number of locals for function / method body 509 | max-locals=15 510 | 511 | # Maximum number of parents for a class (see R0901). 512 | max-parents=7 513 | 514 | # Maximum number of public methods for a class (see R0904). 515 | max-public-methods=20 516 | 517 | # Maximum number of return / yield for function / method body 518 | max-returns=6 519 | 520 | # Maximum number of statements in function / method body 521 | max-statements=50 522 | 523 | # Minimum number of public methods for a class (see R0903). 524 | min-public-methods=2 525 | 526 | 527 | [IMPORTS] 528 | 529 | # Allow wildcard imports from modules that define __all__. 530 | allow-wildcard-with-all=no 531 | 532 | # Analyse import fallback blocks. This can be used to support both Python 2 and 533 | # 3 compatible code, which means that the block might have code that exists 534 | # only in one or another interpreter, leading to false positives when analysed. 535 | analyse-fallback-blocks=no 536 | 537 | # Deprecated modules which should not be used, separated by a comma 538 | deprecated-modules=regsub, 539 | TERMIOS, 540 | Bastion, 541 | rexec 542 | 543 | # Create a graph of external dependencies in the given file (report RP0402 must 544 | # not be disabled) 545 | ext-import-graph= 546 | 547 | # Create a graph of every (i.e. internal and external) dependencies in the 548 | # given file (report RP0402 must not be disabled) 549 | import-graph= 550 | 551 | # Create a graph of internal dependencies in the given file (report RP0402 must 552 | # not be disabled) 553 | int-import-graph= 554 | 555 | # Force import order to recognize a module as part of the standard 556 | # compatibility libraries. 557 | known-standard-library= 558 | 559 | # Force import order to recognize a module as part of a third party library. 560 | known-third-party=enchant 561 | 562 | 563 | [EXCEPTIONS] 564 | 565 | # Exceptions that will emit a warning when being caught. Defaults to 566 | # "Exception" 567 | overgeneral-exceptions=Exception 568 | -------------------------------------------------------------------------------- /poetry.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. 2 | 3 | [[package]] 4 | name = "appdirs" 5 | version = "1.4.4" 6 | description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." 7 | optional = false 8 | python-versions = "*" 9 | files = [ 10 | {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, 11 | {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, 12 | ] 13 | 14 | [[package]] 15 | name = "astroid" 16 | version = "3.2.4" 17 | description = "An abstract syntax tree for Python with inference support." 18 | optional = false 19 | python-versions = ">=3.8.0" 20 | files = [ 21 | {file = "astroid-3.2.4-py3-none-any.whl", hash = "sha256:413658a61eeca6202a59231abb473f932038fbcbf1666587f66d482083413a25"}, 22 | {file = "astroid-3.2.4.tar.gz", hash = "sha256:0e14202810b30da1b735827f78f5157be2bbd4a7a59b7707ca0bfc2fb4c0063a"}, 23 | ] 24 | 25 | [[package]] 26 | name = "atomicwrites" 27 | version = "1.4.1" 28 | description = "Atomic file writes." 29 | optional = false 30 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 31 | files = [ 32 | {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, 33 | ] 34 | 35 | [[package]] 36 | name = "attrs" 37 | version = "24.2.0" 38 | description = "Classes Without Boilerplate" 39 | optional = false 40 | python-versions = ">=3.7" 41 | files = [ 42 | {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, 43 | {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, 44 | ] 45 | 46 | [package.extras] 47 | benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] 48 | cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] 49 | dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] 50 | docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] 51 | tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] 52 | tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] 53 | 54 | [[package]] 55 | name = "black" 56 | version = "20.8b1" 57 | description = "The uncompromising code formatter." 58 | optional = false 59 | python-versions = ">=3.6" 60 | files = [ 61 | {file = "black-20.8b1.tar.gz", hash = "sha256:1c02557aa099101b9d21496f8a914e9ed2222ef70336404eeeac8edba836fbea"}, 62 | ] 63 | 64 | [package.dependencies] 65 | appdirs = "*" 66 | click = ">=7.1.2" 67 | mypy-extensions = ">=0.4.3" 68 | pathspec = ">=0.6,<1" 69 | regex = ">=2020.1.8" 70 | toml = ">=0.10.1" 71 | typed-ast = ">=1.4.0" 72 | typing-extensions = ">=3.7.4" 73 | 74 | [package.extras] 75 | colorama = ["colorama (>=0.4.3)"] 76 | d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] 77 | 78 | [[package]] 79 | name = "boto3-stubs" 80 | version = "1.35.14" 81 | description = "Type annotations for boto3 1.35.14 generated with mypy-boto3-builder 8.0.1" 82 | optional = false 83 | python-versions = ">=3.8" 84 | files = [ 85 | {file = "boto3_stubs-1.35.14-py3-none-any.whl", hash = "sha256:c9b3c92b5b9b1278ca03bbb942075c5f9378f4bd26d7bce3ab1068246b088928"}, 86 | {file = "boto3_stubs-1.35.14.tar.gz", hash = "sha256:cfa0d7189862cbd02c6cef1c6ce597728340056687547e8a2c50d2033bf979b6"}, 87 | ] 88 | 89 | [package.dependencies] 90 | botocore-stubs = "*" 91 | types-s3transfer = "*" 92 | typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.12\""} 93 | 94 | [package.extras] 95 | accessanalyzer = ["mypy-boto3-accessanalyzer (>=1.35.0,<1.36.0)"] 96 | account = ["mypy-boto3-account (>=1.35.0,<1.36.0)"] 97 | acm = ["mypy-boto3-acm (>=1.35.0,<1.36.0)"] 98 | acm-pca = ["mypy-boto3-acm-pca (>=1.35.0,<1.36.0)"] 99 | all = ["mypy-boto3-accessanalyzer (>=1.35.0,<1.36.0)", "mypy-boto3-account (>=1.35.0,<1.36.0)", "mypy-boto3-acm (>=1.35.0,<1.36.0)", "mypy-boto3-acm-pca (>=1.35.0,<1.36.0)", "mypy-boto3-amp (>=1.35.0,<1.36.0)", "mypy-boto3-amplify (>=1.35.0,<1.36.0)", "mypy-boto3-amplifybackend (>=1.35.0,<1.36.0)", "mypy-boto3-amplifyuibuilder (>=1.35.0,<1.36.0)", "mypy-boto3-apigateway (>=1.35.0,<1.36.0)", "mypy-boto3-apigatewaymanagementapi (>=1.35.0,<1.36.0)", "mypy-boto3-apigatewayv2 (>=1.35.0,<1.36.0)", "mypy-boto3-appconfig (>=1.35.0,<1.36.0)", "mypy-boto3-appconfigdata (>=1.35.0,<1.36.0)", "mypy-boto3-appfabric (>=1.35.0,<1.36.0)", "mypy-boto3-appflow (>=1.35.0,<1.36.0)", "mypy-boto3-appintegrations (>=1.35.0,<1.36.0)", "mypy-boto3-application-autoscaling (>=1.35.0,<1.36.0)", "mypy-boto3-application-insights (>=1.35.0,<1.36.0)", "mypy-boto3-application-signals (>=1.35.0,<1.36.0)", "mypy-boto3-applicationcostprofiler (>=1.35.0,<1.36.0)", "mypy-boto3-appmesh (>=1.35.0,<1.36.0)", "mypy-boto3-apprunner (>=1.35.0,<1.36.0)", "mypy-boto3-appstream (>=1.35.0,<1.36.0)", "mypy-boto3-appsync (>=1.35.0,<1.36.0)", "mypy-boto3-apptest (>=1.35.0,<1.36.0)", "mypy-boto3-arc-zonal-shift (>=1.35.0,<1.36.0)", "mypy-boto3-artifact (>=1.35.0,<1.36.0)", "mypy-boto3-athena (>=1.35.0,<1.36.0)", "mypy-boto3-auditmanager (>=1.35.0,<1.36.0)", "mypy-boto3-autoscaling (>=1.35.0,<1.36.0)", "mypy-boto3-autoscaling-plans (>=1.35.0,<1.36.0)", "mypy-boto3-b2bi (>=1.35.0,<1.36.0)", "mypy-boto3-backup (>=1.35.0,<1.36.0)", "mypy-boto3-backup-gateway (>=1.35.0,<1.36.0)", "mypy-boto3-batch (>=1.35.0,<1.36.0)", "mypy-boto3-bcm-data-exports (>=1.35.0,<1.36.0)", "mypy-boto3-bedrock (>=1.35.0,<1.36.0)", "mypy-boto3-bedrock-agent (>=1.35.0,<1.36.0)", "mypy-boto3-bedrock-agent-runtime (>=1.35.0,<1.36.0)", "mypy-boto3-bedrock-runtime (>=1.35.0,<1.36.0)", "mypy-boto3-billingconductor (>=1.35.0,<1.36.0)", "mypy-boto3-braket (>=1.35.0,<1.36.0)", "mypy-boto3-budgets (>=1.35.0,<1.36.0)", "mypy-boto3-ce (>=1.35.0,<1.36.0)", "mypy-boto3-chatbot (>=1.35.0,<1.36.0)", "mypy-boto3-chime (>=1.35.0,<1.36.0)", "mypy-boto3-chime-sdk-identity (>=1.35.0,<1.36.0)", "mypy-boto3-chime-sdk-media-pipelines (>=1.35.0,<1.36.0)", "mypy-boto3-chime-sdk-meetings (>=1.35.0,<1.36.0)", "mypy-boto3-chime-sdk-messaging (>=1.35.0,<1.36.0)", "mypy-boto3-chime-sdk-voice (>=1.35.0,<1.36.0)", "mypy-boto3-cleanrooms (>=1.35.0,<1.36.0)", "mypy-boto3-cleanroomsml (>=1.35.0,<1.36.0)", "mypy-boto3-cloud9 (>=1.35.0,<1.36.0)", "mypy-boto3-cloudcontrol (>=1.35.0,<1.36.0)", "mypy-boto3-clouddirectory (>=1.35.0,<1.36.0)", "mypy-boto3-cloudformation (>=1.35.0,<1.36.0)", "mypy-boto3-cloudfront (>=1.35.0,<1.36.0)", "mypy-boto3-cloudfront-keyvaluestore (>=1.35.0,<1.36.0)", "mypy-boto3-cloudhsm (>=1.35.0,<1.36.0)", "mypy-boto3-cloudhsmv2 (>=1.35.0,<1.36.0)", "mypy-boto3-cloudsearch (>=1.35.0,<1.36.0)", "mypy-boto3-cloudsearchdomain (>=1.35.0,<1.36.0)", "mypy-boto3-cloudtrail (>=1.35.0,<1.36.0)", "mypy-boto3-cloudtrail-data (>=1.35.0,<1.36.0)", "mypy-boto3-cloudwatch (>=1.35.0,<1.36.0)", "mypy-boto3-codeartifact (>=1.35.0,<1.36.0)", "mypy-boto3-codebuild (>=1.35.0,<1.36.0)", "mypy-boto3-codecatalyst (>=1.35.0,<1.36.0)", "mypy-boto3-codecommit (>=1.35.0,<1.36.0)", "mypy-boto3-codeconnections (>=1.35.0,<1.36.0)", "mypy-boto3-codedeploy (>=1.35.0,<1.36.0)", "mypy-boto3-codeguru-reviewer (>=1.35.0,<1.36.0)", "mypy-boto3-codeguru-security (>=1.35.0,<1.36.0)", "mypy-boto3-codeguruprofiler (>=1.35.0,<1.36.0)", "mypy-boto3-codepipeline (>=1.35.0,<1.36.0)", "mypy-boto3-codestar-connections (>=1.35.0,<1.36.0)", "mypy-boto3-codestar-notifications (>=1.35.0,<1.36.0)", "mypy-boto3-cognito-identity (>=1.35.0,<1.36.0)", "mypy-boto3-cognito-idp (>=1.35.0,<1.36.0)", "mypy-boto3-cognito-sync (>=1.35.0,<1.36.0)", "mypy-boto3-comprehend (>=1.35.0,<1.36.0)", "mypy-boto3-comprehendmedical (>=1.35.0,<1.36.0)", "mypy-boto3-compute-optimizer (>=1.35.0,<1.36.0)", "mypy-boto3-config (>=1.35.0,<1.36.0)", "mypy-boto3-connect (>=1.35.0,<1.36.0)", "mypy-boto3-connect-contact-lens (>=1.35.0,<1.36.0)", "mypy-boto3-connectcampaigns (>=1.35.0,<1.36.0)", "mypy-boto3-connectcases (>=1.35.0,<1.36.0)", "mypy-boto3-connectparticipant (>=1.35.0,<1.36.0)", "mypy-boto3-controlcatalog (>=1.35.0,<1.36.0)", "mypy-boto3-controltower (>=1.35.0,<1.36.0)", "mypy-boto3-cost-optimization-hub (>=1.35.0,<1.36.0)", "mypy-boto3-cur (>=1.35.0,<1.36.0)", "mypy-boto3-customer-profiles (>=1.35.0,<1.36.0)", "mypy-boto3-databrew (>=1.35.0,<1.36.0)", "mypy-boto3-dataexchange (>=1.35.0,<1.36.0)", "mypy-boto3-datapipeline (>=1.35.0,<1.36.0)", "mypy-boto3-datasync (>=1.35.0,<1.36.0)", "mypy-boto3-datazone (>=1.35.0,<1.36.0)", "mypy-boto3-dax (>=1.35.0,<1.36.0)", "mypy-boto3-deadline (>=1.35.0,<1.36.0)", "mypy-boto3-detective (>=1.35.0,<1.36.0)", "mypy-boto3-devicefarm (>=1.35.0,<1.36.0)", "mypy-boto3-devops-guru (>=1.35.0,<1.36.0)", "mypy-boto3-directconnect (>=1.35.0,<1.36.0)", "mypy-boto3-discovery (>=1.35.0,<1.36.0)", "mypy-boto3-dlm (>=1.35.0,<1.36.0)", "mypy-boto3-dms (>=1.35.0,<1.36.0)", "mypy-boto3-docdb (>=1.35.0,<1.36.0)", "mypy-boto3-docdb-elastic (>=1.35.0,<1.36.0)", "mypy-boto3-drs (>=1.35.0,<1.36.0)", "mypy-boto3-ds (>=1.35.0,<1.36.0)", "mypy-boto3-dynamodb (>=1.35.0,<1.36.0)", "mypy-boto3-dynamodbstreams (>=1.35.0,<1.36.0)", "mypy-boto3-ebs (>=1.35.0,<1.36.0)", "mypy-boto3-ec2 (>=1.35.0,<1.36.0)", "mypy-boto3-ec2-instance-connect (>=1.35.0,<1.36.0)", "mypy-boto3-ecr (>=1.35.0,<1.36.0)", "mypy-boto3-ecr-public (>=1.35.0,<1.36.0)", "mypy-boto3-ecs (>=1.35.0,<1.36.0)", "mypy-boto3-efs (>=1.35.0,<1.36.0)", "mypy-boto3-eks (>=1.35.0,<1.36.0)", "mypy-boto3-eks-auth (>=1.35.0,<1.36.0)", "mypy-boto3-elastic-inference (>=1.35.0,<1.36.0)", "mypy-boto3-elasticache (>=1.35.0,<1.36.0)", "mypy-boto3-elasticbeanstalk (>=1.35.0,<1.36.0)", "mypy-boto3-elastictranscoder (>=1.35.0,<1.36.0)", "mypy-boto3-elb (>=1.35.0,<1.36.0)", "mypy-boto3-elbv2 (>=1.35.0,<1.36.0)", "mypy-boto3-emr (>=1.35.0,<1.36.0)", "mypy-boto3-emr-containers (>=1.35.0,<1.36.0)", "mypy-boto3-emr-serverless (>=1.35.0,<1.36.0)", "mypy-boto3-entityresolution (>=1.35.0,<1.36.0)", "mypy-boto3-es (>=1.35.0,<1.36.0)", "mypy-boto3-events (>=1.35.0,<1.36.0)", "mypy-boto3-evidently (>=1.35.0,<1.36.0)", "mypy-boto3-finspace (>=1.35.0,<1.36.0)", "mypy-boto3-finspace-data (>=1.35.0,<1.36.0)", "mypy-boto3-firehose (>=1.35.0,<1.36.0)", "mypy-boto3-fis (>=1.35.0,<1.36.0)", "mypy-boto3-fms (>=1.35.0,<1.36.0)", "mypy-boto3-forecast (>=1.35.0,<1.36.0)", "mypy-boto3-forecastquery (>=1.35.0,<1.36.0)", "mypy-boto3-frauddetector (>=1.35.0,<1.36.0)", "mypy-boto3-freetier (>=1.35.0,<1.36.0)", "mypy-boto3-fsx (>=1.35.0,<1.36.0)", "mypy-boto3-gamelift (>=1.35.0,<1.36.0)", "mypy-boto3-glacier (>=1.35.0,<1.36.0)", "mypy-boto3-globalaccelerator (>=1.35.0,<1.36.0)", "mypy-boto3-glue (>=1.35.0,<1.36.0)", "mypy-boto3-grafana (>=1.35.0,<1.36.0)", "mypy-boto3-greengrass (>=1.35.0,<1.36.0)", "mypy-boto3-greengrassv2 (>=1.35.0,<1.36.0)", "mypy-boto3-groundstation (>=1.35.0,<1.36.0)", "mypy-boto3-guardduty (>=1.35.0,<1.36.0)", "mypy-boto3-health (>=1.35.0,<1.36.0)", "mypy-boto3-healthlake (>=1.35.0,<1.36.0)", "mypy-boto3-iam (>=1.35.0,<1.36.0)", "mypy-boto3-identitystore (>=1.35.0,<1.36.0)", "mypy-boto3-imagebuilder (>=1.35.0,<1.36.0)", "mypy-boto3-importexport (>=1.35.0,<1.36.0)", "mypy-boto3-inspector (>=1.35.0,<1.36.0)", "mypy-boto3-inspector-scan (>=1.35.0,<1.36.0)", "mypy-boto3-inspector2 (>=1.35.0,<1.36.0)", "mypy-boto3-internetmonitor (>=1.35.0,<1.36.0)", "mypy-boto3-iot (>=1.35.0,<1.36.0)", "mypy-boto3-iot-data (>=1.35.0,<1.36.0)", "mypy-boto3-iot-jobs-data (>=1.35.0,<1.36.0)", "mypy-boto3-iot1click-devices (>=1.35.0,<1.36.0)", "mypy-boto3-iot1click-projects (>=1.35.0,<1.36.0)", "mypy-boto3-iotanalytics (>=1.35.0,<1.36.0)", "mypy-boto3-iotdeviceadvisor (>=1.35.0,<1.36.0)", "mypy-boto3-iotevents (>=1.35.0,<1.36.0)", "mypy-boto3-iotevents-data (>=1.35.0,<1.36.0)", "mypy-boto3-iotfleethub (>=1.35.0,<1.36.0)", "mypy-boto3-iotfleetwise (>=1.35.0,<1.36.0)", "mypy-boto3-iotsecuretunneling (>=1.35.0,<1.36.0)", "mypy-boto3-iotsitewise (>=1.35.0,<1.36.0)", "mypy-boto3-iotthingsgraph (>=1.35.0,<1.36.0)", "mypy-boto3-iottwinmaker (>=1.35.0,<1.36.0)", "mypy-boto3-iotwireless (>=1.35.0,<1.36.0)", "mypy-boto3-ivs (>=1.35.0,<1.36.0)", "mypy-boto3-ivs-realtime (>=1.35.0,<1.36.0)", "mypy-boto3-ivschat (>=1.35.0,<1.36.0)", "mypy-boto3-kafka (>=1.35.0,<1.36.0)", "mypy-boto3-kafkaconnect (>=1.35.0,<1.36.0)", "mypy-boto3-kendra (>=1.35.0,<1.36.0)", "mypy-boto3-kendra-ranking (>=1.35.0,<1.36.0)", "mypy-boto3-keyspaces (>=1.35.0,<1.36.0)", "mypy-boto3-kinesis (>=1.35.0,<1.36.0)", "mypy-boto3-kinesis-video-archived-media (>=1.35.0,<1.36.0)", "mypy-boto3-kinesis-video-media (>=1.35.0,<1.36.0)", "mypy-boto3-kinesis-video-signaling (>=1.35.0,<1.36.0)", "mypy-boto3-kinesis-video-webrtc-storage (>=1.35.0,<1.36.0)", "mypy-boto3-kinesisanalytics (>=1.35.0,<1.36.0)", "mypy-boto3-kinesisanalyticsv2 (>=1.35.0,<1.36.0)", "mypy-boto3-kinesisvideo (>=1.35.0,<1.36.0)", "mypy-boto3-kms (>=1.35.0,<1.36.0)", "mypy-boto3-lakeformation (>=1.35.0,<1.36.0)", "mypy-boto3-lambda (>=1.35.0,<1.36.0)", "mypy-boto3-launch-wizard (>=1.35.0,<1.36.0)", "mypy-boto3-lex-models (>=1.35.0,<1.36.0)", "mypy-boto3-lex-runtime (>=1.35.0,<1.36.0)", "mypy-boto3-lexv2-models (>=1.35.0,<1.36.0)", "mypy-boto3-lexv2-runtime (>=1.35.0,<1.36.0)", "mypy-boto3-license-manager (>=1.35.0,<1.36.0)", "mypy-boto3-license-manager-linux-subscriptions (>=1.35.0,<1.36.0)", "mypy-boto3-license-manager-user-subscriptions (>=1.35.0,<1.36.0)", "mypy-boto3-lightsail (>=1.35.0,<1.36.0)", "mypy-boto3-location (>=1.35.0,<1.36.0)", "mypy-boto3-logs (>=1.35.0,<1.36.0)", "mypy-boto3-lookoutequipment (>=1.35.0,<1.36.0)", "mypy-boto3-lookoutmetrics (>=1.35.0,<1.36.0)", "mypy-boto3-lookoutvision (>=1.35.0,<1.36.0)", "mypy-boto3-m2 (>=1.35.0,<1.36.0)", "mypy-boto3-machinelearning (>=1.35.0,<1.36.0)", "mypy-boto3-macie2 (>=1.35.0,<1.36.0)", "mypy-boto3-mailmanager (>=1.35.0,<1.36.0)", "mypy-boto3-managedblockchain (>=1.35.0,<1.36.0)", "mypy-boto3-managedblockchain-query (>=1.35.0,<1.36.0)", "mypy-boto3-marketplace-agreement (>=1.35.0,<1.36.0)", "mypy-boto3-marketplace-catalog (>=1.35.0,<1.36.0)", "mypy-boto3-marketplace-deployment (>=1.35.0,<1.36.0)", "mypy-boto3-marketplace-entitlement (>=1.35.0,<1.36.0)", "mypy-boto3-marketplacecommerceanalytics (>=1.35.0,<1.36.0)", "mypy-boto3-mediaconnect (>=1.35.0,<1.36.0)", "mypy-boto3-mediaconvert (>=1.35.0,<1.36.0)", "mypy-boto3-medialive (>=1.35.0,<1.36.0)", "mypy-boto3-mediapackage (>=1.35.0,<1.36.0)", "mypy-boto3-mediapackage-vod (>=1.35.0,<1.36.0)", "mypy-boto3-mediapackagev2 (>=1.35.0,<1.36.0)", "mypy-boto3-mediastore (>=1.35.0,<1.36.0)", "mypy-boto3-mediastore-data (>=1.35.0,<1.36.0)", "mypy-boto3-mediatailor (>=1.35.0,<1.36.0)", "mypy-boto3-medical-imaging (>=1.35.0,<1.36.0)", "mypy-boto3-memorydb (>=1.35.0,<1.36.0)", "mypy-boto3-meteringmarketplace (>=1.35.0,<1.36.0)", "mypy-boto3-mgh (>=1.35.0,<1.36.0)", "mypy-boto3-mgn (>=1.35.0,<1.36.0)", "mypy-boto3-migration-hub-refactor-spaces (>=1.35.0,<1.36.0)", "mypy-boto3-migrationhub-config (>=1.35.0,<1.36.0)", "mypy-boto3-migrationhuborchestrator (>=1.35.0,<1.36.0)", "mypy-boto3-migrationhubstrategy (>=1.35.0,<1.36.0)", "mypy-boto3-mq (>=1.35.0,<1.36.0)", "mypy-boto3-mturk (>=1.35.0,<1.36.0)", "mypy-boto3-mwaa (>=1.35.0,<1.36.0)", "mypy-boto3-neptune (>=1.35.0,<1.36.0)", "mypy-boto3-neptune-graph (>=1.35.0,<1.36.0)", "mypy-boto3-neptunedata (>=1.35.0,<1.36.0)", "mypy-boto3-network-firewall (>=1.35.0,<1.36.0)", "mypy-boto3-networkmanager (>=1.35.0,<1.36.0)", "mypy-boto3-networkmonitor (>=1.35.0,<1.36.0)", "mypy-boto3-nimble (>=1.35.0,<1.36.0)", "mypy-boto3-oam (>=1.35.0,<1.36.0)", "mypy-boto3-omics (>=1.35.0,<1.36.0)", "mypy-boto3-opensearch (>=1.35.0,<1.36.0)", "mypy-boto3-opensearchserverless (>=1.35.0,<1.36.0)", "mypy-boto3-opsworks (>=1.35.0,<1.36.0)", "mypy-boto3-opsworkscm (>=1.35.0,<1.36.0)", "mypy-boto3-organizations (>=1.35.0,<1.36.0)", "mypy-boto3-osis (>=1.35.0,<1.36.0)", "mypy-boto3-outposts (>=1.35.0,<1.36.0)", "mypy-boto3-panorama (>=1.35.0,<1.36.0)", "mypy-boto3-payment-cryptography (>=1.35.0,<1.36.0)", "mypy-boto3-payment-cryptography-data (>=1.35.0,<1.36.0)", "mypy-boto3-pca-connector-ad (>=1.35.0,<1.36.0)", "mypy-boto3-pca-connector-scep (>=1.35.0,<1.36.0)", "mypy-boto3-pcs (>=1.35.0,<1.36.0)", "mypy-boto3-personalize (>=1.35.0,<1.36.0)", "mypy-boto3-personalize-events (>=1.35.0,<1.36.0)", "mypy-boto3-personalize-runtime (>=1.35.0,<1.36.0)", "mypy-boto3-pi (>=1.35.0,<1.36.0)", "mypy-boto3-pinpoint (>=1.35.0,<1.36.0)", "mypy-boto3-pinpoint-email (>=1.35.0,<1.36.0)", "mypy-boto3-pinpoint-sms-voice (>=1.35.0,<1.36.0)", "mypy-boto3-pinpoint-sms-voice-v2 (>=1.35.0,<1.36.0)", "mypy-boto3-pipes (>=1.35.0,<1.36.0)", "mypy-boto3-polly (>=1.35.0,<1.36.0)", "mypy-boto3-pricing (>=1.35.0,<1.36.0)", "mypy-boto3-privatenetworks (>=1.35.0,<1.36.0)", "mypy-boto3-proton (>=1.35.0,<1.36.0)", "mypy-boto3-qapps (>=1.35.0,<1.36.0)", "mypy-boto3-qbusiness (>=1.35.0,<1.36.0)", "mypy-boto3-qconnect (>=1.35.0,<1.36.0)", "mypy-boto3-qldb (>=1.35.0,<1.36.0)", "mypy-boto3-qldb-session (>=1.35.0,<1.36.0)", "mypy-boto3-quicksight (>=1.35.0,<1.36.0)", "mypy-boto3-ram (>=1.35.0,<1.36.0)", "mypy-boto3-rbin (>=1.35.0,<1.36.0)", "mypy-boto3-rds (>=1.35.0,<1.36.0)", "mypy-boto3-rds-data (>=1.35.0,<1.36.0)", "mypy-boto3-redshift (>=1.35.0,<1.36.0)", "mypy-boto3-redshift-data (>=1.35.0,<1.36.0)", "mypy-boto3-redshift-serverless (>=1.35.0,<1.36.0)", "mypy-boto3-rekognition (>=1.35.0,<1.36.0)", "mypy-boto3-repostspace (>=1.35.0,<1.36.0)", "mypy-boto3-resiliencehub (>=1.35.0,<1.36.0)", "mypy-boto3-resource-explorer-2 (>=1.35.0,<1.36.0)", "mypy-boto3-resource-groups (>=1.35.0,<1.36.0)", "mypy-boto3-resourcegroupstaggingapi (>=1.35.0,<1.36.0)", "mypy-boto3-robomaker (>=1.35.0,<1.36.0)", "mypy-boto3-rolesanywhere (>=1.35.0,<1.36.0)", "mypy-boto3-route53 (>=1.35.0,<1.36.0)", "mypy-boto3-route53-recovery-cluster (>=1.35.0,<1.36.0)", "mypy-boto3-route53-recovery-control-config (>=1.35.0,<1.36.0)", "mypy-boto3-route53-recovery-readiness (>=1.35.0,<1.36.0)", "mypy-boto3-route53domains (>=1.35.0,<1.36.0)", "mypy-boto3-route53profiles (>=1.35.0,<1.36.0)", "mypy-boto3-route53resolver (>=1.35.0,<1.36.0)", "mypy-boto3-rum (>=1.35.0,<1.36.0)", "mypy-boto3-s3 (>=1.35.0,<1.36.0)", "mypy-boto3-s3control (>=1.35.0,<1.36.0)", "mypy-boto3-s3outposts (>=1.35.0,<1.36.0)", "mypy-boto3-sagemaker (>=1.35.0,<1.36.0)", "mypy-boto3-sagemaker-a2i-runtime (>=1.35.0,<1.36.0)", "mypy-boto3-sagemaker-edge (>=1.35.0,<1.36.0)", "mypy-boto3-sagemaker-featurestore-runtime (>=1.35.0,<1.36.0)", "mypy-boto3-sagemaker-geospatial (>=1.35.0,<1.36.0)", "mypy-boto3-sagemaker-metrics (>=1.35.0,<1.36.0)", "mypy-boto3-sagemaker-runtime (>=1.35.0,<1.36.0)", "mypy-boto3-savingsplans (>=1.35.0,<1.36.0)", "mypy-boto3-scheduler (>=1.35.0,<1.36.0)", "mypy-boto3-schemas (>=1.35.0,<1.36.0)", "mypy-boto3-sdb (>=1.35.0,<1.36.0)", "mypy-boto3-secretsmanager (>=1.35.0,<1.36.0)", "mypy-boto3-securityhub (>=1.35.0,<1.36.0)", "mypy-boto3-securitylake (>=1.35.0,<1.36.0)", "mypy-boto3-serverlessrepo (>=1.35.0,<1.36.0)", "mypy-boto3-service-quotas (>=1.35.0,<1.36.0)", "mypy-boto3-servicecatalog (>=1.35.0,<1.36.0)", "mypy-boto3-servicecatalog-appregistry (>=1.35.0,<1.36.0)", "mypy-boto3-servicediscovery (>=1.35.0,<1.36.0)", "mypy-boto3-ses (>=1.35.0,<1.36.0)", "mypy-boto3-sesv2 (>=1.35.0,<1.36.0)", "mypy-boto3-shield (>=1.35.0,<1.36.0)", "mypy-boto3-signer (>=1.35.0,<1.36.0)", "mypy-boto3-simspaceweaver (>=1.35.0,<1.36.0)", "mypy-boto3-sms (>=1.35.0,<1.36.0)", "mypy-boto3-sms-voice (>=1.35.0,<1.36.0)", "mypy-boto3-snow-device-management (>=1.35.0,<1.36.0)", "mypy-boto3-snowball (>=1.35.0,<1.36.0)", "mypy-boto3-sns (>=1.35.0,<1.36.0)", "mypy-boto3-sqs (>=1.35.0,<1.36.0)", "mypy-boto3-ssm (>=1.35.0,<1.36.0)", "mypy-boto3-ssm-contacts (>=1.35.0,<1.36.0)", "mypy-boto3-ssm-incidents (>=1.35.0,<1.36.0)", "mypy-boto3-ssm-quicksetup (>=1.35.0,<1.36.0)", "mypy-boto3-ssm-sap (>=1.35.0,<1.36.0)", "mypy-boto3-sso (>=1.35.0,<1.36.0)", "mypy-boto3-sso-admin (>=1.35.0,<1.36.0)", "mypy-boto3-sso-oidc (>=1.35.0,<1.36.0)", "mypy-boto3-stepfunctions (>=1.35.0,<1.36.0)", "mypy-boto3-storagegateway (>=1.35.0,<1.36.0)", "mypy-boto3-sts (>=1.35.0,<1.36.0)", "mypy-boto3-supplychain (>=1.35.0,<1.36.0)", "mypy-boto3-support (>=1.35.0,<1.36.0)", "mypy-boto3-support-app (>=1.35.0,<1.36.0)", "mypy-boto3-swf (>=1.35.0,<1.36.0)", "mypy-boto3-synthetics (>=1.35.0,<1.36.0)", "mypy-boto3-taxsettings (>=1.35.0,<1.36.0)", "mypy-boto3-textract (>=1.35.0,<1.36.0)", "mypy-boto3-timestream-influxdb (>=1.35.0,<1.36.0)", "mypy-boto3-timestream-query (>=1.35.0,<1.36.0)", "mypy-boto3-timestream-write (>=1.35.0,<1.36.0)", "mypy-boto3-tnb (>=1.35.0,<1.36.0)", "mypy-boto3-transcribe (>=1.35.0,<1.36.0)", "mypy-boto3-transfer (>=1.35.0,<1.36.0)", "mypy-boto3-translate (>=1.35.0,<1.36.0)", "mypy-boto3-trustedadvisor (>=1.35.0,<1.36.0)", "mypy-boto3-verifiedpermissions (>=1.35.0,<1.36.0)", "mypy-boto3-voice-id (>=1.35.0,<1.36.0)", "mypy-boto3-vpc-lattice (>=1.35.0,<1.36.0)", "mypy-boto3-waf (>=1.35.0,<1.36.0)", "mypy-boto3-waf-regional (>=1.35.0,<1.36.0)", "mypy-boto3-wafv2 (>=1.35.0,<1.36.0)", "mypy-boto3-wellarchitected (>=1.35.0,<1.36.0)", "mypy-boto3-wisdom (>=1.35.0,<1.36.0)", "mypy-boto3-workdocs (>=1.35.0,<1.36.0)", "mypy-boto3-worklink (>=1.35.0,<1.36.0)", "mypy-boto3-workmail (>=1.35.0,<1.36.0)", "mypy-boto3-workmailmessageflow (>=1.35.0,<1.36.0)", "mypy-boto3-workspaces (>=1.35.0,<1.36.0)", "mypy-boto3-workspaces-thin-client (>=1.35.0,<1.36.0)", "mypy-boto3-workspaces-web (>=1.35.0,<1.36.0)", "mypy-boto3-xray (>=1.35.0,<1.36.0)"] 100 | amp = ["mypy-boto3-amp (>=1.35.0,<1.36.0)"] 101 | amplify = ["mypy-boto3-amplify (>=1.35.0,<1.36.0)"] 102 | amplifybackend = ["mypy-boto3-amplifybackend (>=1.35.0,<1.36.0)"] 103 | amplifyuibuilder = ["mypy-boto3-amplifyuibuilder (>=1.35.0,<1.36.0)"] 104 | apigateway = ["mypy-boto3-apigateway (>=1.35.0,<1.36.0)"] 105 | apigatewaymanagementapi = ["mypy-boto3-apigatewaymanagementapi (>=1.35.0,<1.36.0)"] 106 | apigatewayv2 = ["mypy-boto3-apigatewayv2 (>=1.35.0,<1.36.0)"] 107 | appconfig = ["mypy-boto3-appconfig (>=1.35.0,<1.36.0)"] 108 | appconfigdata = ["mypy-boto3-appconfigdata (>=1.35.0,<1.36.0)"] 109 | appfabric = ["mypy-boto3-appfabric (>=1.35.0,<1.36.0)"] 110 | appflow = ["mypy-boto3-appflow (>=1.35.0,<1.36.0)"] 111 | appintegrations = ["mypy-boto3-appintegrations (>=1.35.0,<1.36.0)"] 112 | application-autoscaling = ["mypy-boto3-application-autoscaling (>=1.35.0,<1.36.0)"] 113 | application-insights = ["mypy-boto3-application-insights (>=1.35.0,<1.36.0)"] 114 | application-signals = ["mypy-boto3-application-signals (>=1.35.0,<1.36.0)"] 115 | applicationcostprofiler = ["mypy-boto3-applicationcostprofiler (>=1.35.0,<1.36.0)"] 116 | appmesh = ["mypy-boto3-appmesh (>=1.35.0,<1.36.0)"] 117 | apprunner = ["mypy-boto3-apprunner (>=1.35.0,<1.36.0)"] 118 | appstream = ["mypy-boto3-appstream (>=1.35.0,<1.36.0)"] 119 | appsync = ["mypy-boto3-appsync (>=1.35.0,<1.36.0)"] 120 | apptest = ["mypy-boto3-apptest (>=1.35.0,<1.36.0)"] 121 | arc-zonal-shift = ["mypy-boto3-arc-zonal-shift (>=1.35.0,<1.36.0)"] 122 | artifact = ["mypy-boto3-artifact (>=1.35.0,<1.36.0)"] 123 | athena = ["mypy-boto3-athena (>=1.35.0,<1.36.0)"] 124 | auditmanager = ["mypy-boto3-auditmanager (>=1.35.0,<1.36.0)"] 125 | autoscaling = ["mypy-boto3-autoscaling (>=1.35.0,<1.36.0)"] 126 | autoscaling-plans = ["mypy-boto3-autoscaling-plans (>=1.35.0,<1.36.0)"] 127 | b2bi = ["mypy-boto3-b2bi (>=1.35.0,<1.36.0)"] 128 | backup = ["mypy-boto3-backup (>=1.35.0,<1.36.0)"] 129 | backup-gateway = ["mypy-boto3-backup-gateway (>=1.35.0,<1.36.0)"] 130 | batch = ["mypy-boto3-batch (>=1.35.0,<1.36.0)"] 131 | bcm-data-exports = ["mypy-boto3-bcm-data-exports (>=1.35.0,<1.36.0)"] 132 | bedrock = ["mypy-boto3-bedrock (>=1.35.0,<1.36.0)"] 133 | bedrock-agent = ["mypy-boto3-bedrock-agent (>=1.35.0,<1.36.0)"] 134 | bedrock-agent-runtime = ["mypy-boto3-bedrock-agent-runtime (>=1.35.0,<1.36.0)"] 135 | bedrock-runtime = ["mypy-boto3-bedrock-runtime (>=1.35.0,<1.36.0)"] 136 | billingconductor = ["mypy-boto3-billingconductor (>=1.35.0,<1.36.0)"] 137 | boto3 = ["boto3 (==1.35.14)", "botocore (==1.35.14)"] 138 | braket = ["mypy-boto3-braket (>=1.35.0,<1.36.0)"] 139 | budgets = ["mypy-boto3-budgets (>=1.35.0,<1.36.0)"] 140 | ce = ["mypy-boto3-ce (>=1.35.0,<1.36.0)"] 141 | chatbot = ["mypy-boto3-chatbot (>=1.35.0,<1.36.0)"] 142 | chime = ["mypy-boto3-chime (>=1.35.0,<1.36.0)"] 143 | chime-sdk-identity = ["mypy-boto3-chime-sdk-identity (>=1.35.0,<1.36.0)"] 144 | chime-sdk-media-pipelines = ["mypy-boto3-chime-sdk-media-pipelines (>=1.35.0,<1.36.0)"] 145 | chime-sdk-meetings = ["mypy-boto3-chime-sdk-meetings (>=1.35.0,<1.36.0)"] 146 | chime-sdk-messaging = ["mypy-boto3-chime-sdk-messaging (>=1.35.0,<1.36.0)"] 147 | chime-sdk-voice = ["mypy-boto3-chime-sdk-voice (>=1.35.0,<1.36.0)"] 148 | cleanrooms = ["mypy-boto3-cleanrooms (>=1.35.0,<1.36.0)"] 149 | cleanroomsml = ["mypy-boto3-cleanroomsml (>=1.35.0,<1.36.0)"] 150 | cloud9 = ["mypy-boto3-cloud9 (>=1.35.0,<1.36.0)"] 151 | cloudcontrol = ["mypy-boto3-cloudcontrol (>=1.35.0,<1.36.0)"] 152 | clouddirectory = ["mypy-boto3-clouddirectory (>=1.35.0,<1.36.0)"] 153 | cloudformation = ["mypy-boto3-cloudformation (>=1.35.0,<1.36.0)"] 154 | cloudfront = ["mypy-boto3-cloudfront (>=1.35.0,<1.36.0)"] 155 | cloudfront-keyvaluestore = ["mypy-boto3-cloudfront-keyvaluestore (>=1.35.0,<1.36.0)"] 156 | cloudhsm = ["mypy-boto3-cloudhsm (>=1.35.0,<1.36.0)"] 157 | cloudhsmv2 = ["mypy-boto3-cloudhsmv2 (>=1.35.0,<1.36.0)"] 158 | cloudsearch = ["mypy-boto3-cloudsearch (>=1.35.0,<1.36.0)"] 159 | cloudsearchdomain = ["mypy-boto3-cloudsearchdomain (>=1.35.0,<1.36.0)"] 160 | cloudtrail = ["mypy-boto3-cloudtrail (>=1.35.0,<1.36.0)"] 161 | cloudtrail-data = ["mypy-boto3-cloudtrail-data (>=1.35.0,<1.36.0)"] 162 | cloudwatch = ["mypy-boto3-cloudwatch (>=1.35.0,<1.36.0)"] 163 | codeartifact = ["mypy-boto3-codeartifact (>=1.35.0,<1.36.0)"] 164 | codebuild = ["mypy-boto3-codebuild (>=1.35.0,<1.36.0)"] 165 | codecatalyst = ["mypy-boto3-codecatalyst (>=1.35.0,<1.36.0)"] 166 | codecommit = ["mypy-boto3-codecommit (>=1.35.0,<1.36.0)"] 167 | codeconnections = ["mypy-boto3-codeconnections (>=1.35.0,<1.36.0)"] 168 | codedeploy = ["mypy-boto3-codedeploy (>=1.35.0,<1.36.0)"] 169 | codeguru-reviewer = ["mypy-boto3-codeguru-reviewer (>=1.35.0,<1.36.0)"] 170 | codeguru-security = ["mypy-boto3-codeguru-security (>=1.35.0,<1.36.0)"] 171 | codeguruprofiler = ["mypy-boto3-codeguruprofiler (>=1.35.0,<1.36.0)"] 172 | codepipeline = ["mypy-boto3-codepipeline (>=1.35.0,<1.36.0)"] 173 | codestar-connections = ["mypy-boto3-codestar-connections (>=1.35.0,<1.36.0)"] 174 | codestar-notifications = ["mypy-boto3-codestar-notifications (>=1.35.0,<1.36.0)"] 175 | cognito-identity = ["mypy-boto3-cognito-identity (>=1.35.0,<1.36.0)"] 176 | cognito-idp = ["mypy-boto3-cognito-idp (>=1.35.0,<1.36.0)"] 177 | cognito-sync = ["mypy-boto3-cognito-sync (>=1.35.0,<1.36.0)"] 178 | comprehend = ["mypy-boto3-comprehend (>=1.35.0,<1.36.0)"] 179 | comprehendmedical = ["mypy-boto3-comprehendmedical (>=1.35.0,<1.36.0)"] 180 | compute-optimizer = ["mypy-boto3-compute-optimizer (>=1.35.0,<1.36.0)"] 181 | config = ["mypy-boto3-config (>=1.35.0,<1.36.0)"] 182 | connect = ["mypy-boto3-connect (>=1.35.0,<1.36.0)"] 183 | connect-contact-lens = ["mypy-boto3-connect-contact-lens (>=1.35.0,<1.36.0)"] 184 | connectcampaigns = ["mypy-boto3-connectcampaigns (>=1.35.0,<1.36.0)"] 185 | connectcases = ["mypy-boto3-connectcases (>=1.35.0,<1.36.0)"] 186 | connectparticipant = ["mypy-boto3-connectparticipant (>=1.35.0,<1.36.0)"] 187 | controlcatalog = ["mypy-boto3-controlcatalog (>=1.35.0,<1.36.0)"] 188 | controltower = ["mypy-boto3-controltower (>=1.35.0,<1.36.0)"] 189 | cost-optimization-hub = ["mypy-boto3-cost-optimization-hub (>=1.35.0,<1.36.0)"] 190 | cur = ["mypy-boto3-cur (>=1.35.0,<1.36.0)"] 191 | customer-profiles = ["mypy-boto3-customer-profiles (>=1.35.0,<1.36.0)"] 192 | databrew = ["mypy-boto3-databrew (>=1.35.0,<1.36.0)"] 193 | dataexchange = ["mypy-boto3-dataexchange (>=1.35.0,<1.36.0)"] 194 | datapipeline = ["mypy-boto3-datapipeline (>=1.35.0,<1.36.0)"] 195 | datasync = ["mypy-boto3-datasync (>=1.35.0,<1.36.0)"] 196 | datazone = ["mypy-boto3-datazone (>=1.35.0,<1.36.0)"] 197 | dax = ["mypy-boto3-dax (>=1.35.0,<1.36.0)"] 198 | deadline = ["mypy-boto3-deadline (>=1.35.0,<1.36.0)"] 199 | detective = ["mypy-boto3-detective (>=1.35.0,<1.36.0)"] 200 | devicefarm = ["mypy-boto3-devicefarm (>=1.35.0,<1.36.0)"] 201 | devops-guru = ["mypy-boto3-devops-guru (>=1.35.0,<1.36.0)"] 202 | directconnect = ["mypy-boto3-directconnect (>=1.35.0,<1.36.0)"] 203 | discovery = ["mypy-boto3-discovery (>=1.35.0,<1.36.0)"] 204 | dlm = ["mypy-boto3-dlm (>=1.35.0,<1.36.0)"] 205 | dms = ["mypy-boto3-dms (>=1.35.0,<1.36.0)"] 206 | docdb = ["mypy-boto3-docdb (>=1.35.0,<1.36.0)"] 207 | docdb-elastic = ["mypy-boto3-docdb-elastic (>=1.35.0,<1.36.0)"] 208 | drs = ["mypy-boto3-drs (>=1.35.0,<1.36.0)"] 209 | ds = ["mypy-boto3-ds (>=1.35.0,<1.36.0)"] 210 | dynamodb = ["mypy-boto3-dynamodb (>=1.35.0,<1.36.0)"] 211 | dynamodbstreams = ["mypy-boto3-dynamodbstreams (>=1.35.0,<1.36.0)"] 212 | ebs = ["mypy-boto3-ebs (>=1.35.0,<1.36.0)"] 213 | ec2 = ["mypy-boto3-ec2 (>=1.35.0,<1.36.0)"] 214 | ec2-instance-connect = ["mypy-boto3-ec2-instance-connect (>=1.35.0,<1.36.0)"] 215 | ecr = ["mypy-boto3-ecr (>=1.35.0,<1.36.0)"] 216 | ecr-public = ["mypy-boto3-ecr-public (>=1.35.0,<1.36.0)"] 217 | ecs = ["mypy-boto3-ecs (>=1.35.0,<1.36.0)"] 218 | efs = ["mypy-boto3-efs (>=1.35.0,<1.36.0)"] 219 | eks = ["mypy-boto3-eks (>=1.35.0,<1.36.0)"] 220 | eks-auth = ["mypy-boto3-eks-auth (>=1.35.0,<1.36.0)"] 221 | elastic-inference = ["mypy-boto3-elastic-inference (>=1.35.0,<1.36.0)"] 222 | elasticache = ["mypy-boto3-elasticache (>=1.35.0,<1.36.0)"] 223 | elasticbeanstalk = ["mypy-boto3-elasticbeanstalk (>=1.35.0,<1.36.0)"] 224 | elastictranscoder = ["mypy-boto3-elastictranscoder (>=1.35.0,<1.36.0)"] 225 | elb = ["mypy-boto3-elb (>=1.35.0,<1.36.0)"] 226 | elbv2 = ["mypy-boto3-elbv2 (>=1.35.0,<1.36.0)"] 227 | emr = ["mypy-boto3-emr (>=1.35.0,<1.36.0)"] 228 | emr-containers = ["mypy-boto3-emr-containers (>=1.35.0,<1.36.0)"] 229 | emr-serverless = ["mypy-boto3-emr-serverless (>=1.35.0,<1.36.0)"] 230 | entityresolution = ["mypy-boto3-entityresolution (>=1.35.0,<1.36.0)"] 231 | es = ["mypy-boto3-es (>=1.35.0,<1.36.0)"] 232 | essential = ["mypy-boto3-cloudformation (>=1.35.0,<1.36.0)", "mypy-boto3-dynamodb (>=1.35.0,<1.36.0)", "mypy-boto3-ec2 (>=1.35.0,<1.36.0)", "mypy-boto3-lambda (>=1.35.0,<1.36.0)", "mypy-boto3-rds (>=1.35.0,<1.36.0)", "mypy-boto3-s3 (>=1.35.0,<1.36.0)", "mypy-boto3-sqs (>=1.35.0,<1.36.0)"] 233 | events = ["mypy-boto3-events (>=1.35.0,<1.36.0)"] 234 | evidently = ["mypy-boto3-evidently (>=1.35.0,<1.36.0)"] 235 | finspace = ["mypy-boto3-finspace (>=1.35.0,<1.36.0)"] 236 | finspace-data = ["mypy-boto3-finspace-data (>=1.35.0,<1.36.0)"] 237 | firehose = ["mypy-boto3-firehose (>=1.35.0,<1.36.0)"] 238 | fis = ["mypy-boto3-fis (>=1.35.0,<1.36.0)"] 239 | fms = ["mypy-boto3-fms (>=1.35.0,<1.36.0)"] 240 | forecast = ["mypy-boto3-forecast (>=1.35.0,<1.36.0)"] 241 | forecastquery = ["mypy-boto3-forecastquery (>=1.35.0,<1.36.0)"] 242 | frauddetector = ["mypy-boto3-frauddetector (>=1.35.0,<1.36.0)"] 243 | freetier = ["mypy-boto3-freetier (>=1.35.0,<1.36.0)"] 244 | fsx = ["mypy-boto3-fsx (>=1.35.0,<1.36.0)"] 245 | gamelift = ["mypy-boto3-gamelift (>=1.35.0,<1.36.0)"] 246 | glacier = ["mypy-boto3-glacier (>=1.35.0,<1.36.0)"] 247 | globalaccelerator = ["mypy-boto3-globalaccelerator (>=1.35.0,<1.36.0)"] 248 | glue = ["mypy-boto3-glue (>=1.35.0,<1.36.0)"] 249 | grafana = ["mypy-boto3-grafana (>=1.35.0,<1.36.0)"] 250 | greengrass = ["mypy-boto3-greengrass (>=1.35.0,<1.36.0)"] 251 | greengrassv2 = ["mypy-boto3-greengrassv2 (>=1.35.0,<1.36.0)"] 252 | groundstation = ["mypy-boto3-groundstation (>=1.35.0,<1.36.0)"] 253 | guardduty = ["mypy-boto3-guardduty (>=1.35.0,<1.36.0)"] 254 | health = ["mypy-boto3-health (>=1.35.0,<1.36.0)"] 255 | healthlake = ["mypy-boto3-healthlake (>=1.35.0,<1.36.0)"] 256 | iam = ["mypy-boto3-iam (>=1.35.0,<1.36.0)"] 257 | identitystore = ["mypy-boto3-identitystore (>=1.35.0,<1.36.0)"] 258 | imagebuilder = ["mypy-boto3-imagebuilder (>=1.35.0,<1.36.0)"] 259 | importexport = ["mypy-boto3-importexport (>=1.35.0,<1.36.0)"] 260 | inspector = ["mypy-boto3-inspector (>=1.35.0,<1.36.0)"] 261 | inspector-scan = ["mypy-boto3-inspector-scan (>=1.35.0,<1.36.0)"] 262 | inspector2 = ["mypy-boto3-inspector2 (>=1.35.0,<1.36.0)"] 263 | internetmonitor = ["mypy-boto3-internetmonitor (>=1.35.0,<1.36.0)"] 264 | iot = ["mypy-boto3-iot (>=1.35.0,<1.36.0)"] 265 | iot-data = ["mypy-boto3-iot-data (>=1.35.0,<1.36.0)"] 266 | iot-jobs-data = ["mypy-boto3-iot-jobs-data (>=1.35.0,<1.36.0)"] 267 | iot1click-devices = ["mypy-boto3-iot1click-devices (>=1.35.0,<1.36.0)"] 268 | iot1click-projects = ["mypy-boto3-iot1click-projects (>=1.35.0,<1.36.0)"] 269 | iotanalytics = ["mypy-boto3-iotanalytics (>=1.35.0,<1.36.0)"] 270 | iotdeviceadvisor = ["mypy-boto3-iotdeviceadvisor (>=1.35.0,<1.36.0)"] 271 | iotevents = ["mypy-boto3-iotevents (>=1.35.0,<1.36.0)"] 272 | iotevents-data = ["mypy-boto3-iotevents-data (>=1.35.0,<1.36.0)"] 273 | iotfleethub = ["mypy-boto3-iotfleethub (>=1.35.0,<1.36.0)"] 274 | iotfleetwise = ["mypy-boto3-iotfleetwise (>=1.35.0,<1.36.0)"] 275 | iotsecuretunneling = ["mypy-boto3-iotsecuretunneling (>=1.35.0,<1.36.0)"] 276 | iotsitewise = ["mypy-boto3-iotsitewise (>=1.35.0,<1.36.0)"] 277 | iotthingsgraph = ["mypy-boto3-iotthingsgraph (>=1.35.0,<1.36.0)"] 278 | iottwinmaker = ["mypy-boto3-iottwinmaker (>=1.35.0,<1.36.0)"] 279 | iotwireless = ["mypy-boto3-iotwireless (>=1.35.0,<1.36.0)"] 280 | ivs = ["mypy-boto3-ivs (>=1.35.0,<1.36.0)"] 281 | ivs-realtime = ["mypy-boto3-ivs-realtime (>=1.35.0,<1.36.0)"] 282 | ivschat = ["mypy-boto3-ivschat (>=1.35.0,<1.36.0)"] 283 | kafka = ["mypy-boto3-kafka (>=1.35.0,<1.36.0)"] 284 | kafkaconnect = ["mypy-boto3-kafkaconnect (>=1.35.0,<1.36.0)"] 285 | kendra = ["mypy-boto3-kendra (>=1.35.0,<1.36.0)"] 286 | kendra-ranking = ["mypy-boto3-kendra-ranking (>=1.35.0,<1.36.0)"] 287 | keyspaces = ["mypy-boto3-keyspaces (>=1.35.0,<1.36.0)"] 288 | kinesis = ["mypy-boto3-kinesis (>=1.35.0,<1.36.0)"] 289 | kinesis-video-archived-media = ["mypy-boto3-kinesis-video-archived-media (>=1.35.0,<1.36.0)"] 290 | kinesis-video-media = ["mypy-boto3-kinesis-video-media (>=1.35.0,<1.36.0)"] 291 | kinesis-video-signaling = ["mypy-boto3-kinesis-video-signaling (>=1.35.0,<1.36.0)"] 292 | kinesis-video-webrtc-storage = ["mypy-boto3-kinesis-video-webrtc-storage (>=1.35.0,<1.36.0)"] 293 | kinesisanalytics = ["mypy-boto3-kinesisanalytics (>=1.35.0,<1.36.0)"] 294 | kinesisanalyticsv2 = ["mypy-boto3-kinesisanalyticsv2 (>=1.35.0,<1.36.0)"] 295 | kinesisvideo = ["mypy-boto3-kinesisvideo (>=1.35.0,<1.36.0)"] 296 | kms = ["mypy-boto3-kms (>=1.35.0,<1.36.0)"] 297 | lakeformation = ["mypy-boto3-lakeformation (>=1.35.0,<1.36.0)"] 298 | lambda = ["mypy-boto3-lambda (>=1.35.0,<1.36.0)"] 299 | launch-wizard = ["mypy-boto3-launch-wizard (>=1.35.0,<1.36.0)"] 300 | lex-models = ["mypy-boto3-lex-models (>=1.35.0,<1.36.0)"] 301 | lex-runtime = ["mypy-boto3-lex-runtime (>=1.35.0,<1.36.0)"] 302 | lexv2-models = ["mypy-boto3-lexv2-models (>=1.35.0,<1.36.0)"] 303 | lexv2-runtime = ["mypy-boto3-lexv2-runtime (>=1.35.0,<1.36.0)"] 304 | license-manager = ["mypy-boto3-license-manager (>=1.35.0,<1.36.0)"] 305 | license-manager-linux-subscriptions = ["mypy-boto3-license-manager-linux-subscriptions (>=1.35.0,<1.36.0)"] 306 | license-manager-user-subscriptions = ["mypy-boto3-license-manager-user-subscriptions (>=1.35.0,<1.36.0)"] 307 | lightsail = ["mypy-boto3-lightsail (>=1.35.0,<1.36.0)"] 308 | location = ["mypy-boto3-location (>=1.35.0,<1.36.0)"] 309 | logs = ["mypy-boto3-logs (>=1.35.0,<1.36.0)"] 310 | lookoutequipment = ["mypy-boto3-lookoutequipment (>=1.35.0,<1.36.0)"] 311 | lookoutmetrics = ["mypy-boto3-lookoutmetrics (>=1.35.0,<1.36.0)"] 312 | lookoutvision = ["mypy-boto3-lookoutvision (>=1.35.0,<1.36.0)"] 313 | m2 = ["mypy-boto3-m2 (>=1.35.0,<1.36.0)"] 314 | machinelearning = ["mypy-boto3-machinelearning (>=1.35.0,<1.36.0)"] 315 | macie2 = ["mypy-boto3-macie2 (>=1.35.0,<1.36.0)"] 316 | mailmanager = ["mypy-boto3-mailmanager (>=1.35.0,<1.36.0)"] 317 | managedblockchain = ["mypy-boto3-managedblockchain (>=1.35.0,<1.36.0)"] 318 | managedblockchain-query = ["mypy-boto3-managedblockchain-query (>=1.35.0,<1.36.0)"] 319 | marketplace-agreement = ["mypy-boto3-marketplace-agreement (>=1.35.0,<1.36.0)"] 320 | marketplace-catalog = ["mypy-boto3-marketplace-catalog (>=1.35.0,<1.36.0)"] 321 | marketplace-deployment = ["mypy-boto3-marketplace-deployment (>=1.35.0,<1.36.0)"] 322 | marketplace-entitlement = ["mypy-boto3-marketplace-entitlement (>=1.35.0,<1.36.0)"] 323 | marketplacecommerceanalytics = ["mypy-boto3-marketplacecommerceanalytics (>=1.35.0,<1.36.0)"] 324 | mediaconnect = ["mypy-boto3-mediaconnect (>=1.35.0,<1.36.0)"] 325 | mediaconvert = ["mypy-boto3-mediaconvert (>=1.35.0,<1.36.0)"] 326 | medialive = ["mypy-boto3-medialive (>=1.35.0,<1.36.0)"] 327 | mediapackage = ["mypy-boto3-mediapackage (>=1.35.0,<1.36.0)"] 328 | mediapackage-vod = ["mypy-boto3-mediapackage-vod (>=1.35.0,<1.36.0)"] 329 | mediapackagev2 = ["mypy-boto3-mediapackagev2 (>=1.35.0,<1.36.0)"] 330 | mediastore = ["mypy-boto3-mediastore (>=1.35.0,<1.36.0)"] 331 | mediastore-data = ["mypy-boto3-mediastore-data (>=1.35.0,<1.36.0)"] 332 | mediatailor = ["mypy-boto3-mediatailor (>=1.35.0,<1.36.0)"] 333 | medical-imaging = ["mypy-boto3-medical-imaging (>=1.35.0,<1.36.0)"] 334 | memorydb = ["mypy-boto3-memorydb (>=1.35.0,<1.36.0)"] 335 | meteringmarketplace = ["mypy-boto3-meteringmarketplace (>=1.35.0,<1.36.0)"] 336 | mgh = ["mypy-boto3-mgh (>=1.35.0,<1.36.0)"] 337 | mgn = ["mypy-boto3-mgn (>=1.35.0,<1.36.0)"] 338 | migration-hub-refactor-spaces = ["mypy-boto3-migration-hub-refactor-spaces (>=1.35.0,<1.36.0)"] 339 | migrationhub-config = ["mypy-boto3-migrationhub-config (>=1.35.0,<1.36.0)"] 340 | migrationhuborchestrator = ["mypy-boto3-migrationhuborchestrator (>=1.35.0,<1.36.0)"] 341 | migrationhubstrategy = ["mypy-boto3-migrationhubstrategy (>=1.35.0,<1.36.0)"] 342 | mq = ["mypy-boto3-mq (>=1.35.0,<1.36.0)"] 343 | mturk = ["mypy-boto3-mturk (>=1.35.0,<1.36.0)"] 344 | mwaa = ["mypy-boto3-mwaa (>=1.35.0,<1.36.0)"] 345 | neptune = ["mypy-boto3-neptune (>=1.35.0,<1.36.0)"] 346 | neptune-graph = ["mypy-boto3-neptune-graph (>=1.35.0,<1.36.0)"] 347 | neptunedata = ["mypy-boto3-neptunedata (>=1.35.0,<1.36.0)"] 348 | network-firewall = ["mypy-boto3-network-firewall (>=1.35.0,<1.36.0)"] 349 | networkmanager = ["mypy-boto3-networkmanager (>=1.35.0,<1.36.0)"] 350 | networkmonitor = ["mypy-boto3-networkmonitor (>=1.35.0,<1.36.0)"] 351 | nimble = ["mypy-boto3-nimble (>=1.35.0,<1.36.0)"] 352 | oam = ["mypy-boto3-oam (>=1.35.0,<1.36.0)"] 353 | omics = ["mypy-boto3-omics (>=1.35.0,<1.36.0)"] 354 | opensearch = ["mypy-boto3-opensearch (>=1.35.0,<1.36.0)"] 355 | opensearchserverless = ["mypy-boto3-opensearchserverless (>=1.35.0,<1.36.0)"] 356 | opsworks = ["mypy-boto3-opsworks (>=1.35.0,<1.36.0)"] 357 | opsworkscm = ["mypy-boto3-opsworkscm (>=1.35.0,<1.36.0)"] 358 | organizations = ["mypy-boto3-organizations (>=1.35.0,<1.36.0)"] 359 | osis = ["mypy-boto3-osis (>=1.35.0,<1.36.0)"] 360 | outposts = ["mypy-boto3-outposts (>=1.35.0,<1.36.0)"] 361 | panorama = ["mypy-boto3-panorama (>=1.35.0,<1.36.0)"] 362 | payment-cryptography = ["mypy-boto3-payment-cryptography (>=1.35.0,<1.36.0)"] 363 | payment-cryptography-data = ["mypy-boto3-payment-cryptography-data (>=1.35.0,<1.36.0)"] 364 | pca-connector-ad = ["mypy-boto3-pca-connector-ad (>=1.35.0,<1.36.0)"] 365 | pca-connector-scep = ["mypy-boto3-pca-connector-scep (>=1.35.0,<1.36.0)"] 366 | pcs = ["mypy-boto3-pcs (>=1.35.0,<1.36.0)"] 367 | personalize = ["mypy-boto3-personalize (>=1.35.0,<1.36.0)"] 368 | personalize-events = ["mypy-boto3-personalize-events (>=1.35.0,<1.36.0)"] 369 | personalize-runtime = ["mypy-boto3-personalize-runtime (>=1.35.0,<1.36.0)"] 370 | pi = ["mypy-boto3-pi (>=1.35.0,<1.36.0)"] 371 | pinpoint = ["mypy-boto3-pinpoint (>=1.35.0,<1.36.0)"] 372 | pinpoint-email = ["mypy-boto3-pinpoint-email (>=1.35.0,<1.36.0)"] 373 | pinpoint-sms-voice = ["mypy-boto3-pinpoint-sms-voice (>=1.35.0,<1.36.0)"] 374 | pinpoint-sms-voice-v2 = ["mypy-boto3-pinpoint-sms-voice-v2 (>=1.35.0,<1.36.0)"] 375 | pipes = ["mypy-boto3-pipes (>=1.35.0,<1.36.0)"] 376 | polly = ["mypy-boto3-polly (>=1.35.0,<1.36.0)"] 377 | pricing = ["mypy-boto3-pricing (>=1.35.0,<1.36.0)"] 378 | privatenetworks = ["mypy-boto3-privatenetworks (>=1.35.0,<1.36.0)"] 379 | proton = ["mypy-boto3-proton (>=1.35.0,<1.36.0)"] 380 | qapps = ["mypy-boto3-qapps (>=1.35.0,<1.36.0)"] 381 | qbusiness = ["mypy-boto3-qbusiness (>=1.35.0,<1.36.0)"] 382 | qconnect = ["mypy-boto3-qconnect (>=1.35.0,<1.36.0)"] 383 | qldb = ["mypy-boto3-qldb (>=1.35.0,<1.36.0)"] 384 | qldb-session = ["mypy-boto3-qldb-session (>=1.35.0,<1.36.0)"] 385 | quicksight = ["mypy-boto3-quicksight (>=1.35.0,<1.36.0)"] 386 | ram = ["mypy-boto3-ram (>=1.35.0,<1.36.0)"] 387 | rbin = ["mypy-boto3-rbin (>=1.35.0,<1.36.0)"] 388 | rds = ["mypy-boto3-rds (>=1.35.0,<1.36.0)"] 389 | rds-data = ["mypy-boto3-rds-data (>=1.35.0,<1.36.0)"] 390 | redshift = ["mypy-boto3-redshift (>=1.35.0,<1.36.0)"] 391 | redshift-data = ["mypy-boto3-redshift-data (>=1.35.0,<1.36.0)"] 392 | redshift-serverless = ["mypy-boto3-redshift-serverless (>=1.35.0,<1.36.0)"] 393 | rekognition = ["mypy-boto3-rekognition (>=1.35.0,<1.36.0)"] 394 | repostspace = ["mypy-boto3-repostspace (>=1.35.0,<1.36.0)"] 395 | resiliencehub = ["mypy-boto3-resiliencehub (>=1.35.0,<1.36.0)"] 396 | resource-explorer-2 = ["mypy-boto3-resource-explorer-2 (>=1.35.0,<1.36.0)"] 397 | resource-groups = ["mypy-boto3-resource-groups (>=1.35.0,<1.36.0)"] 398 | resourcegroupstaggingapi = ["mypy-boto3-resourcegroupstaggingapi (>=1.35.0,<1.36.0)"] 399 | robomaker = ["mypy-boto3-robomaker (>=1.35.0,<1.36.0)"] 400 | rolesanywhere = ["mypy-boto3-rolesanywhere (>=1.35.0,<1.36.0)"] 401 | route53 = ["mypy-boto3-route53 (>=1.35.0,<1.36.0)"] 402 | route53-recovery-cluster = ["mypy-boto3-route53-recovery-cluster (>=1.35.0,<1.36.0)"] 403 | route53-recovery-control-config = ["mypy-boto3-route53-recovery-control-config (>=1.35.0,<1.36.0)"] 404 | route53-recovery-readiness = ["mypy-boto3-route53-recovery-readiness (>=1.35.0,<1.36.0)"] 405 | route53domains = ["mypy-boto3-route53domains (>=1.35.0,<1.36.0)"] 406 | route53profiles = ["mypy-boto3-route53profiles (>=1.35.0,<1.36.0)"] 407 | route53resolver = ["mypy-boto3-route53resolver (>=1.35.0,<1.36.0)"] 408 | rum = ["mypy-boto3-rum (>=1.35.0,<1.36.0)"] 409 | s3 = ["mypy-boto3-s3 (>=1.35.0,<1.36.0)"] 410 | s3control = ["mypy-boto3-s3control (>=1.35.0,<1.36.0)"] 411 | s3outposts = ["mypy-boto3-s3outposts (>=1.35.0,<1.36.0)"] 412 | sagemaker = ["mypy-boto3-sagemaker (>=1.35.0,<1.36.0)"] 413 | sagemaker-a2i-runtime = ["mypy-boto3-sagemaker-a2i-runtime (>=1.35.0,<1.36.0)"] 414 | sagemaker-edge = ["mypy-boto3-sagemaker-edge (>=1.35.0,<1.36.0)"] 415 | sagemaker-featurestore-runtime = ["mypy-boto3-sagemaker-featurestore-runtime (>=1.35.0,<1.36.0)"] 416 | sagemaker-geospatial = ["mypy-boto3-sagemaker-geospatial (>=1.35.0,<1.36.0)"] 417 | sagemaker-metrics = ["mypy-boto3-sagemaker-metrics (>=1.35.0,<1.36.0)"] 418 | sagemaker-runtime = ["mypy-boto3-sagemaker-runtime (>=1.35.0,<1.36.0)"] 419 | savingsplans = ["mypy-boto3-savingsplans (>=1.35.0,<1.36.0)"] 420 | scheduler = ["mypy-boto3-scheduler (>=1.35.0,<1.36.0)"] 421 | schemas = ["mypy-boto3-schemas (>=1.35.0,<1.36.0)"] 422 | sdb = ["mypy-boto3-sdb (>=1.35.0,<1.36.0)"] 423 | secretsmanager = ["mypy-boto3-secretsmanager (>=1.35.0,<1.36.0)"] 424 | securityhub = ["mypy-boto3-securityhub (>=1.35.0,<1.36.0)"] 425 | securitylake = ["mypy-boto3-securitylake (>=1.35.0,<1.36.0)"] 426 | serverlessrepo = ["mypy-boto3-serverlessrepo (>=1.35.0,<1.36.0)"] 427 | service-quotas = ["mypy-boto3-service-quotas (>=1.35.0,<1.36.0)"] 428 | servicecatalog = ["mypy-boto3-servicecatalog (>=1.35.0,<1.36.0)"] 429 | servicecatalog-appregistry = ["mypy-boto3-servicecatalog-appregistry (>=1.35.0,<1.36.0)"] 430 | servicediscovery = ["mypy-boto3-servicediscovery (>=1.35.0,<1.36.0)"] 431 | ses = ["mypy-boto3-ses (>=1.35.0,<1.36.0)"] 432 | sesv2 = ["mypy-boto3-sesv2 (>=1.35.0,<1.36.0)"] 433 | shield = ["mypy-boto3-shield (>=1.35.0,<1.36.0)"] 434 | signer = ["mypy-boto3-signer (>=1.35.0,<1.36.0)"] 435 | simspaceweaver = ["mypy-boto3-simspaceweaver (>=1.35.0,<1.36.0)"] 436 | sms = ["mypy-boto3-sms (>=1.35.0,<1.36.0)"] 437 | sms-voice = ["mypy-boto3-sms-voice (>=1.35.0,<1.36.0)"] 438 | snow-device-management = ["mypy-boto3-snow-device-management (>=1.35.0,<1.36.0)"] 439 | snowball = ["mypy-boto3-snowball (>=1.35.0,<1.36.0)"] 440 | sns = ["mypy-boto3-sns (>=1.35.0,<1.36.0)"] 441 | sqs = ["mypy-boto3-sqs (>=1.35.0,<1.36.0)"] 442 | ssm = ["mypy-boto3-ssm (>=1.35.0,<1.36.0)"] 443 | ssm-contacts = ["mypy-boto3-ssm-contacts (>=1.35.0,<1.36.0)"] 444 | ssm-incidents = ["mypy-boto3-ssm-incidents (>=1.35.0,<1.36.0)"] 445 | ssm-quicksetup = ["mypy-boto3-ssm-quicksetup (>=1.35.0,<1.36.0)"] 446 | ssm-sap = ["mypy-boto3-ssm-sap (>=1.35.0,<1.36.0)"] 447 | sso = ["mypy-boto3-sso (>=1.35.0,<1.36.0)"] 448 | sso-admin = ["mypy-boto3-sso-admin (>=1.35.0,<1.36.0)"] 449 | sso-oidc = ["mypy-boto3-sso-oidc (>=1.35.0,<1.36.0)"] 450 | stepfunctions = ["mypy-boto3-stepfunctions (>=1.35.0,<1.36.0)"] 451 | storagegateway = ["mypy-boto3-storagegateway (>=1.35.0,<1.36.0)"] 452 | sts = ["mypy-boto3-sts (>=1.35.0,<1.36.0)"] 453 | supplychain = ["mypy-boto3-supplychain (>=1.35.0,<1.36.0)"] 454 | support = ["mypy-boto3-support (>=1.35.0,<1.36.0)"] 455 | support-app = ["mypy-boto3-support-app (>=1.35.0,<1.36.0)"] 456 | swf = ["mypy-boto3-swf (>=1.35.0,<1.36.0)"] 457 | synthetics = ["mypy-boto3-synthetics (>=1.35.0,<1.36.0)"] 458 | taxsettings = ["mypy-boto3-taxsettings (>=1.35.0,<1.36.0)"] 459 | textract = ["mypy-boto3-textract (>=1.35.0,<1.36.0)"] 460 | timestream-influxdb = ["mypy-boto3-timestream-influxdb (>=1.35.0,<1.36.0)"] 461 | timestream-query = ["mypy-boto3-timestream-query (>=1.35.0,<1.36.0)"] 462 | timestream-write = ["mypy-boto3-timestream-write (>=1.35.0,<1.36.0)"] 463 | tnb = ["mypy-boto3-tnb (>=1.35.0,<1.36.0)"] 464 | transcribe = ["mypy-boto3-transcribe (>=1.35.0,<1.36.0)"] 465 | transfer = ["mypy-boto3-transfer (>=1.35.0,<1.36.0)"] 466 | translate = ["mypy-boto3-translate (>=1.35.0,<1.36.0)"] 467 | trustedadvisor = ["mypy-boto3-trustedadvisor (>=1.35.0,<1.36.0)"] 468 | verifiedpermissions = ["mypy-boto3-verifiedpermissions (>=1.35.0,<1.36.0)"] 469 | voice-id = ["mypy-boto3-voice-id (>=1.35.0,<1.36.0)"] 470 | vpc-lattice = ["mypy-boto3-vpc-lattice (>=1.35.0,<1.36.0)"] 471 | waf = ["mypy-boto3-waf (>=1.35.0,<1.36.0)"] 472 | waf-regional = ["mypy-boto3-waf-regional (>=1.35.0,<1.36.0)"] 473 | wafv2 = ["mypy-boto3-wafv2 (>=1.35.0,<1.36.0)"] 474 | wellarchitected = ["mypy-boto3-wellarchitected (>=1.35.0,<1.36.0)"] 475 | wisdom = ["mypy-boto3-wisdom (>=1.35.0,<1.36.0)"] 476 | workdocs = ["mypy-boto3-workdocs (>=1.35.0,<1.36.0)"] 477 | worklink = ["mypy-boto3-worklink (>=1.35.0,<1.36.0)"] 478 | workmail = ["mypy-boto3-workmail (>=1.35.0,<1.36.0)"] 479 | workmailmessageflow = ["mypy-boto3-workmailmessageflow (>=1.35.0,<1.36.0)"] 480 | workspaces = ["mypy-boto3-workspaces (>=1.35.0,<1.36.0)"] 481 | workspaces-thin-client = ["mypy-boto3-workspaces-thin-client (>=1.35.0,<1.36.0)"] 482 | workspaces-web = ["mypy-boto3-workspaces-web (>=1.35.0,<1.36.0)"] 483 | xray = ["mypy-boto3-xray (>=1.35.0,<1.36.0)"] 484 | 485 | [[package]] 486 | name = "botocore-stubs" 487 | version = "1.35.14" 488 | description = "Type annotations and code completion for botocore" 489 | optional = false 490 | python-versions = ">=3.8" 491 | files = [ 492 | {file = "botocore_stubs-1.35.14-py3-none-any.whl", hash = "sha256:72071a5b05ec56b9915b70c71fe7e9820278e1ab637eb5e928e418fdb0eb0cf6"}, 493 | {file = "botocore_stubs-1.35.14.tar.gz", hash = "sha256:cc40e48d3d2f22a74f3ca8c07d05789cf7d2f7c29acbfb701a2f5dc69bbf473e"}, 494 | ] 495 | 496 | [package.dependencies] 497 | types-awscrt = "*" 498 | 499 | [package.extras] 500 | botocore = ["botocore"] 501 | 502 | [[package]] 503 | name = "certifi" 504 | version = "2024.8.30" 505 | description = "Python package for providing Mozilla's CA Bundle." 506 | optional = false 507 | python-versions = ">=3.6" 508 | files = [ 509 | {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, 510 | {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, 511 | ] 512 | 513 | [[package]] 514 | name = "charset-normalizer" 515 | version = "3.3.2" 516 | description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." 517 | optional = false 518 | python-versions = ">=3.7.0" 519 | files = [ 520 | {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, 521 | {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, 522 | {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, 523 | {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, 524 | {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, 525 | {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, 526 | {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, 527 | {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, 528 | {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, 529 | {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, 530 | {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, 531 | {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, 532 | {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, 533 | {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, 534 | {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, 535 | {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, 536 | {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, 537 | {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, 538 | {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, 539 | {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, 540 | {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, 541 | {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, 542 | {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, 543 | {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, 544 | {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, 545 | {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, 546 | {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, 547 | {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, 548 | {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, 549 | {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, 550 | {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, 551 | {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, 552 | {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, 553 | {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, 554 | {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, 555 | {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, 556 | {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, 557 | {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, 558 | {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, 559 | {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, 560 | {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, 561 | {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, 562 | {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, 563 | {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, 564 | {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, 565 | {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, 566 | {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, 567 | {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, 568 | {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, 569 | {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, 570 | {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, 571 | {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, 572 | {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, 573 | {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, 574 | {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, 575 | {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, 576 | {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, 577 | {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, 578 | {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, 579 | {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, 580 | {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, 581 | {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, 582 | {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, 583 | {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, 584 | {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, 585 | {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, 586 | {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, 587 | {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, 588 | {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, 589 | {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, 590 | {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, 591 | {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, 592 | {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, 593 | {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, 594 | {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, 595 | {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, 596 | {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, 597 | {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, 598 | {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, 599 | {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, 600 | {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, 601 | {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, 602 | {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, 603 | {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, 604 | {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, 605 | {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, 606 | {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, 607 | {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, 608 | {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, 609 | {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, 610 | ] 611 | 612 | [[package]] 613 | name = "click" 614 | version = "8.1.7" 615 | description = "Composable command line interface toolkit" 616 | optional = false 617 | python-versions = ">=3.7" 618 | files = [ 619 | {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, 620 | {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, 621 | ] 622 | 623 | [package.dependencies] 624 | colorama = {version = "*", markers = "platform_system == \"Windows\""} 625 | 626 | [[package]] 627 | name = "colorama" 628 | version = "0.4.6" 629 | description = "Cross-platform colored terminal text." 630 | optional = false 631 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" 632 | files = [ 633 | {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, 634 | {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, 635 | ] 636 | 637 | [[package]] 638 | name = "coverage" 639 | version = "5.3.1" 640 | description = "Code coverage measurement for Python" 641 | optional = false 642 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" 643 | files = [ 644 | {file = "coverage-5.3.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:fabeeb121735d47d8eab8671b6b031ce08514c86b7ad8f7d5490a7b6dcd6267d"}, 645 | {file = "coverage-5.3.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:7e4d159021c2029b958b2363abec4a11db0ce8cd43abb0d9ce44284cb97217e7"}, 646 | {file = "coverage-5.3.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:378ac77af41350a8c6b8801a66021b52da8a05fd77e578b7380e876c0ce4f528"}, 647 | {file = "coverage-5.3.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:e448f56cfeae7b1b3b5bcd99bb377cde7c4eb1970a525c770720a352bc4c8044"}, 648 | {file = "coverage-5.3.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:cc44e3545d908ecf3e5773266c487ad1877be718d9dc65fc7eb6e7d14960985b"}, 649 | {file = "coverage-5.3.1-cp27-cp27m-win32.whl", hash = "sha256:08b3ba72bd981531fd557f67beee376d6700fba183b167857038997ba30dd297"}, 650 | {file = "coverage-5.3.1-cp27-cp27m-win_amd64.whl", hash = "sha256:8dacc4073c359f40fcf73aede8428c35f84639baad7e1b46fce5ab7a8a7be4bb"}, 651 | {file = "coverage-5.3.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ee2f1d1c223c3d2c24e3afbb2dd38be3f03b1a8d6a83ee3d9eb8c36a52bee899"}, 652 | {file = "coverage-5.3.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:9a9d4ff06804920388aab69c5ea8a77525cf165356db70131616acd269e19b36"}, 653 | {file = "coverage-5.3.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:782a5c7df9f91979a7a21792e09b34a658058896628217ae6362088b123c8500"}, 654 | {file = "coverage-5.3.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:fda29412a66099af6d6de0baa6bd7c52674de177ec2ad2630ca264142d69c6c7"}, 655 | {file = "coverage-5.3.1-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:f2c6888eada180814b8583c3e793f3f343a692fc802546eed45f40a001b1169f"}, 656 | {file = "coverage-5.3.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:8f33d1156241c43755137288dea619105477961cfa7e47f48dbf96bc2c30720b"}, 657 | {file = "coverage-5.3.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b239711e774c8eb910e9b1ac719f02f5ae4bf35fa0420f438cdc3a7e4e7dd6ec"}, 658 | {file = "coverage-5.3.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:f54de00baf200b4539a5a092a759f000b5f45fd226d6d25a76b0dff71177a714"}, 659 | {file = "coverage-5.3.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:be0416074d7f253865bb67630cf7210cbc14eb05f4099cc0f82430135aaa7a3b"}, 660 | {file = "coverage-5.3.1-cp35-cp35m-win32.whl", hash = "sha256:c46643970dff9f5c976c6512fd35768c4a3819f01f61169d8cdac3f9290903b7"}, 661 | {file = "coverage-5.3.1-cp35-cp35m-win_amd64.whl", hash = "sha256:9a4f66259bdd6964d8cf26142733c81fb562252db74ea367d9beb4f815478e72"}, 662 | {file = "coverage-5.3.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c6e5174f8ca585755988bc278c8bb5d02d9dc2e971591ef4a1baabdf2d99589b"}, 663 | {file = "coverage-5.3.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:3911c2ef96e5ddc748a3c8b4702c61986628bb719b8378bf1e4a6184bbd48fe4"}, 664 | {file = "coverage-5.3.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:c5ec71fd4a43b6d84ddb88c1df94572479d9a26ef3f150cef3dacefecf888105"}, 665 | {file = "coverage-5.3.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f51dbba78d68a44e99d484ca8c8f604f17e957c1ca09c3ebc2c7e3bbd9ba0448"}, 666 | {file = "coverage-5.3.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:a2070c5affdb3a5e751f24208c5c4f3d5f008fa04d28731416e023c93b275277"}, 667 | {file = "coverage-5.3.1-cp36-cp36m-win32.whl", hash = "sha256:535dc1e6e68fad5355f9984d5637c33badbdc987b0c0d303ee95a6c979c9516f"}, 668 | {file = "coverage-5.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:a4857f7e2bc6921dbd487c5c88b84f5633de3e7d416c4dc0bb70256775551a6c"}, 669 | {file = "coverage-5.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fac3c432851038b3e6afe086f777732bcf7f6ebbfd90951fa04ee53db6d0bcdd"}, 670 | {file = "coverage-5.3.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:cd556c79ad665faeae28020a0ab3bda6cd47d94bec48e36970719b0b86e4dcf4"}, 671 | {file = "coverage-5.3.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:a66ca3bdf21c653e47f726ca57f46ba7fc1f260ad99ba783acc3e58e3ebdb9ff"}, 672 | {file = "coverage-5.3.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:ab110c48bc3d97b4d19af41865e14531f300b482da21783fdaacd159251890e8"}, 673 | {file = "coverage-5.3.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:e52d3d95df81c8f6b2a1685aabffadf2d2d9ad97203a40f8d61e51b70f191e4e"}, 674 | {file = "coverage-5.3.1-cp37-cp37m-win32.whl", hash = "sha256:fa10fee7e32213f5c7b0d6428ea92e3a3fdd6d725590238a3f92c0de1c78b9d2"}, 675 | {file = "coverage-5.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ce6f3a147b4b1a8b09aae48517ae91139b1b010c5f36423fa2b866a8b23df879"}, 676 | {file = "coverage-5.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:93a280c9eb736a0dcca19296f3c30c720cb41a71b1f9e617f341f0a8e791a69b"}, 677 | {file = "coverage-5.3.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:3102bb2c206700a7d28181dbe04d66b30780cde1d1c02c5f3c165cf3d2489497"}, 678 | {file = "coverage-5.3.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8ffd4b204d7de77b5dd558cdff986a8274796a1e57813ed005b33fd97e29f059"}, 679 | {file = "coverage-5.3.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:a607ae05b6c96057ba86c811d9c43423f35e03874ffb03fbdcd45e0637e8b631"}, 680 | {file = "coverage-5.3.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:3a3c3f8863255f3c31db3889f8055989527173ef6192a283eb6f4db3c579d830"}, 681 | {file = "coverage-5.3.1-cp38-cp38-win32.whl", hash = "sha256:ff1330e8bc996570221b450e2d539134baa9465f5cb98aff0e0f73f34172e0ae"}, 682 | {file = "coverage-5.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:3498b27d8236057def41de3585f317abae235dd3a11d33e01736ffedb2ef8606"}, 683 | {file = "coverage-5.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ceb499d2b3d1d7b7ba23abe8bf26df5f06ba8c71127f188333dddcf356b4b63f"}, 684 | {file = "coverage-5.3.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:3b14b1da110ea50c8bcbadc3b82c3933974dbeea1832e814aab93ca1163cd4c1"}, 685 | {file = "coverage-5.3.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:76b2775dda7e78680d688daabcb485dc87cf5e3184a0b3e012e1d40e38527cc8"}, 686 | {file = "coverage-5.3.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:cef06fb382557f66d81d804230c11ab292d94b840b3cb7bf4450778377b592f4"}, 687 | {file = "coverage-5.3.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:6f61319e33222591f885c598e3e24f6a4be3533c1d70c19e0dc59e83a71ce27d"}, 688 | {file = "coverage-5.3.1-cp39-cp39-win32.whl", hash = "sha256:cc6f8246e74dd210d7e2b56c76ceaba1cc52b025cd75dbe96eb48791e0250e98"}, 689 | {file = "coverage-5.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:2757fa64e11ec12220968f65d086b7a29b6583d16e9a544c889b22ba98555ef1"}, 690 | {file = "coverage-5.3.1-pp36-none-any.whl", hash = "sha256:723d22d324e7997a651478e9c5a3120a0ecbc9a7e94071f7e1954562a8806cf3"}, 691 | {file = "coverage-5.3.1-pp37-none-any.whl", hash = "sha256:c89b558f8a9a5a6f2cfc923c304d49f0ce629c3bd85cb442ca258ec20366394c"}, 692 | {file = "coverage-5.3.1.tar.gz", hash = "sha256:38f16b1317b8dd82df67ed5daa5f5e7c959e46579840d77a67a4ceb9cef0a50b"}, 693 | ] 694 | 695 | [package.extras] 696 | toml = ["toml"] 697 | 698 | [[package]] 699 | name = "decorator" 700 | version = "4.4.2" 701 | description = "Decorators for Humans" 702 | optional = false 703 | python-versions = ">=2.6, !=3.0.*, !=3.1.*" 704 | files = [ 705 | {file = "decorator-4.4.2-py2.py3-none-any.whl", hash = "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760"}, 706 | {file = "decorator-4.4.2.tar.gz", hash = "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"}, 707 | ] 708 | 709 | [[package]] 710 | name = "dill" 711 | version = "0.3.8" 712 | description = "serialize all of Python" 713 | optional = false 714 | python-versions = ">=3.8" 715 | files = [ 716 | {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, 717 | {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, 718 | ] 719 | 720 | [package.extras] 721 | graph = ["objgraph (>=1.7.2)"] 722 | profile = ["gprof2dot (>=2022.7.29)"] 723 | 724 | [[package]] 725 | name = "execnet" 726 | version = "2.1.1" 727 | description = "execnet: rapid multi-Python deployment" 728 | optional = false 729 | python-versions = ">=3.8" 730 | files = [ 731 | {file = "execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc"}, 732 | {file = "execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3"}, 733 | ] 734 | 735 | [package.extras] 736 | testing = ["hatch", "pre-commit", "pytest", "tox"] 737 | 738 | [[package]] 739 | name = "future" 740 | version = "1.0.0" 741 | description = "Clean single-source support for Python 3 and 2" 742 | optional = false 743 | python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" 744 | files = [ 745 | {file = "future-1.0.0-py3-none-any.whl", hash = "sha256:929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216"}, 746 | {file = "future-1.0.0.tar.gz", hash = "sha256:bd2968309307861edae1458a4f8a4f3598c03be43b97521076aebf5d94c07b05"}, 747 | ] 748 | 749 | [[package]] 750 | name = "idna" 751 | version = "3.8" 752 | description = "Internationalized Domain Names in Applications (IDNA)" 753 | optional = false 754 | python-versions = ">=3.6" 755 | files = [ 756 | {file = "idna-3.8-py3-none-any.whl", hash = "sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac"}, 757 | {file = "idna-3.8.tar.gz", hash = "sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603"}, 758 | ] 759 | 760 | [[package]] 761 | name = "imageio" 762 | version = "2.35.1" 763 | description = "Library for reading and writing a wide range of image, video, scientific, and volumetric data formats." 764 | optional = false 765 | python-versions = ">=3.8" 766 | files = [ 767 | {file = "imageio-2.35.1-py3-none-any.whl", hash = "sha256:6eb2e5244e7a16b85c10b5c2fe0f7bf961b40fcb9f1a9fd1bd1d2c2f8fb3cd65"}, 768 | {file = "imageio-2.35.1.tar.gz", hash = "sha256:4952dfeef3c3947957f6d5dedb1f4ca31c6e509a476891062396834048aeed2a"}, 769 | ] 770 | 771 | [package.dependencies] 772 | numpy = "*" 773 | pillow = ">=8.3.2" 774 | 775 | [package.extras] 776 | all-plugins = ["astropy", "av", "imageio-ffmpeg", "psutil", "tifffile"] 777 | all-plugins-pypy = ["av", "imageio-ffmpeg", "psutil", "tifffile"] 778 | build = ["wheel"] 779 | dev = ["black", "flake8", "fsspec[github]", "pytest", "pytest-cov"] 780 | docs = ["numpydoc", "pydata-sphinx-theme", "sphinx (<6)"] 781 | ffmpeg = ["imageio-ffmpeg", "psutil"] 782 | fits = ["astropy"] 783 | full = ["astropy", "av", "black", "flake8", "fsspec[github]", "gdal", "imageio-ffmpeg", "itk", "numpy (>2)", "numpydoc", "pillow-heif", "psutil", "pydata-sphinx-theme", "pytest", "pytest-cov", "rawpy", "sphinx (<6)", "tifffile", "wheel"] 784 | gdal = ["gdal"] 785 | itk = ["itk"] 786 | linting = ["black", "flake8"] 787 | pillow-heif = ["pillow-heif"] 788 | pyav = ["av"] 789 | rawpy = ["numpy (>2)", "rawpy"] 790 | test = ["fsspec[github]", "pytest", "pytest-cov"] 791 | tifffile = ["tifffile"] 792 | 793 | [[package]] 794 | name = "imageio-ffmpeg" 795 | version = "0.5.1" 796 | description = "FFMPEG wrapper for Python" 797 | optional = false 798 | python-versions = ">=3.5" 799 | files = [ 800 | {file = "imageio-ffmpeg-0.5.1.tar.gz", hash = "sha256:0ed7a9b31f560b0c9d929c5291cd430edeb9bed3ce9a497480e536dd4326484c"}, 801 | {file = "imageio_ffmpeg-0.5.1-py3-none-macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:1460e84712b9d06910c1f7bb524096b0341d4b7844cea6c20e099d0a24e795b1"}, 802 | {file = "imageio_ffmpeg-0.5.1-py3-none-manylinux2010_x86_64.whl", hash = "sha256:5289f75c7f755b499653f3209fea4efd1430cba0e39831c381aad2d458f7a316"}, 803 | {file = "imageio_ffmpeg-0.5.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7fa9132a291d5eb28c44553550deb40cbdab831f2a614e55360301a6582eb205"}, 804 | {file = "imageio_ffmpeg-0.5.1-py3-none-win32.whl", hash = "sha256:89efe2c79979d8174ba8476deb7f74d74c331caee3fb2b65ba2883bec0737625"}, 805 | {file = "imageio_ffmpeg-0.5.1-py3-none-win_amd64.whl", hash = "sha256:1521e79e253bedbdd36a547e0cbd94a025ba0b558e17f08fea687d805a0e4698"}, 806 | ] 807 | 808 | [package.dependencies] 809 | setuptools = "*" 810 | 811 | [[package]] 812 | name = "iniconfig" 813 | version = "2.0.0" 814 | description = "brain-dead simple config-ini parsing" 815 | optional = false 816 | python-versions = ">=3.7" 817 | files = [ 818 | {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, 819 | {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, 820 | ] 821 | 822 | [[package]] 823 | name = "isort" 824 | version = "5.6.4" 825 | description = "A Python utility / library to sort Python imports." 826 | optional = false 827 | python-versions = ">=3.6,<4.0" 828 | files = [ 829 | {file = "isort-5.6.4-py3-none-any.whl", hash = "sha256:dcab1d98b469a12a1a624ead220584391648790275560e1a43e54c5dceae65e7"}, 830 | {file = "isort-5.6.4.tar.gz", hash = "sha256:dcaeec1b5f0eca77faea2a35ab790b4f3680ff75590bfcb7145986905aab2f58"}, 831 | ] 832 | 833 | [package.extras] 834 | colors = ["colorama (>=0.4.3,<0.5.0)"] 835 | pipfile-deprecated-finder = ["pipreqs", "requirementslib"] 836 | requirements-deprecated-finder = ["pip-api", "pipreqs"] 837 | 838 | [[package]] 839 | name = "mando" 840 | version = "0.6.4" 841 | description = "Create Python CLI apps with little to no effort at all!" 842 | optional = false 843 | python-versions = "*" 844 | files = [ 845 | {file = "mando-0.6.4-py2.py3-none-any.whl", hash = "sha256:4ce09faec7e5192ffc3c57830e26acba0fd6cd11e1ee81af0d4df0657463bd1c"}, 846 | {file = "mando-0.6.4.tar.gz", hash = "sha256:79feb19dc0f097daa64a1243db578e7674909b75f88ac2220f1c065c10a0d960"}, 847 | ] 848 | 849 | [package.dependencies] 850 | six = "*" 851 | 852 | [package.extras] 853 | restructuredtext = ["rst2ansi"] 854 | 855 | [[package]] 856 | name = "mccabe" 857 | version = "0.7.0" 858 | description = "McCabe checker, plugin for flake8" 859 | optional = false 860 | python-versions = ">=3.6" 861 | files = [ 862 | {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, 863 | {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, 864 | ] 865 | 866 | [[package]] 867 | name = "moviepy" 868 | version = "1.0.3" 869 | description = "Video editing with Python" 870 | optional = false 871 | python-versions = "*" 872 | files = [ 873 | {file = "moviepy-1.0.3.tar.gz", hash = "sha256:2884e35d1788077db3ff89e763c5ba7bfddbd7ae9108c9bc809e7ba58fa433f5"}, 874 | ] 875 | 876 | [package.dependencies] 877 | decorator = ">=4.0.2,<5.0" 878 | imageio = {version = ">=2.5,<3.0", markers = "python_version >= \"3.4\""} 879 | imageio_ffmpeg = {version = ">=0.2.0", markers = "python_version >= \"3.4\""} 880 | numpy = {version = ">=1.17.3", markers = "python_version > \"2.7\""} 881 | proglog = "<=1.0.0" 882 | requests = ">=2.8.1,<3.0" 883 | tqdm = ">=4.11.2,<5.0" 884 | 885 | [package.extras] 886 | doc = ["Sphinx (>=1.5.2,<2.0)", "numpydoc (>=0.6.0,<1.0)", "pygame (>=1.9.3,<2.0)", "sphinx_rtd_theme (>=0.1.10b0,<1.0)"] 887 | optional = ["matplotlib (>=2.0.0,<3.0)", "opencv-python (>=3.0,<4.0)", "scikit-image (>=0.13.0,<1.0)", "scikit-learn", "scipy (>=0.19.0,<1.5)", "youtube_dl"] 888 | test = ["coverage (<5.0)", "coveralls (>=1.1,<2.0)", "pytest (>=3.0.0,<4.0)", "pytest-cov (>=2.5.1,<3.0)", "requests (>=2.8.1,<3.0)"] 889 | 890 | [[package]] 891 | name = "mypy" 892 | version = "1.11.2" 893 | description = "Optional static typing for Python" 894 | optional = false 895 | python-versions = ">=3.8" 896 | files = [ 897 | {file = "mypy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a"}, 898 | {file = "mypy-1.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef"}, 899 | {file = "mypy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383"}, 900 | {file = "mypy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8"}, 901 | {file = "mypy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7"}, 902 | {file = "mypy-1.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75746e06d5fa1e91bfd5432448d00d34593b52e7e91a187d981d08d1f33d4385"}, 903 | {file = "mypy-1.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a976775ab2256aadc6add633d44f100a2517d2388906ec4f13231fafbb0eccca"}, 904 | {file = "mypy-1.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd953f221ac1379050a8a646585a29574488974f79d8082cedef62744f0a0104"}, 905 | {file = "mypy-1.11.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:57555a7715c0a34421013144a33d280e73c08df70f3a18a552938587ce9274f4"}, 906 | {file = "mypy-1.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:36383a4fcbad95f2657642a07ba22ff797de26277158f1cc7bd234821468b1b6"}, 907 | {file = "mypy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318"}, 908 | {file = "mypy-1.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36"}, 909 | {file = "mypy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987"}, 910 | {file = "mypy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca"}, 911 | {file = "mypy-1.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:969ea3ef09617aff826885a22ece0ddef69d95852cdad2f60c8bb06bf1f71f70"}, 912 | {file = "mypy-1.11.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:37c7fa6121c1cdfcaac97ce3d3b5588e847aa79b580c1e922bb5d5d2902df19b"}, 913 | {file = "mypy-1.11.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a8a53bc3ffbd161b5b2a4fff2f0f1e23a33b0168f1c0778ec70e1a3d66deb86"}, 914 | {file = "mypy-1.11.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ff93107f01968ed834f4256bc1fc4475e2fecf6c661260066a985b52741ddce"}, 915 | {file = "mypy-1.11.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:edb91dded4df17eae4537668b23f0ff6baf3707683734b6a818d5b9d0c0c31a1"}, 916 | {file = "mypy-1.11.2-cp38-cp38-win_amd64.whl", hash = "sha256:ee23de8530d99b6db0573c4ef4bd8f39a2a6f9b60655bf7a1357e585a3486f2b"}, 917 | {file = "mypy-1.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:801ca29f43d5acce85f8e999b1e431fb479cb02d0e11deb7d2abb56bdaf24fd6"}, 918 | {file = "mypy-1.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af8d155170fcf87a2afb55b35dc1a0ac21df4431e7d96717621962e4b9192e70"}, 919 | {file = "mypy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7821776e5c4286b6a13138cc935e2e9b6fde05e081bdebf5cdb2bb97c9df81d"}, 920 | {file = "mypy-1.11.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539c570477a96a4e6fb718b8d5c3e0c0eba1f485df13f86d2970c91f0673148d"}, 921 | {file = "mypy-1.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:3f14cd3d386ac4d05c5a39a51b84387403dadbd936e17cb35882134d4f8f0d24"}, 922 | {file = "mypy-1.11.2-py3-none-any.whl", hash = "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12"}, 923 | {file = "mypy-1.11.2.tar.gz", hash = "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79"}, 924 | ] 925 | 926 | [package.dependencies] 927 | mypy-extensions = ">=1.0.0" 928 | typing-extensions = ">=4.6.0" 929 | 930 | [package.extras] 931 | dmypy = ["psutil (>=4.0)"] 932 | install-types = ["pip"] 933 | mypyc = ["setuptools (>=50)"] 934 | reports = ["lxml"] 935 | 936 | [[package]] 937 | name = "mypy-extensions" 938 | version = "1.0.0" 939 | description = "Type system extensions for programs checked with the mypy type checker." 940 | optional = false 941 | python-versions = ">=3.5" 942 | files = [ 943 | {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, 944 | {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, 945 | ] 946 | 947 | [[package]] 948 | name = "numpy" 949 | version = "2.1.1" 950 | description = "Fundamental package for array computing in Python" 951 | optional = false 952 | python-versions = ">=3.10" 953 | files = [ 954 | {file = "numpy-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8a0e34993b510fc19b9a2ce7f31cb8e94ecf6e924a40c0c9dd4f62d0aac47d9"}, 955 | {file = "numpy-2.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7dd86dfaf7c900c0bbdcb8b16e2f6ddf1eb1fe39c6c8cca6e94844ed3152a8fd"}, 956 | {file = "numpy-2.1.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:5889dd24f03ca5a5b1e8a90a33b5a0846d8977565e4ae003a63d22ecddf6782f"}, 957 | {file = "numpy-2.1.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:59ca673ad11d4b84ceb385290ed0ebe60266e356641428c845b39cd9df6713ab"}, 958 | {file = "numpy-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13ce49a34c44b6de5241f0b38b07e44c1b2dcacd9e36c30f9c2fcb1bb5135db7"}, 959 | {file = "numpy-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913cc1d311060b1d409e609947fa1b9753701dac96e6581b58afc36b7ee35af6"}, 960 | {file = "numpy-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:caf5d284ddea7462c32b8d4a6b8af030b6c9fd5332afb70e7414d7fdded4bfd0"}, 961 | {file = "numpy-2.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:57eb525e7c2a8fdee02d731f647146ff54ea8c973364f3b850069ffb42799647"}, 962 | {file = "numpy-2.1.1-cp310-cp310-win32.whl", hash = "sha256:9a8e06c7a980869ea67bbf551283bbed2856915f0a792dc32dd0f9dd2fb56728"}, 963 | {file = "numpy-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:d10c39947a2d351d6d466b4ae83dad4c37cd6c3cdd6d5d0fa797da56f710a6ae"}, 964 | {file = "numpy-2.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0d07841fd284718feffe7dd17a63a2e6c78679b2d386d3e82f44f0108c905550"}, 965 | {file = "numpy-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b5613cfeb1adfe791e8e681128f5f49f22f3fcaa942255a6124d58ca59d9528f"}, 966 | {file = "numpy-2.1.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0b8cc2715a84b7c3b161f9ebbd942740aaed913584cae9cdc7f8ad5ad41943d0"}, 967 | {file = "numpy-2.1.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:b49742cdb85f1f81e4dc1b39dcf328244f4d8d1ded95dea725b316bd2cf18c95"}, 968 | {file = "numpy-2.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8d5f8a8e3bc87334f025194c6193e408903d21ebaeb10952264943a985066ca"}, 969 | {file = "numpy-2.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d51fc141ddbe3f919e91a096ec739f49d686df8af254b2053ba21a910ae518bf"}, 970 | {file = "numpy-2.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:98ce7fb5b8063cfdd86596b9c762bf2b5e35a2cdd7e967494ab78a1fa7f8b86e"}, 971 | {file = "numpy-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:24c2ad697bd8593887b019817ddd9974a7f429c14a5469d7fad413f28340a6d2"}, 972 | {file = "numpy-2.1.1-cp311-cp311-win32.whl", hash = "sha256:397bc5ce62d3fb73f304bec332171535c187e0643e176a6e9421a6e3eacef06d"}, 973 | {file = "numpy-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:ae8ce252404cdd4de56dcfce8b11eac3c594a9c16c231d081fb705cf23bd4d9e"}, 974 | {file = "numpy-2.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7c803b7934a7f59563db459292e6aa078bb38b7ab1446ca38dd138646a38203e"}, 975 | {file = "numpy-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6435c48250c12f001920f0751fe50c0348f5f240852cfddc5e2f97e007544cbe"}, 976 | {file = "numpy-2.1.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3269c9eb8745e8d975980b3a7411a98976824e1fdef11f0aacf76147f662b15f"}, 977 | {file = "numpy-2.1.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:fac6e277a41163d27dfab5f4ec1f7a83fac94e170665a4a50191b545721c6521"}, 978 | {file = "numpy-2.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcd8f556cdc8cfe35e70efb92463082b7f43dd7e547eb071ffc36abc0ca4699b"}, 979 | {file = "numpy-2.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b9cd92c8f8e7b313b80e93cedc12c0112088541dcedd9197b5dee3738c1201"}, 980 | {file = "numpy-2.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:afd9c680df4de71cd58582b51e88a61feed4abcc7530bcd3d48483f20fc76f2a"}, 981 | {file = "numpy-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8661c94e3aad18e1ea17a11f60f843a4933ccaf1a25a7c6a9182af70610b2313"}, 982 | {file = "numpy-2.1.1-cp312-cp312-win32.whl", hash = "sha256:950802d17a33c07cba7fd7c3dcfa7d64705509206be1606f196d179e539111ed"}, 983 | {file = "numpy-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:3fc5eabfc720db95d68e6646e88f8b399bfedd235994016351b1d9e062c4b270"}, 984 | {file = "numpy-2.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:046356b19d7ad1890c751b99acad5e82dc4a02232013bd9a9a712fddf8eb60f5"}, 985 | {file = "numpy-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6e5a9cb2be39350ae6c8f79410744e80154df658d5bea06e06e0ac5bb75480d5"}, 986 | {file = "numpy-2.1.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:d4c57b68c8ef5e1ebf47238e99bf27657511ec3f071c465f6b1bccbef12d4136"}, 987 | {file = "numpy-2.1.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:8ae0fd135e0b157365ac7cc31fff27f07a5572bdfc38f9c2d43b2aff416cc8b0"}, 988 | {file = "numpy-2.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:981707f6b31b59c0c24bcda52e5605f9701cb46da4b86c2e8023656ad3e833cb"}, 989 | {file = "numpy-2.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ca4b53e1e0b279142113b8c5eb7d7a877e967c306edc34f3b58e9be12fda8df"}, 990 | {file = "numpy-2.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e097507396c0be4e547ff15b13dc3866f45f3680f789c1a1301b07dadd3fbc78"}, 991 | {file = "numpy-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7506387e191fe8cdb267f912469a3cccc538ab108471291636a96a54e599556"}, 992 | {file = "numpy-2.1.1-cp313-cp313-win32.whl", hash = "sha256:251105b7c42abe40e3a689881e1793370cc9724ad50d64b30b358bbb3a97553b"}, 993 | {file = "numpy-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:f212d4f46b67ff604d11fff7cc62d36b3e8714edf68e44e9760e19be38c03eb0"}, 994 | {file = "numpy-2.1.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:920b0911bb2e4414c50e55bd658baeb78281a47feeb064ab40c2b66ecba85553"}, 995 | {file = "numpy-2.1.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:bab7c09454460a487e631ffc0c42057e3d8f2a9ddccd1e60c7bb8ed774992480"}, 996 | {file = "numpy-2.1.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:cea427d1350f3fd0d2818ce7350095c1a2ee33e30961d2f0fef48576ddbbe90f"}, 997 | {file = "numpy-2.1.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:e30356d530528a42eeba51420ae8bf6c6c09559051887196599d96ee5f536468"}, 998 | {file = "numpy-2.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8dfa9e94fc127c40979c3eacbae1e61fda4fe71d84869cc129e2721973231ef"}, 999 | {file = "numpy-2.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910b47a6d0635ec1bd53b88f86120a52bf56dcc27b51f18c7b4a2e2224c29f0f"}, 1000 | {file = "numpy-2.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:13cc11c00000848702322af4de0147ced365c81d66053a67c2e962a485b3717c"}, 1001 | {file = "numpy-2.1.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:53e27293b3a2b661c03f79aa51c3987492bd4641ef933e366e0f9f6c9bf257ec"}, 1002 | {file = "numpy-2.1.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7be6a07520b88214ea85d8ac8b7d6d8a1839b0b5cb87412ac9f49fa934eb15d5"}, 1003 | {file = "numpy-2.1.1-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:52ac2e48f5ad847cd43c4755520a2317f3380213493b9d8a4c5e37f3b87df504"}, 1004 | {file = "numpy-2.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50a95ca3560a6058d6ea91d4629a83a897ee27c00630aed9d933dff191f170cd"}, 1005 | {file = "numpy-2.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:99f4a9ee60eed1385a86e82288971a51e71df052ed0b2900ed30bc840c0f2e39"}, 1006 | {file = "numpy-2.1.1.tar.gz", hash = "sha256:d0cf7d55b1051387807405b3898efafa862997b4cba8aa5dbe657be794afeafd"}, 1007 | ] 1008 | 1009 | [[package]] 1010 | name = "packaging" 1011 | version = "24.1" 1012 | description = "Core utilities for Python packages" 1013 | optional = false 1014 | python-versions = ">=3.8" 1015 | files = [ 1016 | {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, 1017 | {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, 1018 | ] 1019 | 1020 | [[package]] 1021 | name = "pathspec" 1022 | version = "0.12.1" 1023 | description = "Utility library for gitignore style pattern matching of file paths." 1024 | optional = false 1025 | python-versions = ">=3.8" 1026 | files = [ 1027 | {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, 1028 | {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, 1029 | ] 1030 | 1031 | [[package]] 1032 | name = "pillow" 1033 | version = "10.4.0" 1034 | description = "Python Imaging Library (Fork)" 1035 | optional = false 1036 | python-versions = ">=3.8" 1037 | files = [ 1038 | {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"}, 1039 | {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"}, 1040 | {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856"}, 1041 | {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f"}, 1042 | {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b"}, 1043 | {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc"}, 1044 | {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e"}, 1045 | {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46"}, 1046 | {file = "pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984"}, 1047 | {file = "pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141"}, 1048 | {file = "pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"}, 1049 | {file = "pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c"}, 1050 | {file = "pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be"}, 1051 | {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3"}, 1052 | {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6"}, 1053 | {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe"}, 1054 | {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319"}, 1055 | {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d"}, 1056 | {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696"}, 1057 | {file = "pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496"}, 1058 | {file = "pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91"}, 1059 | {file = "pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22"}, 1060 | {file = "pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94"}, 1061 | {file = "pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597"}, 1062 | {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80"}, 1063 | {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca"}, 1064 | {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef"}, 1065 | {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a"}, 1066 | {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b"}, 1067 | {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9"}, 1068 | {file = "pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42"}, 1069 | {file = "pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a"}, 1070 | {file = "pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9"}, 1071 | {file = "pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3"}, 1072 | {file = "pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb"}, 1073 | {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70"}, 1074 | {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be"}, 1075 | {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0"}, 1076 | {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc"}, 1077 | {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a"}, 1078 | {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309"}, 1079 | {file = "pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060"}, 1080 | {file = "pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea"}, 1081 | {file = "pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d"}, 1082 | {file = "pillow-10.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736"}, 1083 | {file = "pillow-10.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b"}, 1084 | {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2"}, 1085 | {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680"}, 1086 | {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b"}, 1087 | {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd"}, 1088 | {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84"}, 1089 | {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0"}, 1090 | {file = "pillow-10.4.0-cp38-cp38-win32.whl", hash = "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e"}, 1091 | {file = "pillow-10.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab"}, 1092 | {file = "pillow-10.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d"}, 1093 | {file = "pillow-10.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b"}, 1094 | {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd"}, 1095 | {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126"}, 1096 | {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b"}, 1097 | {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c"}, 1098 | {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1"}, 1099 | {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df"}, 1100 | {file = "pillow-10.4.0-cp39-cp39-win32.whl", hash = "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef"}, 1101 | {file = "pillow-10.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5"}, 1102 | {file = "pillow-10.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e"}, 1103 | {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4"}, 1104 | {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da"}, 1105 | {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026"}, 1106 | {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e"}, 1107 | {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5"}, 1108 | {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885"}, 1109 | {file = "pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5"}, 1110 | {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b"}, 1111 | {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908"}, 1112 | {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b"}, 1113 | {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8"}, 1114 | {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a"}, 1115 | {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27"}, 1116 | {file = "pillow-10.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3"}, 1117 | {file = "pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06"}, 1118 | ] 1119 | 1120 | [package.extras] 1121 | docs = ["furo", "olefile", "sphinx (>=7.3)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] 1122 | fpx = ["olefile"] 1123 | mic = ["olefile"] 1124 | tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] 1125 | typing = ["typing-extensions"] 1126 | xmp = ["defusedxml"] 1127 | 1128 | [[package]] 1129 | name = "platformdirs" 1130 | version = "4.2.2" 1131 | description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." 1132 | optional = false 1133 | python-versions = ">=3.8" 1134 | files = [ 1135 | {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, 1136 | {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, 1137 | ] 1138 | 1139 | [package.extras] 1140 | docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] 1141 | test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] 1142 | type = ["mypy (>=1.8)"] 1143 | 1144 | [[package]] 1145 | name = "pluggy" 1146 | version = "1.5.0" 1147 | description = "plugin and hook calling mechanisms for python" 1148 | optional = false 1149 | python-versions = ">=3.8" 1150 | files = [ 1151 | {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, 1152 | {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, 1153 | ] 1154 | 1155 | [package.extras] 1156 | dev = ["pre-commit", "tox"] 1157 | testing = ["pytest", "pytest-benchmark"] 1158 | 1159 | [[package]] 1160 | name = "proglog" 1161 | version = "0.1.10" 1162 | description = "Log and progress bar manager for console, notebooks, web..." 1163 | optional = false 1164 | python-versions = "*" 1165 | files = [ 1166 | {file = "proglog-0.1.10-py3-none-any.whl", hash = "sha256:19d5da037e8c813da480b741e3fa71fb1ac0a5b02bf21c41577c7f327485ec50"}, 1167 | {file = "proglog-0.1.10.tar.gz", hash = "sha256:658c28c9c82e4caeb2f25f488fff9ceace22f8d69b15d0c1c86d64275e4ddab4"}, 1168 | ] 1169 | 1170 | [package.dependencies] 1171 | tqdm = "*" 1172 | 1173 | [[package]] 1174 | name = "py" 1175 | version = "1.11.0" 1176 | description = "library with cross-python path, ini-parsing, io, code, log facilities" 1177 | optional = false 1178 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 1179 | files = [ 1180 | {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, 1181 | {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, 1182 | ] 1183 | 1184 | [[package]] 1185 | name = "pycodestyle" 1186 | version = "2.12.1" 1187 | description = "Python style guide checker" 1188 | optional = false 1189 | python-versions = ">=3.8" 1190 | files = [ 1191 | {file = "pycodestyle-2.12.1-py2.py3-none-any.whl", hash = "sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3"}, 1192 | {file = "pycodestyle-2.12.1.tar.gz", hash = "sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521"}, 1193 | ] 1194 | 1195 | [[package]] 1196 | name = "pydocstyle" 1197 | version = "6.3.0" 1198 | description = "Python docstring style checker" 1199 | optional = false 1200 | python-versions = ">=3.6" 1201 | files = [ 1202 | {file = "pydocstyle-6.3.0-py3-none-any.whl", hash = "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019"}, 1203 | {file = "pydocstyle-6.3.0.tar.gz", hash = "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1"}, 1204 | ] 1205 | 1206 | [package.dependencies] 1207 | snowballstemmer = ">=2.2.0" 1208 | 1209 | [package.extras] 1210 | toml = ["tomli (>=1.2.3)"] 1211 | 1212 | [[package]] 1213 | name = "pyflakes" 1214 | version = "3.2.0" 1215 | description = "passive checker of Python programs" 1216 | optional = false 1217 | python-versions = ">=3.8" 1218 | files = [ 1219 | {file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"}, 1220 | {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, 1221 | ] 1222 | 1223 | [[package]] 1224 | name = "pylama" 1225 | version = "7.7.1" 1226 | description = "pylama -- Code audit tool for python" 1227 | optional = false 1228 | python-versions = "*" 1229 | files = [ 1230 | {file = "pylama-7.7.1-py2.py3-none-any.whl", hash = "sha256:fd61c11872d6256b019ef1235be37b77c922ef37ac9797df6bd489996dddeb15"}, 1231 | {file = "pylama-7.7.1.tar.gz", hash = "sha256:9bae53ef9c1a431371d6a8dca406816a60d547147b60a4934721898f553b7d8f"}, 1232 | ] 1233 | 1234 | [package.dependencies] 1235 | mccabe = ">=0.5.2" 1236 | pycodestyle = ">=2.3.1" 1237 | pydocstyle = ">=2.0.0" 1238 | pyflakes = ">=1.5.0" 1239 | 1240 | [[package]] 1241 | name = "pylama-pylint" 1242 | version = "3.1.1" 1243 | description = "Pylint integration to pylama library." 1244 | optional = false 1245 | python-versions = "*" 1246 | files = [ 1247 | {file = "pylama_pylint-3.1.1-py2.py3-none-any.whl", hash = "sha256:56ee65f344760a606d34b6384696fee42fa1a9ef5a14c760230d47cc2da60d52"}, 1248 | {file = "pylama_pylint-3.1.1.tar.gz", hash = "sha256:c17833da77cf2e7f12948ed4cedaf89b78b6c79e0c5efb96d11af16fb86b9c5f"}, 1249 | ] 1250 | 1251 | [package.dependencies] 1252 | pylama = ">=6.3.3" 1253 | pylint = ">=1.6.4" 1254 | 1255 | [[package]] 1256 | name = "pylint" 1257 | version = "3.2.7" 1258 | description = "python code static checker" 1259 | optional = false 1260 | python-versions = ">=3.8.0" 1261 | files = [ 1262 | {file = "pylint-3.2.7-py3-none-any.whl", hash = "sha256:02f4aedeac91be69fb3b4bea997ce580a4ac68ce58b89eaefeaf06749df73f4b"}, 1263 | {file = "pylint-3.2.7.tar.gz", hash = "sha256:1b7a721b575eaeaa7d39db076b6e7743c993ea44f57979127c517c6c572c803e"}, 1264 | ] 1265 | 1266 | [package.dependencies] 1267 | astroid = ">=3.2.4,<=3.3.0-dev0" 1268 | colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} 1269 | dill = [ 1270 | {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, 1271 | {version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, 1272 | ] 1273 | isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" 1274 | mccabe = ">=0.6,<0.8" 1275 | platformdirs = ">=2.2.0" 1276 | tomlkit = ">=0.10.1" 1277 | 1278 | [package.extras] 1279 | spelling = ["pyenchant (>=3.2,<4.0)"] 1280 | testutils = ["gitpython (>3)"] 1281 | 1282 | [[package]] 1283 | name = "pytest" 1284 | version = "6.2.5" 1285 | description = "pytest: simple powerful testing with Python" 1286 | optional = false 1287 | python-versions = ">=3.6" 1288 | files = [ 1289 | {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, 1290 | {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, 1291 | ] 1292 | 1293 | [package.dependencies] 1294 | atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} 1295 | attrs = ">=19.2.0" 1296 | colorama = {version = "*", markers = "sys_platform == \"win32\""} 1297 | iniconfig = "*" 1298 | packaging = "*" 1299 | pluggy = ">=0.12,<2.0" 1300 | py = ">=1.8.2" 1301 | toml = "*" 1302 | 1303 | [package.extras] 1304 | testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] 1305 | 1306 | [[package]] 1307 | name = "pytest-cov" 1308 | version = "2.10.1" 1309 | description = "Pytest plugin for measuring coverage." 1310 | optional = false 1311 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 1312 | files = [ 1313 | {file = "pytest-cov-2.10.1.tar.gz", hash = "sha256:47bd0ce14056fdd79f93e1713f88fad7bdcc583dcd7783da86ef2f085a0bb88e"}, 1314 | {file = "pytest_cov-2.10.1-py2.py3-none-any.whl", hash = "sha256:45ec2d5182f89a81fc3eb29e3d1ed3113b9e9a873bcddb2a71faaab066110191"}, 1315 | ] 1316 | 1317 | [package.dependencies] 1318 | coverage = ">=4.4" 1319 | pytest = ">=4.6" 1320 | 1321 | [package.extras] 1322 | testing = ["fields", "hunter", "process-tests (==2.0.2)", "pytest-xdist", "six", "virtualenv"] 1323 | 1324 | [[package]] 1325 | name = "pytest-forked" 1326 | version = "1.6.0" 1327 | description = "run tests in isolated forked subprocesses" 1328 | optional = false 1329 | python-versions = ">=3.7" 1330 | files = [ 1331 | {file = "pytest-forked-1.6.0.tar.gz", hash = "sha256:4dafd46a9a600f65d822b8f605133ecf5b3e1941ebb3588e943b4e3eb71a5a3f"}, 1332 | {file = "pytest_forked-1.6.0-py3-none-any.whl", hash = "sha256:810958f66a91afb1a1e2ae83089d8dc1cd2437ac96b12963042fbb9fb4d16af0"}, 1333 | ] 1334 | 1335 | [package.dependencies] 1336 | py = "*" 1337 | pytest = ">=3.10" 1338 | 1339 | [[package]] 1340 | name = "pytest-mock" 1341 | version = "3.4.0" 1342 | description = "Thin-wrapper around the mock package for easier use with pytest" 1343 | optional = false 1344 | python-versions = ">=3.5" 1345 | files = [ 1346 | {file = "pytest-mock-3.4.0.tar.gz", hash = "sha256:c3981f5edee6c4d1942250a60d9b39d38d5585398de1bfce057f925bdda720f4"}, 1347 | {file = "pytest_mock-3.4.0-py3-none-any.whl", hash = "sha256:c0fc979afac4aaba545cbd01e9c20736eb3fefb0a066558764b07d3de8f04ed3"}, 1348 | ] 1349 | 1350 | [package.dependencies] 1351 | pytest = ">=5.0" 1352 | 1353 | [package.extras] 1354 | dev = ["pre-commit", "pytest-asyncio", "tox"] 1355 | 1356 | [[package]] 1357 | name = "pytest-sugar" 1358 | version = "0.9.7" 1359 | description = "pytest-sugar is a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly)." 1360 | optional = false 1361 | python-versions = "*" 1362 | files = [ 1363 | {file = "pytest-sugar-0.9.7.tar.gz", hash = "sha256:f1e74c1abfa55f7241cf7088032b6e378566f16b938f3f08905e2cf4494edd46"}, 1364 | {file = "pytest_sugar-0.9.7-py2.py3-none-any.whl", hash = "sha256:8cb5a4e5f8bbcd834622b0235db9e50432f4cbd71fef55b467fe44e43701e062"}, 1365 | ] 1366 | 1367 | [package.dependencies] 1368 | packaging = ">=21.3" 1369 | pytest = ">=6.2.0" 1370 | termcolor = ">=2.1.0" 1371 | 1372 | [package.extras] 1373 | dev = ["black", "flake8", "pre-commit"] 1374 | 1375 | [[package]] 1376 | name = "pytest-xdist" 1377 | version = "2.2.1" 1378 | description = "pytest xdist plugin for distributed testing and loop-on-failing modes" 1379 | optional = false 1380 | python-versions = ">=3.5" 1381 | files = [ 1382 | {file = "pytest-xdist-2.2.1.tar.gz", hash = "sha256:718887296892f92683f6a51f25a3ae584993b06f7076ce1e1fd482e59a8220a2"}, 1383 | {file = "pytest_xdist-2.2.1-py3-none-any.whl", hash = "sha256:2447a1592ab41745955fb870ac7023026f20a5f0bfccf1b52a879bd193d46450"}, 1384 | ] 1385 | 1386 | [package.dependencies] 1387 | execnet = ">=1.1" 1388 | pytest = ">=6.0.0" 1389 | pytest-forked = "*" 1390 | 1391 | [package.extras] 1392 | psutil = ["psutil (>=3.0)"] 1393 | testing = ["filelock"] 1394 | 1395 | [[package]] 1396 | name = "radon" 1397 | version = "4.3.2" 1398 | description = "Code Metrics in Python" 1399 | optional = false 1400 | python-versions = "*" 1401 | files = [ 1402 | {file = "radon-4.3.2-py2.py3-none-any.whl", hash = "sha256:b991de491eb2edbc2aac8f5f7ebf02b799852f076fa5a73fedf79d144d85e37e"}, 1403 | {file = "radon-4.3.2.tar.gz", hash = "sha256:758b3ab345aa86e95f642713612a57da7c7da6d552c4dbfbe397a67601ace7dd"}, 1404 | ] 1405 | 1406 | [package.dependencies] 1407 | colorama = {version = ">=0.4.1", markers = "python_version > \"3.4\""} 1408 | future = "*" 1409 | mando = ">=0.6,<0.7" 1410 | 1411 | [package.extras] 1412 | flake8 = ["flake8-polyfill"] 1413 | 1414 | [[package]] 1415 | name = "regex" 1416 | version = "2024.7.24" 1417 | description = "Alternative regular expression module, to replace re." 1418 | optional = false 1419 | python-versions = ">=3.8" 1420 | files = [ 1421 | {file = "regex-2024.7.24-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b0d3f567fafa0633aee87f08b9276c7062da9616931382993c03808bb68ce"}, 1422 | {file = "regex-2024.7.24-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3426de3b91d1bc73249042742f45c2148803c111d1175b283270177fdf669024"}, 1423 | {file = "regex-2024.7.24-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f273674b445bcb6e4409bf8d1be67bc4b58e8b46fd0d560055d515b8830063cd"}, 1424 | {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23acc72f0f4e1a9e6e9843d6328177ae3074b4182167e34119ec7233dfeccf53"}, 1425 | {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65fd3d2e228cae024c411c5ccdffae4c315271eee4a8b839291f84f796b34eca"}, 1426 | {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c414cbda77dbf13c3bc88b073a1a9f375c7b0cb5e115e15d4b73ec3a2fbc6f59"}, 1427 | {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf7a89eef64b5455835f5ed30254ec19bf41f7541cd94f266ab7cbd463f00c41"}, 1428 | {file = "regex-2024.7.24-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19c65b00d42804e3fbea9708f0937d157e53429a39b7c61253ff15670ff62cb5"}, 1429 | {file = "regex-2024.7.24-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7a5486ca56c8869070a966321d5ab416ff0f83f30e0e2da1ab48815c8d165d46"}, 1430 | {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f51f9556785e5a203713f5efd9c085b4a45aecd2a42573e2b5041881b588d1f"}, 1431 | {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a4997716674d36a82eab3e86f8fa77080a5d8d96a389a61ea1d0e3a94a582cf7"}, 1432 | {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c0abb5e4e8ce71a61d9446040c1e86d4e6d23f9097275c5bd49ed978755ff0fe"}, 1433 | {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:18300a1d78cf1290fa583cd8b7cde26ecb73e9f5916690cf9d42de569c89b1ce"}, 1434 | {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:416c0e4f56308f34cdb18c3f59849479dde5b19febdcd6e6fa4d04b6c31c9faa"}, 1435 | {file = "regex-2024.7.24-cp310-cp310-win32.whl", hash = "sha256:fb168b5924bef397b5ba13aabd8cf5df7d3d93f10218d7b925e360d436863f66"}, 1436 | {file = "regex-2024.7.24-cp310-cp310-win_amd64.whl", hash = "sha256:6b9fc7e9cc983e75e2518496ba1afc524227c163e43d706688a6bb9eca41617e"}, 1437 | {file = "regex-2024.7.24-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:382281306e3adaaa7b8b9ebbb3ffb43358a7bbf585fa93821300a418bb975281"}, 1438 | {file = "regex-2024.7.24-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4fdd1384619f406ad9037fe6b6eaa3de2749e2e12084abc80169e8e075377d3b"}, 1439 | {file = "regex-2024.7.24-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3d974d24edb231446f708c455fd08f94c41c1ff4f04bcf06e5f36df5ef50b95a"}, 1440 | {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2ec4419a3fe6cf8a4795752596dfe0adb4aea40d3683a132bae9c30b81e8d73"}, 1441 | {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb563dd3aea54c797adf513eeec819c4213d7dbfc311874eb4fd28d10f2ff0f2"}, 1442 | {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:45104baae8b9f67569f0f1dca5e1f1ed77a54ae1cd8b0b07aba89272710db61e"}, 1443 | {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:994448ee01864501912abf2bad9203bffc34158e80fe8bfb5b031f4f8e16da51"}, 1444 | {file = "regex-2024.7.24-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fac296f99283ac232d8125be932c5cd7644084a30748fda013028c815ba3364"}, 1445 | {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7e37e809b9303ec3a179085415cb5f418ecf65ec98cdfe34f6a078b46ef823ee"}, 1446 | {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:01b689e887f612610c869421241e075c02f2e3d1ae93a037cb14f88ab6a8934c"}, 1447 | {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f6442f0f0ff81775eaa5b05af8a0ffa1dda36e9cf6ec1e0d3d245e8564b684ce"}, 1448 | {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:871e3ab2838fbcb4e0865a6e01233975df3a15e6fce93b6f99d75cacbd9862d1"}, 1449 | {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c918b7a1e26b4ab40409820ddccc5d49871a82329640f5005f73572d5eaa9b5e"}, 1450 | {file = "regex-2024.7.24-cp311-cp311-win32.whl", hash = "sha256:2dfbb8baf8ba2c2b9aa2807f44ed272f0913eeeba002478c4577b8d29cde215c"}, 1451 | {file = "regex-2024.7.24-cp311-cp311-win_amd64.whl", hash = "sha256:538d30cd96ed7d1416d3956f94d54e426a8daf7c14527f6e0d6d425fcb4cca52"}, 1452 | {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fe4ebef608553aff8deb845c7f4f1d0740ff76fa672c011cc0bacb2a00fbde86"}, 1453 | {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:74007a5b25b7a678459f06559504f1eec2f0f17bca218c9d56f6a0a12bfffdad"}, 1454 | {file = "regex-2024.7.24-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7df9ea48641da022c2a3c9c641650cd09f0cd15e8908bf931ad538f5ca7919c9"}, 1455 | {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a1141a1dcc32904c47f6846b040275c6e5de0bf73f17d7a409035d55b76f289"}, 1456 | {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80c811cfcb5c331237d9bad3bea2c391114588cf4131707e84d9493064d267f9"}, 1457 | {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7214477bf9bd195894cf24005b1e7b496f46833337b5dedb7b2a6e33f66d962c"}, 1458 | {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d55588cba7553f0b6ec33130bc3e114b355570b45785cebdc9daed8c637dd440"}, 1459 | {file = "regex-2024.7.24-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:558a57cfc32adcf19d3f791f62b5ff564922942e389e3cfdb538a23d65a6b610"}, 1460 | {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a512eed9dfd4117110b1881ba9a59b31433caed0c4101b361f768e7bcbaf93c5"}, 1461 | {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:86b17ba823ea76256b1885652e3a141a99a5c4422f4a869189db328321b73799"}, 1462 | {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5eefee9bfe23f6df09ffb6dfb23809f4d74a78acef004aa904dc7c88b9944b05"}, 1463 | {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:731fcd76bbdbf225e2eb85b7c38da9633ad3073822f5ab32379381e8c3c12e94"}, 1464 | {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eaef80eac3b4cfbdd6de53c6e108b4c534c21ae055d1dbea2de6b3b8ff3def38"}, 1465 | {file = "regex-2024.7.24-cp312-cp312-win32.whl", hash = "sha256:185e029368d6f89f36e526764cf12bf8d6f0e3a2a7737da625a76f594bdfcbfc"}, 1466 | {file = "regex-2024.7.24-cp312-cp312-win_amd64.whl", hash = "sha256:2f1baff13cc2521bea83ab2528e7a80cbe0ebb2c6f0bfad15be7da3aed443908"}, 1467 | {file = "regex-2024.7.24-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:66b4c0731a5c81921e938dcf1a88e978264e26e6ac4ec96a4d21ae0354581ae0"}, 1468 | {file = "regex-2024.7.24-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:88ecc3afd7e776967fa16c80f974cb79399ee8dc6c96423321d6f7d4b881c92b"}, 1469 | {file = "regex-2024.7.24-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:64bd50cf16bcc54b274e20235bf8edbb64184a30e1e53873ff8d444e7ac656b2"}, 1470 | {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb462f0e346fcf41a901a126b50f8781e9a474d3927930f3490f38a6e73b6950"}, 1471 | {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a82465ebbc9b1c5c50738536fdfa7cab639a261a99b469c9d4c7dcbb2b3f1e57"}, 1472 | {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:68a8f8c046c6466ac61a36b65bb2395c74451df2ffb8458492ef49900efed293"}, 1473 | {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac8e84fff5d27420f3c1e879ce9929108e873667ec87e0c8eeb413a5311adfe"}, 1474 | {file = "regex-2024.7.24-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba2537ef2163db9e6ccdbeb6f6424282ae4dea43177402152c67ef869cf3978b"}, 1475 | {file = "regex-2024.7.24-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:43affe33137fcd679bdae93fb25924979517e011f9dea99163f80b82eadc7e53"}, 1476 | {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:c9bb87fdf2ab2370f21e4d5636e5317775e5d51ff32ebff2cf389f71b9b13750"}, 1477 | {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:945352286a541406f99b2655c973852da7911b3f4264e010218bbc1cc73168f2"}, 1478 | {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:8bc593dcce679206b60a538c302d03c29b18e3d862609317cb560e18b66d10cf"}, 1479 | {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:3f3b6ca8eae6d6c75a6cff525c8530c60e909a71a15e1b731723233331de4169"}, 1480 | {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c51edc3541e11fbe83f0c4d9412ef6c79f664a3745fab261457e84465ec9d5a8"}, 1481 | {file = "regex-2024.7.24-cp38-cp38-win32.whl", hash = "sha256:d0a07763776188b4db4c9c7fb1b8c494049f84659bb387b71c73bbc07f189e96"}, 1482 | {file = "regex-2024.7.24-cp38-cp38-win_amd64.whl", hash = "sha256:8fd5afd101dcf86a270d254364e0e8dddedebe6bd1ab9d5f732f274fa00499a5"}, 1483 | {file = "regex-2024.7.24-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0ffe3f9d430cd37d8fa5632ff6fb36d5b24818c5c986893063b4e5bdb84cdf24"}, 1484 | {file = "regex-2024.7.24-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:25419b70ba00a16abc90ee5fce061228206173231f004437730b67ac77323f0d"}, 1485 | {file = "regex-2024.7.24-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:33e2614a7ce627f0cdf2ad104797d1f68342d967de3695678c0cb84f530709f8"}, 1486 | {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d33a0021893ede5969876052796165bab6006559ab845fd7b515a30abdd990dc"}, 1487 | {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04ce29e2c5fedf296b1a1b0acc1724ba93a36fb14031f3abfb7abda2806c1535"}, 1488 | {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b16582783f44fbca6fcf46f61347340c787d7530d88b4d590a397a47583f31dd"}, 1489 | {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:836d3cc225b3e8a943d0b02633fb2f28a66e281290302a79df0e1eaa984ff7c1"}, 1490 | {file = "regex-2024.7.24-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:438d9f0f4bc64e8dea78274caa5af971ceff0f8771e1a2333620969936ba10be"}, 1491 | {file = "regex-2024.7.24-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:973335b1624859cb0e52f96062a28aa18f3a5fc77a96e4a3d6d76e29811a0e6e"}, 1492 | {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c5e69fd3eb0b409432b537fe3c6f44ac089c458ab6b78dcec14478422879ec5f"}, 1493 | {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fbf8c2f00904eaf63ff37718eb13acf8e178cb940520e47b2f05027f5bb34ce3"}, 1494 | {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ae2757ace61bc4061b69af19e4689fa4416e1a04840f33b441034202b5cd02d4"}, 1495 | {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:44fc61b99035fd9b3b9453f1713234e5a7c92a04f3577252b45feefe1b327759"}, 1496 | {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:84c312cdf839e8b579f504afcd7b65f35d60b6285d892b19adea16355e8343c9"}, 1497 | {file = "regex-2024.7.24-cp39-cp39-win32.whl", hash = "sha256:ca5b2028c2f7af4e13fb9fc29b28d0ce767c38c7facdf64f6c2cd040413055f1"}, 1498 | {file = "regex-2024.7.24-cp39-cp39-win_amd64.whl", hash = "sha256:7c479f5ae937ec9985ecaf42e2e10631551d909f203e31308c12d703922742f9"}, 1499 | {file = "regex-2024.7.24.tar.gz", hash = "sha256:9cfd009eed1a46b27c14039ad5bbc5e71b6367c5b2e6d5f5da0ea91600817506"}, 1500 | ] 1501 | 1502 | [[package]] 1503 | name = "requests" 1504 | version = "2.32.3" 1505 | description = "Python HTTP for Humans." 1506 | optional = false 1507 | python-versions = ">=3.8" 1508 | files = [ 1509 | {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, 1510 | {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, 1511 | ] 1512 | 1513 | [package.dependencies] 1514 | certifi = ">=2017.4.17" 1515 | charset-normalizer = ">=2,<4" 1516 | idna = ">=2.5,<4" 1517 | urllib3 = ">=1.21.1,<3" 1518 | 1519 | [package.extras] 1520 | socks = ["PySocks (>=1.5.6,!=1.5.7)"] 1521 | use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] 1522 | 1523 | [[package]] 1524 | name = "setuptools" 1525 | version = "74.1.2" 1526 | description = "Easily download, build, install, upgrade, and uninstall Python packages" 1527 | optional = false 1528 | python-versions = ">=3.8" 1529 | files = [ 1530 | {file = "setuptools-74.1.2-py3-none-any.whl", hash = "sha256:5f4c08aa4d3ebcb57a50c33b1b07e94315d7fc7230f7115e47fc99776c8ce308"}, 1531 | {file = "setuptools-74.1.2.tar.gz", hash = "sha256:95b40ed940a1c67eb70fc099094bd6e99c6ee7c23aa2306f4d2697ba7916f9c6"}, 1532 | ] 1533 | 1534 | [package.extras] 1535 | check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"] 1536 | core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.text (>=3.7)", "more-itertools (>=8.8)", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] 1537 | cover = ["pytest-cov"] 1538 | doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] 1539 | enabler = ["pytest-enabler (>=2.2)"] 1540 | test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] 1541 | type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.11.*)", "pytest-mypy"] 1542 | 1543 | [[package]] 1544 | name = "six" 1545 | version = "1.16.0" 1546 | description = "Python 2 and 3 compatibility utilities" 1547 | optional = false 1548 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" 1549 | files = [ 1550 | {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, 1551 | {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, 1552 | ] 1553 | 1554 | [[package]] 1555 | name = "snowballstemmer" 1556 | version = "2.2.0" 1557 | description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." 1558 | optional = false 1559 | python-versions = "*" 1560 | files = [ 1561 | {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, 1562 | {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, 1563 | ] 1564 | 1565 | [[package]] 1566 | name = "termcolor" 1567 | version = "2.4.0" 1568 | description = "ANSI color formatting for output in terminal" 1569 | optional = false 1570 | python-versions = ">=3.8" 1571 | files = [ 1572 | {file = "termcolor-2.4.0-py3-none-any.whl", hash = "sha256:9297c0df9c99445c2412e832e882a7884038a25617c60cea2ad69488d4040d63"}, 1573 | {file = "termcolor-2.4.0.tar.gz", hash = "sha256:aab9e56047c8ac41ed798fa36d892a37aca6b3e9159f3e0c24bc64a9b3ac7b7a"}, 1574 | ] 1575 | 1576 | [package.extras] 1577 | tests = ["pytest", "pytest-cov"] 1578 | 1579 | [[package]] 1580 | name = "toml" 1581 | version = "0.10.2" 1582 | description = "Python Library for Tom's Obvious, Minimal Language" 1583 | optional = false 1584 | python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" 1585 | files = [ 1586 | {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, 1587 | {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, 1588 | ] 1589 | 1590 | [[package]] 1591 | name = "tomlkit" 1592 | version = "0.13.2" 1593 | description = "Style preserving TOML library" 1594 | optional = false 1595 | python-versions = ">=3.8" 1596 | files = [ 1597 | {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, 1598 | {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, 1599 | ] 1600 | 1601 | [[package]] 1602 | name = "tqdm" 1603 | version = "4.60.0" 1604 | description = "Fast, Extensible Progress Meter" 1605 | optional = false 1606 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" 1607 | files = [ 1608 | {file = "tqdm-4.60.0-py2.py3-none-any.whl", hash = "sha256:daec693491c52e9498632dfbe9ccfc4882a557f5fa08982db1b4d3adbe0887c3"}, 1609 | {file = "tqdm-4.60.0.tar.gz", hash = "sha256:ebdebdb95e3477ceea267decfc0784859aa3df3e27e22d23b83e9b272bf157ae"}, 1610 | ] 1611 | 1612 | [package.extras] 1613 | dev = ["py-make (>=0.1.0)", "twine", "wheel"] 1614 | notebook = ["ipywidgets (>=6)"] 1615 | telegram = ["requests"] 1616 | 1617 | [[package]] 1618 | name = "typed-ast" 1619 | version = "1.5.5" 1620 | description = "a fork of Python 2 and 3 ast modules with type comment support" 1621 | optional = false 1622 | python-versions = ">=3.6" 1623 | files = [ 1624 | {file = "typed_ast-1.5.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4bc1efe0ce3ffb74784e06460f01a223ac1f6ab31c6bc0376a21184bf5aabe3b"}, 1625 | {file = "typed_ast-1.5.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f7a8c46a8b333f71abd61d7ab9255440d4a588f34a21f126bbfc95f6049e686"}, 1626 | {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:597fc66b4162f959ee6a96b978c0435bd63791e31e4f410622d19f1686d5e769"}, 1627 | {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d41b7a686ce653e06c2609075d397ebd5b969d821b9797d029fccd71fdec8e04"}, 1628 | {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5fe83a9a44c4ce67c796a1b466c270c1272e176603d5e06f6afbc101a572859d"}, 1629 | {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d5c0c112a74c0e5db2c75882a0adf3133adedcdbfd8cf7c9d6ed77365ab90a1d"}, 1630 | {file = "typed_ast-1.5.5-cp310-cp310-win_amd64.whl", hash = "sha256:e1a976ed4cc2d71bb073e1b2a250892a6e968ff02aa14c1f40eba4f365ffec02"}, 1631 | {file = "typed_ast-1.5.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c631da9710271cb67b08bd3f3813b7af7f4c69c319b75475436fcab8c3d21bee"}, 1632 | {file = "typed_ast-1.5.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b445c2abfecab89a932b20bd8261488d574591173d07827c1eda32c457358b18"}, 1633 | {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc95ffaaab2be3b25eb938779e43f513e0e538a84dd14a5d844b8f2932593d88"}, 1634 | {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61443214d9b4c660dcf4b5307f15c12cb30bdfe9588ce6158f4a005baeb167b2"}, 1635 | {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6eb936d107e4d474940469e8ec5b380c9b329b5f08b78282d46baeebd3692dc9"}, 1636 | {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e48bf27022897577d8479eaed64701ecaf0467182448bd95759883300ca818c8"}, 1637 | {file = "typed_ast-1.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:83509f9324011c9a39faaef0922c6f720f9623afe3fe220b6d0b15638247206b"}, 1638 | {file = "typed_ast-1.5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:44f214394fc1af23ca6d4e9e744804d890045d1643dd7e8229951e0ef39429b5"}, 1639 | {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:118c1ce46ce58fda78503eae14b7664163aa735b620b64b5b725453696f2a35c"}, 1640 | {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4919b808efa61101456e87f2d4c75b228f4e52618621c77f1ddcaae15904fa"}, 1641 | {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:fc2b8c4e1bc5cd96c1a823a885e6b158f8451cf6f5530e1829390b4d27d0807f"}, 1642 | {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:16f7313e0a08c7de57f2998c85e2a69a642e97cb32f87eb65fbfe88381a5e44d"}, 1643 | {file = "typed_ast-1.5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:2b946ef8c04f77230489f75b4b5a4a6f24c078be4aed241cfabe9cbf4156e7e5"}, 1644 | {file = "typed_ast-1.5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2188bc33d85951ea4ddad55d2b35598b2709d122c11c75cffd529fbc9965508e"}, 1645 | {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0635900d16ae133cab3b26c607586131269f88266954eb04ec31535c9a12ef1e"}, 1646 | {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57bfc3cf35a0f2fdf0a88a3044aafaec1d2f24d8ae8cd87c4f58d615fb5b6311"}, 1647 | {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fe58ef6a764de7b4b36edfc8592641f56e69b7163bba9f9c8089838ee596bfb2"}, 1648 | {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d09d930c2d1d621f717bb217bf1fe2584616febb5138d9b3e8cdd26506c3f6d4"}, 1649 | {file = "typed_ast-1.5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:d40c10326893ecab8a80a53039164a224984339b2c32a6baf55ecbd5b1df6431"}, 1650 | {file = "typed_ast-1.5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fd946abf3c31fb50eee07451a6aedbfff912fcd13cf357363f5b4e834cc5e71a"}, 1651 | {file = "typed_ast-1.5.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ed4a1a42df8a3dfb6b40c3d2de109e935949f2f66b19703eafade03173f8f437"}, 1652 | {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:045f9930a1550d9352464e5149710d56a2aed23a2ffe78946478f7b5416f1ede"}, 1653 | {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:381eed9c95484ceef5ced626355fdc0765ab51d8553fec08661dce654a935db4"}, 1654 | {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bfd39a41c0ef6f31684daff53befddae608f9daf6957140228a08e51f312d7e6"}, 1655 | {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8c524eb3024edcc04e288db9541fe1f438f82d281e591c548903d5b77ad1ddd4"}, 1656 | {file = "typed_ast-1.5.5-cp38-cp38-win_amd64.whl", hash = "sha256:7f58fabdde8dcbe764cef5e1a7fcb440f2463c1bbbec1cf2a86ca7bc1f95184b"}, 1657 | {file = "typed_ast-1.5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:042eb665ff6bf020dd2243307d11ed626306b82812aba21836096d229fdc6a10"}, 1658 | {file = "typed_ast-1.5.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:622e4a006472b05cf6ef7f9f2636edc51bda670b7bbffa18d26b255269d3d814"}, 1659 | {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1efebbbf4604ad1283e963e8915daa240cb4bf5067053cf2f0baadc4d4fb51b8"}, 1660 | {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0aefdd66f1784c58f65b502b6cf8b121544680456d1cebbd300c2c813899274"}, 1661 | {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:48074261a842acf825af1968cd912f6f21357316080ebaca5f19abbb11690c8a"}, 1662 | {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:429ae404f69dc94b9361bb62291885894b7c6fb4640d561179548c849f8492ba"}, 1663 | {file = "typed_ast-1.5.5-cp39-cp39-win_amd64.whl", hash = "sha256:335f22ccb244da2b5c296e6f96b06ee9bed46526db0de38d2f0e5a6597b81155"}, 1664 | {file = "typed_ast-1.5.5.tar.gz", hash = "sha256:94282f7a354f36ef5dbce0ef3467ebf6a258e370ab33d5b40c249fa996e590dd"}, 1665 | ] 1666 | 1667 | [[package]] 1668 | name = "types-awscrt" 1669 | version = "0.21.5" 1670 | description = "Type annotations and code completion for awscrt" 1671 | optional = false 1672 | python-versions = ">=3.8" 1673 | files = [ 1674 | {file = "types_awscrt-0.21.5-py3-none-any.whl", hash = "sha256:117ff2b1bb657f09d01b7e0ce3fe3fa6e039be12d30b826896182725c9ce85b1"}, 1675 | {file = "types_awscrt-0.21.5.tar.gz", hash = "sha256:9f7f47de68799cb2bcb9e486f48d77b9f58962b92fba43cb8860da70b3c57d1b"}, 1676 | ] 1677 | 1678 | [[package]] 1679 | name = "types-s3transfer" 1680 | version = "0.10.2" 1681 | description = "Type annotations and code completion for s3transfer" 1682 | optional = false 1683 | python-versions = ">=3.8" 1684 | files = [ 1685 | {file = "types_s3transfer-0.10.2-py3-none-any.whl", hash = "sha256:7a3fec8cd632e2b5efb665a355ef93c2a87fdd5a45b74a949f95a9e628a86356"}, 1686 | {file = "types_s3transfer-0.10.2.tar.gz", hash = "sha256:60167a3bfb5c536ec6cdb5818f7f9a28edca9dc3e0b5ff85ae374526fc5e576e"}, 1687 | ] 1688 | 1689 | [[package]] 1690 | name = "typing-extensions" 1691 | version = "4.12.2" 1692 | description = "Backported and Experimental Type Hints for Python 3.8+" 1693 | optional = false 1694 | python-versions = ">=3.8" 1695 | files = [ 1696 | {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, 1697 | {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, 1698 | ] 1699 | 1700 | [[package]] 1701 | name = "urllib3" 1702 | version = "2.2.2" 1703 | description = "HTTP library with thread-safe connection pooling, file post, and more." 1704 | optional = false 1705 | python-versions = ">=3.8" 1706 | files = [ 1707 | {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, 1708 | {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, 1709 | ] 1710 | 1711 | [package.extras] 1712 | brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] 1713 | h2 = ["h2 (>=4,<5)"] 1714 | socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] 1715 | zstd = ["zstandard (>=0.18.0)"] 1716 | 1717 | [metadata] 1718 | lock-version = "2.0" 1719 | python-versions = "^3.11" 1720 | content-hash = "8baaa4451b612afdd84f822e6b4db28765a42354b708b42523c5e605f5b3ae2c" 1721 | --------------------------------------------------------------------------------