├── examples ├── assets │ └── jfk.wav └── output │ ├── sample.vtt │ └── sample.srt ├── .github ├── dependabot.yml └── workflows │ └── test.yml ├── .envrc.example ├── src └── wscribe │ ├── sources │ └── local.py │ ├── __init__.py │ ├── core.py │ ├── backends │ └── fasterwhisper.py │ ├── writers.py │ └── cli │ └── main.py ├── scripts ├── speed_check.sh └── fw_dw_hf_wo_lfs.sh ├── tests └── test_wscribe.py ├── Makefile.common ├── LICENSE ├── pyproject.toml ├── Makefile ├── .gitignore ├── README.org ├── docs └── README.md └── poetry.lock /examples/assets/jfk.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geekodour/wscribe/HEAD/examples/assets/jfk.wav -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: 2 3 | updates: 4 | - package-ecosystem: "github-actions" 5 | directory: "/" 6 | schedule: 7 | interval: "monthly" 8 | -------------------------------------------------------------------------------- /.envrc.example: -------------------------------------------------------------------------------- 1 | export PYTHONDONTWRITEBYTECODE=1 2 | export PROJECT_ROOT=$PWD 3 | export WSCRIBE_MODELS_DIR=$XDG_DATA_HOME/whisper-models 4 | export PYTHONBREAKPOINT="pudb.set_trace" 5 | -------------------------------------------------------------------------------- /src/wscribe/sources/local.py: -------------------------------------------------------------------------------- 1 | import os 2 | from dataclasses import dataclass 3 | 4 | from ..core import Audio 5 | 6 | 7 | @dataclass(kw_only=True) 8 | class LocalAudio(Audio): 9 | def __post_init__(self): 10 | self.fetch_audio() 11 | 12 | def fetch_audio(self): 13 | if os.path.exists(self.source): 14 | self.local_source_path = self.source 15 | else: 16 | raise RuntimeError("specified local path doesn't exist") 17 | -------------------------------------------------------------------------------- /scripts/speed_check.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Runs wscribe with basic settings and diffent audio and prints reports to 4 | # stdout 5 | 6 | set -euo pipefail 7 | 8 | # gpu 9 | wscribe transcribe ./test.mp3 test.json -m tiny -g -q -s 10 | wscribe transcribe ./test.mp3 test.json -m small -g -q -s 11 | wscribe transcribe ./test.mp3 test.json -m medium -g -q -s 12 | wscribe transcribe ./test.mp3 test.json -m large-v2 -g -q -s 13 | 14 | # cpu 15 | wscribe transcribe ./test.mp3 test.json -m tiny -q -s 16 | wscribe transcribe ./test.mp3 test.json -m small -q -s 17 | wscribe transcribe ./test.mp3 test.json -m medium -q -s 18 | wscribe transcribe ./test.mp3 test.json -m large-v2 -q -s 19 | -------------------------------------------------------------------------------- /tests/test_wscribe.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | import pytest 4 | 5 | from wscribe.backends.fasterwhisper import FasterWhisperBackend 6 | from wscribe.sources.local import LocalAudio 7 | 8 | 9 | class TestFastWhisper: 10 | def test_json(self, faster_whisper_tools): 11 | model, sample_path = faster_whisper_tools 12 | audio = LocalAudio(source=sample_path).convert_audio() 13 | model.load() 14 | data = model.transcribe(input=audio) 15 | assert set(data[0].keys()) == {"text", "start", "end", "score", "words"} 16 | assert set(data[0]["words"][0].keys()) == { 17 | "text", 18 | "start", 19 | "end", 20 | "score", 21 | } 22 | 23 | 24 | @pytest.fixture 25 | def faster_whisper_tools(): 26 | model = FasterWhisperBackend(model_size="tiny", device="cpu", quantization="int8") 27 | sample_audio_path = os.path.join( 28 | os.environ["PROJECT_ROOT"], "examples", "assets", "jfk.wav" 29 | ) 30 | return model, sample_audio_path 31 | -------------------------------------------------------------------------------- /Makefile.common: -------------------------------------------------------------------------------- 1 | # ┈┈┈┈▕▔╱▔▔▔━▁ 2 | # ┈┈┈▕▔╱╱╱👁┈╲▂▔▔╲ 3 | # ┈┈▕▔╱╱╱╱💧▂▂▂▂▂▂▏ 4 | # ┈▕▔╱▕▕╱╱╱┈▽▽▽▽▽ 5 | # ▕▔╱┊┈╲╲╲╲▂△△△△ 6 | # ▔╱┊┈╱▕╲▂▂▂▂▂▂╱ 7 | # ╱┊┈╱┉▕┉┋╲┈ 8 | .DEFAULT_GOAL := help 9 | MKCOM_LOC = https://raw.githubusercontent.com/geekodour/t/main/Makefile.common 10 | TEMPLATE_PLACEHOLDER = bake 11 | .PHONY: update-makefile-common # Update Makefile.common with the latest version of it 12 | update-makefile-common: 13 | wget -O Makefile.common.latest ${MKCOM_LOC} 14 | mv Makefile.common.latest Makefile.common 15 | 16 | .PHONY: show-template-placeholder # show all the file content and filenames w template placeholder 17 | show-template-placeholder: 18 | @echo "File contents:" 19 | @rg -g "!.venv" -g "!.git" -g "!vendor" -uu ${TEMPLATE_PLACEHOLDER} 20 | @echo "Files:" 21 | @fd ${TEMPLATE_PLACEHOLDER} 22 | 23 | .PHONY: help # Generate list of targets with descriptions 24 | help: 25 | @echo "Target descriptions" 26 | @echo "NOTE: Targets with no description are not listed" 27 | @echo 28 | @grep '^.PHONY: .* #' Makefile | sed 's/\.PHONY: \(.*\) # \(.*\)/\1;;;\2/' | column -t -s ";;;" 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Hrishikesh Barman 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 | -------------------------------------------------------------------------------- /scripts/fw_dw_hf_wo_lfs.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Downloads models from HF without LFS for faster-whisper 4 | # NOTE: This is specific to faster-whisper 5 | 6 | set -euo pipefail 7 | 8 | if [[ -z "${WSCRIBE_MODELS_DIR+bound_check}" ]]; then 9 | printf "WSCRIBE_MODELS_DIR env missing" 10 | exit 1 11 | fi 12 | 13 | url_pfx="https://huggingface.co/guillaumekln" 14 | function fetch { 15 | git clone "$hf_url" "$WSCRIBE_MODELS_DIR/$model_name" 16 | git lfs pull || curl -L "$hf_url/resolve/main/model.bin" -o "$WSCRIBE_MODELS_DIR/$model_name/model.bin" 17 | } 18 | 19 | 20 | if [[ $# -ne 1 ]]; then 21 | printf "Usage: %s \n\ 22 | WSCRIBE_MODELS_DIR is set\n\ 23 | Models will be downloaded \ 24 | to: %s\n" "$0" "$WSCRIBE_MODELS_DIR" 25 | exit 1 26 | fi 27 | 28 | model_name="faster-whisper-$1" 29 | hf_url="$url_pfx/$model_name" 30 | size_regex='(tiny|small|medium|large-v2)' 31 | 32 | if ! [[ $1 =~ $size_regex ]]; then 33 | printf "%s should match one of %s" "$1" "$size_regex" 34 | exit 1 35 | fi 36 | 37 | fetch 38 | printf "%s was downloaded to %s" "$model_name" "$WSCRIBE_MODELS_DIR/$model_name" 39 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: 3 | push: 4 | branches: [main] 5 | pull_request: 6 | 7 | jobs: 8 | ci: 9 | strategy: 10 | fail-fast: false 11 | matrix: 12 | python-version: ["3.10"] 13 | os: [ubuntu-latest] 14 | runs-on: ${{ matrix.os }} 15 | env: 16 | PROJECT_ROOT: ${{github.workspace}} 17 | WSCRIBE_MODELS_DIR: ${{github.workspace}}/models 18 | steps: 19 | - uses: actions/checkout@v4 20 | - name: Cache whisper model 21 | id: cache-whisper-model 22 | uses: actions/cache@v3 23 | with: 24 | key: "tiny" # static key, always cache hit, manually invalidate 25 | path: ${{env.WSCRIBE_MODELS_DIR}} 26 | - if: ${{ steps.cache-whisper-model.outputs.cache-hit != 'true' }} 27 | name: download whisper model 28 | run: | 29 | ./scripts/fw_dw_hf_wo_lfs.sh tiny 30 | - name: Install poetry 31 | run: pipx install poetry 32 | - uses: actions/setup-python@v4 33 | with: 34 | python-version: ${{ matrix.python-version }} 35 | cache: "poetry" 36 | - run: poetry install 37 | - run: poetry run make spin 38 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "wscribe" 3 | version = "0.1.5" 4 | description = "ez audio transcription tool with flexible processing and post-processing options" 5 | authors = ["Hrishikesh Barman "] 6 | homepage = "https://github.com/geekodour/wscribe" 7 | license = "MIT" 8 | readme = "docs/README.md" 9 | packages = [{include = "wscribe", from = "src"}] 10 | 11 | [tool.poetry.scripts] 12 | wscribe = "wscribe.cli.main:cli" 13 | 14 | [tool.poetry.dependencies] 15 | # tool.*.group.*.dependencies$ : These can only be installed via poetry 16 | # tool.poetry.*$ : These can be installed via pip also 17 | python = "^3.10" 18 | structlog = "^23.1.0" 19 | faster-whisper = "^0.9.0" 20 | click = "^8.1.6" 21 | 22 | [tool.poetry.group.dev.dependencies] 23 | pudb = "^2022.1.3" 24 | ipython = "^8.13.2" 25 | isort = "^5.12.0" 26 | ruff = "^0.0.270" 27 | black = "^23.3.0" 28 | snoop = "^0.4.3" 29 | 30 | [tool.poetry.group.test.dependencies] 31 | pytest = "^7.3.1" 32 | mypy = "^1.3.0" 33 | 34 | [tool.pytest.ini_options] 35 | log_cli = true 36 | log_cli_level = "INFO" 37 | log_cli_format = "%(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)" 38 | log_cli_date_format = "%Y-%m-%d %H:%M:%S" 39 | 40 | 41 | [build-system] 42 | requires = ["poetry-core"] 43 | build-backend = "poetry.core.masonry.api" 44 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # deps 3 | # 4 | .PHONY: deps-sync # sync dependencies 5 | deps-sync: 6 | poetry install --sync 7 | 8 | .PHONY: deps-show # build source and wheel 9 | deps-show: 10 | poetry show 11 | 12 | # 13 | # publishing 14 | # 15 | .PHONY: package-publish # publish to pypi 16 | package-publish: 17 | poetry publish 18 | 19 | .PHONY: package-publish-test # publish to test.pypi 20 | package-publish-test: 21 | poetry publish -r test-pypi 22 | 23 | .PHONY: package-build # build source and wheel 24 | package-build: 25 | poetry build 26 | 27 | .PHONY: package-version-bump-patch # bump patch version 28 | package-version-bump-patch: 29 | poetry version patch 30 | 31 | .PHONY: package-version-bump-prerelease # bump prerelease version 32 | package-version-bump-prerelease: 33 | poetry version prerelease 34 | 35 | # 36 | # tests 37 | # 38 | .PHONY: spin # run all checks 39 | spin: typecheck lint test-quiet 40 | 41 | .PHONY: test # run test 42 | test: 43 | pytest 44 | 45 | # mypy won't report anything if you haven't type hinted/annotated your code 46 | .PHONY: typecheck # run mypy 47 | typecheck: 48 | mypy . 49 | 50 | .PHONY: lint # run linter 51 | lint: 52 | #ruff . 53 | isort . --check-only 54 | black . --check 55 | 56 | .PHONY: test-quiet # run test quietly 57 | test-quiet: 58 | pytest -q 59 | 60 | .PHONY: test-dry-run # dry-run test, just get test names 61 | test-dry-run: 62 | pytest --collect-only 63 | 64 | include Makefile.common 65 | -------------------------------------------------------------------------------- /src/wscribe/__init__.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import sys 3 | from typing import Iterable 4 | 5 | import structlog 6 | from structlog.typing import Processor 7 | 8 | 9 | def setup_stdlogger(): 10 | DATEFMT = "%d-%m-%Y %I:%M:%S %p" 11 | FORMAT = "%(message)s" 12 | logging.basicConfig( 13 | format=FORMAT, 14 | stream=sys.stdout, # https://12factor.net/logs 15 | level=None, 16 | datefmt=DATEFMT, 17 | ) 18 | 19 | 20 | def get_structlog_processors() -> Iterable[Processor]: 21 | processors: Iterable[Processor] = [ 22 | structlog.stdlib.add_logger_name, 23 | structlog.stdlib.add_log_level, 24 | structlog.stdlib.PositionalArgumentsFormatter(), 25 | structlog.processors.TimeStamper(fmt="%Y-%m-%d %H:%M.%S"), 26 | structlog.processors.TimeStamper(fmt="iso"), 27 | structlog.processors.StackInfoRenderer(), 28 | structlog.processors.format_exc_info, 29 | structlog.processors.UnicodeDecoder(), 30 | structlog.processors.CallsiteParameterAdder( 31 | { 32 | structlog.processors.CallsiteParameter.FILENAME, 33 | structlog.processors.CallsiteParameter.FUNC_NAME, 34 | structlog.processors.CallsiteParameter.LINENO, 35 | } 36 | ), 37 | ] 38 | if sys.stderr.isatty(): 39 | return processors + [structlog.dev.ConsoleRenderer()] # type: ignore 40 | else: 41 | return processors + [ # type: ignore 42 | structlog.processors.dict_tracebacks, 43 | structlog.processors.JSONRenderer(), 44 | ] 45 | 46 | 47 | # structlog logger 48 | # see https://www.structlog.org/en/stable/contextvars.html 49 | def setup_structlog(): 50 | structlog.configure( 51 | logger_factory=structlog.stdlib.LoggerFactory(), 52 | cache_logger_on_first_use=True, 53 | wrapper_class=structlog.BoundLogger, 54 | processors=get_structlog_processors(), 55 | ) 56 | 57 | 58 | setup_stdlogger() 59 | setup_structlog() 60 | -------------------------------------------------------------------------------- /src/wscribe/core.py: -------------------------------------------------------------------------------- 1 | from ctypes import Union 2 | from dataclasses import dataclass 3 | from typing import Any, Mapping, TypedDict 4 | 5 | import numpy as np 6 | import structlog 7 | from faster_whisper.audio import decode_audio # type: ignore 8 | 9 | LOGGER = structlog.get_logger() 10 | SUPPORTED_MODELS = ["tiny", "small", "medium", "large-v2"] 11 | 12 | WordData = TypedDict( 13 | "WordData", {"text": str, "start": float | str, "end": float | str, "score": float} 14 | ) 15 | TranscribedData = TypedDict( 16 | "TranscribedData", 17 | { 18 | "text": str, 19 | "start": float | str, 20 | "end": float | str, 21 | "score": float, 22 | "words": list[WordData], 23 | }, 24 | ) 25 | 26 | 27 | @dataclass(kw_only=True) 28 | class Backend: 29 | name: str = "faster-whisper" 30 | model_size: str 31 | 32 | def __post_init__(self): 33 | if self.model_size not in self.supported_model_sizes(): 34 | raise ValueError(f"model must be one of {self.supported_model_sizes()}") 35 | 36 | def supported_backends(self): 37 | """ 38 | This is of not much use as of the moment, If we ever support multiple 39 | backends this can be utilized. 40 | """ 41 | return ["faster-whisper"] 42 | 43 | def model_path(self) -> str: 44 | """ 45 | Returns the local path to the model, error-out if unavailable 46 | """ 47 | raise NotImplementedError() 48 | 49 | def supported_model_sizes(self) -> list[str]: 50 | return SUPPORTED_MODELS 51 | 52 | def load(self): 53 | raise NotImplementedError() 54 | 55 | def transcribe(self, input: np.ndarray) -> list[TranscribedData]: 56 | """ 57 | This should return word level transcription data. 58 | """ 59 | raise NotImplementedError() 60 | 61 | 62 | @dataclass(kw_only=True) 63 | class Audio: 64 | source: str 65 | local_source_path: str = "" 66 | sampling_rate: int = 16000 67 | 68 | def fetch_audio(self): 69 | """ 70 | Fetches audio and sets local_source_path 71 | Should be implemented by inherited class 72 | """ 73 | raise NotImplementedError() 74 | 75 | @staticmethod 76 | def determine_source_type(source: str) -> str: 77 | """ 78 | regex match 79 | User is supposed to initialte appropriate class based on this 80 | """ 81 | raise NotImplementedError() 82 | 83 | def convert_audio(self) -> np.ndarray: 84 | return decode_audio(self.local_source_path, split_stereo=False, sampling_rate=self.sampling_rate) # type: ignore 85 | -------------------------------------------------------------------------------- /src/wscribe/backends/fasterwhisper.py: -------------------------------------------------------------------------------- 1 | import math 2 | import os 3 | from dataclasses import dataclass 4 | from typing import Any, Mapping, MutableMapping, Optional 5 | 6 | import numpy as np 7 | import structlog 8 | from faster_whisper import WhisperModel # type: ignore 9 | from tqdm import tqdm # type: ignore 10 | 11 | from ..core import Backend, TranscribedData 12 | from ..writers import format_timestamp 13 | 14 | DEFAULT_BEAM = 5 15 | LOGGER = structlog.get_logger() 16 | 17 | 18 | @dataclass(kw_only=True) 19 | class FasterWhisperBackend(Backend): 20 | device: str = "cpu" # cpu, cuda 21 | quantization: str = "int8" # int8, float16 22 | model: WhisperModel | None = None 23 | 24 | def model_path(self) -> str: 25 | local_model_path = os.path.join( 26 | os.environ["WSCRIBE_MODELS_DIR"], f"faster-whisper-{self.model_size}" 27 | ) 28 | 29 | if os.path.exists(local_model_path): 30 | return local_model_path 31 | else: 32 | raise RuntimeError(f"model not found in {local_model_path}") 33 | 34 | def load(self) -> None: 35 | self.model = WhisperModel( 36 | self.model_path(), device=self.device, compute_type=self.quantization 37 | ) 38 | 39 | def transcribe( 40 | self, 41 | input: np.ndarray, 42 | language: Optional[str] = None, 43 | silent: bool = False, 44 | vad: bool = False, 45 | ) -> list[TranscribedData]: 46 | """ 47 | Return word level transcription data. 48 | World level probabities are calculated by ctranslate2.models.Whisper.align 49 | """ 50 | result: list[TranscribedData] = [] 51 | assert self.model is not None 52 | segments, info = self.model.transcribe( 53 | input, 54 | beam_size=DEFAULT_BEAM, 55 | word_timestamps=True, 56 | language=language, 57 | vad_filter=vad, 58 | ) 59 | # ps = playback seconds 60 | with tqdm( 61 | total=info.duration, unit_scale=True, unit="ps", disable=silent 62 | ) as pbar: 63 | for segment in segments: 64 | if segment.words is None: 65 | continue 66 | segment_extract: TranscribedData = { 67 | "text": segment.text, 68 | "start": segment.start, 69 | "end": segment.end, 70 | "score": round(math.exp(segment.avg_logprob), 2), 71 | "words": [ 72 | { 73 | "start": w.start, 74 | "end": w.end, 75 | "text": w.word, 76 | "score": round(w.probability, 2), 77 | } 78 | for w in segment.words 79 | ], 80 | } 81 | result.append(segment_extract) 82 | if not silent: 83 | pbar.update(segment.end - pbar.last_print_n) 84 | return result 85 | -------------------------------------------------------------------------------- /src/wscribe/writers.py: -------------------------------------------------------------------------------- 1 | # Based on code from https://github.com/openai/whisper 2 | 3 | import json 4 | import os 5 | import typing 6 | from dataclasses import dataclass 7 | from typing import Any, Mapping, TextIO, cast 8 | 9 | from .core import TranscribedData 10 | 11 | 12 | def format_timestamp(seconds: float, decimal_marker: str = "."): 13 | assert seconds >= 0, "non-negative timestamp expected" 14 | milliseconds = round(seconds * 1000.0) 15 | 16 | hours = milliseconds // 3_600_000 17 | milliseconds -= hours * 3_600_000 18 | 19 | minutes = milliseconds // 60_000 20 | milliseconds -= minutes * 60_000 21 | 22 | seconds = milliseconds // 1_000 23 | milliseconds -= seconds * 1_000 24 | 25 | return f"{hours:02d}:{minutes:02d}:{seconds:02d}{decimal_marker}{milliseconds:03d}" 26 | 27 | 28 | @dataclass(kw_only=True) 29 | class ResultWriter: 30 | result: list[TranscribedData] 31 | destination: os.PathLike 32 | 33 | def write(self): 34 | with open(self.destination, "w", encoding="utf-8") as f: 35 | self._write_result(self.result, f) 36 | 37 | def _write_result(self, result: list[TranscribedData], file: TextIO): 38 | raise NotImplementedError 39 | 40 | 41 | @dataclass(kw_only=True) 42 | class SubtitlesWriter(ResultWriter): 43 | decimal_marker: str 44 | 45 | def iterate_result(self, result: list[TranscribedData]): 46 | for segment in result: 47 | segment_start = self.format_timestamp(cast(float, segment["start"])) 48 | segment_end = self.format_timestamp(cast(float, segment["end"])) 49 | segment_text = segment["text"].strip() 50 | yield segment_start, segment_end, segment_text 51 | 52 | def format_timestamp(self, seconds: float): 53 | return format_timestamp( 54 | seconds=seconds, 55 | decimal_marker=self.decimal_marker, 56 | ) 57 | 58 | 59 | @dataclass(kw_only=True) 60 | class WriteSRT(SubtitlesWriter): 61 | decimal_marker: str = "," 62 | 63 | def _write_result(self, result: list[TranscribedData], file: TextIO): 64 | for i, (start, end, text) in enumerate(self.iterate_result(result), start=1): 65 | print(f"{i}\n{start} --> {end}\n{text}\n", file=file, flush=True) 66 | 67 | 68 | @dataclass(kw_only=True) 69 | class WriteVTT(SubtitlesWriter): 70 | decimal_marker: str = "." 71 | 72 | def _write_result(self, result: list[TranscribedData], file: TextIO): 73 | print("WEBVTT\n", file=file) 74 | for start, end, text in self.iterate_result(result): 75 | print(f"{start} --> {end}\n{text}\n", file=file, flush=True) 76 | 77 | 78 | @dataclass(kw_only=True) 79 | class WriteJSON(ResultWriter): 80 | def _write_result(self, result: list[TranscribedData], file: TextIO): 81 | self.transform_result(result) 82 | json.dump(result, file) 83 | 84 | def transform_result(self, result: list[TranscribedData]): 85 | for s in result: 86 | s["start"] = self.format_timestamp(cast(float, s["start"])) 87 | s["end"] = self.format_timestamp(cast(float, s["end"])) 88 | s["text"] = s["text"].strip() 89 | if len(s["words"]) > 0: 90 | for w in s["words"]: 91 | w["start"] = self.format_timestamp(cast(float, w["start"])) 92 | w["end"] = self.format_timestamp(cast(float, w["end"])) 93 | w["text"] = w["text"].strip() 94 | 95 | def format_timestamp(self, seconds: float): 96 | return format_timestamp(seconds=seconds) 97 | 98 | 99 | WRITERS: Mapping[str, typing.Type[ResultWriter]] = { 100 | "json": WriteJSON, 101 | "srt": WriteSRT, 102 | "vtt": WriteVTT, 103 | } 104 | -------------------------------------------------------------------------------- /.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 | share/python-wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | MANIFEST 28 | 29 | # PyInstaller 30 | # Usually these files are written by a python script from a template 31 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 32 | *.manifest 33 | *.spec 34 | 35 | # Installer logs 36 | pip-log.txt 37 | pip-delete-this-directory.txt 38 | 39 | # Unit test / coverage reports 40 | htmlcov/ 41 | .tox/ 42 | .nox/ 43 | .coverage 44 | .coverage.* 45 | .cache 46 | nosetests.xml 47 | coverage.xml 48 | *.cover 49 | *.py,cover 50 | .hypothesis/ 51 | .pytest_cache/ 52 | cover/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | .pybuilder/ 76 | target/ 77 | 78 | # Jupyter Notebook 79 | .ipynb_checkpoints 80 | 81 | # IPython 82 | profile_default/ 83 | ipython_config.py 84 | 85 | # pyenv 86 | # For a library or package, you might want to ignore these files since the code is 87 | # intended to run in multiple environments; otherwise, check them in: 88 | # .python-version 89 | 90 | # pipenv 91 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 92 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 93 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 94 | # install all needed dependencies. 95 | #Pipfile.lock 96 | 97 | # poetry 98 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 99 | # This is especially recommended for binary packages to ensure reproducibility, and is more 100 | # commonly ignored for libraries. 101 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 102 | #poetry.lock 103 | 104 | # pdm 105 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 106 | #pdm.lock 107 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 108 | # in version control. 109 | # https://pdm.fming.dev/#use-with-ide 110 | .pdm.toml 111 | 112 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 113 | __pypackages__/ 114 | 115 | # Celery stuff 116 | celerybeat-schedule 117 | celerybeat.pid 118 | 119 | # SageMath parsed files 120 | *.sage.py 121 | 122 | # Environments 123 | .env 124 | .venv 125 | env/ 126 | venv/ 127 | ENV/ 128 | env.bak/ 129 | venv.bak/ 130 | 131 | # Spyder project settings 132 | .spyderproject 133 | .spyproject 134 | 135 | # Rope project settings 136 | .ropeproject 137 | 138 | # mkdocs documentation 139 | /site 140 | 141 | # mypy 142 | .mypy_cache/ 143 | .dmypy.json 144 | dmypy.json 145 | 146 | # Pyre type checker 147 | .pyre/ 148 | 149 | # pytype static type analyzer 150 | .pytype/ 151 | 152 | # Cython debug symbols 153 | cython_debug/ 154 | 155 | # PyCharm 156 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 157 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 158 | # and can be added to the global gitignore or merged into this file. For a more nuclear 159 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 160 | #.idea/ 161 | models 162 | -------------------------------------------------------------------------------- /src/wscribe/cli/main.py: -------------------------------------------------------------------------------- 1 | import json 2 | import logging 3 | import os 4 | import time 5 | 6 | import click 7 | import structlog 8 | 9 | from wscribe.backends.fasterwhisper import FasterWhisperBackend 10 | from wscribe.sources.local import LocalAudio 11 | 12 | from ..core import SUPPORTED_MODELS 13 | from ..writers import WRITERS 14 | 15 | LOGGER = structlog.get_logger(ui="cli") 16 | 17 | 18 | @click.group() 19 | def cli(): 20 | """CLI for audio transcription using faster-whisper""" 21 | pass 22 | 23 | 24 | @cli.command() 25 | @click.argument( 26 | "source", 27 | nargs=1, 28 | type=click.Path(exists=True, dir_okay=False, resolve_path=True), 29 | ) 30 | @click.argument( 31 | "destination", 32 | nargs=1, 33 | type=click.Path(exists=False, resolve_path=True), 34 | ) 35 | @click.option( 36 | "-f", 37 | "--format", 38 | help="destication file format, currently only json is supported", 39 | type=click.Choice(list(WRITERS.keys()), case_sensitive=True), 40 | default="json", 41 | show_default=True, 42 | ) 43 | @click.option( 44 | "-m", 45 | "--model", 46 | help="model should already be downloaded", 47 | type=click.Choice(SUPPORTED_MODELS, case_sensitive=True), 48 | default="medium", 49 | show_default=True, 50 | ) 51 | @click.option( 52 | "-g", "--gpu", help="enable gpu, disabled by default", default=False, is_flag=True 53 | ) 54 | @click.option("-l", "--language", help="language code eg. en/fr (skips autodetection)") 55 | @click.option("-d", "--debug", help="show debug logs", default=False, is_flag=True) 56 | @click.option("-s", "--stats", help="print stats", default=False, is_flag=True) 57 | @click.option("-q", "--quiet", help="no progress bar", default=False, is_flag=True) 58 | @click.option( 59 | "-v", 60 | "--vad", 61 | help="use vad filter(better results, slower)", 62 | default=False, 63 | is_flag=True, 64 | ) 65 | def transcribe( 66 | source, destination, format, model, gpu, language, debug, stats, quiet, vad 67 | ): 68 | """ 69 | Transcribes SOURCE to DESTINATION. Where SOURCE can be local path to an audio/video file and 70 | DESTINATION needs to be a local path to a non-existing file. 71 | """ 72 | if debug: 73 | logging.basicConfig(level=logging.DEBUG, force=True) 74 | log = LOGGER.bind( 75 | source=source, destination=destination, format=format, model=model, gpu=gpu 76 | ) 77 | 78 | device, quantization = ("cuda", "float16") if gpu else ("cpu", "int8") 79 | m = FasterWhisperBackend(model_size=model, device=device, quantization=quantization) 80 | m.load() 81 | log.debug(f"model loaded with {device}-{quantization}") 82 | 83 | audio_start_time = time.perf_counter() 84 | audio = LocalAudio(source=source).convert_audio() 85 | audio_end_time = time.perf_counter() 86 | 87 | ts_start_time = time.perf_counter() 88 | result = m.transcribe(input=audio, language=language, silent=quiet, vad=vad) 89 | ts_end_time = time.perf_counter() 90 | 91 | writer = WRITERS[format](result=result, destination=destination) 92 | writer.write() 93 | 94 | if stats: 95 | original_audio_time = audio.shape[0] / LocalAudio.sampling_rate 96 | transcription_time = ts_end_time - ts_start_time 97 | audio_conversion_time = audio_end_time - audio_start_time 98 | click.echo( 99 | " | ".join( 100 | [ 101 | device, 102 | quantization, 103 | model, 104 | str(round(audio_conversion_time, 1)) + "s", 105 | str(round(original_audio_time / 60, 1)) + "m", 106 | str(round(transcription_time / 60, 1)) + "m", 107 | str(int(original_audio_time / transcription_time)) + "x", 108 | ] 109 | ) 110 | ) 111 | 112 | 113 | @cli.command() 114 | def info(): 115 | """Information about related files and directories""" 116 | click.echo(f"WSCRIBE_MODELS_DIR: {os.environ['WSCRIBE_MODELS_DIR']}") 117 | 118 | 119 | if __name__ == "__main__": 120 | cli() 121 | -------------------------------------------------------------------------------- /README.org: -------------------------------------------------------------------------------- 1 | * wscribe 2 | ** Getting started 3 | ~wscribe~ is yet another easy to use front-end for [[https://github.com/openai/whisper][whisper]] specifically for transcription. It aims to be modular so that it can support multiple audio sources, processing backends and inference interfaces. It can run both on CPU and GPU based on the processing backend. Once transcript is generated, editing/correction/visualization of the transcript can be done manually with the [[https://github.com/geekodour/wscribe-editor][wscribe-editor]]. 4 | 5 | It was created at [[https://www.sochara.org/][sochara]] because we have a large volume of audio recordings that need to be transcribed and eventually archived. Another important need was that we needed to verify and manually edit the generated transcript, I could not find any open-source tool that checked all the boxes. Suggested workflow is generating word-level transcript(only supported in ~json~ export) and then editing the transcript with the [[https://github.com/geekodour/wscribe-editor][wscribe-editor]]. 6 | 7 | Currently, it supports the following. Check [[#roadmap][roadmap]] for upcoming support. 8 | - Processing backend: [[https://github.com/guillaumekln/faster-whisper][faster-whisper]] 9 | - Audio sources: Local files (Audio/Video) 10 | - Inference interfaces: Python CLI 11 | - File exports: JSON, SRT, WebVTT 12 | *** Installation 13 | These instructions were tested on ~NixOS:Python3.10~ and ~ArchLinux:Python3.10~ but should work for any other OS, if you face any installation issues please feel free to [[https://github.com/geekodour/wscribe/issues][create issues]]. I'll try to put out a docker image sometime. 14 | **** 1. Set required env var 15 | - ~WSCRIBE_MODELS_DIR~ : Path to the directory where whisper models should be downloaded to. 16 | #+begin_src bash 17 | export WSCRIBE_MODELS_DIR=$XDG_DATA_HOME/whisper-models # example 18 | #+end_src 19 | **** 2. Download the models 20 | ***** Recommended 21 | - Recommended way for downloading the models is to use the [[https://github.com/geekodour/wscribe/blob/main/scripts/fw_dw_hf_wo_lfs.sh][helper script]], it'll download the models to ~WSCRIBE_MODELS_DIR~. 22 | #+begin_src shell 23 | cd /tmp # temporary script, only needed to download the models 24 | curl https://raw.githubusercontent.com/geekodour/wscribe/main/scripts/fw_dw_hf_wo_lfs.sh 25 | chmod u+x fw_dw_hf_wo_lfs.sh 26 | ./fw_dw_hf_wo_lfs.sh tiny # other models: tiny, small, medium and large-v2 27 | #+end_src 28 | ***** Manual 29 | You can download the models directly [[https://huggingface.co/guillaumekln][from here]] using ~git lfs~, make sure you download/copy them to ~WSCRIBE_MODELS_DIR~ 30 | **** 3. Install wscribe 31 | Assuming you already have a working ~python>=3.10~ setup 32 | #+begin_src shell 33 | pip install wscribe 34 | #+end_src 35 | *** Usage 36 | #+begin_src shell 37 | # wscribe transcribe [OPTIONS] SOURCE DESTINATION 38 | 39 | # cpu 40 | wscribe transcribe audio.mp3 transcription.json 41 | # use gpu 42 | wscribe transcribe video.mp4 transcription.json --gpu 43 | # use gpu, srt format 44 | wscribe transcribe video.mp4 transcription.srt -g -f srt 45 | # use gpu, srt format, tiny model 46 | wscribe transcribe video.mp4 transcription.vtt -g -f vtt -m tiny 47 | wscribe transcribe --help # all help info 48 | #+end_src 49 | ** Numbers 50 | - These numbers are from machine under normal web-browsing workload running on a single RTX3050 51 | - Audio conversion takes around 1s 52 | - Also check [[https://github.com/ggerganov/whisper.cpp/issues/1127][this explanation about the speed difference]]. 53 | | device | quant | model | original playback | transcription | playback/transcription | 54 | |--------+---------+----------+-------------------+---------------+------------------------| 55 | | cuda | float16 | tiny | 6.3m | 0.1m | 68x | 56 | | cuda | float16 | small | 6.3m | 0.2m | 29x | 57 | | cuda | float16 | medium | 6.3m | 0.4m | 14x | 58 | | cuda | float16 | large-v2 | 6.3m | 0.8m | 7x | 59 | | cpu | int8 | tiny | 6.3m | 0.2m | 25x | 60 | | cpu | int8 | small | 6.3m | 1.3m | 4x | 61 | | cpu | int8 | medium | 6.3m | 3.6m | ~1.7x | 62 | | cpu | int8 | large-v2 | 6.3m | 3.6m | ~0.9x | 63 | 64 | ** Roadmap 65 | *** Processing Backends 66 | - [X] [[https://github.com/guillaumekln/faster-whisper][faster-whisper]] 67 | - [ ] [[https://github.com/ggerganov/whisper.cpp][whisper.cpp]] 68 | - [ ] [[https://github.com/m-bain/whisperX][WhisperX]], diarization is something to look forward to 69 | *** Transcription Features 70 | - [ ] Add support for [[https://github.com/guillaumekln/faster-whisper/issues/303][diarization]] 71 | - [ ] Add translation 72 | - [ ] Add VAD/other de-noising stuff etc. 73 | - [ ] Add local llm integration with [[https://github.com/ggerganov/llama.cpp/pull/1773][llama.cpp]] or something similar for summary and [[https://news.ycombinator.com/item?id=36900294][othe possible things]]. It can be also used to generate more accurate transcript. Whisper mostly generates sort of a subtitle, for [[https://www.reddit.com/r/MLQuestions/comments/ks5ez5/how_are_automatic_video_chapters_for_youtube/][converting]] subtitle [[https://www.reddit.com/r/accessibility/comments/xnfibv/most_accurate_way_to_turn_a_srt_file_into_a/][into transcription]] we need to group the subtitle. This can be done in various ways. Eg. By speaker if diarization is supported, by time chunks etc. By using LLMs or maybe other NLP techniques we'll also be able to do this with things like break in dialogue etc. Have to explore. 74 | *** Inference interfaces 75 | - [-] Python CLI 76 | - [X] Basic CLI 77 | - [ ] Improve summary statistics 78 | - [ ] REST endpoint 79 | - [ ] Basic server to run wscribe via an API. 80 | - [ ] Possibly add glue code to expose it via CFtunnels or something similar 81 | - [ ] GUI 82 | *** Audio sources 83 | - [X] Local files 84 | - [ ] Youtube 85 | - [ ] Google drive 86 | *** Distribution 87 | - [X] Python packaging 88 | - [ ] Docker/Podman 89 | - [ ] Package for Nix 90 | - [ ] Package for Arch(AUR) 91 | ** Contributing 92 | All contribution happens through PRs, any contributions is greatly appreciated, bugfixes are welcome, features are welcome, tests are welcome, suggestions & criticism are welcome. 93 | *** Testing 94 | - ~make test~ 95 | - See other helper commands in ~Makefile~ 96 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | 2 | # Table of Contents 3 | 4 | 1. [wscribe](#org1632b4f) 5 | 1. [Getting started](#orgd9a15cb) 6 | 1. [Installation](#orga61a0c4) 7 | 2. [Usage](#orge14eae7) 8 | 2. [Numbers](#orgf991a19) 9 | 3. [Roadmap](#orgc5a9de8) 10 | 1. [Processing Backends](#orge4bd8ac) 11 | 2. [Transcription Features](#org9d0954e) 12 | 3. [Inference interfaces](#org7e090eb) 13 | 4. [Audio sources](#orgff145da) 14 | 5. [Distribution](#org22885fe) 15 | 4. [Contributing](#orgefbdcb3) 16 | 1. [Testing](#orge2159a9) 17 | 18 | 19 | 20 | 21 | # wscribe 22 | 23 | 24 | 25 | 26 | ## Getting started 27 | 28 | `wscribe` is yet another easy to use front-end for [whisper](https://github.com/openai/whisper) specifically for transcription. It aims to be modular so that it can support multiple audio sources, processing backends and inference interfaces. It can run both on CPU and GPU based on the processing backend. Once transcript is generated, editing/correction/visualization of the transcript can be done manually with the [wscribe-editor](https://github.com/geekodour/wscribe-editor). 29 | 30 | It was created at [sochara](https://www.sochara.org/) because we have a large volume of audio recordings that need to be transcribed and eventually archived. Another important need was that we needed to verify and manually edit the generated transcript, I could not find any open-source tool that checked all the boxes. Suggested workflow is generating word-level transcript(only supported in `json` export) and then editing the transcript with the [wscribe-editor](https://github.com/geekodour/wscribe-editor). 31 | 32 | Currently, it supports the following. Check [roadmap](#orgc5a9de8) for upcoming support. 33 | 34 | - Processing backend: [faster-whisper](https://github.com/guillaumekln/faster-whisper) 35 | - Audio sources: Local files (Audio/Video) 36 | - Inference interfaces: Python CLI 37 | - File exports: JSON, SRT, WebVTT 38 | 39 | 40 | 41 | 42 | ### Installation 43 | 44 | These instructions were tested on `NixOS:Python3.10` and `ArchLinux:Python3.10` but should work for any other OS, if you face any installation issues please feel free to [create issues](https://github.com/geekodour/wscribe/issues). I’ll try to put out a docker image sometime. 45 | 46 | 1. 1. Set required env var 47 | 48 | - `WSCRIBE_MODELS_DIR` : Path to the directory where whisper models should be downloaded to. 49 | 50 | export WSCRIBE_MODELS_DIR=$XDG_DATA_HOME/whisper-models # example 51 | 52 | 2. 2. Download the models 53 | 54 | 1. Recommended 55 | 56 | - Recommended way for downloading the models is to use the [helper script](https://github.com/geekodour/wscribe/blob/main/scripts/fw_dw_hf_wo_lfs.sh), it’ll download the models to `WSCRIBE_MODELS_DIR`. 57 | 58 | cd /tmp # temporary script, only needed to download the models 59 | curl https://raw.githubusercontent.com/geekodour/wscribe/main/scripts/fw_dw_hf_wo_lfs.sh 60 | chmod u+x fw_dw_hf_wo_lfs.sh 61 | ./fw_dw_hf_wo_lfs.sh tiny # other models: tiny, small, medium and large-v2 62 | 63 | 2. Manual 64 | 65 | You can download the models directly [from here](https://huggingface.co/guillaumekln) using `git lfs`, make sure you download/copy them to `WSCRIBE_MODELS_DIR` 66 | 67 | 3. 3. Install wscribe 68 | 69 | Assuming you already have a working `python>=3.10` setup 70 | 71 | pip install wscribe 72 | 73 | 74 | 75 | 76 | ### Usage 77 | 78 | # wscribe transcribe [OPTIONS] SOURCE DESTINATION 79 | 80 | # cpu 81 | wscribe transcribe audio.mp3 transcription.json 82 | # use gpu 83 | wscribe transcribe video.mp4 transcription.json --gpu 84 | # use gpu, srt format 85 | wscribe transcribe video.mp4 transcription.srt -g -f srt 86 | # use gpu, srt format, tiny model 87 | wscribe transcribe video.mp4 transcription.vtt -g -f vtt -m tiny 88 | wscribe transcribe --help # all help info 89 | 90 | 91 | 92 | 93 | ## Numbers 94 | 95 | - These numbers are from machine under normal web-browsing workload running on a single RTX3050 96 | - Audio conversion takes around 1s 97 | - Also check [this explanation about the speed difference](https://github.com/ggerganov/whisper.cpp/issues/1127). 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 |
devicequantmodeloriginal playbacktranscriptionplayback/transcription
cudafloat16tiny6.3m0.1m68x
cudafloat16small6.3m0.2m29x
cudafloat16medium6.3m0.4m14x
cudafloat16large-v26.3m0.8m7x
cpuint8tiny6.3m0.2m25x
cpuint8small6.3m1.3m4x
cpuint8medium6.3m3.6m~1.7x
cpuint8large-v26.3m3.6m~0.9x
207 | 208 | 209 | 210 | 211 | ## Roadmap 212 | 213 | 214 | 215 | 216 | ### Processing Backends 217 | 218 | - [X] [faster-whisper](https://github.com/guillaumekln/faster-whisper) 219 | - [ ] [whisper.cpp](https://github.com/ggerganov/whisper.cpp) 220 | - [ ] [WhisperX](https://github.com/m-bain/whisperX), diarization is something to look forward to 221 | 222 | 223 | 224 | 225 | ### Transcription Features 226 | 227 | - [ ] Add support for [diarization](https://github.com/guillaumekln/faster-whisper/issues/303) 228 | - [ ] Add translation 229 | - [ ] Add VAD/other de-noising stuff etc. 230 | - [ ] Add local llm integration with [llama.cpp](https://github.com/ggerganov/llama.cpp/pull/1773) or something similar for summary and [othe possible things](https://news.ycombinator.com/item?id=36900294). It can be also used to generate more accurate transcript. Whisper mostly generates sort of a subtitle, for [converting](https://www.reddit.com/r/MLQuestions/comments/ks5ez5/how_are_automatic_video_chapters_for_youtube/) subtitle [into transcription](https://www.reddit.com/r/accessibility/comments/xnfibv/most_accurate_way_to_turn_a_srt_file_into_a/) we need to group the subtitle. This can be done in various ways. Eg. By speaker if diarization is supported, by time chunks etc. By using LLMs or maybe other NLP techniques we’ll also be able to do this with things like break in dialogue etc. Have to explore. 231 | 232 | 233 | 234 | 235 | ### Inference interfaces 236 | 237 | - [-] Python CLI 238 | - [X] Basic CLI 239 | - [ ] Improve summary statistics 240 | - [ ] REST endpoint 241 | - [ ] Basic server to run wscribe via an API. 242 | - [ ] Possibly add glue code to expose it via CFtunnels or something similar 243 | 244 | 245 | 246 | 247 | ### Audio sources 248 | 249 | - [X] Local files 250 | - [ ] Youtube 251 | - [ ] Google drive 252 | 253 | 254 | 255 | 256 | ### Distribution 257 | 258 | - [X] Python packaging 259 | - [ ] Docker/Podman 260 | - [ ] Package for Nix 261 | - [ ] Package for Arch(AUR) 262 | 263 | 264 | 265 | 266 | ## Contributing 267 | 268 | All contribution happens through PRs, any contributions is greatly appreciated, bugfixes are welcome, features are welcome, tests are welcome, suggestions & criticism are welcome. 269 | 270 | 271 | 272 | 273 | ### Testing 274 | 275 | - `make test` 276 | - See other helper commands in `Makefile` 277 | 278 | -------------------------------------------------------------------------------- /examples/output/sample.vtt: -------------------------------------------------------------------------------- 1 | WEBVTT 2 | 3 | 00:00:00.000 --> 00:00:06.920 4 | In your work, you quote Nietzsche quite a bit, his line, 5 | 6 | 00:00:07.120 --> 00:00:10.540 7 | he who has a why to live for can bear almost any how. 8 | 9 | 00:00:12.060 --> 00:00:13.560 10 | What do you think he meant by that? 11 | 12 | 00:00:14.960 --> 00:00:17.040 13 | What do you think he meant by that? 14 | 15 | 00:00:18.600 --> 00:00:23.860 16 | The same as I am intended to convey to my readers and students, 17 | 18 | 00:00:24.740 --> 00:00:27.440 19 | that the vision of a meaning ahead of someone, 20 | 21 | 00:00:27.440 --> 00:00:32.720 22 | a meaning in wait for someone to be fulfilled by someone, 23 | 24 | 00:00:33.880 --> 00:00:38.240 25 | that this contributes most than anything else 26 | 27 | 00:00:38.240 --> 00:00:44.720 28 | under equal circumstances for survival. 29 | 30 | 00:00:45.840 --> 00:00:47.600 31 | Meaning is the most important thing in our lives? 32 | 33 | 00:00:49.140 --> 00:00:52.600 34 | Certainly, because what I call a will to meaning, 35 | 36 | 00:00:53.980 --> 00:00:57.220 37 | the wish to find and to fulfill meaning 38 | 39 | 00:00:57.220 --> 00:01:00.920 40 | is the basic motivation in human beings. 41 | 42 | 00:01:01.880 --> 00:01:06.720 43 | This certainly runs counter to much of the determinist notions 44 | 45 | 00:01:06.720 --> 00:01:10.140 46 | that are being bandied around about these days 47 | 48 | 00:01:10.140 --> 00:01:12.160 49 | as man is a machine, man is a computer, 50 | 51 | 00:01:13.040 --> 00:01:14.760 52 | man is a product of instincts. 53 | 54 | 00:01:16.080 --> 00:01:19.680 55 | Man is something like a rat in experiments, 56 | 57 | 00:01:20.380 --> 00:01:21.640 58 | psychological experiments. 59 | 60 | 00:01:21.640 --> 00:01:25.640 61 | Of course you are right, but not only against 62 | 63 | 00:01:26.260 --> 00:01:29.840 64 | the so-called deterministic concepts of man, 65 | 66 | 00:01:30.640 --> 00:01:33.640 67 | but also regarding the motivational theories 68 | 69 | 00:01:34.560 --> 00:01:37.600 70 | of certain psychotherapeutic systems. 71 | 72 | 00:01:38.260 --> 00:01:41.460 73 | Let's talk for a minute about logotherapy, 74 | 75 | 00:01:42.420 --> 00:01:45.340 76 | which arose out of this notion of a search for meaning. 77 | 78 | 00:01:46.060 --> 00:01:50.780 79 | Logotherapy is one among other types of psychotherapy, 80 | 81 | 00:01:50.780 --> 00:01:57.180 82 | is, we may say, a meaning-centered psychotherapy. 83 | 84 | 00:01:58.120 --> 00:02:00.780 85 | In as much particularly as logotherapy 86 | 87 | 00:02:01.760 --> 00:02:07.180 88 | sees a human being not predominantly determined, 89 | 90 | 00:02:07.300 --> 00:02:10.360 91 | not to say dominated, by the will to pleasure, 92 | 93 | 00:02:10.600 --> 00:02:14.560 94 | as you were mentioning, nor by the will to power 95 | 96 | 00:02:14.560 --> 00:02:17.040 97 | along the lines of Adlerian teachings, 98 | 99 | 00:02:17.040 --> 00:02:21.560 100 | but basically, fundamentally, by a will to meaning. 101 | 102 | 00:02:21.920 --> 00:02:26.120 103 | That is to say the desire, the impulse, 104 | 105 | 00:02:27.200 --> 00:02:30.880 106 | to find, to discover in life, or better to say 107 | 108 | 00:02:30.880 --> 00:02:34.180 109 | in each life situation, concrete life situation, 110 | 111 | 00:02:34.420 --> 00:02:38.540 112 | confronting someone, the desire to find a meaning therein 113 | 114 | 00:02:38.540 --> 00:02:41.080 115 | and to go on to fulfill it. 116 | 117 | 00:02:41.140 --> 00:02:42.240 118 | I was very intrigued. 119 | 120 | 00:02:42.420 --> 00:02:45.840 121 | One of the most surprising things I've read recently 122 | 123 | 00:02:45.840 --> 00:02:52.160 124 | was that you said that when you talked to European students, 125 | 126 | 00:02:53.180 --> 00:02:57.160 127 | only 40% said they had suffered this sort of inner void, 128 | 129 | 00:02:57.880 --> 00:03:02.600 130 | and yet 81% of American students experience the same thing. 131 | 132 | 00:03:02.620 --> 00:03:03.880 133 | This was decades ago. 134 | 135 | 00:03:04.060 --> 00:03:05.300 136 | We think of it just the opposite. 137 | 138 | 00:03:05.380 --> 00:03:09.180 139 | We think of the Europeans as being buried under this 140 | 141 | 00:03:09.180 --> 00:03:13.880 142 | existential dread and sense of purposelessness, 143 | 144 | 00:03:13.880 --> 00:03:16.040 145 | and Americans as being optimistic and upbeat. 146 | 147 | 00:03:16.760 --> 00:03:20.860 148 | However it might be, whether the ones or the others 149 | 150 | 00:03:21.880 --> 00:03:25.720 151 | are suffering more or less, respectively, 152 | 153 | 00:03:26.140 --> 00:03:27.920 154 | from this existential vacuum, 155 | 156 | 00:03:28.860 --> 00:03:32.160 157 | the ones who seem to suffer less 158 | 159 | 00:03:32.880 --> 00:03:36.120 160 | should not look at the others with contempt, 161 | 162 | 00:03:37.120 --> 00:03:40.080 163 | but look at the others with compassion 164 | 165 | 00:03:40.080 --> 00:03:47.340 166 | and look for anything possible to help the others. 167 | 168 | 00:03:48.280 --> 00:03:51.220 169 | Now this void manifests itself as apathy. 170 | 171 | 00:03:51.220 --> 00:03:55.960 172 | In apathy, in boredom, lack of initiative, 173 | 174 | 00:03:56.200 --> 00:04:00.180 175 | lack of interest in the world, 176 | 177 | 00:04:00.760 --> 00:04:06.140 178 | or initiative in changing something within the world for the better. 179 | 180 | 00:04:07.260 --> 00:04:13.240 181 | This frustration is a proof 182 | 183 | 00:04:13.240 --> 00:04:16.040 184 | of the existence of a will to meaning. 185 | 186 | 00:04:16.780 --> 00:04:19.940 187 | Unless we were imbued by a will to meaning, 188 | 189 | 00:04:19.980 --> 00:04:22.140 190 | by the wish to find meaning and discover 191 | 192 | 00:04:23.540 --> 00:04:25.660 193 | and fulfill meaning in life, 194 | 195 | 00:04:25.940 --> 00:04:28.800 196 | we never would be able to experience an inner void. 197 | 198 | 00:04:29.540 --> 00:04:32.140 199 | So this is in a way also something positive. 200 | 201 | 00:04:33.040 --> 00:04:35.320 202 | Now you've listed three types of values. 203 | 204 | 00:04:35.320 --> 00:04:38.620 205 | Creative values, experiential values, and attitudinal values. 206 | 207 | 00:04:38.900 --> 00:04:41.640 208 | You may find a meaning, the average man, 209 | 210 | 00:04:41.880 --> 00:04:44.360 211 | the man on the street or the woman on the street, 212 | 213 | 00:04:44.780 --> 00:04:49.300 214 | may find a meaning day by day in doing a deed, 215 | 216 | 00:04:50.040 --> 00:04:51.640 217 | in creating a work. 218 | 219 | 00:04:53.200 --> 00:04:54.060 220 | That's the creative. 221 | 222 | 00:04:54.520 --> 00:04:58.740 223 | Creative, and in experiencing something, 224 | 225 | 00:04:59.600 --> 00:05:02.940 226 | the beauty, the truth, the researcher, 227 | 228 | 00:05:02.940 --> 00:05:08.820 229 | or the good in dealing with people as a teacher or whatsoever. 230 | 231 | 00:05:08.900 --> 00:05:12.420 232 | There's an extraordinary moment in Man's Search for Meaning 233 | 234 | 00:05:12.420 --> 00:05:15.500 235 | where you talk about being in one of the Nazi camps 236 | 237 | 00:05:15.500 --> 00:05:18.620 238 | and all of you going out to look at a sunset. 239 | 240 | 00:05:19.760 --> 00:05:20.420 241 | Is that experiential? 242 | 243 | 00:05:20.800 --> 00:05:25.180 244 | Exactly. This is a paradigm of experiential values, 245 | 246 | 00:05:25.580 --> 00:05:29.040 247 | of finding a meaning in experiencing without doing anything, 248 | 249 | 00:05:29.400 --> 00:05:32.100 250 | without achieving or accomplishing anything, 251 | 252 | 00:05:32.100 --> 00:05:36.120 253 | but just in giving oneself the immediate experience 254 | 255 | 00:05:36.120 --> 00:05:39.960 256 | of something beautiful going on in the world. 257 | 258 | 00:05:40.600 --> 00:05:42.020 259 | This is the second avenue. 260 | 261 | 00:05:42.580 --> 00:05:49.020 262 | But there is also another aspect of experiential values. 263 | 264 | 00:05:51.400 --> 00:05:54.920 265 | Not only experiencing something, 266 | 267 | 00:05:55.520 --> 00:05:57.620 268 | but also experiencing someone. 269 | 270 | 00:05:57.620 --> 00:06:02.180 271 | More than that, experiencing another human being 272 | 273 | 00:06:02.180 --> 00:06:04.980 274 | in his or her very uniqueness. 275 | 276 | 00:06:05.620 --> 00:06:09.640 277 | It is the main attribute of a human being 278 | 279 | 00:06:09.640 --> 00:06:14.140 280 | that he is a person in contrast to any animal. 281 | 282 | 00:06:14.460 --> 00:06:19.480 283 | A person is always something absolutely unique, 284 | 285 | 00:06:19.820 --> 00:06:22.760 286 | irrepeatable in the evolution of the cosmos, 287 | 288 | 00:06:23.760 --> 00:06:26.560 289 | incomparable with any other human being. 290 | 291 | 00:06:26.560 --> 00:06:33.680 292 | And this uniqueness can be got hold of solely by a loving person 293 | 294 | 00:06:33.680 --> 00:06:36.540 295 | because he not only sees the essence, 296 | 297 | 00:06:37.080 --> 00:06:40.280 298 | but also the potentials in the beloved person. 299 | 300 | 00:06:40.500 --> 00:06:44.580 301 | Thereby, as I put it before, promoting him, alleviating it, 302 | 303 | 00:06:44.680 --> 00:06:49.100 304 | to reach out to attain this potential and to fulfill 305 | 306 | 00:06:49.100 --> 00:06:52.460 307 | and thereby actualize also himself. 308 | 309 | 00:06:52.460 --> 00:06:56.220 310 | But not by preaching self-actualization. 311 | 312 | 00:06:56.760 --> 00:06:57.400 313 | It's nonsense. 314 | 315 | 00:06:57.700 --> 00:07:02.520 316 | Self-actualization can only fall into your lap automatically 317 | 318 | 00:07:02.520 --> 00:07:06.400 319 | once that you have fulfilled a concrete meaning, 320 | 321 | 00:07:06.800 --> 00:07:08.640 322 | done the best of a situation. 323 | 324 | 00:07:09.040 --> 00:07:12.300 325 | Then you actualize yourself as a byproduct. 326 | 327 | 00:07:12.740 --> 00:07:14.600 328 | Let's talk about the third set of values, 329 | 330 | 00:07:14.680 --> 00:07:16.960 331 | which is the attitudinal, 332 | 333 | 00:07:16.960 --> 00:07:23.440 334 | the idea of choosing how to respond to suffering. 335 | 336 | 00:07:23.760 --> 00:07:25.000 337 | Choosing the attitude. 338 | 339 | 00:07:25.080 --> 00:07:25.460 340 | Yes. 341 | 342 | 00:07:26.420 --> 00:07:29.580 343 | If there is no possibility in a given situation 344 | 345 | 00:07:31.320 --> 00:07:34.760 346 | to fulfill the meaning of a situation 347 | 348 | 00:07:34.760 --> 00:07:39.460 349 | by giving oneself to the experience of beauty and so forth, 350 | 351 | 00:07:39.460 --> 00:07:45.680 352 | nor if you have lost the capability to do your job, 353 | 354 | 00:07:45.780 --> 00:07:46.920 355 | to do your work, 356 | 357 | 00:07:47.460 --> 00:07:49.460 358 | even then there is an ultimate possibility 359 | 360 | 00:07:50.140 --> 00:07:52.460 361 | to find and fulfill meaning. 362 | 363 | 00:07:53.500 --> 00:07:54.820 364 | Not only the ultimate, 365 | 366 | 00:07:55.100 --> 00:08:01.600 367 | it is even the potential to fulfill the deepest meaning, 368 | 369 | 00:08:02.140 --> 00:08:04.500 370 | to attain the highest values. 371 | 372 | 00:08:04.500 --> 00:08:09.800 373 | By your approach to this situation, 374 | 375 | 00:08:10.300 --> 00:08:13.420 376 | a tragic or a sad situation confronting you. 377 | 378 | 00:08:13.420 --> 00:08:17.120 379 | You said that in part of the initial shock 380 | 381 | 00:08:17.880 --> 00:08:19.980 382 | of being put in a death camp 383 | 384 | 00:08:21.440 --> 00:08:26.320 385 | was ultimately an acceptance that we knew we had nothing to lose 386 | 387 | 00:08:26.320 --> 00:08:28.500 388 | except our ridiculously naked lives. 389 | 390 | 00:08:29.280 --> 00:08:31.760 391 | Is that the situation that they're in? 392 | 393 | 00:08:33.180 --> 00:08:34.080 394 | In a way. 395 | 396 | 00:08:34.080 --> 00:08:38.080 397 | Is this when you make the choice of how you're going to... 398 | 399 | 00:08:38.680 --> 00:08:42.340 400 | your last value choice is how to react to the situation? 401 | 402 | 00:08:42.500 --> 00:08:44.880 403 | You stand there, you stood there naked 404 | 405 | 00:08:44.880 --> 00:08:48.320 406 | with nothing you could have had, 407 | 408 | 00:08:49.040 --> 00:08:53.940 409 | but all the more what counted and mattered was what you were, 410 | 411 | 00:08:54.480 --> 00:08:58.680 412 | being rather than having, possessing anything, 413 | 414 | 00:09:01.120 --> 00:09:02.940 415 | or the being. 416 | 417 | 00:09:02.940 --> 00:09:07.900 418 | So what counted was what you make out of the situation, 419 | 420 | 00:09:08.960 --> 00:09:12.600 421 | what attitude you adopt in the situation. 422 | 423 | 00:09:13.160 --> 00:09:14.820 424 | And there's a multitude, 425 | 426 | 00:09:15.460 --> 00:09:19.220 427 | a wealth of possible attitudes to how to approach it. 428 | 429 | 00:09:19.400 --> 00:09:20.700 430 | So we have to decide. 431 | 432 | 00:09:21.940 --> 00:09:24.220 433 | The ultimate, I would take it, 434 | 435 | 00:09:24.420 --> 00:09:27.660 436 | attitudinal value challenge that we all share 437 | 438 | 00:09:27.660 --> 00:09:30.220 439 | is how we're going to face death. 440 | 441 | 00:09:32.180 --> 00:09:34.220 442 | How do you prepare people for that? 443 | 444 | 00:09:34.620 --> 00:09:35.940 445 | How do you prepare yourself for that? 446 | 447 | 00:09:37.160 --> 00:09:43.460 448 | I couldn't prepare anyone else unless I would have prepared myself. 449 | 450 | 00:09:45.540 --> 00:09:47.700 451 | Because you, if you were a psychiatrist, 452 | 453 | 00:09:47.980 --> 00:09:51.680 454 | your patients feel exactly whether or not 455 | 456 | 00:09:51.680 --> 00:09:56.860 457 | you are really convinced of what you are teaching and telling them. 458 | 459 | 00:09:56.860 --> 00:10:02.900 460 | Now, I'm convinced that in contrast to the usual aspect, 461 | 462 | 00:10:03.700 --> 00:10:06.120 463 | albeit sound aspect, to life, 464 | 465 | 00:10:06.840 --> 00:10:10.420 466 | and more specifically to the past, 467 | 468 | 00:10:10.700 --> 00:10:12.900 469 | to life's transitoriness, 470 | 471 | 00:10:13.420 --> 00:10:18.140 472 | and this includes that each of us is approaching death. 473 | 474 | 00:10:18.620 --> 00:10:26.000 475 | In contrast to that, I maintain that in the past nothing is lost, 476 | 477 | 00:10:26.000 --> 00:10:32.280 478 | but right on the contrary, everything is stored forever. 479 | 480 | 00:10:33.380 --> 00:10:36.440 481 | It is not annihilated by transitoriness, 482 | 483 | 00:10:36.800 --> 00:10:42.420 484 | but on the contrary, it is becoming preserved forever. 485 | 486 | 00:10:43.260 --> 00:10:46.000 487 | Something you have done can never be undone. 488 | 489 | 00:10:46.980 --> 00:10:48.000 490 | Something you have experienced, 491 | 492 | 00:10:49.140 --> 00:10:52.360 493 | something you have even experienced in a negative sense, 494 | 495 | 00:10:52.800 --> 00:10:54.280 496 | going through suffering. 497 | 498 | 00:10:54.280 --> 00:10:56.020 499 | And if you have, for instance, 500 | 501 | 00:10:56.180 --> 00:11:01.400 502 | if you have gone through this suffering honestly, courageously, 503 | 504 | 00:11:01.700 --> 00:11:04.360 505 | and with dignity, who in the world, 506 | 507 | 00:11:04.620 --> 00:11:08.200 508 | what in the world can annihilate this? 509 | 510 | 00:11:08.620 --> 00:11:13.280 511 | What you have done has been done forever in both ways, 512 | 513 | 00:11:13.500 --> 00:11:16.760 514 | in a negative as in a positive way. 515 | 516 | 00:11:16.960 --> 00:11:18.900 517 | It cannot be undone. 518 | 519 | 00:11:18.900 --> 00:11:25.120 520 | And the past is a storehouse of what you have done, 521 | 522 | 00:11:25.520 --> 00:11:28.660 523 | what you have experienced, what you have gone through, 524 | 525 | 00:11:29.040 --> 00:11:33.900 526 | and what you have done out of all the negative and tragic aspects 527 | 528 | 00:11:34.780 --> 00:11:37.560 529 | as even encountered within your life. 530 | 531 | 00:11:37.760 --> 00:11:39.000 532 | I want to thank you for being on the show, 533 | 534 | 00:11:39.300 --> 00:11:40.420 535 | and I want to thank you at home for watching. 536 | 537 | -------------------------------------------------------------------------------- /examples/output/sample.srt: -------------------------------------------------------------------------------- 1 | 1 2 | 00:00:00,000 --> 00:00:06,920 3 | In your work, you quote Nietzsche quite a bit, his line, 4 | 5 | 2 6 | 00:00:07,120 --> 00:00:10,540 7 | he who has a why to live for can bear almost any how. 8 | 9 | 3 10 | 00:00:12,060 --> 00:00:13,560 11 | What do you think he meant by that? 12 | 13 | 4 14 | 00:00:14,960 --> 00:00:17,040 15 | What do you think he meant by that? 16 | 17 | 5 18 | 00:00:18,600 --> 00:00:23,860 19 | The same as I am intended to convey to my readers and students, 20 | 21 | 6 22 | 00:00:24,740 --> 00:00:27,440 23 | that the vision of a meaning ahead of someone, 24 | 25 | 7 26 | 00:00:27,440 --> 00:00:32,720 27 | a meaning in wait for someone to be fulfilled by someone, 28 | 29 | 8 30 | 00:00:33,880 --> 00:00:38,240 31 | that this contributes most than anything else 32 | 33 | 9 34 | 00:00:38,240 --> 00:00:44,720 35 | under equal circumstances for survival. 36 | 37 | 10 38 | 00:00:45,840 --> 00:00:47,600 39 | Meaning is the most important thing in our lives? 40 | 41 | 11 42 | 00:00:49,140 --> 00:00:52,600 43 | Certainly, because what I call a will to meaning, 44 | 45 | 12 46 | 00:00:53,980 --> 00:00:57,220 47 | the wish to find and to fulfill meaning 48 | 49 | 13 50 | 00:00:57,220 --> 00:01:00,920 51 | is the basic motivation in human beings. 52 | 53 | 14 54 | 00:01:01,880 --> 00:01:06,720 55 | This certainly runs counter to much of the determinist notions 56 | 57 | 15 58 | 00:01:06,720 --> 00:01:10,140 59 | that are being bandied around about these days 60 | 61 | 16 62 | 00:01:10,140 --> 00:01:12,160 63 | as man is a machine, man is a computer, 64 | 65 | 17 66 | 00:01:13,040 --> 00:01:14,760 67 | man is a product of instincts. 68 | 69 | 18 70 | 00:01:16,080 --> 00:01:19,680 71 | Man is something like a rat in experiments, 72 | 73 | 19 74 | 00:01:20,380 --> 00:01:21,640 75 | psychological experiments. 76 | 77 | 20 78 | 00:01:21,640 --> 00:01:25,640 79 | Of course you are right, but not only against 80 | 81 | 21 82 | 00:01:26,260 --> 00:01:29,840 83 | the so-called deterministic concepts of man, 84 | 85 | 22 86 | 00:01:30,640 --> 00:01:33,640 87 | but also regarding the motivational theories 88 | 89 | 23 90 | 00:01:34,560 --> 00:01:37,600 91 | of certain psychotherapeutic systems. 92 | 93 | 24 94 | 00:01:38,260 --> 00:01:41,460 95 | Let's talk for a minute about logotherapy, 96 | 97 | 25 98 | 00:01:42,420 --> 00:01:45,340 99 | which arose out of this notion of a search for meaning. 100 | 101 | 26 102 | 00:01:46,060 --> 00:01:50,780 103 | Logotherapy is one among other types of psychotherapy, 104 | 105 | 27 106 | 00:01:50,780 --> 00:01:57,180 107 | is, we may say, a meaning-centered psychotherapy. 108 | 109 | 28 110 | 00:01:58,120 --> 00:02:00,780 111 | In as much particularly as logotherapy 112 | 113 | 29 114 | 00:02:01,760 --> 00:02:07,180 115 | sees a human being not predominantly determined, 116 | 117 | 30 118 | 00:02:07,300 --> 00:02:10,360 119 | not to say dominated, by the will to pleasure, 120 | 121 | 31 122 | 00:02:10,600 --> 00:02:14,560 123 | as you were mentioning, nor by the will to power 124 | 125 | 32 126 | 00:02:14,560 --> 00:02:17,040 127 | along the lines of Adlerian teachings, 128 | 129 | 33 130 | 00:02:17,040 --> 00:02:21,560 131 | but basically, fundamentally, by a will to meaning. 132 | 133 | 34 134 | 00:02:21,920 --> 00:02:26,120 135 | That is to say the desire, the impulse, 136 | 137 | 35 138 | 00:02:27,200 --> 00:02:30,880 139 | to find, to discover in life, or better to say 140 | 141 | 36 142 | 00:02:30,880 --> 00:02:34,180 143 | in each life situation, concrete life situation, 144 | 145 | 37 146 | 00:02:34,420 --> 00:02:38,540 147 | confronting someone, the desire to find a meaning therein 148 | 149 | 38 150 | 00:02:38,540 --> 00:02:41,080 151 | and to go on to fulfill it. 152 | 153 | 39 154 | 00:02:41,140 --> 00:02:42,240 155 | I was very intrigued. 156 | 157 | 40 158 | 00:02:42,420 --> 00:02:45,840 159 | One of the most surprising things I've read recently 160 | 161 | 41 162 | 00:02:45,840 --> 00:02:52,160 163 | was that you said that when you talked to European students, 164 | 165 | 42 166 | 00:02:53,180 --> 00:02:57,160 167 | only 40% said they had suffered this sort of inner void, 168 | 169 | 43 170 | 00:02:57,880 --> 00:03:02,600 171 | and yet 81% of American students experience the same thing. 172 | 173 | 44 174 | 00:03:02,620 --> 00:03:03,880 175 | This was decades ago. 176 | 177 | 45 178 | 00:03:04,060 --> 00:03:05,300 179 | We think of it just the opposite. 180 | 181 | 46 182 | 00:03:05,380 --> 00:03:09,180 183 | We think of the Europeans as being buried under this 184 | 185 | 47 186 | 00:03:09,180 --> 00:03:13,880 187 | existential dread and sense of purposelessness, 188 | 189 | 48 190 | 00:03:13,880 --> 00:03:16,040 191 | and Americans as being optimistic and upbeat. 192 | 193 | 49 194 | 00:03:16,760 --> 00:03:20,860 195 | However it might be, whether the ones or the others 196 | 197 | 50 198 | 00:03:21,880 --> 00:03:25,720 199 | are suffering more or less, respectively, 200 | 201 | 51 202 | 00:03:26,140 --> 00:03:27,920 203 | from this existential vacuum, 204 | 205 | 52 206 | 00:03:28,860 --> 00:03:32,160 207 | the ones who seem to suffer less 208 | 209 | 53 210 | 00:03:32,880 --> 00:03:36,120 211 | should not look at the others with contempt, 212 | 213 | 54 214 | 00:03:37,120 --> 00:03:40,080 215 | but look at the others with compassion 216 | 217 | 55 218 | 00:03:40,080 --> 00:03:47,340 219 | and look for anything possible to help the others. 220 | 221 | 56 222 | 00:03:48,280 --> 00:03:51,220 223 | Now this void manifests itself as apathy. 224 | 225 | 57 226 | 00:03:51,220 --> 00:03:55,960 227 | In apathy, in boredom, lack of initiative, 228 | 229 | 58 230 | 00:03:56,200 --> 00:04:00,180 231 | lack of interest in the world, 232 | 233 | 59 234 | 00:04:00,760 --> 00:04:06,140 235 | or initiative in changing something within the world for the better. 236 | 237 | 60 238 | 00:04:07,260 --> 00:04:13,240 239 | This frustration is a proof 240 | 241 | 61 242 | 00:04:13,240 --> 00:04:16,040 243 | of the existence of a will to meaning. 244 | 245 | 62 246 | 00:04:16,780 --> 00:04:19,940 247 | Unless we were imbued by a will to meaning, 248 | 249 | 63 250 | 00:04:19,980 --> 00:04:22,140 251 | by the wish to find meaning and discover 252 | 253 | 64 254 | 00:04:23,540 --> 00:04:25,660 255 | and fulfill meaning in life, 256 | 257 | 65 258 | 00:04:25,940 --> 00:04:28,800 259 | we never would be able to experience an inner void. 260 | 261 | 66 262 | 00:04:29,540 --> 00:04:32,140 263 | So this is in a way also something positive. 264 | 265 | 67 266 | 00:04:33,040 --> 00:04:35,320 267 | Now you've listed three types of values. 268 | 269 | 68 270 | 00:04:35,320 --> 00:04:38,620 271 | Creative values, experiential values, and attitudinal values. 272 | 273 | 69 274 | 00:04:38,900 --> 00:04:41,640 275 | You may find a meaning, the average man, 276 | 277 | 70 278 | 00:04:41,880 --> 00:04:44,360 279 | the man on the street or the woman on the street, 280 | 281 | 71 282 | 00:04:44,780 --> 00:04:49,300 283 | may find a meaning day by day in doing a deed, 284 | 285 | 72 286 | 00:04:50,040 --> 00:04:51,640 287 | in creating a work. 288 | 289 | 73 290 | 00:04:53,200 --> 00:04:54,060 291 | That's the creative. 292 | 293 | 74 294 | 00:04:54,520 --> 00:04:58,740 295 | Creative, and in experiencing something, 296 | 297 | 75 298 | 00:04:59,600 --> 00:05:02,940 299 | the beauty, the truth, the researcher, 300 | 301 | 76 302 | 00:05:02,940 --> 00:05:08,820 303 | or the good in dealing with people as a teacher or whatsoever. 304 | 305 | 77 306 | 00:05:08,900 --> 00:05:12,420 307 | There's an extraordinary moment in Man's Search for Meaning 308 | 309 | 78 310 | 00:05:12,420 --> 00:05:15,500 311 | where you talk about being in one of the Nazi camps 312 | 313 | 79 314 | 00:05:15,500 --> 00:05:18,620 315 | and all of you going out to look at a sunset. 316 | 317 | 80 318 | 00:05:19,760 --> 00:05:20,420 319 | Is that experiential? 320 | 321 | 81 322 | 00:05:20,800 --> 00:05:25,180 323 | Exactly. This is a paradigm of experiential values, 324 | 325 | 82 326 | 00:05:25,580 --> 00:05:29,040 327 | of finding a meaning in experiencing without doing anything, 328 | 329 | 83 330 | 00:05:29,400 --> 00:05:32,100 331 | without achieving or accomplishing anything, 332 | 333 | 84 334 | 00:05:32,100 --> 00:05:36,120 335 | but just in giving oneself the immediate experience 336 | 337 | 85 338 | 00:05:36,120 --> 00:05:39,960 339 | of something beautiful going on in the world. 340 | 341 | 86 342 | 00:05:40,600 --> 00:05:42,020 343 | This is the second avenue. 344 | 345 | 87 346 | 00:05:42,580 --> 00:05:49,020 347 | But there is also another aspect of experiential values. 348 | 349 | 88 350 | 00:05:51,400 --> 00:05:54,920 351 | Not only experiencing something, 352 | 353 | 89 354 | 00:05:55,520 --> 00:05:57,620 355 | but also experiencing someone. 356 | 357 | 90 358 | 00:05:57,620 --> 00:06:02,180 359 | More than that, experiencing another human being 360 | 361 | 91 362 | 00:06:02,180 --> 00:06:04,980 363 | in his or her very uniqueness. 364 | 365 | 92 366 | 00:06:05,620 --> 00:06:09,640 367 | It is the main attribute of a human being 368 | 369 | 93 370 | 00:06:09,640 --> 00:06:14,140 371 | that he is a person in contrast to any animal. 372 | 373 | 94 374 | 00:06:14,460 --> 00:06:19,480 375 | A person is always something absolutely unique, 376 | 377 | 95 378 | 00:06:19,820 --> 00:06:22,760 379 | irrepeatable in the evolution of the cosmos, 380 | 381 | 96 382 | 00:06:23,760 --> 00:06:26,560 383 | incomparable with any other human being. 384 | 385 | 97 386 | 00:06:26,560 --> 00:06:33,680 387 | And this uniqueness can be got hold of solely by a loving person 388 | 389 | 98 390 | 00:06:33,680 --> 00:06:36,540 391 | because he not only sees the essence, 392 | 393 | 99 394 | 00:06:37,080 --> 00:06:40,280 395 | but also the potentials in the beloved person. 396 | 397 | 100 398 | 00:06:40,500 --> 00:06:44,580 399 | Thereby, as I put it before, promoting him, alleviating it, 400 | 401 | 101 402 | 00:06:44,680 --> 00:06:49,100 403 | to reach out to attain this potential and to fulfill 404 | 405 | 102 406 | 00:06:49,100 --> 00:06:52,460 407 | and thereby actualize also himself. 408 | 409 | 103 410 | 00:06:52,460 --> 00:06:56,220 411 | But not by preaching self-actualization. 412 | 413 | 104 414 | 00:06:56,760 --> 00:06:57,400 415 | It's nonsense. 416 | 417 | 105 418 | 00:06:57,700 --> 00:07:02,520 419 | Self-actualization can only fall into your lap automatically 420 | 421 | 106 422 | 00:07:02,520 --> 00:07:06,400 423 | once that you have fulfilled a concrete meaning, 424 | 425 | 107 426 | 00:07:06,800 --> 00:07:08,640 427 | done the best of a situation. 428 | 429 | 108 430 | 00:07:09,040 --> 00:07:12,300 431 | Then you actualize yourself as a byproduct. 432 | 433 | 109 434 | 00:07:12,740 --> 00:07:14,600 435 | Let's talk about the third set of values, 436 | 437 | 110 438 | 00:07:14,680 --> 00:07:16,960 439 | which is the attitudinal, 440 | 441 | 111 442 | 00:07:16,960 --> 00:07:23,440 443 | the idea of choosing how to respond to suffering. 444 | 445 | 112 446 | 00:07:23,760 --> 00:07:25,000 447 | Choosing the attitude. 448 | 449 | 113 450 | 00:07:25,080 --> 00:07:25,460 451 | Yes. 452 | 453 | 114 454 | 00:07:26,420 --> 00:07:29,580 455 | If there is no possibility in a given situation 456 | 457 | 115 458 | 00:07:31,320 --> 00:07:34,760 459 | to fulfill the meaning of a situation 460 | 461 | 116 462 | 00:07:34,760 --> 00:07:39,460 463 | by giving oneself to the experience of beauty and so forth, 464 | 465 | 117 466 | 00:07:39,460 --> 00:07:45,680 467 | nor if you have lost the capability to do your job, 468 | 469 | 118 470 | 00:07:45,780 --> 00:07:46,920 471 | to do your work, 472 | 473 | 119 474 | 00:07:47,460 --> 00:07:49,460 475 | even then there is an ultimate possibility 476 | 477 | 120 478 | 00:07:50,140 --> 00:07:52,460 479 | to find and fulfill meaning. 480 | 481 | 121 482 | 00:07:53,500 --> 00:07:54,820 483 | Not only the ultimate, 484 | 485 | 122 486 | 00:07:55,100 --> 00:08:01,600 487 | it is even the potential to fulfill the deepest meaning, 488 | 489 | 123 490 | 00:08:02,140 --> 00:08:04,500 491 | to attain the highest values. 492 | 493 | 124 494 | 00:08:04,500 --> 00:08:09,800 495 | By your approach to this situation, 496 | 497 | 125 498 | 00:08:10,300 --> 00:08:13,420 499 | a tragic or a sad situation confronting you. 500 | 501 | 126 502 | 00:08:13,420 --> 00:08:17,120 503 | You said that in part of the initial shock 504 | 505 | 127 506 | 00:08:17,880 --> 00:08:19,980 507 | of being put in a death camp 508 | 509 | 128 510 | 00:08:21,440 --> 00:08:26,320 511 | was ultimately an acceptance that we knew we had nothing to lose 512 | 513 | 129 514 | 00:08:26,320 --> 00:08:28,500 515 | except our ridiculously naked lives. 516 | 517 | 130 518 | 00:08:29,280 --> 00:08:31,760 519 | Is that the situation that they're in? 520 | 521 | 131 522 | 00:08:33,180 --> 00:08:34,080 523 | In a way. 524 | 525 | 132 526 | 00:08:34,080 --> 00:08:38,080 527 | Is this when you make the choice of how you're going to... 528 | 529 | 133 530 | 00:08:38,680 --> 00:08:42,340 531 | your last value choice is how to react to the situation? 532 | 533 | 134 534 | 00:08:42,500 --> 00:08:44,880 535 | You stand there, you stood there naked 536 | 537 | 135 538 | 00:08:44,880 --> 00:08:48,320 539 | with nothing you could have had, 540 | 541 | 136 542 | 00:08:49,040 --> 00:08:53,940 543 | but all the more what counted and mattered was what you were, 544 | 545 | 137 546 | 00:08:54,480 --> 00:08:58,680 547 | being rather than having, possessing anything, 548 | 549 | 138 550 | 00:09:01,120 --> 00:09:02,940 551 | or the being. 552 | 553 | 139 554 | 00:09:02,940 --> 00:09:07,900 555 | So what counted was what you make out of the situation, 556 | 557 | 140 558 | 00:09:08,960 --> 00:09:12,600 559 | what attitude you adopt in the situation. 560 | 561 | 141 562 | 00:09:13,160 --> 00:09:14,820 563 | And there's a multitude, 564 | 565 | 142 566 | 00:09:15,460 --> 00:09:19,220 567 | a wealth of possible attitudes to how to approach it. 568 | 569 | 143 570 | 00:09:19,400 --> 00:09:20,700 571 | So we have to decide. 572 | 573 | 144 574 | 00:09:21,940 --> 00:09:24,220 575 | The ultimate, I would take it, 576 | 577 | 145 578 | 00:09:24,420 --> 00:09:27,660 579 | attitudinal value challenge that we all share 580 | 581 | 146 582 | 00:09:27,660 --> 00:09:30,220 583 | is how we're going to face death. 584 | 585 | 147 586 | 00:09:32,180 --> 00:09:34,220 587 | How do you prepare people for that? 588 | 589 | 148 590 | 00:09:34,620 --> 00:09:35,940 591 | How do you prepare yourself for that? 592 | 593 | 149 594 | 00:09:37,160 --> 00:09:43,460 595 | I couldn't prepare anyone else unless I would have prepared myself. 596 | 597 | 150 598 | 00:09:45,540 --> 00:09:47,700 599 | Because you, if you were a psychiatrist, 600 | 601 | 151 602 | 00:09:47,980 --> 00:09:51,680 603 | your patients feel exactly whether or not 604 | 605 | 152 606 | 00:09:51,680 --> 00:09:56,860 607 | you are really convinced of what you are teaching and telling them. 608 | 609 | 153 610 | 00:09:56,860 --> 00:10:02,900 611 | Now, I'm convinced that in contrast to the usual aspect, 612 | 613 | 154 614 | 00:10:03,700 --> 00:10:06,120 615 | albeit sound aspect, to life, 616 | 617 | 155 618 | 00:10:06,840 --> 00:10:10,420 619 | and more specifically to the past, 620 | 621 | 156 622 | 00:10:10,700 --> 00:10:12,900 623 | to life's transitoriness, 624 | 625 | 157 626 | 00:10:13,420 --> 00:10:18,140 627 | and this includes that each of us is approaching death. 628 | 629 | 158 630 | 00:10:18,620 --> 00:10:26,000 631 | In contrast to that, I maintain that in the past nothing is lost, 632 | 633 | 159 634 | 00:10:26,000 --> 00:10:32,280 635 | but right on the contrary, everything is stored forever. 636 | 637 | 160 638 | 00:10:33,380 --> 00:10:36,440 639 | It is not annihilated by transitoriness, 640 | 641 | 161 642 | 00:10:36,800 --> 00:10:42,420 643 | but on the contrary, it is becoming preserved forever. 644 | 645 | 162 646 | 00:10:43,260 --> 00:10:46,000 647 | Something you have done can never be undone. 648 | 649 | 163 650 | 00:10:46,980 --> 00:10:48,000 651 | Something you have experienced, 652 | 653 | 164 654 | 00:10:49,140 --> 00:10:52,360 655 | something you have even experienced in a negative sense, 656 | 657 | 165 658 | 00:10:52,800 --> 00:10:54,280 659 | going through suffering. 660 | 661 | 166 662 | 00:10:54,280 --> 00:10:56,020 663 | And if you have, for instance, 664 | 665 | 167 666 | 00:10:56,180 --> 00:11:01,400 667 | if you have gone through this suffering honestly, courageously, 668 | 669 | 168 670 | 00:11:01,700 --> 00:11:04,360 671 | and with dignity, who in the world, 672 | 673 | 169 674 | 00:11:04,620 --> 00:11:08,200 675 | what in the world can annihilate this? 676 | 677 | 170 678 | 00:11:08,620 --> 00:11:13,280 679 | What you have done has been done forever in both ways, 680 | 681 | 171 682 | 00:11:13,500 --> 00:11:16,760 683 | in a negative as in a positive way. 684 | 685 | 172 686 | 00:11:16,960 --> 00:11:18,900 687 | It cannot be undone. 688 | 689 | 173 690 | 00:11:18,900 --> 00:11:25,120 691 | And the past is a storehouse of what you have done, 692 | 693 | 174 694 | 00:11:25,520 --> 00:11:28,660 695 | what you have experienced, what you have gone through, 696 | 697 | 175 698 | 00:11:29,040 --> 00:11:33,900 699 | and what you have done out of all the negative and tragic aspects 700 | 701 | 176 702 | 00:11:34,780 --> 00:11:37,560 703 | as even encountered within your life. 704 | 705 | 177 706 | 00:11:37,760 --> 00:11:39,000 707 | I want to thank you for being on the show, 708 | 709 | 178 710 | 00:11:39,300 --> 00:11:40,420 711 | and I want to thank you at home for watching. 712 | 713 | -------------------------------------------------------------------------------- /poetry.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. 2 | 3 | [[package]] 4 | name = "appnope" 5 | version = "0.1.3" 6 | description = "Disable App Nap on macOS >= 10.9" 7 | category = "dev" 8 | optional = false 9 | python-versions = "*" 10 | files = [ 11 | {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, 12 | {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, 13 | ] 14 | 15 | [[package]] 16 | name = "asttokens" 17 | version = "2.4.1" 18 | description = "Annotate AST trees with source code positions" 19 | category = "dev" 20 | optional = false 21 | python-versions = "*" 22 | files = [ 23 | {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, 24 | {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, 25 | ] 26 | 27 | [package.dependencies] 28 | six = ">=1.12.0" 29 | 30 | [package.extras] 31 | astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] 32 | test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] 33 | 34 | [[package]] 35 | name = "av" 36 | version = "10.0.0" 37 | description = "Pythonic bindings for FFmpeg's libraries." 38 | category = "main" 39 | optional = false 40 | python-versions = "*" 41 | files = [ 42 | {file = "av-10.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d19bb54197155d045a2b683d993026d4bcb06e31c2acad0327e3e8711571899c"}, 43 | {file = "av-10.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7dba96a85cd37315529998e6dbbe3fa05c2344eb19a431dc24996be030a904ee"}, 44 | {file = "av-10.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27d6d38c7c8d46d578c008ffcb8aad1eae14d0621fff41f4ad62395589045fe4"}, 45 | {file = "av-10.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:51037f4bde03daf924236af4f444e17345792ad7f6f70760a5e5863407e14f2b"}, 46 | {file = "av-10.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0577a38664e453b4ffb63d616a0d23c295827b16ae96a090e89527a753de8718"}, 47 | {file = "av-10.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:07c971573035d22ce50069d3f2bbdb4d6d02d626ab13db12fda3ce519cda3f22"}, 48 | {file = "av-10.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e5085d11345484c0097898994bb3f515002e7e1deeb43dd11d30dd6f45402c49"}, 49 | {file = "av-10.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:157bde3ffd1615a9006b56e4daf3b46848d3ee2bd46b0394f7568e43ed7ab5a9"}, 50 | {file = "av-10.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:115e144d5a1f205378a4b3a3657b7ed3e45918ebe5d2003a891e45984e8f443a"}, 51 | {file = "av-10.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7d6e2b3fbda6464f74fe010dbcff361394bb014b0cb4aa4dc9f2bb713ce882"}, 52 | {file = "av-10.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69fd5a38395191a0f4b71adf31057ff177c9f0762914d73d8797742339ad67d0"}, 53 | {file = "av-10.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:836d69a9543d284976b229cc8d4343ffcfc0bbaf05239e13fb7e613b13d5291d"}, 54 | {file = "av-10.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:eba192274538617bbe60097a013d83637f1a5ba9844bbbcf3ca7e43c6499b9d5"}, 55 | {file = "av-10.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1301e4cf1a2c899851073720cd541066c8539b64f9eb0d52216f8d0a59f20429"}, 56 | {file = "av-10.0.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eebd5aa9d8b1e33e715c5409544a712f13ec805bb0110d75f394ff28d2fb64ad"}, 57 | {file = "av-10.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04cd0ce13a87870fb0a0ea4673f04934af2b9ac7ae844eafe92e2c19c092ab11"}, 58 | {file = "av-10.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:10facb5b933551dd6a30d8015bc91eef5d1c864ee86aa3463ffbaff1a99f6c6a"}, 59 | {file = "av-10.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:088636ded03724a2ab51136f6f4be0bc457bdb3c0d2ac7158792fe81150d4c1a"}, 60 | {file = "av-10.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ff0f7d3b1003a9ed0d06038f3f521a5ff0d3e056ec5111e2a78e303f98b815a7"}, 61 | {file = "av-10.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ccaf786e747b126a5b3b9a8f5ffbb6a20c5f528775cc7084c95732ca72606fba"}, 62 | {file = "av-10.0.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c579d718b52beb812ea2a7bd68f812d0920b00937804d52d31d41bb71aa5557"}, 63 | {file = "av-10.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2cfd39baa5d82768d2a8898de7bfd450a083ef22b837d57e5dc1b6de3244218"}, 64 | {file = "av-10.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:81b5264d9752f49286bc1dc4d2cc66187418c4948a326dbed837c766c9892139"}, 65 | {file = "av-10.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:16bd82b63d0b4c1b855b3c36b13337f7cdc5925bd8284fab893bdf6c290fc3a9"}, 66 | {file = "av-10.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a6c8f3f8c26d35eefe45b849c81fd0816ba4b6f589baec7357c25b4c5537d3c4"}, 67 | {file = "av-10.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91ea46fea7259abdfabe00b0ed3a9ca18e7fff7ce80d2a2c66a28f797cce838a"}, 68 | {file = "av-10.0.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a62edd533d330aa61902ae8cd82966affa487fa337a0c4f58ae8866ccb5d31c0"}, 69 | {file = "av-10.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b67b7d028c9cf68215376662fd2e0be6ca0cc02d32d3ed8514fec67b12db9cbd"}, 70 | {file = "av-10.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:0f9c88062ebfd2ce547c522b64f79e487ed2b0a6a9d6693c801b28df0d944607"}, 71 | {file = "av-10.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:63dbafcd02415127d97509523bc285f1ab260988f87b744d7fb1baee6ffbdf96"}, 72 | {file = "av-10.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2ea4424d0be62fe18c843420284a0907bcb38d577062d62c4b75a8e940e6057"}, 73 | {file = "av-10.0.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8b6326fd0755761e3ee999e4bf90339e869fe71d548b679fee89157858b8d04a"}, 74 | {file = "av-10.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3fae238751ec0db6377b2106e13762ca84dbe104bd44c1ce9b424163aef4ab5"}, 75 | {file = "av-10.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:86bb3f6e8cce62ad18cd34eb2eadd091d99f51b40be81c929b53fbd8fecf6d90"}, 76 | {file = "av-10.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f7b508813abbc100162d305a1ac9b2dd16e5128d56f2ac69639fc6a4b5aca69e"}, 77 | {file = "av-10.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98cc376199c0aa6e9365d03e0f4e67cfb209e40fe9c0cf566372f9daf2a0c779"}, 78 | {file = "av-10.0.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b459ca0ef25c1a0e370112556bdc5b7752f76dc9bd497acaf3e653171e4b946"}, 79 | {file = "av-10.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab930735112c1f788cc4d47c42c59ba0dd214d815aa906e1addf39af91d15194"}, 80 | {file = "av-10.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13fe0b48b9211539323ecebbf84154c86c72d16723c6d0af76e29ae5c3a614b2"}, 81 | {file = "av-10.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2eeec7beaebfe9e2213b3c94b482381187d0afdcb632f93239b44dc668b97df"}, 82 | {file = "av-10.0.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dac2a8b0791c3373270e32f6cd27e6b60628565a188e40a5d9660d3aab05e33"}, 83 | {file = "av-10.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cdede2325cb750b5bf79238bbf06f9c2a70b757b12726003769a43493b7233a"}, 84 | {file = "av-10.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:9788e6e15db0910fb8e1548ba7540799d07066177710590a5794a524c4910e05"}, 85 | {file = "av-10.0.0.tar.gz", hash = "sha256:8afd3d5610e1086f3b2d8389d66672ea78624516912c93612de64dcaa4c67e05"}, 86 | ] 87 | 88 | [[package]] 89 | name = "black" 90 | version = "23.11.0" 91 | description = "The uncompromising code formatter." 92 | category = "dev" 93 | optional = false 94 | python-versions = ">=3.8" 95 | files = [ 96 | {file = "black-23.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dbea0bb8575c6b6303cc65017b46351dc5953eea5c0a59d7b7e3a2d2f433a911"}, 97 | {file = "black-23.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:412f56bab20ac85927f3a959230331de5614aecda1ede14b373083f62ec24e6f"}, 98 | {file = "black-23.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d136ef5b418c81660ad847efe0e55c58c8208b77a57a28a503a5f345ccf01394"}, 99 | {file = "black-23.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:6c1cac07e64433f646a9a838cdc00c9768b3c362805afc3fce341af0e6a9ae9f"}, 100 | {file = "black-23.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cf57719e581cfd48c4efe28543fea3d139c6b6f1238b3f0102a9c73992cbb479"}, 101 | {file = "black-23.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:698c1e0d5c43354ec5d6f4d914d0d553a9ada56c85415700b81dc90125aac244"}, 102 | {file = "black-23.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:760415ccc20f9e8747084169110ef75d545f3b0932ee21368f63ac0fee86b221"}, 103 | {file = "black-23.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:58e5f4d08a205b11800332920e285bd25e1a75c54953e05502052738fe16b3b5"}, 104 | {file = "black-23.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:45aa1d4675964946e53ab81aeec7a37613c1cb71647b5394779e6efb79d6d187"}, 105 | {file = "black-23.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c44b7211a3a0570cc097e81135faa5f261264f4dfaa22bd5ee2875a4e773bd6"}, 106 | {file = "black-23.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a9acad1451632021ee0d146c8765782a0c3846e0e0ea46659d7c4f89d9b212b"}, 107 | {file = "black-23.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:fc7f6a44d52747e65a02558e1d807c82df1d66ffa80a601862040a43ec2e3142"}, 108 | {file = "black-23.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7f622b6822f02bfaf2a5cd31fdb7cd86fcf33dab6ced5185c35f5db98260b055"}, 109 | {file = "black-23.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:250d7e60f323fcfc8ea6c800d5eba12f7967400eb6c2d21ae85ad31c204fb1f4"}, 110 | {file = "black-23.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5133f5507007ba08d8b7b263c7aa0f931af5ba88a29beacc4b2dc23fcefe9c06"}, 111 | {file = "black-23.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:421f3e44aa67138ab1b9bfbc22ee3780b22fa5b291e4db8ab7eee95200726b07"}, 112 | {file = "black-23.11.0-py3-none-any.whl", hash = "sha256:54caaa703227c6e0c87b76326d0862184729a69b73d3b7305b6288e1d830067e"}, 113 | {file = "black-23.11.0.tar.gz", hash = "sha256:4c68855825ff432d197229846f971bc4d6666ce90492e5b02013bcaca4d9ab05"}, 114 | ] 115 | 116 | [package.dependencies] 117 | click = ">=8.0.0" 118 | mypy-extensions = ">=0.4.3" 119 | packaging = ">=22.0" 120 | pathspec = ">=0.9.0" 121 | platformdirs = ">=2" 122 | tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} 123 | typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} 124 | 125 | [package.extras] 126 | colorama = ["colorama (>=0.4.3)"] 127 | d = ["aiohttp (>=3.7.4)"] 128 | jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] 129 | uvloop = ["uvloop (>=0.15.2)"] 130 | 131 | [[package]] 132 | name = "certifi" 133 | version = "2023.7.22" 134 | description = "Python package for providing Mozilla's CA Bundle." 135 | category = "main" 136 | optional = false 137 | python-versions = ">=3.6" 138 | files = [ 139 | {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, 140 | {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, 141 | ] 142 | 143 | [[package]] 144 | name = "charset-normalizer" 145 | version = "3.3.2" 146 | description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." 147 | category = "main" 148 | optional = false 149 | python-versions = ">=3.7.0" 150 | files = [ 151 | {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, 152 | {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, 153 | {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, 154 | {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, 155 | {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, 156 | {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, 157 | {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, 158 | {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, 159 | {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, 160 | {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, 161 | {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, 162 | {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, 163 | {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, 164 | {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, 165 | {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, 166 | {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, 167 | {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, 168 | {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, 169 | {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, 170 | {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, 171 | {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, 172 | {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, 173 | {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, 174 | {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, 175 | {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, 176 | {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, 177 | {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, 178 | {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, 179 | {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, 180 | {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, 181 | {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, 182 | {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, 183 | {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, 184 | {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, 185 | {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, 186 | {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, 187 | {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, 188 | {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, 189 | {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, 190 | {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, 191 | {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, 192 | {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, 193 | {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, 194 | {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, 195 | {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, 196 | {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, 197 | {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, 198 | {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, 199 | {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, 200 | {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, 201 | {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, 202 | {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, 203 | {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, 204 | {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, 205 | {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, 206 | {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, 207 | {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, 208 | {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, 209 | {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, 210 | {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, 211 | {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, 212 | {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, 213 | {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, 214 | {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, 215 | {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, 216 | {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, 217 | {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, 218 | {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, 219 | {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, 220 | {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, 221 | {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, 222 | {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, 223 | {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, 224 | {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, 225 | {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, 226 | {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, 227 | {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, 228 | {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, 229 | {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, 230 | {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, 231 | {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, 232 | {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, 233 | {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, 234 | {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, 235 | {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, 236 | {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, 237 | {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, 238 | {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, 239 | {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, 240 | {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, 241 | ] 242 | 243 | [[package]] 244 | name = "cheap-repr" 245 | version = "0.5.1" 246 | description = "Better version of repr/reprlib for short, cheap string representations." 247 | category = "dev" 248 | optional = false 249 | python-versions = "*" 250 | files = [ 251 | {file = "cheap_repr-0.5.1-py2.py3-none-any.whl", hash = "sha256:30096998aeb49367a4a153988d7a99dce9dc59bbdd4b19740da6b4f3f97cf2ff"}, 252 | {file = "cheap_repr-0.5.1.tar.gz", hash = "sha256:31ec63b9d8394aa23d746c8376c8307f75f9fca0b983566b8bcf13cc661fe6dd"}, 253 | ] 254 | 255 | [package.extras] 256 | tests = ["Django", "Django (<2)", "Django (<3)", "chainmap", "numpy (>=1.16.3)", "numpy (>=1.16.3,<1.17)", "numpy (>=1.16.3,<1.19)", "pandas (>=0.24.2)", "pandas (>=0.24.2,<0.25)", "pandas (>=0.24.2,<0.26)", "pytest"] 257 | 258 | [[package]] 259 | name = "click" 260 | version = "8.1.7" 261 | description = "Composable command line interface toolkit" 262 | category = "main" 263 | optional = false 264 | python-versions = ">=3.7" 265 | files = [ 266 | {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, 267 | {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, 268 | ] 269 | 270 | [package.dependencies] 271 | colorama = {version = "*", markers = "platform_system == \"Windows\""} 272 | 273 | [[package]] 274 | name = "colorama" 275 | version = "0.4.6" 276 | description = "Cross-platform colored terminal text." 277 | category = "main" 278 | optional = false 279 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" 280 | files = [ 281 | {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, 282 | {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, 283 | ] 284 | 285 | [[package]] 286 | name = "coloredlogs" 287 | version = "15.0.1" 288 | description = "Colored terminal output for Python's logging module" 289 | category = "main" 290 | optional = false 291 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 292 | files = [ 293 | {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, 294 | {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, 295 | ] 296 | 297 | [package.dependencies] 298 | humanfriendly = ">=9.1" 299 | 300 | [package.extras] 301 | cron = ["capturer (>=2.4)"] 302 | 303 | [[package]] 304 | name = "ctranslate2" 305 | version = "3.20.0" 306 | description = "Fast inference engine for Transformer models" 307 | category = "main" 308 | optional = false 309 | python-versions = ">=3.8" 310 | files = [ 311 | {file = "ctranslate2-3.20.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:01754fdb1a5f0d9bcb194cdb4c6e91e3ea23c5be4a1bbd0fca448a1b41e222d0"}, 312 | {file = "ctranslate2-3.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:825774f301f47dd26d51f98cda2b546fee1ad619f0c901446e6bd177ac5f6976"}, 313 | {file = "ctranslate2-3.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47c051208cb9337030ca571f1561dc59e6d9ec7b6061d6ed8e6081214031edac"}, 314 | {file = "ctranslate2-3.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d914f707263da9c2c0ef6b8242b9cb58bdb0d0ccc23eba175f8e7719b510c22"}, 315 | {file = "ctranslate2-3.20.0-cp310-cp310-win_amd64.whl", hash = "sha256:1a71a4faf437c0d832d23be704b4d2dc0406be16c0f35f46ad461902c5fae259"}, 316 | {file = "ctranslate2-3.20.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9d94c70905cd8a5d665e8cbd78a5eaa23c53db5b5feea2a3b54b79332f6475c6"}, 317 | {file = "ctranslate2-3.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fc05762f07c1a2aad578e1608addf987992e41b8b912dff9e73dc97c9611c630"}, 318 | {file = "ctranslate2-3.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9144a15566b24ffd7310f9b3b116e4b70b7fab52c96bd18bbc63142172446ea0"}, 319 | {file = "ctranslate2-3.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80b173316e567d4117a53793235064ee00972b08a9e30065028d3373e1db8ccf"}, 320 | {file = "ctranslate2-3.20.0-cp311-cp311-win_amd64.whl", hash = "sha256:dea6434e53948a550b538fd22b6b9118f8f4fb84cc2baa52d3849369fdaba07f"}, 321 | {file = "ctranslate2-3.20.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bab22a01a4a3419a9eb520f0e8e0a822947f0b948d8df77c6388151cb4eaafc0"}, 322 | {file = "ctranslate2-3.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:112265df36fc83904bba52ba5ec9353f402bb7f96df66382f5faacc7c565867f"}, 323 | {file = "ctranslate2-3.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3129c3065dbf554143527c5f48284624cd119ad7f071d5e09624ebab51aef6b7"}, 324 | {file = "ctranslate2-3.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660f01d99462fb5c448ca801f77c5d5e52e7ebdca41075cdedb0a8134284c918"}, 325 | {file = "ctranslate2-3.20.0-cp312-cp312-win_amd64.whl", hash = "sha256:5fd6ff0afb1fc1ca68d3b2bd3513942634ed2773fdcd6083ce8d1c9be3290bbf"}, 326 | {file = "ctranslate2-3.20.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f5d79d52ad1b2c7eb8aad2a14fa13afaca71a5865a2a59f46cf6b9280a25c2b"}, 327 | {file = "ctranslate2-3.20.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a0be5d8dd42f8916d2363a174723e9ef3ca98038e7f26f786425db7f316f1955"}, 328 | {file = "ctranslate2-3.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4043eeb9bb2275452b40884e04424b66f0eb8a6bfee356a8e9fc9d53eb6d40e3"}, 329 | {file = "ctranslate2-3.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7b311a47b603e8d22bb1dd2c0f733a3b0b0cb6b7f2eeb8fe67fccc1593415f6"}, 330 | {file = "ctranslate2-3.20.0-cp38-cp38-win_amd64.whl", hash = "sha256:18c6fbf1e7de576fef2a192884483065eaa761ec714f4d03aef5343f08621991"}, 331 | {file = "ctranslate2-3.20.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b9f65982890e70838583d4ffd9766595339e51066c983ecdfada3b02da6957ae"}, 332 | {file = "ctranslate2-3.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:74eacb7a86069df63ce45cef412f36880fe8edf745e565917d347cc84391a814"}, 333 | {file = "ctranslate2-3.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8465c238f8f6ec74401fddf80bf00cdc27d3eec453881ba6566f819cf7939382"}, 334 | {file = "ctranslate2-3.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7b90e08c8a7a483fb8c074e7d0f78e8a794a2d86d47dafd58985f1fbec702f3"}, 335 | {file = "ctranslate2-3.20.0-cp39-cp39-win_amd64.whl", hash = "sha256:cd78d95228235413f896ea0912546f9f8fc86ce5f110efa9282c792693a0d8d2"}, 336 | ] 337 | 338 | [package.dependencies] 339 | numpy = "*" 340 | pyyaml = ">=5.3,<7" 341 | 342 | [[package]] 343 | name = "decorator" 344 | version = "5.1.1" 345 | description = "Decorators for Humans" 346 | category = "dev" 347 | optional = false 348 | python-versions = ">=3.5" 349 | files = [ 350 | {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, 351 | {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, 352 | ] 353 | 354 | [[package]] 355 | name = "exceptiongroup" 356 | version = "1.1.3" 357 | description = "Backport of PEP 654 (exception groups)" 358 | category = "dev" 359 | optional = false 360 | python-versions = ">=3.7" 361 | files = [ 362 | {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, 363 | {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, 364 | ] 365 | 366 | [package.extras] 367 | test = ["pytest (>=6)"] 368 | 369 | [[package]] 370 | name = "executing" 371 | version = "2.0.1" 372 | description = "Get the currently executing AST node of a frame, and other information" 373 | category = "dev" 374 | optional = false 375 | python-versions = ">=3.5" 376 | files = [ 377 | {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, 378 | {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, 379 | ] 380 | 381 | [package.extras] 382 | tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] 383 | 384 | [[package]] 385 | name = "faster-whisper" 386 | version = "0.9.0" 387 | description = "Faster Whisper transcription with CTranslate2" 388 | category = "main" 389 | optional = false 390 | python-versions = ">=3.8" 391 | files = [ 392 | {file = "faster-whisper-0.9.0.tar.gz", hash = "sha256:9727a3151ee601090386a5f1e6d8654ae04f617c5e6d24f28ea1d9232eebf37a"}, 393 | {file = "faster_whisper-0.9.0-py3-none-any.whl", hash = "sha256:ba7fa0d4166548d611177350fe3d639ded222f8c159a6aebedfb2d4f186da222"}, 394 | ] 395 | 396 | [package.dependencies] 397 | av = ">=10.0.0,<11.0.0" 398 | ctranslate2 = ">=3.17,<4" 399 | huggingface-hub = ">=0.13" 400 | onnxruntime = ">=1.14,<2" 401 | tokenizers = ">=0.13,<0.15" 402 | 403 | [package.extras] 404 | conversion = ["transformers[torch] (>=4.23)"] 405 | dev = ["black (>=23.0.0,<24.0.0)", "flake8 (>=6.0.0,<7.0.0)", "isort (>=5.0.0,<6.0.0)", "pytest (>=7.0.0,<8.0.0)"] 406 | 407 | [[package]] 408 | name = "filelock" 409 | version = "3.13.1" 410 | description = "A platform independent file lock." 411 | category = "main" 412 | optional = false 413 | python-versions = ">=3.8" 414 | files = [ 415 | {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, 416 | {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, 417 | ] 418 | 419 | [package.extras] 420 | docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] 421 | testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] 422 | typing = ["typing-extensions (>=4.8)"] 423 | 424 | [[package]] 425 | name = "flatbuffers" 426 | version = "23.5.26" 427 | description = "The FlatBuffers serialization format for Python" 428 | category = "main" 429 | optional = false 430 | python-versions = "*" 431 | files = [ 432 | {file = "flatbuffers-23.5.26-py2.py3-none-any.whl", hash = "sha256:c0ff356da363087b915fde4b8b45bdda73432fc17cddb3c8157472eab1422ad1"}, 433 | {file = "flatbuffers-23.5.26.tar.gz", hash = "sha256:9ea1144cac05ce5d86e2859f431c6cd5e66cd9c78c558317c7955fb8d4c78d89"}, 434 | ] 435 | 436 | [[package]] 437 | name = "fsspec" 438 | version = "2023.10.0" 439 | description = "File-system specification" 440 | category = "main" 441 | optional = false 442 | python-versions = ">=3.8" 443 | files = [ 444 | {file = "fsspec-2023.10.0-py3-none-any.whl", hash = "sha256:346a8f024efeb749d2a5fca7ba8854474b1ff9af7c3faaf636a4548781136529"}, 445 | {file = "fsspec-2023.10.0.tar.gz", hash = "sha256:330c66757591df346ad3091a53bd907e15348c2ba17d63fd54f5c39c4457d2a5"}, 446 | ] 447 | 448 | [package.extras] 449 | abfs = ["adlfs"] 450 | adl = ["adlfs"] 451 | arrow = ["pyarrow (>=1)"] 452 | dask = ["dask", "distributed"] 453 | devel = ["pytest", "pytest-cov"] 454 | dropbox = ["dropbox", "dropboxdrivefs", "requests"] 455 | full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] 456 | fuse = ["fusepy"] 457 | gcs = ["gcsfs"] 458 | git = ["pygit2"] 459 | github = ["requests"] 460 | gs = ["gcsfs"] 461 | gui = ["panel"] 462 | hdfs = ["pyarrow (>=1)"] 463 | http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "requests"] 464 | libarchive = ["libarchive-c"] 465 | oci = ["ocifs"] 466 | s3 = ["s3fs"] 467 | sftp = ["paramiko"] 468 | smb = ["smbprotocol"] 469 | ssh = ["paramiko"] 470 | tqdm = ["tqdm"] 471 | 472 | [[package]] 473 | name = "huggingface-hub" 474 | version = "0.17.3" 475 | description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" 476 | category = "main" 477 | optional = false 478 | python-versions = ">=3.8.0" 479 | files = [ 480 | {file = "huggingface_hub-0.17.3-py3-none-any.whl", hash = "sha256:545eb3665f6ac587add946e73984148f2ea5c7877eac2e845549730570c1933a"}, 481 | {file = "huggingface_hub-0.17.3.tar.gz", hash = "sha256:40439632b211311f788964602bf8b0d9d6b7a2314fba4e8d67b2ce3ecea0e3fd"}, 482 | ] 483 | 484 | [package.dependencies] 485 | filelock = "*" 486 | fsspec = "*" 487 | packaging = ">=20.9" 488 | pyyaml = ">=5.1" 489 | requests = "*" 490 | tqdm = ">=4.42.1" 491 | typing-extensions = ">=3.7.4.3" 492 | 493 | [package.extras] 494 | all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "black (==23.7)", "gradio", "jedi", "mypy (==1.5.1)", "numpy", "pydantic (<2.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "urllib3 (<2.0)"] 495 | cli = ["InquirerPy (==0.3.4)"] 496 | dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "black (==23.7)", "gradio", "jedi", "mypy (==1.5.1)", "numpy", "pydantic (<2.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "urllib3 (<2.0)"] 497 | docs = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "black (==23.7)", "gradio", "hf-doc-builder", "jedi", "mypy (==1.5.1)", "numpy", "pydantic (<2.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "urllib3 (<2.0)", "watchdog"] 498 | fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] 499 | inference = ["aiohttp", "pydantic (<2.0)"] 500 | quality = ["black (==23.7)", "mypy (==1.5.1)", "ruff (>=0.0.241)"] 501 | tensorflow = ["graphviz", "pydot", "tensorflow"] 502 | testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "numpy", "pydantic (<2.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] 503 | torch = ["torch"] 504 | typing = ["pydantic (<2.0)", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"] 505 | 506 | [[package]] 507 | name = "humanfriendly" 508 | version = "10.0" 509 | description = "Human friendly output for text interfaces using Python" 510 | category = "main" 511 | optional = false 512 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 513 | files = [ 514 | {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, 515 | {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, 516 | ] 517 | 518 | [package.dependencies] 519 | pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_version >= \"3.8\""} 520 | 521 | [[package]] 522 | name = "idna" 523 | version = "3.4" 524 | description = "Internationalized Domain Names in Applications (IDNA)" 525 | category = "main" 526 | optional = false 527 | python-versions = ">=3.5" 528 | files = [ 529 | {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, 530 | {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, 531 | ] 532 | 533 | [[package]] 534 | name = "iniconfig" 535 | version = "2.0.0" 536 | description = "brain-dead simple config-ini parsing" 537 | category = "dev" 538 | optional = false 539 | python-versions = ">=3.7" 540 | files = [ 541 | {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, 542 | {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, 543 | ] 544 | 545 | [[package]] 546 | name = "ipython" 547 | version = "8.17.2" 548 | description = "IPython: Productive Interactive Computing" 549 | category = "dev" 550 | optional = false 551 | python-versions = ">=3.9" 552 | files = [ 553 | {file = "ipython-8.17.2-py3-none-any.whl", hash = "sha256:1e4d1d666a023e3c93585ba0d8e962867f7a111af322efff6b9c58062b3e5444"}, 554 | {file = "ipython-8.17.2.tar.gz", hash = "sha256:126bb57e1895594bb0d91ea3090bbd39384f6fe87c3d57fd558d0670f50339bb"}, 555 | ] 556 | 557 | [package.dependencies] 558 | appnope = {version = "*", markers = "sys_platform == \"darwin\""} 559 | colorama = {version = "*", markers = "sys_platform == \"win32\""} 560 | decorator = "*" 561 | exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} 562 | jedi = ">=0.16" 563 | matplotlib-inline = "*" 564 | pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} 565 | prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0" 566 | pygments = ">=2.4.0" 567 | stack-data = "*" 568 | traitlets = ">=5" 569 | 570 | [package.extras] 571 | all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] 572 | black = ["black"] 573 | doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] 574 | kernel = ["ipykernel"] 575 | nbconvert = ["nbconvert"] 576 | nbformat = ["nbformat"] 577 | notebook = ["ipywidgets", "notebook"] 578 | parallel = ["ipyparallel"] 579 | qtconsole = ["qtconsole"] 580 | test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] 581 | test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] 582 | 583 | [[package]] 584 | name = "isort" 585 | version = "5.12.0" 586 | description = "A Python utility / library to sort Python imports." 587 | category = "dev" 588 | optional = false 589 | python-versions = ">=3.8.0" 590 | files = [ 591 | {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, 592 | {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, 593 | ] 594 | 595 | [package.extras] 596 | colors = ["colorama (>=0.4.3)"] 597 | pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] 598 | plugins = ["setuptools"] 599 | requirements-deprecated-finder = ["pip-api", "pipreqs"] 600 | 601 | [[package]] 602 | name = "jedi" 603 | version = "0.19.1" 604 | description = "An autocompletion tool for Python that can be used for text editors." 605 | category = "dev" 606 | optional = false 607 | python-versions = ">=3.6" 608 | files = [ 609 | {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, 610 | {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, 611 | ] 612 | 613 | [package.dependencies] 614 | parso = ">=0.8.3,<0.9.0" 615 | 616 | [package.extras] 617 | docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] 618 | qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] 619 | testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] 620 | 621 | [[package]] 622 | name = "matplotlib-inline" 623 | version = "0.1.6" 624 | description = "Inline Matplotlib backend for Jupyter" 625 | category = "dev" 626 | optional = false 627 | python-versions = ">=3.5" 628 | files = [ 629 | {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, 630 | {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, 631 | ] 632 | 633 | [package.dependencies] 634 | traitlets = "*" 635 | 636 | [[package]] 637 | name = "mpmath" 638 | version = "1.3.0" 639 | description = "Python library for arbitrary-precision floating-point arithmetic" 640 | category = "main" 641 | optional = false 642 | python-versions = "*" 643 | files = [ 644 | {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, 645 | {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, 646 | ] 647 | 648 | [package.extras] 649 | develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] 650 | docs = ["sphinx"] 651 | gmpy = ["gmpy2 (>=2.1.0a4)"] 652 | tests = ["pytest (>=4.6)"] 653 | 654 | [[package]] 655 | name = "mypy" 656 | version = "1.6.1" 657 | description = "Optional static typing for Python" 658 | category = "dev" 659 | optional = false 660 | python-versions = ">=3.8" 661 | files = [ 662 | {file = "mypy-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e5012e5cc2ac628177eaac0e83d622b2dd499e28253d4107a08ecc59ede3fc2c"}, 663 | {file = "mypy-1.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d8fbb68711905f8912e5af474ca8b78d077447d8f3918997fecbf26943ff3cbb"}, 664 | {file = "mypy-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a1ad938fee7d2d96ca666c77b7c494c3c5bd88dff792220e1afbebb2925b5e"}, 665 | {file = "mypy-1.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b96ae2c1279d1065413965c607712006205a9ac541895004a1e0d4f281f2ff9f"}, 666 | {file = "mypy-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:40b1844d2e8b232ed92e50a4bd11c48d2daa351f9deee6c194b83bf03e418b0c"}, 667 | {file = "mypy-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:81af8adaa5e3099469e7623436881eff6b3b06db5ef75e6f5b6d4871263547e5"}, 668 | {file = "mypy-1.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8c223fa57cb154c7eab5156856c231c3f5eace1e0bed9b32a24696b7ba3c3245"}, 669 | {file = "mypy-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8032e00ce71c3ceb93eeba63963b864bf635a18f6c0c12da6c13c450eedb183"}, 670 | {file = "mypy-1.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c46b51de523817a0045b150ed11b56f9fff55f12b9edd0f3ed35b15a2809de0"}, 671 | {file = "mypy-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:19f905bcfd9e167159b3d63ecd8cb5e696151c3e59a1742e79bc3bcb540c42c7"}, 672 | {file = "mypy-1.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:82e469518d3e9a321912955cc702d418773a2fd1e91c651280a1bda10622f02f"}, 673 | {file = "mypy-1.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d4473c22cc296425bbbce7e9429588e76e05bc7342da359d6520b6427bf76660"}, 674 | {file = "mypy-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59a0d7d24dfb26729e0a068639a6ce3500e31d6655df8557156c51c1cb874ce7"}, 675 | {file = "mypy-1.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cfd13d47b29ed3bbaafaff7d8b21e90d827631afda134836962011acb5904b71"}, 676 | {file = "mypy-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:eb4f18589d196a4cbe5290b435d135dee96567e07c2b2d43b5c4621b6501531a"}, 677 | {file = "mypy-1.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:41697773aa0bf53ff917aa077e2cde7aa50254f28750f9b88884acea38a16169"}, 678 | {file = "mypy-1.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7274b0c57737bd3476d2229c6389b2ec9eefeb090bbaf77777e9d6b1b5a9d143"}, 679 | {file = "mypy-1.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbaf4662e498c8c2e352da5f5bca5ab29d378895fa2d980630656178bd607c46"}, 680 | {file = "mypy-1.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bb8ccb4724f7d8601938571bf3f24da0da791fe2db7be3d9e79849cb64e0ae85"}, 681 | {file = "mypy-1.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:68351911e85145f582b5aa6cd9ad666c8958bcae897a1bfda8f4940472463c45"}, 682 | {file = "mypy-1.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:49ae115da099dcc0922a7a895c1eec82c1518109ea5c162ed50e3b3594c71208"}, 683 | {file = "mypy-1.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b27958f8c76bed8edaa63da0739d76e4e9ad4ed325c814f9b3851425582a3cd"}, 684 | {file = "mypy-1.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:925cd6a3b7b55dfba252b7c4561892311c5358c6b5a601847015a1ad4eb7d332"}, 685 | {file = "mypy-1.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8f57e6b6927a49550da3d122f0cb983d400f843a8a82e65b3b380d3d7259468f"}, 686 | {file = "mypy-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a43ef1c8ddfdb9575691720b6352761f3f53d85f1b57d7745701041053deff30"}, 687 | {file = "mypy-1.6.1-py3-none-any.whl", hash = "sha256:4cbe68ef919c28ea561165206a2dcb68591c50f3bcf777932323bc208d949cf1"}, 688 | {file = "mypy-1.6.1.tar.gz", hash = "sha256:4d01c00d09a0be62a4ca3f933e315455bde83f37f892ba4b08ce92f3cf44bcc1"}, 689 | ] 690 | 691 | [package.dependencies] 692 | mypy-extensions = ">=1.0.0" 693 | tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} 694 | typing-extensions = ">=4.1.0" 695 | 696 | [package.extras] 697 | dmypy = ["psutil (>=4.0)"] 698 | install-types = ["pip"] 699 | reports = ["lxml"] 700 | 701 | [[package]] 702 | name = "mypy-extensions" 703 | version = "1.0.0" 704 | description = "Type system extensions for programs checked with the mypy type checker." 705 | category = "dev" 706 | optional = false 707 | python-versions = ">=3.5" 708 | files = [ 709 | {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, 710 | {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, 711 | ] 712 | 713 | [[package]] 714 | name = "numpy" 715 | version = "1.25.2" 716 | description = "Fundamental package for array computing in Python" 717 | category = "main" 718 | optional = false 719 | python-versions = ">=3.9" 720 | files = [ 721 | {file = "numpy-1.25.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db3ccc4e37a6873045580d413fe79b68e47a681af8db2e046f1dacfa11f86eb3"}, 722 | {file = "numpy-1.25.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:90319e4f002795ccfc9050110bbbaa16c944b1c37c0baeea43c5fb881693ae1f"}, 723 | {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4a913e29b418d096e696ddd422d8a5d13ffba4ea91f9f60440a3b759b0187"}, 724 | {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f08f2e037bba04e707eebf4bc934f1972a315c883a9e0ebfa8a7756eabf9e357"}, 725 | {file = "numpy-1.25.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bec1e7213c7cb00d67093247f8c4db156fd03075f49876957dca4711306d39c9"}, 726 | {file = "numpy-1.25.2-cp310-cp310-win32.whl", hash = "sha256:7dc869c0c75988e1c693d0e2d5b26034644399dd929bc049db55395b1379e044"}, 727 | {file = "numpy-1.25.2-cp310-cp310-win_amd64.whl", hash = "sha256:834b386f2b8210dca38c71a6e0f4fd6922f7d3fcff935dbe3a570945acb1b545"}, 728 | {file = "numpy-1.25.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5462d19336db4560041517dbb7759c21d181a67cb01b36ca109b2ae37d32418"}, 729 | {file = "numpy-1.25.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5652ea24d33585ea39eb6a6a15dac87a1206a692719ff45d53c5282e66d4a8f"}, 730 | {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d60fbae8e0019865fc4784745814cff1c421df5afee233db6d88ab4f14655a2"}, 731 | {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e7f0f7f6d0eee8364b9a6304c2845b9c491ac706048c7e8cf47b83123b8dbf"}, 732 | {file = "numpy-1.25.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bb33d5a1cf360304754913a350edda36d5b8c5331a8237268c48f91253c3a364"}, 733 | {file = "numpy-1.25.2-cp311-cp311-win32.whl", hash = "sha256:5883c06bb92f2e6c8181df7b39971a5fb436288db58b5a1c3967702d4278691d"}, 734 | {file = "numpy-1.25.2-cp311-cp311-win_amd64.whl", hash = "sha256:5c97325a0ba6f9d041feb9390924614b60b99209a71a69c876f71052521d42a4"}, 735 | {file = "numpy-1.25.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b79e513d7aac42ae918db3ad1341a015488530d0bb2a6abcbdd10a3a829ccfd3"}, 736 | {file = "numpy-1.25.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb942bfb6f84df5ce05dbf4b46673ffed0d3da59f13635ea9b926af3deb76926"}, 737 | {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0746410e73384e70d286f93abf2520035250aad8c5714240b0492a7302fdca"}, 738 | {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7806500e4f5bdd04095e849265e55de20d8cc4b661b038957354327f6d9b295"}, 739 | {file = "numpy-1.25.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b77775f4b7df768967a7c8b3567e309f617dd5e99aeb886fa14dc1a0791141f"}, 740 | {file = "numpy-1.25.2-cp39-cp39-win32.whl", hash = "sha256:2792d23d62ec51e50ce4d4b7d73de8f67a2fd3ea710dcbc8563a51a03fb07b01"}, 741 | {file = "numpy-1.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:76b4115d42a7dfc5d485d358728cdd8719be33cc5ec6ec08632a5d6fca2ed380"}, 742 | {file = "numpy-1.25.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a1329e26f46230bf77b02cc19e900db9b52f398d6722ca853349a782d4cff55"}, 743 | {file = "numpy-1.25.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3abc71e8b6edba80a01a52e66d83c5d14433cbcd26a40c329ec7ed09f37901"}, 744 | {file = "numpy-1.25.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1b9735c27cea5d995496f46a8b1cd7b408b3f34b6d50459d9ac8fe3a20cc17bf"}, 745 | {file = "numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"}, 746 | ] 747 | 748 | [[package]] 749 | name = "onnxruntime" 750 | version = "1.16.1" 751 | description = "ONNX Runtime is a runtime accelerator for Machine Learning models" 752 | category = "main" 753 | optional = false 754 | python-versions = "*" 755 | files = [ 756 | {file = "onnxruntime-1.16.1-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:28b2c7f444b4119950b69370801cd66067f403d19cbaf2a444735d7c269cce4a"}, 757 | {file = "onnxruntime-1.16.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c24e04f33e7899f6aebb03ed51e51d346c1f906b05c5569d58ac9a12d38a2f58"}, 758 | {file = "onnxruntime-1.16.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fa93b166f2d97063dc9f33c5118c5729a4a5dd5617296b6dbef42f9047b3e81"}, 759 | {file = "onnxruntime-1.16.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:042dd9201b3016ee18f8f8bc4609baf11ff34ca1ff489c0a46bcd30919bf883d"}, 760 | {file = "onnxruntime-1.16.1-cp310-cp310-win32.whl", hash = "sha256:c20aa0591f305012f1b21aad607ed96917c86ae7aede4a4dd95824b3d124ceb7"}, 761 | {file = "onnxruntime-1.16.1-cp310-cp310-win_amd64.whl", hash = "sha256:5581873e578917bea76d6434ee7337e28195d03488dcf72d161d08e9398c6249"}, 762 | {file = "onnxruntime-1.16.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:ef8c0c8abf5f309aa1caf35941380839dc5f7a2fa53da533be4a3f254993f120"}, 763 | {file = "onnxruntime-1.16.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e680380bea35a137cbc3efd67a17486e96972901192ad3026ee79c8d8fe264f7"}, 764 | {file = "onnxruntime-1.16.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e62cc38ce1a669013d0a596d984762dc9c67c56f60ecfeee0d5ad36da5863f6"}, 765 | {file = "onnxruntime-1.16.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:025c7a4d57bd2e63b8a0f84ad3df53e419e3df1cc72d63184f2aae807b17c13c"}, 766 | {file = "onnxruntime-1.16.1-cp311-cp311-win32.whl", hash = "sha256:9ad074057fa8d028df248b5668514088cb0937b6ac5954073b7fb9b2891ffc8c"}, 767 | {file = "onnxruntime-1.16.1-cp311-cp311-win_amd64.whl", hash = "sha256:d5e43a3478bffc01f817ecf826de7b25a2ca1bca8547d70888594ab80a77ad24"}, 768 | {file = "onnxruntime-1.16.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:3aef4d70b0930e29a8943eab248cd1565664458d3a62b2276bd11181f28fd0a3"}, 769 | {file = "onnxruntime-1.16.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:55a7b843a57c8ca0c8ff169428137958146081d5d76f1a6dd444c4ffcd37c3c2"}, 770 | {file = "onnxruntime-1.16.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62c631af1941bf3b5f7d063d24c04aacce8cff0794e157c497e315e89ac5ad7b"}, 771 | {file = "onnxruntime-1.16.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5671f296c3d5c233f601e97a10ab5a1dd8e65ba35c7b7b0c253332aba9dff330"}, 772 | {file = "onnxruntime-1.16.1-cp38-cp38-win32.whl", hash = "sha256:eb3802305023dd05e16848d4e22b41f8147247894309c0c27122aaa08793b3d2"}, 773 | {file = "onnxruntime-1.16.1-cp38-cp38-win_amd64.whl", hash = "sha256:fecfb07443d09d271b1487f401fbdf1ba0c829af6fd4fe8f6af25f71190e7eb9"}, 774 | {file = "onnxruntime-1.16.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:de3e12094234db6545c67adbf801874b4eb91e9f299bda34c62967ef0050960f"}, 775 | {file = "onnxruntime-1.16.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ff723c2a5621b5e7103f3be84d5aae1e03a20621e72219dddceae81f65f240af"}, 776 | {file = "onnxruntime-1.16.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14a7fb3073aaf6b462e3d7fb433320f7700558a8892e5021780522dc4574292a"}, 777 | {file = "onnxruntime-1.16.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:963159f1f699b0454cd72fcef3276c8a1aab9389a7b301bcd8e320fb9d9e8597"}, 778 | {file = "onnxruntime-1.16.1-cp39-cp39-win32.whl", hash = "sha256:85771adb75190db9364b25ddec353ebf07635b83eb94b64ed014f1f6d57a3857"}, 779 | {file = "onnxruntime-1.16.1-cp39-cp39-win_amd64.whl", hash = "sha256:d32d2b30799c1f950123c60ae8390818381fd5f88bdf3627eeca10071c155dc5"}, 780 | ] 781 | 782 | [package.dependencies] 783 | coloredlogs = "*" 784 | flatbuffers = "*" 785 | numpy = ">=1.21.6" 786 | packaging = "*" 787 | protobuf = "*" 788 | sympy = "*" 789 | 790 | [[package]] 791 | name = "packaging" 792 | version = "23.2" 793 | description = "Core utilities for Python packages" 794 | category = "main" 795 | optional = false 796 | python-versions = ">=3.7" 797 | files = [ 798 | {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, 799 | {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, 800 | ] 801 | 802 | [[package]] 803 | name = "parso" 804 | version = "0.8.3" 805 | description = "A Python Parser" 806 | category = "dev" 807 | optional = false 808 | python-versions = ">=3.6" 809 | files = [ 810 | {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, 811 | {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, 812 | ] 813 | 814 | [package.extras] 815 | qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] 816 | testing = ["docopt", "pytest (<6.0.0)"] 817 | 818 | [[package]] 819 | name = "pathspec" 820 | version = "0.11.2" 821 | description = "Utility library for gitignore style pattern matching of file paths." 822 | category = "dev" 823 | optional = false 824 | python-versions = ">=3.7" 825 | files = [ 826 | {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, 827 | {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, 828 | ] 829 | 830 | [[package]] 831 | name = "pexpect" 832 | version = "4.8.0" 833 | description = "Pexpect allows easy control of interactive console applications." 834 | category = "dev" 835 | optional = false 836 | python-versions = "*" 837 | files = [ 838 | {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, 839 | {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, 840 | ] 841 | 842 | [package.dependencies] 843 | ptyprocess = ">=0.5" 844 | 845 | [[package]] 846 | name = "platformdirs" 847 | version = "3.11.0" 848 | description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." 849 | category = "dev" 850 | optional = false 851 | python-versions = ">=3.7" 852 | files = [ 853 | {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, 854 | {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, 855 | ] 856 | 857 | [package.extras] 858 | docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] 859 | test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] 860 | 861 | [[package]] 862 | name = "pluggy" 863 | version = "1.3.0" 864 | description = "plugin and hook calling mechanisms for python" 865 | category = "dev" 866 | optional = false 867 | python-versions = ">=3.8" 868 | files = [ 869 | {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, 870 | {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, 871 | ] 872 | 873 | [package.extras] 874 | dev = ["pre-commit", "tox"] 875 | testing = ["pytest", "pytest-benchmark"] 876 | 877 | [[package]] 878 | name = "prompt-toolkit" 879 | version = "3.0.39" 880 | description = "Library for building powerful interactive command lines in Python" 881 | category = "dev" 882 | optional = false 883 | python-versions = ">=3.7.0" 884 | files = [ 885 | {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, 886 | {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, 887 | ] 888 | 889 | [package.dependencies] 890 | wcwidth = "*" 891 | 892 | [[package]] 893 | name = "protobuf" 894 | version = "4.25.0" 895 | description = "" 896 | category = "main" 897 | optional = false 898 | python-versions = ">=3.8" 899 | files = [ 900 | {file = "protobuf-4.25.0-cp310-abi3-win32.whl", hash = "sha256:5c1203ac9f50e4853b0a0bfffd32c67118ef552a33942982eeab543f5c634395"}, 901 | {file = "protobuf-4.25.0-cp310-abi3-win_amd64.whl", hash = "sha256:c40ff8f00aa737938c5378d461637d15c442a12275a81019cc2fef06d81c9419"}, 902 | {file = "protobuf-4.25.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:cf21faba64cd2c9a3ed92b7a67f226296b10159dbb8fbc5e854fc90657d908e4"}, 903 | {file = "protobuf-4.25.0-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:32ac2100b0e23412413d948c03060184d34a7c50b3e5d7524ee96ac2b10acf51"}, 904 | {file = "protobuf-4.25.0-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:683dc44c61f2620b32ce4927de2108f3ebe8ccf2fd716e1e684e5a50da154054"}, 905 | {file = "protobuf-4.25.0-cp38-cp38-win32.whl", hash = "sha256:1a3ba712877e6d37013cdc3476040ea1e313a6c2e1580836a94f76b3c176d575"}, 906 | {file = "protobuf-4.25.0-cp38-cp38-win_amd64.whl", hash = "sha256:b2cf8b5d381f9378afe84618288b239e75665fe58d0f3fd5db400959274296e9"}, 907 | {file = "protobuf-4.25.0-cp39-cp39-win32.whl", hash = "sha256:63714e79b761a37048c9701a37438aa29945cd2417a97076048232c1df07b701"}, 908 | {file = "protobuf-4.25.0-cp39-cp39-win_amd64.whl", hash = "sha256:d94a33db8b7ddbd0af7c467475fb9fde0c705fb315a8433c0e2020942b863a1f"}, 909 | {file = "protobuf-4.25.0-py3-none-any.whl", hash = "sha256:1a53d6f64b00eecf53b65ff4a8c23dc95df1fa1e97bb06b8122e5a64f49fc90a"}, 910 | {file = "protobuf-4.25.0.tar.gz", hash = "sha256:68f7caf0d4f012fd194a301420cf6aa258366144d814f358c5b32558228afa7c"}, 911 | ] 912 | 913 | [[package]] 914 | name = "ptyprocess" 915 | version = "0.7.0" 916 | description = "Run a subprocess in a pseudo terminal" 917 | category = "dev" 918 | optional = false 919 | python-versions = "*" 920 | files = [ 921 | {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, 922 | {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, 923 | ] 924 | 925 | [[package]] 926 | name = "pudb" 927 | version = "2022.1.3" 928 | description = "A full-screen, console-based Python debugger" 929 | category = "dev" 930 | optional = false 931 | python-versions = "~=3.6" 932 | files = [ 933 | {file = "pudb-2022.1.3.tar.gz", hash = "sha256:58e83ada9e19ffe92c1fdc78ae5458ef91aeb892a5b8f0e7379e6fa61e0e664a"}, 934 | ] 935 | 936 | [package.dependencies] 937 | jedi = ">=0.18,<1" 938 | packaging = ">=20.0" 939 | pygments = ">=2.7.4" 940 | urwid = ">=1.1.1" 941 | urwid_readline = "*" 942 | 943 | [package.extras] 944 | completion = ["shtab"] 945 | 946 | [[package]] 947 | name = "pure-eval" 948 | version = "0.2.2" 949 | description = "Safely evaluate AST nodes without side effects" 950 | category = "dev" 951 | optional = false 952 | python-versions = "*" 953 | files = [ 954 | {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, 955 | {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, 956 | ] 957 | 958 | [package.extras] 959 | tests = ["pytest"] 960 | 961 | [[package]] 962 | name = "pygments" 963 | version = "2.16.1" 964 | description = "Pygments is a syntax highlighting package written in Python." 965 | category = "dev" 966 | optional = false 967 | python-versions = ">=3.7" 968 | files = [ 969 | {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, 970 | {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, 971 | ] 972 | 973 | [package.extras] 974 | plugins = ["importlib-metadata"] 975 | 976 | [[package]] 977 | name = "pyreadline3" 978 | version = "3.4.1" 979 | description = "A python implementation of GNU readline." 980 | category = "main" 981 | optional = false 982 | python-versions = "*" 983 | files = [ 984 | {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, 985 | {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, 986 | ] 987 | 988 | [[package]] 989 | name = "pytest" 990 | version = "7.4.3" 991 | description = "pytest: simple powerful testing with Python" 992 | category = "dev" 993 | optional = false 994 | python-versions = ">=3.7" 995 | files = [ 996 | {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, 997 | {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, 998 | ] 999 | 1000 | [package.dependencies] 1001 | colorama = {version = "*", markers = "sys_platform == \"win32\""} 1002 | exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} 1003 | iniconfig = "*" 1004 | packaging = "*" 1005 | pluggy = ">=0.12,<2.0" 1006 | tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} 1007 | 1008 | [package.extras] 1009 | testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] 1010 | 1011 | [[package]] 1012 | name = "pyyaml" 1013 | version = "6.0.1" 1014 | description = "YAML parser and emitter for Python" 1015 | category = "main" 1016 | optional = false 1017 | python-versions = ">=3.6" 1018 | files = [ 1019 | {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, 1020 | {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, 1021 | {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, 1022 | {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, 1023 | {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, 1024 | {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, 1025 | {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, 1026 | {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, 1027 | {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, 1028 | {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, 1029 | {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, 1030 | {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, 1031 | {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, 1032 | {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, 1033 | {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, 1034 | {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, 1035 | {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, 1036 | {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, 1037 | {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, 1038 | {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, 1039 | {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, 1040 | {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, 1041 | {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, 1042 | {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, 1043 | {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, 1044 | {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, 1045 | {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, 1046 | {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, 1047 | {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, 1048 | {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, 1049 | {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, 1050 | {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, 1051 | {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, 1052 | {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, 1053 | {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, 1054 | {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, 1055 | {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, 1056 | {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, 1057 | {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, 1058 | {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, 1059 | ] 1060 | 1061 | [[package]] 1062 | name = "requests" 1063 | version = "2.31.0" 1064 | description = "Python HTTP for Humans." 1065 | category = "main" 1066 | optional = false 1067 | python-versions = ">=3.7" 1068 | files = [ 1069 | {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, 1070 | {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, 1071 | ] 1072 | 1073 | [package.dependencies] 1074 | certifi = ">=2017.4.17" 1075 | charset-normalizer = ">=2,<4" 1076 | idna = ">=2.5,<4" 1077 | urllib3 = ">=1.21.1,<3" 1078 | 1079 | [package.extras] 1080 | socks = ["PySocks (>=1.5.6,!=1.5.7)"] 1081 | use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] 1082 | 1083 | [[package]] 1084 | name = "ruff" 1085 | version = "0.0.270" 1086 | description = "An extremely fast Python linter, written in Rust." 1087 | category = "dev" 1088 | optional = false 1089 | python-versions = ">=3.7" 1090 | files = [ 1091 | {file = "ruff-0.0.270-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:f74c4d550f7b8e808455ac77bbce38daafc458434815ba0bc21ae4bdb276509b"}, 1092 | {file = "ruff-0.0.270-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:643de865fd35cb76c4f0739aea5afe7b8e4d40d623df7e9e6ea99054e5cead0a"}, 1093 | {file = "ruff-0.0.270-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eca02e709b3308eb7255b5f74e779be23b5980fca3862eae28bb23069cd61ae4"}, 1094 | {file = "ruff-0.0.270-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3ed3b198768d2b3a2300fb18f730cd39948a5cc36ba29ae9d4639a11040880be"}, 1095 | {file = "ruff-0.0.270-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:739495d2dbde87cf4e3110c8d27bc20febf93112539a968a4e02c26f0deccd1d"}, 1096 | {file = "ruff-0.0.270-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:08188f8351f4c0b6216e8463df0a76eb57894ca59a3da65e4ed205db980fd3ae"}, 1097 | {file = "ruff-0.0.270-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0827b074635d37984fc98d99316bfab5c8b1231bb83e60dacc83bd92883eedb4"}, 1098 | {file = "ruff-0.0.270-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d61ae4841313f6eeb8292dc349bef27b4ce426e62c36e80ceedc3824e408734"}, 1099 | {file = "ruff-0.0.270-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0eb412f20e77529a01fb94d578b19dcb8331b56f93632aa0cce4a2ea27b7aeba"}, 1100 | {file = "ruff-0.0.270-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b775e2c5fc869359daf8c8b8aa0fd67240201ab2e8d536d14a0edf279af18786"}, 1101 | {file = "ruff-0.0.270-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:21f00e47ab2308617c44435c8dfd9e2e03897461c9e647ec942deb2a235b4cfd"}, 1102 | {file = "ruff-0.0.270-py3-none-musllinux_1_2_i686.whl", hash = "sha256:0bbfbf6fd2436165566ca85f6e57be03ed2f0a994faf40180cfbb3604c9232ef"}, 1103 | {file = "ruff-0.0.270-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:8af391ef81f7be960be10886a3c1aac0b298bde7cb9a86ec2b05faeb2081ce6b"}, 1104 | {file = "ruff-0.0.270-py3-none-win32.whl", hash = "sha256:b4c037fe2f75bcd9aed0c89c7c507cb7fa59abae2bd4c8b6fc331a28178655a4"}, 1105 | {file = "ruff-0.0.270-py3-none-win_amd64.whl", hash = "sha256:0012f9b7dc137ab7f1f0355e3c4ca49b562baf6c9fa1180948deeb6648c52957"}, 1106 | {file = "ruff-0.0.270-py3-none-win_arm64.whl", hash = "sha256:9613456b0b375766244c25045e353bc8890c856431cd97893c97b10cc93bd28d"}, 1107 | {file = "ruff-0.0.270.tar.gz", hash = "sha256:95db07b7850b30ebf32b27fe98bc39e0ab99db3985edbbf0754d399eb2f0e690"}, 1108 | ] 1109 | 1110 | [[package]] 1111 | name = "six" 1112 | version = "1.16.0" 1113 | description = "Python 2 and 3 compatibility utilities" 1114 | category = "dev" 1115 | optional = false 1116 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" 1117 | files = [ 1118 | {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, 1119 | {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, 1120 | ] 1121 | 1122 | [[package]] 1123 | name = "snoop" 1124 | version = "0.4.3" 1125 | description = "Powerful debugging tools for Python" 1126 | category = "dev" 1127 | optional = false 1128 | python-versions = "*" 1129 | files = [ 1130 | {file = "snoop-0.4.3-py2.py3-none-any.whl", hash = "sha256:b7418581889ff78b29d9dc5ad4625c4c475c74755fb5cba82c693c6e32afadc0"}, 1131 | {file = "snoop-0.4.3.tar.gz", hash = "sha256:2e0930bb19ff0dbdaa6f5933f88e89ed5984210ea9f9de0e1d8231fa5c1c1f25"}, 1132 | ] 1133 | 1134 | [package.dependencies] 1135 | asttokens = "*" 1136 | cheap-repr = ">=0.4.0" 1137 | executing = "*" 1138 | pygments = "*" 1139 | six = "*" 1140 | 1141 | [package.extras] 1142 | tests = ["Django", "birdseye", "littleutils", "numpy (>=1.16.5)", "pandas (>=0.24.2)", "pprintpp", "prettyprinter", "pytest", "pytest-order", "pytest-order (<=0.11.0)"] 1143 | 1144 | [[package]] 1145 | name = "stack-data" 1146 | version = "0.6.3" 1147 | description = "Extract data from python stack frames and tracebacks for informative displays" 1148 | category = "dev" 1149 | optional = false 1150 | python-versions = "*" 1151 | files = [ 1152 | {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, 1153 | {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, 1154 | ] 1155 | 1156 | [package.dependencies] 1157 | asttokens = ">=2.1.0" 1158 | executing = ">=1.2.0" 1159 | pure-eval = "*" 1160 | 1161 | [package.extras] 1162 | tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] 1163 | 1164 | [[package]] 1165 | name = "structlog" 1166 | version = "23.2.0" 1167 | description = "Structured Logging for Python" 1168 | category = "main" 1169 | optional = false 1170 | python-versions = ">=3.8" 1171 | files = [ 1172 | {file = "structlog-23.2.0-py3-none-any.whl", hash = "sha256:16a167e87b9fa7fae9a972d5d12805ef90e04857a93eba479d4be3801a6a1482"}, 1173 | {file = "structlog-23.2.0.tar.gz", hash = "sha256:334666b94707f89dbc4c81a22a8ccd34449f0201d5b1ee097a030b577fa8c858"}, 1174 | ] 1175 | 1176 | [package.extras] 1177 | dev = ["structlog[tests,typing]"] 1178 | docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-mermaid", "twisted"] 1179 | tests = ["freezegun (>=0.2.8)", "pretend", "pytest (>=6.0)", "pytest-asyncio (>=0.17)", "simplejson"] 1180 | typing = ["mypy (>=1.4)", "rich", "twisted"] 1181 | 1182 | [[package]] 1183 | name = "sympy" 1184 | version = "1.12" 1185 | description = "Computer algebra system (CAS) in Python" 1186 | category = "main" 1187 | optional = false 1188 | python-versions = ">=3.8" 1189 | files = [ 1190 | {file = "sympy-1.12-py3-none-any.whl", hash = "sha256:c3588cd4295d0c0f603d0f2ae780587e64e2efeedb3521e46b9bb1d08d184fa5"}, 1191 | {file = "sympy-1.12.tar.gz", hash = "sha256:ebf595c8dac3e0fdc4152c51878b498396ec7f30e7a914d6071e674d49420fb8"}, 1192 | ] 1193 | 1194 | [package.dependencies] 1195 | mpmath = ">=0.19" 1196 | 1197 | [[package]] 1198 | name = "tokenizers" 1199 | version = "0.14.1" 1200 | description = "" 1201 | category = "main" 1202 | optional = false 1203 | python-versions = ">=3.7" 1204 | files = [ 1205 | {file = "tokenizers-0.14.1-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:04ec1134a18ede355a05641cdc7700f17280e01f69f2f315769f02f7e295cf1e"}, 1206 | {file = "tokenizers-0.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:638abedb39375f0ddce2de536fc9c976639b2d1b7202d715c2e7a25f0ebfd091"}, 1207 | {file = "tokenizers-0.14.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:901635098565773a44f74068639d265f19deaaca47ea77b428fd9bee13a61d87"}, 1208 | {file = "tokenizers-0.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72e95184bf5b9a4c08153ed07c16c130ff174835c9a1e6ee2b311be758c8b3ef"}, 1209 | {file = "tokenizers-0.14.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ebefbc26ccff5e96ae7d40772172e7310174f9aa3683d2870a1882313ec3a4d5"}, 1210 | {file = "tokenizers-0.14.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3a6330c9f1deda22873e8b4ac849cc06d3ff33d60b3217ac0bb397b541e1509"}, 1211 | {file = "tokenizers-0.14.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6cba7483ba45600346a35c466bde32327b108575022f73c35a0f7170b5a71ae2"}, 1212 | {file = "tokenizers-0.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60fec380778d75cbb492f14ca974f11f37b41d53c057b9c8ba213315b86e1f84"}, 1213 | {file = "tokenizers-0.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:930c19b699dd7e1077eac98967adc2fe5f0b104bd96cc1f26778ab82b31ceb24"}, 1214 | {file = "tokenizers-0.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a1e30a13376db5329570e09b14c8eb36c017909ed7e88591ca3aa81f3c7d6f32"}, 1215 | {file = "tokenizers-0.14.1-cp310-none-win32.whl", hash = "sha256:370b5b86da9bddbe65fa08711f0e8ffdf8b0036558178d1a31dfcb44efcde72a"}, 1216 | {file = "tokenizers-0.14.1-cp310-none-win_amd64.whl", hash = "sha256:c2c659f2106b6d154f118ad1b700e68148c46c59b720f04867b1fc5f26a85060"}, 1217 | {file = "tokenizers-0.14.1-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:00df4c5bf25c153b432b98689609b426ae701a44f3d8074dcb619f410bc2a870"}, 1218 | {file = "tokenizers-0.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fee553657dcdb7e73df8823c49e8611457ba46e9d7026b7e9c44820c08c327c3"}, 1219 | {file = "tokenizers-0.14.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a480bd902e327dfcaa52b7dd14fdc71e7aa45d73a3d6e41e028a75891d2823cf"}, 1220 | {file = "tokenizers-0.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e448b2be0430ab839cf7954715c39d6f34ff6cf2b49393f336283b7a59f485af"}, 1221 | {file = "tokenizers-0.14.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c11444984aecd342f0cf160c3320288edeb1763871fbb560ed466654b2a7016c"}, 1222 | {file = "tokenizers-0.14.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe164a1c72c6be3c5c26753c6c412f81412f4dae0d7d06371e0b396a9cc0fc9"}, 1223 | {file = "tokenizers-0.14.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72d9967fb1f927542cfb5347207fde01b29f25c9bb8cbc7ced280decfa015983"}, 1224 | {file = "tokenizers-0.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37cc955c84ec67c2d11183d372044399342b20a1fa447b7a33040f4889bba318"}, 1225 | {file = "tokenizers-0.14.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:db96cf092d86d4cb543daa9148e299011e0a40770380bb78333b9fd700586fcb"}, 1226 | {file = "tokenizers-0.14.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c84d3cb1349936c2b96ca6175b50f5a9518170bffd76464219ee0ea6022a64a7"}, 1227 | {file = "tokenizers-0.14.1-cp311-none-win32.whl", hash = "sha256:8db3a6f3d430ac3dc3793c53fa8e5e665c23ba359484d365a191027ad8b65a30"}, 1228 | {file = "tokenizers-0.14.1-cp311-none-win_amd64.whl", hash = "sha256:c65d76052561c60e17cb4fa289885ed00a9995d59e97019fac2138bd45142057"}, 1229 | {file = "tokenizers-0.14.1-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:c375161b588982be381c43eb7158c250f430793d0f708ce379a0f196164c6778"}, 1230 | {file = "tokenizers-0.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:50f03d2330a153a9114c2429061137bd323736059f384de8348d7cb1ca1baa15"}, 1231 | {file = "tokenizers-0.14.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c8ee283b249c3c3c201c41bc23adc3be2514ae4121eacdb5c5250a461eaa8c6"}, 1232 | {file = "tokenizers-0.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9f27399b8d50c5d3f08f0aae961bcc66a1dead1cd0ae9401e4c2a43a623322a"}, 1233 | {file = "tokenizers-0.14.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:89cbeec7e9d5d8773ec4779c64e3cbcbff53d234ca6ad7b1a3736588003bba48"}, 1234 | {file = "tokenizers-0.14.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:08e55920b453c30b46d58accc68a38e8e7488d0c03babfdb29c55d3f39dd2052"}, 1235 | {file = "tokenizers-0.14.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91d32bd1056c0e83a0f90e4ffa213c25096b2d8b9f0e2d172a45f138c7d8c081"}, 1236 | {file = "tokenizers-0.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44f1748035c36c939848c935715bde41734d9249ab7b844ff9bfbe984be8952c"}, 1237 | {file = "tokenizers-0.14.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1ff516d129f01bb7a4aa95bc6aae88e4d86dd63bfc2d57db9302c2624d1be7cb"}, 1238 | {file = "tokenizers-0.14.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:acfc8db61c6e919d932448cc7985b85e330c8d745528e12fce6e62d40d268bce"}, 1239 | {file = "tokenizers-0.14.1-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:ba336bc9107acbc1da2ad30967df7b2db93448ca66538ad86aa1fbb91116f631"}, 1240 | {file = "tokenizers-0.14.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:f77371b5030e53f8bf92197640af437539e3bba1bc8342b97888c8e26567bfdc"}, 1241 | {file = "tokenizers-0.14.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d72d25c57a9c814240802d188ff0a808b701e2dd2bf1c64721c7088ceeeb1ed7"}, 1242 | {file = "tokenizers-0.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:caf0df8657277e32671aa8a4d3cc05f2050ab19d9b49447f2265304168e9032c"}, 1243 | {file = "tokenizers-0.14.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cb3c6bc6e599e46a26ad559ad5dec260ffdf705663cc9b894033d64a69314e86"}, 1244 | {file = "tokenizers-0.14.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8cf2fcdc2368df4317e05571e33810eeed24cd594acc9dfc9788b21dac6b3a8"}, 1245 | {file = "tokenizers-0.14.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f475d5eda41d2ed51ca775a07c80529a923dd759fcff7abf03ccdd83d9f7564e"}, 1246 | {file = "tokenizers-0.14.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cce4d1a97a7eb2253b5d3f29f4a478d8c37ba0303ea34024eb9e65506d4209f8"}, 1247 | {file = "tokenizers-0.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ff66577ae55114f7d0f6aa0d4d335f27cae96bf245962a745b718ec887bbe7eb"}, 1248 | {file = "tokenizers-0.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a687099e085f5162e5b88b3402adb6c2b41046180c015c5075c9504440b6e971"}, 1249 | {file = "tokenizers-0.14.1-cp37-none-win32.whl", hash = "sha256:49f5336b82e315a33bef1025d247ca08d95719715b29e33f0e9e8cf15ff1dfb6"}, 1250 | {file = "tokenizers-0.14.1-cp37-none-win_amd64.whl", hash = "sha256:117c8da60d1bd95a6df2692926f36de7971baa1d89ff702fae47b6689a4465ad"}, 1251 | {file = "tokenizers-0.14.1-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:01d2bd5935642de22a6c6778bb2307f9949cd6eaeeb5c77f9b98f0060b69f0db"}, 1252 | {file = "tokenizers-0.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b05ec04132394c20bd6bcb692d557a8eb8ab1bac1646d28e49c67c00907d17c8"}, 1253 | {file = "tokenizers-0.14.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7d9025b185465d9d18679406f6f394850347d5ed2681efc203539d800f36f459"}, 1254 | {file = "tokenizers-0.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2539831838ab5393f78a893d7bbf27d5c36e43baf77e91dc9992922b2b97e09d"}, 1255 | {file = "tokenizers-0.14.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ec8f46d533092d8e20bc742c47918cbe24b8641dbfbbcb83177c5de3c9d4decb"}, 1256 | {file = "tokenizers-0.14.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b019c4810903fdea3b230f358b9d27377c0f38454778b607676c9e1b57d14b7"}, 1257 | {file = "tokenizers-0.14.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e8984114fd83ed3913d89526c992395920930c9620a2feee61faf035f41d7b9a"}, 1258 | {file = "tokenizers-0.14.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11284b32f0036fe7ef4b8b00201dda79c00f3fcea173bc0e5c599e09c937ab0f"}, 1259 | {file = "tokenizers-0.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:53614f44f36917282a583180e402105bc63d61d1aca067d51cb7f051eb489901"}, 1260 | {file = "tokenizers-0.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e3b6082e9532309727273443c8943bb9558d52e36788b246aa278bda7c642116"}, 1261 | {file = "tokenizers-0.14.1-cp38-none-win32.whl", hash = "sha256:7560fca3e17a6bc876d20cd825d7721c101fa2b1cd0bfa0abf9a2e781e49b37b"}, 1262 | {file = "tokenizers-0.14.1-cp38-none-win_amd64.whl", hash = "sha256:c318a5acb429ca38f632577754235140bbb8c5a27faca1c51b43fbf575596e34"}, 1263 | {file = "tokenizers-0.14.1-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:b886e0f5c72aa4249c609c24b9610a9ca83fd963cbb5066b19302723ea505279"}, 1264 | {file = "tokenizers-0.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f522f28c88a0d5b2f9e895cf405dd594cd518e99d61905406aec74d30eb6383b"}, 1265 | {file = "tokenizers-0.14.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5bef76c4d9329913cef2fe79ce1f4dab98f77fa4887e5f0420ffc9386941de32"}, 1266 | {file = "tokenizers-0.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59c7df2103052b30b7c76d4fa8251326c9f82689578a912698a127dc1737f43e"}, 1267 | {file = "tokenizers-0.14.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:232445e7b85255ccfe68dfd42185db8a3f3349b34ad7068404856c4a5f67c355"}, 1268 | {file = "tokenizers-0.14.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e63781da85aa8948864970e529af10abc4084a990d30850c41bbdb5f83eee45"}, 1269 | {file = "tokenizers-0.14.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5760a831c0f3c6d3229b50ef3fafa4c164ec99d7e8c2237fe144e67a9d33b120"}, 1270 | {file = "tokenizers-0.14.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c84b456ff8525ec3ff09762e32ccc27888d036dcd0ba2883e1db491e164dd725"}, 1271 | {file = "tokenizers-0.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:463ee5f3afbfec29cbf5652752c9d1032bdad63daf48bb8cb9970064cc81d5f9"}, 1272 | {file = "tokenizers-0.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ee6b63aecf929a7bcf885bdc8a8aec96c43bc4442f63fe8c6d48f24fc992b05b"}, 1273 | {file = "tokenizers-0.14.1-cp39-none-win32.whl", hash = "sha256:aae42798ba1da3bc1572b2048fe42e61dd6bacced2b424cb0f5572c5432f79c2"}, 1274 | {file = "tokenizers-0.14.1-cp39-none-win_amd64.whl", hash = "sha256:68c4699147dded6926a3d2c2f948d435d54d027f69909e0ef3c6587933723ed2"}, 1275 | {file = "tokenizers-0.14.1-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:5f9afdcf701a1aa3c41e0e748c152d2162434d61639a1e5d8523ecf60ae35aea"}, 1276 | {file = "tokenizers-0.14.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6859d81243cd09854be9054aca3ecab14a2dee5b3c9f6d7ef12061d478ca0c57"}, 1277 | {file = "tokenizers-0.14.1-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7975178f9478ccedcf613332d5d6f37b67c74ef4e2e47e0c965597506b921f04"}, 1278 | {file = "tokenizers-0.14.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ce2f0ff2e5f12ac5bebaa690606395725239265d7ffa35f35c243a379316297"}, 1279 | {file = "tokenizers-0.14.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c7cfc3d42e81cda802f93aa9e92caf79feaa1711426e28ce620560b8aaf5e4d"}, 1280 | {file = "tokenizers-0.14.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:67d3adff654dc7f7c7091dd259b3b847fe119c08d0bda61db91e2ea2b61c38c0"}, 1281 | {file = "tokenizers-0.14.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:956729b7dd599020e57133fb95b777e4f81ee069ff0a70e80f6eeac82658972f"}, 1282 | {file = "tokenizers-0.14.1-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:fe2ea1177146a7ab345ab61e90a490eeea25d5f063e1cb9d4eb1425b169b64d7"}, 1283 | {file = "tokenizers-0.14.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9930f31f603ecc6ea54d5c6dfa299f926ab3e921f72f94babcb02598c32b57c6"}, 1284 | {file = "tokenizers-0.14.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d49567a2754e9991c05c2b5a7e6650b56e24365b7cab504558e58033dcf0edc4"}, 1285 | {file = "tokenizers-0.14.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3678be5db330726f19c1949d8ae1b845a02eeb2a2e1d5a8bb8eaa82087ae25c1"}, 1286 | {file = "tokenizers-0.14.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:42b180ed1bec58ab9bdc65d406577e0c0fb7241b74b8c032846073c7743c9f86"}, 1287 | {file = "tokenizers-0.14.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:319e4367596fb0d52be645b3de1616faf0fadaf28507ce1c7595bebd9b4c402c"}, 1288 | {file = "tokenizers-0.14.1-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:2cda65b689aec63b7c76a77f43a08044fa90bbc6ad9849267cedfee9795913f3"}, 1289 | {file = "tokenizers-0.14.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:ca0bfc79b27d84fcb7fa09339b2ee39077896738d9a30ff99c0332376e985072"}, 1290 | {file = "tokenizers-0.14.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a7093767e070269e22e2c5f845e46510304f124c32d2cd249633c0f27eb29d86"}, 1291 | {file = "tokenizers-0.14.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad759ba39cd32c2c2247864d02c84ea5883b5f6cc6a4ee0c95602a3dde52268f"}, 1292 | {file = "tokenizers-0.14.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26fee36a6d8f2bd9464f3566b95e3e3fb7fd7dad723f775c500aac8204ec98c6"}, 1293 | {file = "tokenizers-0.14.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d091c62cb7abbd32e527a85c41f7c8eb4526a926251891fc4ecbe5f974142ffb"}, 1294 | {file = "tokenizers-0.14.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ca304402ea66d58f99c05aa3d7a6052faea61e5a8313b94f6bc36fbf27960e2d"}, 1295 | {file = "tokenizers-0.14.1-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:102f118fa9b720b93c3217c1e239ed7bc1ae1e8dbfe9b4983a4f2d7b4ce6f2ec"}, 1296 | {file = "tokenizers-0.14.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:df4f058e96e8b467b7742e5dba7564255cd482d3c1e6cf81f8cb683bb0433340"}, 1297 | {file = "tokenizers-0.14.1-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:040ee44efc1806900de72b13c1c3036154077d9cde189c9a7e7a50bbbdcbf39f"}, 1298 | {file = "tokenizers-0.14.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7618b84118ae704f7fa23c4a190bd80fc605671841a4427d5ca14b9b8d9ec1a3"}, 1299 | {file = "tokenizers-0.14.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ecdfe9736c4a73343f629586016a137a10faed1a29c6dc699d8ab20c2d3cf64"}, 1300 | {file = "tokenizers-0.14.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:92c34de04fec7f4ff95f7667d4eb085c4e4db46c31ef44c3d35c38df128430da"}, 1301 | {file = "tokenizers-0.14.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:628b654ba555b2ba9111c0936d558b14bfc9d5f57b8c323b02fc846036b38b2f"}, 1302 | {file = "tokenizers-0.14.1.tar.gz", hash = "sha256:ea3b3f8908a9a5b9d6fc632b5f012ece7240031c44c6d4764809f33736534166"}, 1303 | ] 1304 | 1305 | [package.dependencies] 1306 | huggingface_hub = ">=0.16.4,<0.18" 1307 | 1308 | [package.extras] 1309 | dev = ["tokenizers[testing]"] 1310 | docs = ["setuptools_rust", "sphinx", "sphinx_rtd_theme"] 1311 | testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"] 1312 | 1313 | [[package]] 1314 | name = "tomli" 1315 | version = "2.0.1" 1316 | description = "A lil' TOML parser" 1317 | category = "dev" 1318 | optional = false 1319 | python-versions = ">=3.7" 1320 | files = [ 1321 | {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, 1322 | {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, 1323 | ] 1324 | 1325 | [[package]] 1326 | name = "tqdm" 1327 | version = "4.66.1" 1328 | description = "Fast, Extensible Progress Meter" 1329 | category = "main" 1330 | optional = false 1331 | python-versions = ">=3.7" 1332 | files = [ 1333 | {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, 1334 | {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, 1335 | ] 1336 | 1337 | [package.dependencies] 1338 | colorama = {version = "*", markers = "platform_system == \"Windows\""} 1339 | 1340 | [package.extras] 1341 | dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] 1342 | notebook = ["ipywidgets (>=6)"] 1343 | slack = ["slack-sdk"] 1344 | telegram = ["requests"] 1345 | 1346 | [[package]] 1347 | name = "traitlets" 1348 | version = "5.13.0" 1349 | description = "Traitlets Python configuration system" 1350 | category = "dev" 1351 | optional = false 1352 | python-versions = ">=3.8" 1353 | files = [ 1354 | {file = "traitlets-5.13.0-py3-none-any.whl", hash = "sha256:baf991e61542da48fe8aef8b779a9ea0aa38d8a54166ee250d5af5ecf4486619"}, 1355 | {file = "traitlets-5.13.0.tar.gz", hash = "sha256:9b232b9430c8f57288c1024b34a8f0251ddcc47268927367a0dd3eeaca40deb5"}, 1356 | ] 1357 | 1358 | [package.extras] 1359 | docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] 1360 | test = ["argcomplete (>=3.0.3)", "mypy (>=1.6.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] 1361 | 1362 | [[package]] 1363 | name = "typing-extensions" 1364 | version = "4.8.0" 1365 | description = "Backported and Experimental Type Hints for Python 3.8+" 1366 | category = "main" 1367 | optional = false 1368 | python-versions = ">=3.8" 1369 | files = [ 1370 | {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, 1371 | {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, 1372 | ] 1373 | 1374 | [[package]] 1375 | name = "urllib3" 1376 | version = "2.0.7" 1377 | description = "HTTP library with thread-safe connection pooling, file post, and more." 1378 | category = "main" 1379 | optional = false 1380 | python-versions = ">=3.7" 1381 | files = [ 1382 | {file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"}, 1383 | {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"}, 1384 | ] 1385 | 1386 | [package.extras] 1387 | brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] 1388 | secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] 1389 | socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] 1390 | zstd = ["zstandard (>=0.18.0)"] 1391 | 1392 | [[package]] 1393 | name = "urwid" 1394 | version = "2.2.3" 1395 | description = "A full-featured console (xterm et al.) user interface library" 1396 | category = "dev" 1397 | optional = false 1398 | python-versions = ">=3.7.0" 1399 | files = [ 1400 | {file = "urwid-2.2.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7bbc35b54546975df692ab198a272eb459f883dc9b20a19d56eb19ff50838e9a"}, 1401 | {file = "urwid-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:64a3d49f5a8d083198a6bd80ea4c93f45ab1e0cc0735433217925b5df7c32c86"}, 1402 | {file = "urwid-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c1c9c088dc9aff393489c61edd35e3a16930f9b62da3c78e419fc0880aa1291f"}, 1403 | {file = "urwid-2.2.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:746dfc58c745360705d004f75c8799fa6782ebb635666ad36f6e0e3e5fada8fe"}, 1404 | {file = "urwid-2.2.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:604facd127f7d9b535885291154144611fa0aad52f144e88e92e676e4fa09792"}, 1405 | {file = "urwid-2.2.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e241ea0cc3b9f62e74749a143118877cc04a49c00688acd0ecd97cfc907027b"}, 1406 | {file = "urwid-2.2.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0607961f0ce4a60fd4701138bcd198579caafdc020c11fff2db8c7d295786817"}, 1407 | {file = "urwid-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b17dd1dd21926ca1dfbb7b0cfd43f18afe087fba2f488d29795d05a1fe763449"}, 1408 | {file = "urwid-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:deb48828224cdc8a70269973ebe2830de5ab05d9837651af529418ec0de06355"}, 1409 | {file = "urwid-2.2.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7264f82f765339218297b09441d35f5bf90e3bb800a413b5116949729f91ba04"}, 1410 | {file = "urwid-2.2.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1bbb1a2b8beecdaea4b2f6657efb6ca62c53e4156cfae156cb96bab90c738147"}, 1411 | {file = "urwid-2.2.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc1b894918813f170dff2a3f0127e972cfb7c6def3f1fb819a09d903d1383d15"}, 1412 | {file = "urwid-2.2.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b3aab4fedbb2fa1b7c0d8fb1c537285c16a46e6c72b54ca4423b779306662f7f"}, 1413 | {file = "urwid-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8f73bb89aa79fd4604d24d59c3093adc6d472a22f604fad4df140b124ee9edcd"}, 1414 | {file = "urwid-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f7a9fb6d13595fa2f51a2c9927559c9d3706e1a788cbaf2d661631c65b5162bd"}, 1415 | {file = "urwid-2.2.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efcff1822c71d4f9980c75bbfd91f9b45739c629b0b881646f9fa9dcf8bac27c"}, 1416 | {file = "urwid-2.2.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0719114584eeda539e4dd649e8e434a64d0a38ba9769fe4f80d1286e19850713"}, 1417 | {file = "urwid-2.2.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5706994d3197124ffc57762e8d088b492b2e89f4d1b21cf51a9199d67355c4f3"}, 1418 | {file = "urwid-2.2.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b0f9f62a82df0cfb15e8a23ae1f6e6fa856c3415677d98724bc2b8a5702477d1"}, 1419 | {file = "urwid-2.2.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36a856fd0cb38c05fda2ee785f395684ea4f682b1f830ccdab7d0784543f9d13"}, 1420 | {file = "urwid-2.2.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f55eb74095dcbeb0f53dc32b7d809d5c34792c7b9b372c3d24fe1ffaaef1863b"}, 1421 | {file = "urwid-2.2.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59dac9f19020f53a9400f8a0ba2b18b4389fd1deeab88c8319736fd108244d72"}, 1422 | {file = "urwid-2.2.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5a4ee4072e64b414075f32373fc5f63967a4686708ada3e8f8df52d4a2ada8a7"}, 1423 | {file = "urwid-2.2.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bd036997b600c84b33c7bc49b98f029990f49a70d4b21d3399ae7aeba73f0c4e"}, 1424 | {file = "urwid-2.2.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c094b9d00aeb95496372bc27d5c3a2127546f2efc75cafcad019a99c4ab98d9b"}, 1425 | {file = "urwid-2.2.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42224c6aca61459b992c30b6740cbe9f4f0f420e8770a9345b7f3f09f19b2409"}, 1426 | {file = "urwid-2.2.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:efc234c8d74bf839896eeae9333be91e0fa832dee552f2c764e300080d06d2e2"}, 1427 | {file = "urwid-2.2.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf7819bd19ceaa9c1baa5bd50d304b5d4d759591e6a2a7edb1727d1a9f16782d"}, 1428 | {file = "urwid-2.2.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cd8c5f617807f2a8bb5750f851edd3305fb0417230c04b84f4782c51c58c19ea"}, 1429 | {file = "urwid-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b50c7a06a620320b5c124fb3af7d339f7720fec29bf49d5486ec4115ec3df8ff"}, 1430 | {file = "urwid-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:58950a17f3917b4a4a44e167d2ed1d59931f71a1be927c4d0204a035c51ebfd2"}, 1431 | {file = "urwid-2.2.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4352f2a971c7b9dc236d5fce7c4492858441344ead85ce4b1cb1dd513098bbe"}, 1432 | {file = "urwid-2.2.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80260cf2bd4be3eca611e978ee2926fc0338e9550702c77932efc80ca6b0b09d"}, 1433 | {file = "urwid-2.2.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:238ec0be47cbca99320f12864143638e4ebd1722a509f8037ff92ef66b0e9394"}, 1434 | {file = "urwid-2.2.3.tar.gz", hash = "sha256:e4516d55dcee6bd012b3e72a10c75f2866c63a740f0ec4e1ada05c1e1cc02e34"}, 1435 | ] 1436 | 1437 | [package.extras] 1438 | glib = ["PyGObject"] 1439 | lcd = ["pyserial"] 1440 | serial = ["pyserial"] 1441 | tornado = ["tornado"] 1442 | trio = ["trio"] 1443 | twisted = ["twisted"] 1444 | zmq = ["zmq"] 1445 | 1446 | [[package]] 1447 | name = "urwid-readline" 1448 | version = "0.13" 1449 | description = "A textbox edit widget for urwid that supports readline shortcuts" 1450 | category = "dev" 1451 | optional = false 1452 | python-versions = "*" 1453 | files = [ 1454 | {file = "urwid_readline-0.13.tar.gz", hash = "sha256:018020cbc864bb5ed87be17dc26b069eae2755cb29f3a9c569aac3bded1efaf4"}, 1455 | ] 1456 | 1457 | [package.dependencies] 1458 | urwid = "*" 1459 | 1460 | [package.extras] 1461 | dev = ["black", "pytest"] 1462 | 1463 | [[package]] 1464 | name = "wcwidth" 1465 | version = "0.2.9" 1466 | description = "Measures the displayed width of unicode strings in a terminal" 1467 | category = "dev" 1468 | optional = false 1469 | python-versions = "*" 1470 | files = [ 1471 | {file = "wcwidth-0.2.9-py2.py3-none-any.whl", hash = "sha256:9a929bd8380f6cd9571a968a9c8f4353ca58d7cd812a4822bba831f8d685b223"}, 1472 | {file = "wcwidth-0.2.9.tar.gz", hash = "sha256:a675d1a4a2d24ef67096a04b85b02deeecd8e226f57b5e3a72dbb9ed99d27da8"}, 1473 | ] 1474 | 1475 | [metadata] 1476 | lock-version = "2.0" 1477 | python-versions = "^3.10" 1478 | content-hash = "9f5a4b8d3b42fc315a9bb548ec9cb99f83f4dda377defce6014a79eb109232cc" 1479 | --------------------------------------------------------------------------------