From 4af8ae96e125be7c1d9c2308b41fd6932372a1dc Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Thu, 27 Feb 2025 21:48:57 +0200 Subject: [PATCH] Adding demucs to the package file list (#1092) --- .coveragerc | 1 + .github/workflows/ci.yml | 2 +- Buzz.spec | 3 + Makefile | 2 +- buzz/file_transcriber_queue_worker.py | 10 +- demucs/.github/ISSUE_TEMPLATE/bug.md | 33 + demucs/.github/ISSUE_TEMPLATE/question.md | 10 + demucs/.github/workflows/linter.yml | 36 + demucs/.github/workflows/tests.yml | 36 + demucs/.gitignore | 17 + demucs/CODE_OF_CONDUCT.md | 76 + demucs/CONTRIBUTING.md | 23 + demucs/Demucs.ipynb | 153 ++ demucs/LICENSE | 21 + demucs/MANIFEST.in | 13 + demucs/Makefile | 36 + demucs/README.md | 321 ++++ demucs/conf/config.yaml | 304 ++++ demucs/conf/dset/aetl.yaml | 19 + demucs/conf/dset/auto_extra_test.yaml | 18 + demucs/conf/dset/auto_mus.yaml | 20 + demucs/conf/dset/extra44.yaml | 8 + demucs/conf/dset/extra_mmi_goodclean.yaml | 12 + demucs/conf/dset/extra_test.yaml | 12 + demucs/conf/dset/musdb44.yaml | 5 + demucs/conf/dset/sdx23_bleeding.yaml | 10 + demucs/conf/dset/sdx23_labelnoise.yaml | 10 + demucs/conf/svd/base.yaml | 14 + demucs/conf/svd/base2.yaml | 14 + demucs/conf/svd/default.yaml | 1 + demucs/conf/variant/default.yaml | 1 + demucs/conf/variant/example.yaml | 5 + demucs/conf/variant/finetune.yaml | 19 + demucs/demucs.png | Bin 0 -> 339294 bytes demucs/demucs/__init__.py | 7 + demucs/demucs/__main__.py | 10 + demucs/demucs/api.py | 393 +++++ demucs/demucs/apply.py | 322 ++++ demucs/demucs/audio.py | 266 +++ demucs/demucs/audio_legacy.py | 17 + demucs/demucs/augment.py | 111 ++ demucs/demucs/demucs.py | 447 +++++ demucs/demucs/distrib.py | 100 ++ demucs/demucs/ema.py | 66 + demucs/demucs/evaluate.py | 174 ++ demucs/demucs/grids/__init__.py | 0 demucs/demucs/grids/_explorers.py | 64 + demucs/demucs/grids/mdx.py | 33 + demucs/demucs/grids/mdx_extra.py | 36 + demucs/demucs/grids/mdx_refine.py | 34 + demucs/demucs/grids/mmi.py | 69 + demucs/demucs/grids/mmi_ft.py | 55 + demucs/demucs/grids/repro.py | 50 + demucs/demucs/grids/repro_ft.py | 46 + demucs/demucs/grids/sdx23.py | 19 + demucs/demucs/hdemucs.py | 796 +++++++++ demucs/demucs/htdemucs.py | 661 ++++++++ demucs/demucs/pretrained.py | 98 ++ demucs/demucs/py.typed | 0 demucs/demucs/remote/files.txt | 32 + demucs/demucs/remote/hdemucs_mmi.yaml | 2 + demucs/demucs/remote/htdemucs.yaml | 1 + demucs/demucs/remote/htdemucs_6s.yaml | 1 + demucs/demucs/remote/htdemucs_ft.yaml | 7 + demucs/demucs/remote/mdx.yaml | 8 + demucs/demucs/remote/mdx_extra.yaml | 2 + demucs/demucs/remote/mdx_extra_q.yaml | 2 + demucs/demucs/remote/mdx_q.yaml | 8 + demucs/demucs/remote/repro_mdx_a.yaml | 2 + .../remote/repro_mdx_a_hybrid_only.yaml | 2 + .../demucs/remote/repro_mdx_a_time_only.yaml | 2 + demucs/demucs/repitch.py | 87 + demucs/demucs/repo.py | 166 ++ demucs/demucs/separate.py | 228 +++ demucs/demucs/solver.py | 405 +++++ demucs/demucs/spec.py | 47 + demucs/demucs/states.py | 163 ++ demucs/demucs/svd.py | 83 + demucs/demucs/train.py | 252 +++ demucs/demucs/transformer.py | 839 ++++++++++ demucs/demucs/utils.py | 149 ++ demucs/demucs/wav.py | 255 +++ demucs/demucs/wdemucs.py | 9 + demucs/docs/api.md | 204 +++ demucs/docs/linux.md | 28 + demucs/docs/mac.md | 28 + demucs/docs/mdx.md | 73 + demucs/docs/release.md | 114 ++ demucs/docs/sdx23.md | 61 + demucs/docs/training.md | 290 ++++ demucs/docs/windows.md | 67 + demucs/environment-cpu.yml | 28 + demucs/environment-cuda.yml | 28 + demucs/hubconf.py | 11 + demucs/mypy.ini | 5 + demucs/outputs.tar.gz | Bin 0 -> 1885 bytes demucs/requirements.txt | 19 + demucs/requirements_minimal.txt | 10 + demucs/setup.cfg | 8 + demucs/setup.py | 75 + demucs/test.mp3 | Bin 0 -> 802480 bytes demucs/tools/__init__.py | 5 + demucs/tools/automix.py | 343 ++++ demucs/tools/bench.py | 78 + demucs/tools/convert.py | 152 ++ demucs/tools/export.py | 71 + poetry.lock | 1486 +++++++++++++---- pyproject.toml | 19 +- 108 files changed, 10787 insertions(+), 307 deletions(-) create mode 100644 demucs/.github/ISSUE_TEMPLATE/bug.md create mode 100644 demucs/.github/ISSUE_TEMPLATE/question.md create mode 100644 demucs/.github/workflows/linter.yml create mode 100644 demucs/.github/workflows/tests.yml create mode 100644 demucs/.gitignore create mode 100644 demucs/CODE_OF_CONDUCT.md create mode 100644 demucs/CONTRIBUTING.md create mode 100644 demucs/Demucs.ipynb create mode 100644 demucs/LICENSE create mode 100644 demucs/MANIFEST.in create mode 100644 demucs/Makefile create mode 100644 demucs/README.md create mode 100644 demucs/conf/config.yaml create mode 100644 demucs/conf/dset/aetl.yaml create mode 100644 demucs/conf/dset/auto_extra_test.yaml create mode 100644 demucs/conf/dset/auto_mus.yaml create mode 100644 demucs/conf/dset/extra44.yaml create mode 100644 demucs/conf/dset/extra_mmi_goodclean.yaml create mode 100644 demucs/conf/dset/extra_test.yaml create mode 100644 demucs/conf/dset/musdb44.yaml create mode 100644 demucs/conf/dset/sdx23_bleeding.yaml create mode 100644 demucs/conf/dset/sdx23_labelnoise.yaml create mode 100644 demucs/conf/svd/base.yaml create mode 100644 demucs/conf/svd/base2.yaml create mode 100644 demucs/conf/svd/default.yaml create mode 100644 demucs/conf/variant/default.yaml create mode 100644 demucs/conf/variant/example.yaml create mode 100644 demucs/conf/variant/finetune.yaml create mode 100644 demucs/demucs.png create mode 100644 demucs/demucs/__init__.py create mode 100644 demucs/demucs/__main__.py create mode 100644 demucs/demucs/api.py create mode 100644 demucs/demucs/apply.py create mode 100644 demucs/demucs/audio.py create mode 100644 demucs/demucs/audio_legacy.py create mode 100644 demucs/demucs/augment.py create mode 100644 demucs/demucs/demucs.py create mode 100644 demucs/demucs/distrib.py create mode 100644 demucs/demucs/ema.py create mode 100755 demucs/demucs/evaluate.py create mode 100644 demucs/demucs/grids/__init__.py create mode 100644 demucs/demucs/grids/_explorers.py create mode 100644 demucs/demucs/grids/mdx.py create mode 100644 demucs/demucs/grids/mdx_extra.py create mode 100644 demucs/demucs/grids/mdx_refine.py create mode 100644 demucs/demucs/grids/mmi.py create mode 100644 demucs/demucs/grids/mmi_ft.py create mode 100644 demucs/demucs/grids/repro.py create mode 100644 demucs/demucs/grids/repro_ft.py create mode 100644 demucs/demucs/grids/sdx23.py create mode 100644 demucs/demucs/hdemucs.py create mode 100644 demucs/demucs/htdemucs.py create mode 100644 demucs/demucs/pretrained.py create mode 100644 demucs/demucs/py.typed create mode 100644 demucs/demucs/remote/files.txt create mode 100644 demucs/demucs/remote/hdemucs_mmi.yaml create mode 100644 demucs/demucs/remote/htdemucs.yaml create mode 100644 demucs/demucs/remote/htdemucs_6s.yaml create mode 100644 demucs/demucs/remote/htdemucs_ft.yaml create mode 100644 demucs/demucs/remote/mdx.yaml create mode 100644 demucs/demucs/remote/mdx_extra.yaml create mode 100644 demucs/demucs/remote/mdx_extra_q.yaml create mode 100644 demucs/demucs/remote/mdx_q.yaml create mode 100644 demucs/demucs/remote/repro_mdx_a.yaml create mode 100644 demucs/demucs/remote/repro_mdx_a_hybrid_only.yaml create mode 100644 demucs/demucs/remote/repro_mdx_a_time_only.yaml create mode 100644 demucs/demucs/repitch.py create mode 100644 demucs/demucs/repo.py create mode 100644 demucs/demucs/separate.py create mode 100644 demucs/demucs/solver.py create mode 100644 demucs/demucs/spec.py create mode 100644 demucs/demucs/states.py create mode 100644 demucs/demucs/svd.py create mode 100644 demucs/demucs/train.py create mode 100644 demucs/demucs/transformer.py create mode 100755 demucs/demucs/utils.py create mode 100644 demucs/demucs/wav.py create mode 100644 demucs/demucs/wdemucs.py create mode 100644 demucs/docs/api.md create mode 100644 demucs/docs/linux.md create mode 100644 demucs/docs/mac.md create mode 100644 demucs/docs/mdx.md create mode 100644 demucs/docs/release.md create mode 100644 demucs/docs/sdx23.md create mode 100644 demucs/docs/training.md create mode 100644 demucs/docs/windows.md create mode 100644 demucs/environment-cpu.yml create mode 100644 demucs/environment-cuda.yml create mode 100644 demucs/hubconf.py create mode 100644 demucs/mypy.ini create mode 100644 demucs/outputs.tar.gz create mode 100644 demucs/requirements.txt create mode 100644 demucs/requirements_minimal.txt create mode 100644 demucs/setup.cfg create mode 100644 demucs/setup.py create mode 100644 demucs/test.mp3 create mode 100644 demucs/tools/__init__.py create mode 100644 demucs/tools/automix.py create mode 100644 demucs/tools/bench.py create mode 100644 demucs/tools/convert.py create mode 100644 demucs/tools/export.py diff --git a/.coveragerc b/.coveragerc index d5d8d859..8c7c88d1 100644 --- a/.coveragerc +++ b/.coveragerc @@ -2,6 +2,7 @@ omit = buzz/whisper_cpp.py *_test.py + demucs/* [html] directory = coverage/html diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 836ec8b0..eb629f75 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,7 +24,7 @@ jobs: - os: windows-latest - os: ubuntu-20.04 - os: ubuntu-22.04 - - os: ubuntu-24.04 + - os: ubuntu-latest steps: - uses: actions/checkout@v4 with: diff --git a/Buzz.spec b/Buzz.spec index fbbe2a69..e0c1b2c7 100644 --- a/Buzz.spec +++ b/Buzz.spec @@ -9,8 +9,10 @@ from buzz.__version__ import VERSION datas = [] datas += collect_data_files("torch") +datas += collect_data_files("demucs") datas += copy_metadata("tqdm") datas += copy_metadata("torch") +datas += copy_metadata("demucs") datas += copy_metadata("regex") datas += copy_metadata("requests") datas += copy_metadata("packaging") @@ -26,6 +28,7 @@ datas += copy_metadata("pyyaml") datas += collect_data_files("transformers", include_py_files=True) datas += collect_data_files("whisper") +datas += [("demucs", "demucs")] datas += [("buzz/assets/*", "assets")] datas += [("buzz/locale", "locale")] datas += [("buzz/schema.sql", ".")] diff --git a/Makefile b/Makefile index 7f3fa288..a512e340 100644 --- a/Makefile +++ b/Makefile @@ -48,7 +48,7 @@ endif COVERAGE_THRESHOLD := 75 test: buzz/whisper_cpp.py translation_mo - pytest -s -vv --cov=buzz --cov-report=xml --cov-report=html --benchmark-skip --cov-fail-under=${COVERAGE_THRESHOLD} + pytest -s -vv --cov=buzz --cov-report=xml --cov-report=html --benchmark-skip --cov-fail-under=${COVERAGE_THRESHOLD} --cov-config=.coveragerc benchmarks: buzz/whisper_cpp.py translation_mo pytest -s -vv --benchmark-only --benchmark-json benchmarks.json diff --git a/buzz/file_transcriber_queue_worker.py b/buzz/file_transcriber_queue_worker.py index 4f80e282..d958f3fd 100644 --- a/buzz/file_transcriber_queue_worker.py +++ b/buzz/file_transcriber_queue_worker.py @@ -1,13 +1,14 @@ import logging import multiprocessing import queue -import demucs.api from pathlib import Path from typing import Optional, Tuple, List, Set from uuid import UUID from PyQt6.QtCore import QObject, QThread, pyqtSignal, pyqtSlot +from demucs import api as demucsApi + from buzz.model_loader import ModelType from buzz.transcriber.file_transcriber import FileTranscriber from buzz.transcriber.openai_whisper_api_file_transcriber import ( @@ -62,7 +63,8 @@ class FileTranscriberQueueWorker(QObject): self.task_progress.emit(self.current_task, int(progress["segment_offset"] * 100) / int(progress["audio_length"] * 100)) try: - separator = demucs.api.Separator( + # This will fail on Windows 10 and Mac with SSL cert error + separator = demucsApi.Separator( progress=True, callback=separator_progress_callback, ) @@ -70,11 +72,11 @@ class FileTranscriberQueueWorker(QObject): task_file_path = Path(self.current_task.file_path) speech_path = task_file_path.with_name(f"{task_file_path.stem}_speech.flac") - demucs.api.save_audio(separated["vocals"], speech_path, samplerate=separator.samplerate) + demucsApi.save_audio(separated["vocals"], speech_path, separator.samplerate) self.current_task.file_path = str(speech_path) except Exception as e: - logging.error(f"Error during speech extraction: {e}") + logging.error(f"Error during speech extraction: {e}", exc_info=True) logging.debug("Starting next transcription task") diff --git a/demucs/.github/ISSUE_TEMPLATE/bug.md b/demucs/.github/ISSUE_TEMPLATE/bug.md new file mode 100644 index 00000000..217654a9 --- /dev/null +++ b/demucs/.github/ISSUE_TEMPLATE/bug.md @@ -0,0 +1,33 @@ +--- +name: 🐛 Bug Report +about: Submit a bug report to help us improve +labels: 'bug' +--- + +## 🐛 Bug Report + +(A clear and concise description of what the bug is) + +## To Reproduce + +(Write your steps here:) + +1. Step 1... +1. Step 2... +1. Step 3... + +## Expected behavior + +(Write what you thought would happen.) + +## Actual Behavior + +(Write what happened. Add screenshots, if applicable.) + +## Your Environment + + + +- Python and PyTorch version: +- Operating system and version (desktop or mobile): +- Hardware (gpu or cpu, amount of RAM etc.): diff --git a/demucs/.github/ISSUE_TEMPLATE/question.md b/demucs/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 00000000..85a007e4 --- /dev/null +++ b/demucs/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,10 @@ +--- +name: "❓Questions/Help/Support" +about: If you have a question about the paper, code or algorithm, please ask here! +labels: question + +--- + +## ❓ Questions + +(Please ask your question here.) diff --git a/demucs/.github/workflows/linter.yml b/demucs/.github/workflows/linter.yml new file mode 100644 index 00000000..64f235fb --- /dev/null +++ b/demucs/.github/workflows/linter.yml @@ -0,0 +1,36 @@ +name: linter +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + if: ${{ github.repository == 'facebookresearch/demucs' || github.event_name == 'workflow_dispatch' }} + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: 3.8 + + - uses: actions/cache@v2 + with: + path: env + key: env-${{ hashFiles('**/requirements.txt', '.github/workflows/*') }} + + - name: Install dependencies + run: | + python3 -m venv env + . env/bin/activate + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install '.[dev]' + + + - name: Run linter + run: | + . env/bin/activate + make linter diff --git a/demucs/.github/workflows/tests.yml b/demucs/.github/workflows/tests.yml new file mode 100644 index 00000000..b31e3dd6 --- /dev/null +++ b/demucs/.github/workflows/tests.yml @@ -0,0 +1,36 @@ +name: tests +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + if: ${{ github.repository == 'facebookresearch/demucs' || github.event_name == 'workflow_dispatch' }} + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: 3.8 + + - uses: actions/cache@v2 + with: + path: env + key: env-${{ hashFiles('**/requirements.txt', '.github/workflows/*') }} + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y ffmpeg + python3 -m venv env + . env/bin/activate + python -m pip install --upgrade pip + pip install -r requirements.txt + + - name: Run separation test + run: | + . env/bin/activate + make test_eval diff --git a/demucs/.gitignore b/demucs/.gitignore new file mode 100644 index 00000000..179cf0dd --- /dev/null +++ b/demucs/.gitignore @@ -0,0 +1,17 @@ +*.egg-info +__pycache__ +Session.vim +/build +/dist +/lab +/metadata +/notebooks +/outputs +/release +/release_models +/separated +/tests +/trash +/misc +/mdx +.mypy_cache diff --git a/demucs/CODE_OF_CONDUCT.md b/demucs/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..f049d4c5 --- /dev/null +++ b/demucs/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to make participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies within all project spaces, and it also applies when +an individual is representing the project or its community in public spaces. +Examples of representing a project or community include using an official +project e-mail address, posting via an official social media account, or acting +as an appointed representative at an online or offline event. Representation of +a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at . All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/demucs/CONTRIBUTING.md b/demucs/CONTRIBUTING.md new file mode 100644 index 00000000..f14f4af3 --- /dev/null +++ b/demucs/CONTRIBUTING.md @@ -0,0 +1,23 @@ +# Contributing to Demucs + +## Pull Requests + +In order to accept your pull request, we need you to submit a CLA. You only need +to do this once to work on any of Facebook's open source projects. + +Complete your CLA here: + +Demucs is the implementation of a research paper. +Therefore, we do not plan on accepting many pull requests for new features. +We certainly welcome them for bug fixes. + + +## Issues + +We use GitHub issues to track public bugs. Please ensure your description is +clear and has sufficient instructions to be able to reproduce the issue. + + +## License +By contributing to this repository, you agree that your contributions will be licensed +under the LICENSE file in the root directory of this source tree. diff --git a/demucs/Demucs.ipynb b/demucs/Demucs.ipynb new file mode 100644 index 00000000..9ebcfd5a --- /dev/null +++ b/demucs/Demucs.ipynb @@ -0,0 +1,153 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "Be9yoh-ILfRr" + }, + "source": [ + "# Hybrid Demucs\n", + "\n", + "Feel free to use the Colab version:\n", + "https://colab.research.google.com/drive/1dC9nVxk3V_VPjUADsnFu8EiT-xnU1tGH?usp=sharing" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 139 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 12277, + "status": "ok", + "timestamp": 1583778134659, + "user": { + "displayName": "Marllus Lustosa", + "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgLl2RbW64ZyWz3Y8IBku0zhHCMnt7fz7fEl0LTdA=s64", + "userId": "14811735256675200480" + }, + "user_tz": 180 + }, + "id": "kOjIPLlzhPfn", + "outputId": "c75f17ec-b576-4105-bc5b-c2ac9c1018a3" + }, + "outputs": [], + "source": [ + "!pip install -U demucs\n", + "# or for local development, if you have a clone of Demucs\n", + "# pip install -e ." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "5lYOzKKCKAbJ" + }, + "outputs": [], + "source": [ + "# You can use the `demucs` command line to separate tracks\n", + "!demucs test.mp3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# You can also load directly the pretrained models,\n", + "# for instance for the MDX 2021 winning model of Track A:\n", + "from demucs import pretrained\n", + "model = pretrained.get_model('mdx')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Because `model` is a bag of 4 models, you cannot directly call it on your data,\n", + "# but the `apply_model` will know what to do of it.\n", + "import torch\n", + "from demucs.apply import apply_model\n", + "x = torch.randn(1, 2, 44100 * 10) # ten seconds of white noise for the demo\n", + "out = apply_model(model, x)[0] # shape is [S, C, T] with S the number of sources\n", + "\n", + "# So let see, where is all the white noise content is going ?\n", + "for name, source in zip(model.sources, out):\n", + " print(name, source.std() / x.std())\n", + "# The outputs are quite weird to be fair, not what I would have expected." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# now let's take a single model from the bag, and let's test it on a pure cosine\n", + "freq = 440 # in Hz\n", + "sr = model.samplerate\n", + "t = torch.arange(10 * sr).float() / sr\n", + "x = torch.cos(2 * 3.1416 * freq * t).expand(1, 2, -1)\n", + "sub_model = model.models[3]\n", + "out = sub_model(x)[0]\n", + "\n", + "# Same question where does it go?\n", + "for name, source in zip(model.sources, out):\n", + " print(name, source.std() / x.std())\n", + " \n", + "# Well now it makes much more sense, all the energy is going\n", + "# in the `other` source.\n", + "# Feel free to try lower pitch (try 80 Hz) to see what happens !" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# For training or more fun, refer to the Demucs README on our repo\n", + "# https://github.com/facebookresearch/demucs/tree/main/demucs" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "authorship_tag": "ABX9TyM9xpVr1M86NRcjtQ7g9tCx", + "collapsed_sections": [], + "name": "Demucs.ipynb", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.8" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/demucs/LICENSE b/demucs/LICENSE new file mode 100644 index 00000000..a45a376f --- /dev/null +++ b/demucs/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/demucs/MANIFEST.in b/demucs/MANIFEST.in new file mode 100644 index 00000000..96e5f54f --- /dev/null +++ b/demucs/MANIFEST.in @@ -0,0 +1,13 @@ +recursive-exclude env * +recursive-include conf *.yaml +include Makefile +include LICENSE +include demucs.png +include outputs.tar.gz +include test.mp3 +include requirements.txt +include requirements_minimal.txt +include mypy.ini +include demucs/py.typed +include demucs/remote/*.txt +include demucs/remote/*.yaml diff --git a/demucs/Makefile b/demucs/Makefile new file mode 100644 index 00000000..0474d587 --- /dev/null +++ b/demucs/Makefile @@ -0,0 +1,36 @@ +all: linter tests + +linter: + flake8 demucs + mypy demucs + +tests: test_train test_eval + +test_train: tests/musdb + _DORA_TEST_PATH=/tmp/demucs python3 -m dora run --clear \ + dset.musdb=./tests/musdb dset.segment=4 dset.shift=2 epochs=2 model=demucs \ + demucs.depth=2 demucs.channels=4 test.sdr=false misc.num_workers=0 test.workers=0 \ + test.shifts=0 + +test_eval: + python3 -m demucs -n demucs_unittest test.mp3 + python3 -m demucs -n demucs_unittest --two-stems=vocals test.mp3 + python3 -m demucs -n demucs_unittest --mp3 test.mp3 + python3 -m demucs -n demucs_unittest --flac --int24 test.mp3 + python3 -m demucs -n demucs_unittest --int24 --clip-mode clamp test.mp3 + python3 -m demucs -n demucs_unittest --segment 8 test.mp3 + python3 -m demucs.api -n demucs_unittest --segment 8 test.mp3 + python3 -m demucs --list-models + +tests/musdb: + test -e tests || mkdir tests + python3 -c 'import musdb; musdb.DB("tests/tmp", download=True)' + musdbconvert tests/tmp tests/musdb + +dist: + python3 setup.py sdist + +clean: + rm -r dist build *.egg-info + +.PHONY: linter dist test_train test_eval diff --git a/demucs/README.md b/demucs/README.md new file mode 100644 index 00000000..d30c36a7 --- /dev/null +++ b/demucs/README.md @@ -0,0 +1,321 @@ +# Demucs Music Source Separation + +Repo: https://github.com/adefossez/demucs + +![tests badge](https://github.com/facebookresearch/demucs/workflows/tests/badge.svg) +![linter badge](https://github.com/facebookresearch/demucs/workflows/linter/badge.svg) + + +**This is the officially maintained Demucs** now that I (Alexandre Défossez) have left Meta to join [Kyutai](https://twitter.com/kyutai_labs). +Note that I'm not actively working on Demucs anymore, so expect slow replies and no new feature for now. + + + +This is the 4th release of Demucs (v4), featuring Hybrid Transformer based source separation. +**For the classic Hybrid Demucs (v3):** [Go this commit][demucs_v3]. +If you are experiencing issues and want the old Demucs back, please file an issue, and then you can get back to Demucs v3 with +`git checkout v3`. You can also go [Demucs v2][demucs_v2]. + + +Demucs is a state-of-the-art music source separation model, currently capable of separating +drums, bass, and vocals from the rest of the accompaniment. +Demucs is based on a U-Net convolutional architecture inspired by [Wave-U-Net][waveunet]. +The v4 version features [Hybrid Transformer Demucs][htdemucs], a hybrid spectrogram/waveform separation model using Transformers. +It is based on [Hybrid Demucs][hybrid_paper] (also provided in this repo), with the innermost layers +replaced by a cross-domain Transformer Encoder. This Transformer uses self-attention within each domain, +and cross-attention across domains. +The model achieves a SDR of 9.00 dB on the MUSDB HQ test set. Moreover, when using sparse attention +kernels to extend its receptive field and per source fine-tuning, we achieve state-of-the-art 9.20 dB of SDR. + +Samples are available [on our sample page](https://ai.honu.io/papers/htdemucs/index.html). +Checkout [our paper][htdemucs] for more information. +It has been trained on the [MUSDB HQ][musdb] dataset + an extra training dataset of 800 songs. +This model separates drums, bass and vocals and other stems for any song. + + +As Hybrid Transformer Demucs is brand new, it is not activated by default, you can activate it in the usual +commands described hereafter with `-n htdemucs_ft`. +The single, non fine-tuned model is provided as `-n htdemucs`, and the retrained baseline +as `-n hdemucs_mmi`. The Sparse Hybrid Transformer model decribed in our paper is not provided as its +requires custom CUDA code that is not ready for release yet. +We are also releasing an experimental 6 sources model, that adds a `guitar` and `piano` source. +Quick testing seems to show okay quality for `guitar`, but a lot of bleeding and artifacts for the `piano` source. + + +

+Schema representing the structure of Hybrid Transformer Demucs,
+    with a dual U-Net structure, one branch for the temporal domain,
+    and one branch for the spectral domain. There is a cross-domain Transformer between the Encoders and Decoders.

+ + + +## Important news if you are already using Demucs + +See the [release notes](./docs/release.md) for more details. + +- 22/02/2023: added support for the [SDX 2023 Challenge](https://www.aicrowd.com/challenges/sound-demixing-challenge-2023), + see the dedicated [doc page](./docs/sdx23.md) +- 07/12/2022: Demucs v4 now on PyPI. **htdemucs** model now used by default. Also releasing + a 6 sources models (adding `guitar` and `piano`, although the latter doesn't work so well at the moment). +- 16/11/2022: Added the new **Hybrid Transformer Demucs v4** models. + Adding support for the [torchaudio implementation of HDemucs](https://pytorch.org/audio/stable/tutorials/hybrid_demucs_tutorial.html). +- 30/08/2022: added reproducibility and ablation grids, along with an updated version of the paper. +- 17/08/2022: Releasing v3.0.5: Set split segment length to reduce memory. Compatible with pyTorch 1.12. +- 24/02/2022: Releasing v3.0.4: split into two stems (i.e. karaoke mode). + Export as float32 or int24. +- 17/12/2021: Releasing v3.0.3: bug fixes (thanks @keunwoochoi), memory drastically + reduced on GPU (thanks @famzah) and new multi-core evaluation on CPU (`-j` flag). +- 12/11/2021: Releasing **Demucs v3** with hybrid domain separation. Strong improvements + on all sources. This is the model that won Sony MDX challenge. +- 11/05/2021: Adding support for MusDB-HQ and arbitrary wav set, for the MDX challenge. For more information +on joining the challenge with Demucs see [the Demucs MDX instructions](docs/mdx.md) + + +## Comparison with other models + +We provide hereafter a summary of the different metrics presented in the paper. +You can also compare Hybrid Demucs (v3), [KUIELAB-MDX-Net][kuielab], [Spleeter][spleeter], Open-Unmix, Demucs (v1), and Conv-Tasnet on one of my favorite +songs on my [soundcloud playlist][soundcloud]. + +### Comparison of accuracy + +`Overall SDR` is the mean of the SDR for each of the 4 sources, `MOS Quality` is a rating from 1 to 5 +of the naturalness and absence of artifacts given by human listeners (5 = no artifacts), `MOS Contamination` +is a rating from 1 to 5 with 5 being zero contamination by other sources. We refer the reader to our [paper][hybrid_paper], +for more details. + +| Model | Domain | Extra data? | Overall SDR | MOS Quality | MOS Contamination | +|------------------------------|-------------|-------------------|-------------|-------------|-------------------| +| [Wave-U-Net][waveunet] | waveform | no | 3.2 | - | - | +| [Open-Unmix][openunmix] | spectrogram | no | 5.3 | - | - | +| [D3Net][d3net] | spectrogram | no | 6.0 | - | - | +| [Conv-Tasnet][demucs_v2] | waveform | no | 5.7 | - | | +| [Demucs (v2)][demucs_v2] | waveform | no | 6.3 | 2.37 | 2.36 | +| [ResUNetDecouple+][decouple] | spectrogram | no | 6.7 | - | - | +| [KUIELAB-MDX-Net][kuielab] | hybrid | no | 7.5 | **2.86** | 2.55 | +| [Band-Spit RNN][bandsplit] | spectrogram | no | **8.2** | - | - | +| **Hybrid Demucs (v3)** | hybrid | no | 7.7 | **2.83** | **3.04** | +| [MMDenseLSTM][mmdenselstm] | spectrogram | 804 songs | 6.0 | - | - | +| [D3Net][d3net] | spectrogram | 1.5k songs | 6.7 | - | - | +| [Spleeter][spleeter] | spectrogram | 25k songs | 5.9 | - | - | +| [Band-Spit RNN][bandsplit] | spectrogram | 1.7k (mixes only) | **9.0** | - | - | +| **HT Demucs f.t. (v4)** | hybrid | 800 songs | **9.0** | - | - | + + + +## Requirements + +You will need at least Python 3.8. See `requirements_minimal.txt` for requirements for separation only, +and `environment-[cpu|cuda].yml` (or `requirements.txt`) if you want to train a new model. + +### For Windows users + +Everytime you see `python3`, replace it with `python.exe`. You should always run commands from the +Anaconda console. + +### For musicians + +If you just want to use Demucs to separate tracks, you can install it with + +```bash +python3 -m pip install -U demucs +``` + +For bleeding edge versions, you can install directly from this repo using +```bash +python3 -m pip install -U git+https://github.com/facebookresearch/demucs#egg=demucs +``` + +Advanced OS support are provided on the following page, **you must read the page for your OS before posting an issues**: +- **If you are using Windows:** [Windows support](docs/windows.md). +- **If you are using macOS:** [macOS support](docs/mac.md). +- **If you are using Linux:** [Linux support](docs/linux.md). + +### For machine learning scientists + +If you have anaconda installed, you can run from the root of this repository: + +```bash +conda env update -f environment-cpu.yml # if you don't have GPUs +conda env update -f environment-cuda.yml # if you have GPUs +conda activate demucs +pip install -e . +``` + +This will create a `demucs` environment with all the dependencies installed. + +You will also need to install [soundstretch/soundtouch](https://www.surina.net/soundtouch/soundstretch.html): on macOS you can do `brew install sound-touch`, +and on Ubuntu `sudo apt-get install soundstretch`. This is used for the +pitch/tempo augmentation. + + +### Running in Docker + +Thanks to @xserrat, there is now a Docker image definition ready for using Demucs. This can ensure all libraries are correctly installed without interfering with the host OS. See his repo [Docker Facebook Demucs](https://github.com/xserrat/docker-facebook-demucs) for more information. + + +### Running from Colab + +I made a Colab to easily separate track with Demucs. Note that +transfer speeds with Colab are a bit slow for large media files, +but it will allow you to use Demucs without installing anything. + +[Demucs on Google Colab](https://colab.research.google.com/drive/1dC9nVxk3V_VPjUADsnFu8EiT-xnU1tGH?usp=sharing) + +### Web Demo + +Integrated to [Hugging Face Spaces](https://huggingface.co/spaces) with [Gradio](https://github.com/gradio-app/gradio). See demo: [![Hugging Face Spaces](https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Spaces-blue)](https://huggingface.co/spaces/akhaliq/demucs) + +### Graphical Interface + +@CarlGao4 has released a GUI for Demucs: [CarlGao4/Demucs-Gui](https://github.com/CarlGao4/Demucs-Gui). Downloads for Windows and macOS is available [here](https://github.com/CarlGao4/Demucs-Gui/releases). Use [FossHub mirror](https://fosshub.com/Demucs-GUI.html) to speed up your download. + +@Anjok07 is providing a self contained GUI in [UVR (Ultimate Vocal Remover)](https://github.com/facebookresearch/demucs/issues/334) that supports Demucs. + +### Other providers + +Audiostrip is providing free online separation with Demucs on their website [https://audiostrip.co.uk/](https://audiostrip.co.uk/). + +[MVSep](https://mvsep.com/) also provides free online separation, select `Demucs3 model B` for the best quality. + +[Neutone](https://neutone.space/) provides a realtime Demucs model in their free VST/AU plugin that can be used in your favorite DAW. + + +## Separating tracks + +In order to try Demucs, you can just run from any folder (as long as you properly installed it) + +```bash +demucs PATH_TO_AUDIO_FILE_1 [PATH_TO_AUDIO_FILE_2 ...] # for Demucs +# If you used `pip install --user` you might need to replace demucs with python3 -m demucs +python3 -m demucs --mp3 --mp3-bitrate BITRATE PATH_TO_AUDIO_FILE_1 # output files saved as MP3 + # use --mp3-preset to change encoder preset, 2 for best quality, 7 for fastest +# If your filename contain spaces don't forget to quote it !!! +demucs "my music/my favorite track.mp3" +# You can select different models with `-n` mdx_q is the quantized model, smaller but maybe a bit less accurate. +demucs -n mdx_q myfile.mp3 +# If you only want to separate vocals out of an audio, use `--two-stems=vocals` (You can also set to drums or bass) +demucs --two-stems=vocals myfile.mp3 +``` + + +If you have a GPU, but you run out of memory, please use `--segment SEGMENT` to reduce length of each split. `SEGMENT` should be changed to a integer describing the length of each segment in seconds. +A segment length of at least 10 is recommended (the bigger the number is, the more memory is required, but quality may increase). Note that the Hybrid Transformer models only support a maximum segment length of 7.8 seconds. +Creating an environment variable `PYTORCH_NO_CUDA_MEMORY_CACHING=1` is also helpful. If this still does not help, please add `-d cpu` to the command line. See the section hereafter for more details on the memory requirements for GPU acceleration. + +Separated tracks are stored in the `separated/MODEL_NAME/TRACK_NAME` folder. There you will find four stereo wav files sampled at 44.1 kHz: `drums.wav`, `bass.wav`, +`other.wav`, `vocals.wav` (or `.mp3` if you used the `--mp3` option). + +All audio formats supported by `torchaudio` can be processed (i.e. wav, mp3, flac, ogg/vorbis on Linux/macOS, etc.). On Windows, `torchaudio` has limited support, so we rely on `ffmpeg`, which should support pretty much anything. +Audio is resampled on the fly if necessary. +The output will be a wav file encoded as int16. +You can save as float32 wav files with `--float32`, or 24 bits integer wav with `--int24`. +You can pass `--mp3` to save as mp3 instead, and set the bitrate (in kbps) with `--mp3-bitrate` (default is 320). + +It can happen that the output would need clipping, in particular due to some separation artifacts. +Demucs will automatically rescale each output stem so as to avoid clipping. This can however break +the relative volume between stems. If instead you prefer hard clipping, pass `--clip-mode clamp`. +You can also try to reduce the volume of the input mixture before feeding it to Demucs. + + +Other pre-trained models can be selected with the `-n` flag. +The list of pre-trained models is: +- `htdemucs`: first version of Hybrid Transformer Demucs. Trained on MusDB + 800 songs. Default model. +- `htdemucs_ft`: fine-tuned version of `htdemucs`, separation will take 4 times more time + but might be a bit better. Same training set as `htdemucs`. +- `htdemucs_6s`: 6 sources version of `htdemucs`, with `piano` and `guitar` being added as sources. + Note that the `piano` source is not working great at the moment. +- `hdemucs_mmi`: Hybrid Demucs v3, retrained on MusDB + 800 songs. +- `mdx`: trained only on MusDB HQ, winning model on track A at the [MDX][mdx] challenge. +- `mdx_extra`: trained with extra training data (**including MusDB test set**), ranked 2nd on the track B + of the [MDX][mdx] challenge. +- `mdx_q`, `mdx_extra_q`: quantized version of the previous models. Smaller download and storage + but quality can be slightly worse. +- `SIG`: where `SIG` is a single model from the [model zoo](docs/training.md#model-zoo). + +The `--two-stems=vocals` option allows separating vocals from the rest of the accompaniment (i.e., karaoke mode). +`vocals` can be changed to any source in the selected model. +This will mix the files after separating the mix fully, so this won't be faster or use less memory. + +The `--shifts=SHIFTS` performs multiple predictions with random shifts (a.k.a the *shift trick*) of the input and average them. This makes prediction `SHIFTS` times +slower. Don't use it unless you have a GPU. + +The `--overlap` option controls the amount of overlap between prediction windows. Default is 0.25 (i.e. 25%) which is probably fine. +It can probably be reduced to 0.1 to improve a bit speed. + + +The `-j` flag allow to specify a number of parallel jobs (e.g. `demucs -j 2 myfile.mp3`). +This will multiply by the same amount the RAM used so be careful! + +### Memory requirements for GPU acceleration + +If you want to use GPU acceleration, you will need at least 3GB of RAM on your GPU for `demucs`. However, about 7GB of RAM will be required if you use the default arguments. Add `--segment SEGMENT` to change size of each split. If you only have 3GB memory, set SEGMENT to 8 (though quality may be worse if this argument is too small). Creating an environment variable `PYTORCH_NO_CUDA_MEMORY_CACHING=1` can help users with even smaller RAM such as 2GB (I separated a track that is 4 minutes but only 1.5GB is used), but this would make the separation slower. + +If you do not have enough memory on your GPU, simply add `-d cpu` to the command line to use the CPU. With Demucs, processing time should be roughly equal to 1.5 times the duration of the track. + +## Calling from another Python program + +The main function provides an `opt` parameter as a simple API. You can just pass the parsed command line as this parameter: +```python +# Assume that your command is `demucs --mp3 --two-stems vocals -n mdx_extra "track with space.mp3"` +# The following codes are same as the command above: +import demucs.separate +demucs.separate.main(["--mp3", "--two-stems", "vocals", "-n", "mdx_extra", "track with space.mp3"]) + +# Or like this +import demucs.separate +import shlex +demucs.separate.main(shlex.split('--mp3 --two-stems vocals -n mdx_extra "track with space.mp3"')) +``` + +To use more complicated APIs, see [API docs](docs/api.md) + +## Training Demucs + +If you want to train (Hybrid) Demucs, please follow the [training doc](docs/training.md). + +## MDX Challenge reproduction + +In order to reproduce the results from the Track A and Track B submissions, checkout the [MDX Hybrid Demucs submission repo][mdx_submission]. + + + +## How to cite + +``` +@inproceedings{rouard2022hybrid, + title={Hybrid Transformers for Music Source Separation}, + author={Rouard, Simon and Massa, Francisco and D{\'e}fossez, Alexandre}, + booktitle={ICASSP 23}, + year={2023} +} + +@inproceedings{defossez2021hybrid, + title={Hybrid Spectrogram and Waveform Source Separation}, + author={D{\'e}fossez, Alexandre}, + booktitle={Proceedings of the ISMIR 2021 Workshop on Music Source Separation}, + year={2021} +} +``` + +## License + +Demucs is released under the MIT license as found in the [LICENSE](LICENSE) file. + +[hybrid_paper]: https://arxiv.org/abs/2111.03600 +[waveunet]: https://github.com/f90/Wave-U-Net +[musdb]: https://sigsep.github.io/datasets/musdb.html +[openunmix]: https://github.com/sigsep/open-unmix-pytorch +[mmdenselstm]: https://arxiv.org/abs/1805.02410 +[demucs_v2]: https://github.com/facebookresearch/demucs/tree/v2 +[demucs_v3]: https://github.com/facebookresearch/demucs/tree/v3 +[spleeter]: https://github.com/deezer/spleeter +[soundcloud]: https://soundcloud.com/honualx/sets/source-separation-in-the-waveform-domain +[d3net]: https://arxiv.org/abs/2010.01733 +[mdx]: https://www.aicrowd.com/challenges/music-demixing-challenge-ismir-2021 +[kuielab]: https://github.com/kuielab/mdx-net-submission +[decouple]: https://arxiv.org/abs/2109.05418 +[mdx_submission]: https://github.com/adefossez/mdx21_demucs +[bandsplit]: https://arxiv.org/abs/2209.15174 +[htdemucs]: https://arxiv.org/abs/2211.08553 diff --git a/demucs/conf/config.yaml b/demucs/conf/config.yaml new file mode 100644 index 00000000..d2597cb5 --- /dev/null +++ b/demucs/conf/config.yaml @@ -0,0 +1,304 @@ +defaults: + - _self_ + - dset: musdb44 + - svd: default + - variant: default + - override hydra/hydra_logging: colorlog + - override hydra/job_logging: colorlog + +dummy: +dset: + musdb: /checkpoint/defossez/datasets/musdbhq + musdb_samplerate: 44100 + use_musdb: true # set to false to not use musdb as training data. + wav: # path to custom wav dataset + wav2: # second custom wav dataset + segment: 11 + shift: 1 + train_valid: false + full_cv: true + samplerate: 44100 + channels: 2 + normalize: true + metadata: ./metadata + sources: ['drums', 'bass', 'other', 'vocals'] + valid_samples: # valid dataset size + backend: null # if provided select torchaudio backend. + +test: + save: False + best: True + workers: 2 + every: 20 + split: true + shifts: 1 + overlap: 0.25 + sdr: true + metric: 'loss' # metric used for best model selection on the valid set, can also be nsdr + nonhq: # path to non hq MusDB for evaluation + +epochs: 360 +batch_size: 64 +max_batches: # limit the number of batches per epoch, useful for debugging + # or if your dataset is gigantic. +optim: + lr: 3e-4 + momentum: 0.9 + beta2: 0.999 + loss: l1 # l1 or mse + optim: adam + weight_decay: 0 + clip_grad: 0 + +seed: 42 +debug: false +valid_apply: true +flag: +save_every: +weights: [1., 1., 1., 1.] # weights over each source for the training/valid loss. + +augment: + shift_same: false + repitch: + proba: 0.2 + max_tempo: 12 + remix: + proba: 1 + group_size: 4 + scale: + proba: 1 + min: 0.25 + max: 1.25 + flip: true + +continue_from: # continue from other XP, give the XP Dora signature. +continue_pretrained: # signature of a pretrained XP, this cannot be a bag of models. +pretrained_repo: # repo for pretrained model (default is official AWS) +continue_best: true +continue_opt: false + +misc: + num_workers: 10 + num_prints: 4 + show: false + verbose: false + +# List of decay for EMA at batch or epoch level, e.g. 0.999. +# Batch level EMA are kept on GPU for speed. +ema: + epoch: [] + batch: [] + +use_train_segment: true # to remove +model_segment: # override the segment parameter for the model, usually 4 times the training segment. +model: demucs # see demucs/train.py for the possibilities, and config for each model hereafter. +demucs: # see demucs/demucs.py for a detailed description + # Channels + channels: 64 + growth: 2 + # Main structure + depth: 6 + rewrite: true + lstm_layers: 0 + # Convolutions + kernel_size: 8 + stride: 4 + context: 1 + # Activations + gelu: true + glu: true + # Normalization + norm_groups: 4 + norm_starts: 4 + # DConv residual branch + dconv_depth: 2 + dconv_mode: 1 # 1 = branch in encoder, 2 = in decoder, 3 = in both. + dconv_comp: 4 + dconv_attn: 4 + dconv_lstm: 4 + dconv_init: 1e-4 + # Pre/post treatment + resample: true + normalize: false + # Weight init + rescale: 0.1 + +hdemucs: # see demucs/hdemucs.py for a detailed description + # Channels + channels: 48 + channels_time: + growth: 2 + # STFT + nfft: 4096 + wiener_iters: 0 + end_iters: 0 + wiener_residual: false + cac: true + # Main structure + depth: 6 + rewrite: true + hybrid: true + hybrid_old: false + # Frequency Branch + multi_freqs: [] + multi_freqs_depth: 3 + freq_emb: 0.2 + emb_scale: 10 + emb_smooth: true + # Convolutions + kernel_size: 8 + stride: 4 + time_stride: 2 + context: 1 + context_enc: 0 + # normalization + norm_starts: 4 + norm_groups: 4 + # DConv residual branch + dconv_mode: 1 + dconv_depth: 2 + dconv_comp: 4 + dconv_attn: 4 + dconv_lstm: 4 + dconv_init: 1e-3 + # Weight init + rescale: 0.1 + +# Torchaudio implementation of HDemucs +torch_hdemucs: +# Channels + channels: 48 + growth: 2 + # STFT + nfft: 4096 + # Main structure + depth: 6 + freq_emb: 0.2 + emb_scale: 10 + emb_smooth: true + # Convolutions + kernel_size: 8 + stride: 4 + time_stride: 2 + context: 1 + context_enc: 0 + # normalization + norm_starts: 4 + norm_groups: 4 + # DConv residual branch + dconv_depth: 2 + dconv_comp: 4 + dconv_attn: 4 + dconv_lstm: 4 + dconv_init: 1e-3 + +htdemucs: # see demucs/htdemucs.py for a detailed description + # Channels + channels: 48 + channels_time: + growth: 2 + # STFT + nfft: 4096 + wiener_iters: 0 + end_iters: 0 + wiener_residual: false + cac: true + # Main structure + depth: 4 + rewrite: true + # Frequency Branch + multi_freqs: [] + multi_freqs_depth: 3 + freq_emb: 0.2 + emb_scale: 10 + emb_smooth: true + # Convolutions + kernel_size: 8 + stride: 4 + time_stride: 2 + context: 1 + context_enc: 0 + # normalization + norm_starts: 4 + norm_groups: 4 + # DConv residual branch + dconv_mode: 1 + dconv_depth: 2 + dconv_comp: 8 + dconv_init: 1e-3 + # Before the Transformer + bottom_channels: 0 + # CrossTransformer + # ------ Common to all + # Regular parameters + t_layers: 5 + t_hidden_scale: 4.0 + t_heads: 8 + t_dropout: 0.0 + t_layer_scale: True + t_gelu: True + # ------------- Positional Embedding + t_emb: sin + t_max_positions: 10000 # for the scaled embedding + t_max_period: 10000.0 + t_weight_pos_embed: 1.0 + t_cape_mean_normalize: True + t_cape_augment: True + t_cape_glob_loc_scale: [5000.0, 1.0, 1.4] + t_sin_random_shift: 0 + # ------------- norm before a transformer encoder + t_norm_in: True + t_norm_in_group: False + # ------------- norm inside the encoder + t_group_norm: False + t_norm_first: True + t_norm_out: True + # ------------- optim + t_weight_decay: 0.0 + t_lr: + # ------------- sparsity + t_sparse_self_attn: False + t_sparse_cross_attn: False + t_mask_type: diag + t_mask_random_seed: 42 + t_sparse_attn_window: 400 + t_global_window: 100 + t_sparsity: 0.95 + t_auto_sparsity: False + # Cross Encoder First (False) + t_cross_first: False + # Weight init + rescale: 0.1 + +svd: # see svd.py for documentation + penalty: 0 + min_size: 0.1 + dim: 1 + niters: 2 + powm: false + proba: 1 + conv_only: false + convtr: false + bs: 1 + +quant: # quantization hyper params + diffq: # diffq penalty, typically 1e-4 or 3e-4 + qat: # use QAT with a fixed number of bits (not as good as diffq) + min_size: 0.2 + group_size: 8 + +dora: + dir: outputs + exclude: ["misc.*", "slurm.*", 'test.reval', 'flag', 'dset.backend'] + +slurm: + time: 4320 + constraint: volta32gb + setup: ['module load cudnn/v8.4.1.50-cuda.11.6 NCCL/2.11.4-6-cuda.11.6 cuda/11.6'] + +# Hydra config +hydra: + job_logging: + formatters: + colorlog: + datefmt: "%m-%d %H:%M:%S" diff --git a/demucs/conf/dset/aetl.yaml b/demucs/conf/dset/aetl.yaml new file mode 100644 index 00000000..7c983160 --- /dev/null +++ b/demucs/conf/dset/aetl.yaml @@ -0,0 +1,19 @@ +# @package _global_ + +# automix dataset with Musdb, extra training data and the test set of Musdb. +# This used even more remixes than auto_extra_test. +dset: + wav: /checkpoint/defossez/datasets/aetl + samplerate: 44100 + channels: 2 +epochs: 320 +max_batches: 500 + +augment: + shift_same: true + scale: + proba: 0. + remix: + proba: 0 + repitch: + proba: 0 diff --git a/demucs/conf/dset/auto_extra_test.yaml b/demucs/conf/dset/auto_extra_test.yaml new file mode 100644 index 00000000..056183a5 --- /dev/null +++ b/demucs/conf/dset/auto_extra_test.yaml @@ -0,0 +1,18 @@ +# @package _global_ + +# automix dataset with Musdb, extra training data and the test set of Musdb. +dset: + wav: /checkpoint/defossez/datasets/automix_extra_test2 + samplerate: 44100 + channels: 2 +epochs: 320 +max_batches: 500 + +augment: + shift_same: true + scale: + proba: 0. + remix: + proba: 0 + repitch: + proba: 0 diff --git a/demucs/conf/dset/auto_mus.yaml b/demucs/conf/dset/auto_mus.yaml new file mode 100644 index 00000000..9a2d9df5 --- /dev/null +++ b/demucs/conf/dset/auto_mus.yaml @@ -0,0 +1,20 @@ +# @package _global_ + +# Automix dataset based on musdb train set. +dset: + wav: /checkpoint/defossez/datasets/automix_musdb + samplerate: 44100 + channels: 2 +epochs: 360 +max_batches: 300 +test: + every: 4 + +augment: + shift_same: true + scale: + proba: 0.5 + remix: + proba: 0 + repitch: + proba: 0 diff --git a/demucs/conf/dset/extra44.yaml b/demucs/conf/dset/extra44.yaml new file mode 100644 index 00000000..f0adc467 --- /dev/null +++ b/demucs/conf/dset/extra44.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +# Musdb + extra tracks +dset: + wav: /checkpoint/defossez/datasets/allstems_44/ + samplerate: 44100 + channels: 2 +epochs: 320 diff --git a/demucs/conf/dset/extra_mmi_goodclean.yaml b/demucs/conf/dset/extra_mmi_goodclean.yaml new file mode 100644 index 00000000..fe47bcf2 --- /dev/null +++ b/demucs/conf/dset/extra_mmi_goodclean.yaml @@ -0,0 +1,12 @@ +# @package _global_ + +# Musdb + extra tracks +dset: + wav: /checkpoint/defossez/datasets/allstems_44/ + wav2: /checkpoint/defossez/datasets/mmi44_goodclean + samplerate: 44100 + channels: 2 + wav2_weight: null + wav2_valid: false + valid_samples: 100 +epochs: 1200 diff --git a/demucs/conf/dset/extra_test.yaml b/demucs/conf/dset/extra_test.yaml new file mode 100644 index 00000000..1e7d05ad --- /dev/null +++ b/demucs/conf/dset/extra_test.yaml @@ -0,0 +1,12 @@ +# @package _global_ + +# Musdb + extra tracks + test set from musdb. +dset: + wav: /checkpoint/defossez/datasets/allstems_test_44/ + samplerate: 44100 + channels: 2 +epochs: 320 +max_batches: 700 +test: + sdr: false + every: 500 diff --git a/demucs/conf/dset/musdb44.yaml b/demucs/conf/dset/musdb44.yaml new file mode 100644 index 00000000..c5623468 --- /dev/null +++ b/demucs/conf/dset/musdb44.yaml @@ -0,0 +1,5 @@ +# @package _global_ + +dset: + samplerate: 44100 + channels: 2 \ No newline at end of file diff --git a/demucs/conf/dset/sdx23_bleeding.yaml b/demucs/conf/dset/sdx23_bleeding.yaml new file mode 100644 index 00000000..5f7fd1e4 --- /dev/null +++ b/demucs/conf/dset/sdx23_bleeding.yaml @@ -0,0 +1,10 @@ +# @package _global_ + +# Musdb + extra tracks +dset: + wav: /shared/home/defossez/data/datasets/moisesdb23_bleeding_v1.0/ + use_musdb: false + samplerate: 44100 + channels: 2 + backend: soundfile # must use soundfile as some mixture would clip with sox. +epochs: 320 diff --git a/demucs/conf/dset/sdx23_labelnoise.yaml b/demucs/conf/dset/sdx23_labelnoise.yaml new file mode 100644 index 00000000..367769e6 --- /dev/null +++ b/demucs/conf/dset/sdx23_labelnoise.yaml @@ -0,0 +1,10 @@ +# @package _global_ + +# Musdb + extra tracks +dset: + wav: /shared/home/defossez/data/datasets/moisesdb23_labelnoise_v1.0 + use_musdb: false + samplerate: 44100 + channels: 2 + backend: soundfile # must use soundfile as some mixture would clip with sox. +epochs: 320 diff --git a/demucs/conf/svd/base.yaml b/demucs/conf/svd/base.yaml new file mode 100644 index 00000000..e4de8685 --- /dev/null +++ b/demucs/conf/svd/base.yaml @@ -0,0 +1,14 @@ +# @package _global_ + +svd: + penalty: 0 + min_size: 1 + dim: 50 + niters: 4 + powm: false + proba: 1 + conv_only: false + convtr: false # ideally this should be true, but some models were trained with this to false. + +optim: + beta2: 0.9998 \ No newline at end of file diff --git a/demucs/conf/svd/base2.yaml b/demucs/conf/svd/base2.yaml new file mode 100644 index 00000000..b88a7519 --- /dev/null +++ b/demucs/conf/svd/base2.yaml @@ -0,0 +1,14 @@ +# @package _global_ + +svd: + penalty: 0 + min_size: 1 + dim: 100 + niters: 4 + powm: false + proba: 1 + conv_only: false + convtr: true + +optim: + beta2: 0.9998 \ No newline at end of file diff --git a/demucs/conf/svd/default.yaml b/demucs/conf/svd/default.yaml new file mode 100644 index 00000000..03bfe3db --- /dev/null +++ b/demucs/conf/svd/default.yaml @@ -0,0 +1 @@ +# @package _global_ diff --git a/demucs/conf/variant/default.yaml b/demucs/conf/variant/default.yaml new file mode 100644 index 00000000..03bfe3db --- /dev/null +++ b/demucs/conf/variant/default.yaml @@ -0,0 +1 @@ +# @package _global_ diff --git a/demucs/conf/variant/example.yaml b/demucs/conf/variant/example.yaml new file mode 100644 index 00000000..9b38aeca --- /dev/null +++ b/demucs/conf/variant/example.yaml @@ -0,0 +1,5 @@ +# @package _global_ + +model: hdemucs +hdemucs: + channels: 32 \ No newline at end of file diff --git a/demucs/conf/variant/finetune.yaml b/demucs/conf/variant/finetune.yaml new file mode 100644 index 00000000..c3ea21ed --- /dev/null +++ b/demucs/conf/variant/finetune.yaml @@ -0,0 +1,19 @@ +# @package _global_ + +epochs: 4 +batch_size: 16 +optim: + lr: 0.0006 +test: + every: 1 + sdr: false +dset: + segment: 28 + shift: 2 + +augment: + scale: + proba: 0 + shift_same: true + remix: + proba: 0 diff --git a/demucs/demucs.png b/demucs/demucs.png new file mode 100644 index 0000000000000000000000000000000000000000..d043f64442f24d1825dfabb3eed57ff0f843f64a GIT binary patch literal 339294 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%0Ar4F8@pxSe!)fMsWlY#9z&6JJ`J#>tyWQ* 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 U!mh~1LP0+A(kfE55~iX5A2>YpwEzGB literal 0 HcmV?d00001 diff --git a/demucs/demucs/__init__.py b/demucs/demucs/__init__.py new file mode 100644 index 00000000..3bf9f708 --- /dev/null +++ b/demucs/demucs/__init__.py @@ -0,0 +1,7 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +__version__ = "4.1.0a3" diff --git a/demucs/demucs/__main__.py b/demucs/demucs/__main__.py new file mode 100644 index 00000000..da0a5410 --- /dev/null +++ b/demucs/demucs/__main__.py @@ -0,0 +1,10 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +from .separate import main + +if __name__ == '__main__': + main() diff --git a/demucs/demucs/api.py b/demucs/demucs/api.py new file mode 100644 index 00000000..ee8a5126 --- /dev/null +++ b/demucs/demucs/api.py @@ -0,0 +1,393 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +"""API methods for demucs + +Classes +------- +`demucs.api.Separator`: The base separator class + +Functions +--------- +`demucs.api.save_audio`: Save an audio +`demucs.api.list_models`: Get models list + +Examples +-------- +See the end of this module (if __name__ == "__main__") +""" + +import subprocess + +from . import audio_legacy +import torch as th +import torchaudio as ta + +from dora.log import fatal +from pathlib import Path +from typing import Optional, Callable, Dict, Tuple, Union + +from .apply import apply_model, _replace_dict +from .audio import AudioFile, convert_audio, save_audio +from .pretrained import get_model, _parse_remote_files, REMOTE_ROOT +from .repo import RemoteRepo, LocalRepo, ModelOnlyRepo, BagOnlyRepo + + +class LoadAudioError(Exception): + pass + + +class LoadModelError(Exception): + pass + + +class _NotProvided: + pass + + +NotProvided = _NotProvided() + + +class Separator: + def __init__( + self, + model: str = "htdemucs", + repo: Optional[Path] = None, + device: str = "cuda" if th.cuda.is_available() else "cpu", + shifts: int = 1, + overlap: float = 0.25, + split: bool = True, + segment: Optional[int] = None, + jobs: int = 0, + progress: bool = False, + callback: Optional[Callable[[dict], None]] = None, + callback_arg: Optional[dict] = None, + ): + """ + `class Separator` + ================= + + Parameters + ---------- + model: Pretrained model name or signature. Default is htdemucs. + repo: Folder containing all pre-trained models for use. + segment: Length (in seconds) of each segment (only available if `split` is `True`). If \ + not specified, will use the command line option. + shifts: If > 0, will shift in time `wav` by a random amount between 0 and 0.5 sec and \ + apply the oppositve shift to the output. This is repeated `shifts` time and all \ + predictions are averaged. This effectively makes the model time equivariant and \ + improves SDR by up to 0.2 points. If not specified, will use the command line option. + split: If True, the input will be broken down into small chunks (length set by `segment`) \ + and predictions will be performed individually on each and concatenated. Useful for \ + model with large memory footprint like Tasnet. If not specified, will use the command \ + line option. + overlap: The overlap between the splits. If not specified, will use the command line \ + option. + device (torch.device, str, or None): If provided, device on which to execute the \ + computation, otherwise `wav.device` is assumed. When `device` is different from \ + `wav.device`, only local computations will be on `device`, while the entire tracks \ + will be stored on `wav.device`. If not specified, will use the command line option. + jobs: Number of jobs. This can increase memory usage but will be much faster when \ + multiple cores are available. If not specified, will use the command line option. + callback: A function will be called when the separation of a chunk starts or finished. \ + The argument passed to the function will be a dict. For more information, please see \ + the Callback section. + callback_arg: A dict containing private parameters to be passed to callback function. For \ + more information, please see the Callback section. + progress: If true, show a progress bar. + + Callback + -------- + The function will be called with only one positional parameter whose type is `dict`. The + `callback_arg` will be combined with information of current separation progress. The + progress information will override the values in `callback_arg` if same key has been used. + To abort the separation, raise `KeyboardInterrupt`. + + Progress information contains several keys (These keys will always exist): + - `model_idx_in_bag`: The index of the submodel in `BagOfModels`. Starts from 0. + - `shift_idx`: The index of shifts. Starts from 0. + - `segment_offset`: The offset of current segment. If the number is 441000, it doesn't + mean that it is at the 441000 second of the audio, but the "frame" of the tensor. + - `state`: Could be `"start"` or `"end"`. + - `audio_length`: Length of the audio (in "frame" of the tensor). + - `models`: Count of submodels in the model. + """ + self._name = model + self._repo = repo + self._load_model() + self.update_parameter(device=device, shifts=shifts, overlap=overlap, split=split, + segment=segment, jobs=jobs, progress=progress, callback=callback, + callback_arg=callback_arg) + + def update_parameter( + self, + device: Union[str, _NotProvided] = NotProvided, + shifts: Union[int, _NotProvided] = NotProvided, + overlap: Union[float, _NotProvided] = NotProvided, + split: Union[bool, _NotProvided] = NotProvided, + segment: Optional[Union[int, _NotProvided]] = NotProvided, + jobs: Union[int, _NotProvided] = NotProvided, + progress: Union[bool, _NotProvided] = NotProvided, + callback: Optional[ + Union[Callable[[dict], None], _NotProvided] + ] = NotProvided, + callback_arg: Optional[Union[dict, _NotProvided]] = NotProvided, + ): + """ + Update the parameters of separation. + + Parameters + ---------- + segment: Length (in seconds) of each segment (only available if `split` is `True`). If \ + not specified, will use the command line option. + shifts: If > 0, will shift in time `wav` by a random amount between 0 and 0.5 sec and \ + apply the oppositve shift to the output. This is repeated `shifts` time and all \ + predictions are averaged. This effectively makes the model time equivariant and \ + improves SDR by up to 0.2 points. If not specified, will use the command line option. + split: If True, the input will be broken down into small chunks (length set by `segment`) \ + and predictions will be performed individually on each and concatenated. Useful for \ + model with large memory footprint like Tasnet. If not specified, will use the command \ + line option. + overlap: The overlap between the splits. If not specified, will use the command line \ + option. + device (torch.device, str, or None): If provided, device on which to execute the \ + computation, otherwise `wav.device` is assumed. When `device` is different from \ + `wav.device`, only local computations will be on `device`, while the entire tracks \ + will be stored on `wav.device`. If not specified, will use the command line option. + jobs: Number of jobs. This can increase memory usage but will be much faster when \ + multiple cores are available. If not specified, will use the command line option. + callback: A function will be called when the separation of a chunk starts or finished. \ + The argument passed to the function will be a dict. For more information, please see \ + the Callback section. + callback_arg: A dict containing private parameters to be passed to callback function. For \ + more information, please see the Callback section. + progress: If true, show a progress bar. + + Callback + -------- + The function will be called with only one positional parameter whose type is `dict`. The + `callback_arg` will be combined with information of current separation progress. The + progress information will override the values in `callback_arg` if same key has been used. + To abort the separation, raise `KeyboardInterrupt`. + + Progress information contains several keys (These keys will always exist): + - `model_idx_in_bag`: The index of the submodel in `BagOfModels`. Starts from 0. + - `shift_idx`: The index of shifts. Starts from 0. + - `segment_offset`: The offset of current segment. If the number is 441000, it doesn't + mean that it is at the 441000 second of the audio, but the "frame" of the tensor. + - `state`: Could be `"start"` or `"end"`. + - `audio_length`: Length of the audio (in "frame" of the tensor). + - `models`: Count of submodels in the model. + """ + if not isinstance(device, _NotProvided): + self._device = device + if not isinstance(shifts, _NotProvided): + self._shifts = shifts + if not isinstance(overlap, _NotProvided): + self._overlap = overlap + if not isinstance(split, _NotProvided): + self._split = split + if not isinstance(segment, _NotProvided): + self._segment = segment + if not isinstance(jobs, _NotProvided): + self._jobs = jobs + if not isinstance(progress, _NotProvided): + self._progress = progress + if not isinstance(callback, _NotProvided): + self._callback = callback + if not isinstance(callback_arg, _NotProvided): + self._callback_arg = callback_arg + + def _load_model(self): + self._model = get_model(name=self._name, repo=self._repo) + if self._model is None: + raise LoadModelError("Failed to load model") + self._audio_channels = self._model.audio_channels + self._samplerate = self._model.samplerate + + def _load_audio(self, track: Path): + errors = {} + wav = None + + try: + wav = AudioFile(track).read(streams=0, samplerate=self._samplerate, + channels=self._audio_channels) + except FileNotFoundError: + errors["ffmpeg"] = "FFmpeg is not installed." + except subprocess.CalledProcessError: + errors["ffmpeg"] = "FFmpeg could not read the file." + + if wav is None: + try: + wav, sr = ta.load(str(track)) + except RuntimeError as err: + errors["torchaudio"] = err.args[0] + else: + wav = convert_audio(wav, sr, self._samplerate, self._audio_channels) + + if wav is None: + raise LoadAudioError( + "\n".join( + "When trying to load using {}, got the following error: {}".format( + backend, error + ) + for backend, error in errors.items() + ) + ) + return wav + + def separate_tensor( + self, wav: th.Tensor, sr: Optional[int] = None + ) -> Tuple[th.Tensor, Dict[str, th.Tensor]]: + """ + Separate a loaded tensor. + + Parameters + ---------- + wav: Waveform of the audio. Should have 2 dimensions, the first is each audio channel, \ + while the second is the waveform of each channel. Type should be float32. \ + e.g. `tuple(wav.shape) == (2, 884000)` means the audio has 2 channels. + sr: Sample rate of the original audio, the wave will be resampled if it doesn't match the \ + model. + + Returns + ------- + A tuple, whose first element is the original wave and second element is a dict, whose keys + are the name of stems and values are separated waves. The original wave will have already + been resampled. + + Notes + ----- + Use this function with cautiousness. This function does not provide data verifying. + """ + if sr is not None and sr != self.samplerate: + wav = convert_audio(wav, sr, self._samplerate, self._audio_channels) + ref = wav.mean(0) + wav -= ref.mean() + wav /= ref.std() + 1e-8 + out = apply_model( + self._model, + wav[None], + segment=self._segment, + shifts=self._shifts, + split=self._split, + overlap=self._overlap, + device=self._device, + num_workers=self._jobs, + callback=self._callback, + callback_arg=_replace_dict( + self._callback_arg, ("audio_length", wav.shape[1]) + ), + progress=self._progress, + ) + if out is None: + raise KeyboardInterrupt + out *= ref.std() + 1e-8 + out += ref.mean() + wav *= ref.std() + 1e-8 + wav += ref.mean() + return (wav, dict(zip(self._model.sources, out[0]))) + + def separate_audio_file(self, file: Path): + """ + Separate an audio file. The method will automatically read the file. + + Parameters + ---------- + wav: Path of the file to be separated. + + Returns + ------- + A tuple, whose first element is the original wave and second element is a dict, whose keys + are the name of stems and values are separated waves. The original wave will have already + been resampled. + """ + return self.separate_tensor(self._load_audio(file), self.samplerate) + + @property + def samplerate(self): + return self._samplerate + + @property + def audio_channels(self): + return self._audio_channels + + @property + def model(self): + return self._model + + +def list_models(repo: Optional[Path] = None) -> Dict[str, Dict[str, Union[str, Path]]]: + """ + List the available models. Please remember that not all the returned models can be + successfully loaded. + + Parameters + ---------- + repo: The repo whose models are to be listed. + + Returns + ------- + A dict with two keys ("single" for single models and "bag" for bag of models). The values are + lists whose components are strs. + """ + model_repo: ModelOnlyRepo + if repo is None: + models = _parse_remote_files(REMOTE_ROOT / 'files.txt') + model_repo = RemoteRepo(models) + bag_repo = BagOnlyRepo(REMOTE_ROOT, model_repo) + else: + if not repo.is_dir(): + fatal(f"{repo} must exist and be a directory.") + model_repo = LocalRepo(repo) + bag_repo = BagOnlyRepo(repo, model_repo) + return {"single": model_repo.list_model(), "bag": bag_repo.list_model()} + + +if __name__ == "__main__": + # Test API functions + # two-stem not supported + + from .separate import get_parser + + args = get_parser().parse_args() + separator = Separator( + model=args.name, + repo=args.repo, + device=args.device, + shifts=args.shifts, + overlap=args.overlap, + split=args.split, + segment=args.segment, + jobs=args.jobs, + callback=print + ) + out = args.out / args.name + out.mkdir(parents=True, exist_ok=True) + for file in args.tracks: + separated = separator.separate_audio_file(file)[1] + if args.mp3: + ext = "mp3" + elif args.flac: + ext = "flac" + else: + ext = "wav" + kwargs = { + "samplerate": separator.samplerate, + "bitrate": args.mp3_bitrate, + "clip": args.clip_mode, + "as_float": args.float32, + "bits_per_sample": 24 if args.int24 else 16, + } + for stem, source in separated.items(): + stem = out / args.filename.format( + track=Path(file).name.rsplit(".", 1)[0], + trackext=Path(file).name.rsplit(".", 1)[-1], + stem=stem, + ext=ext, + ) + stem.parent.mkdir(parents=True, exist_ok=True) + save_audio(source, str(stem), **kwargs) diff --git a/demucs/demucs/apply.py b/demucs/demucs/apply.py new file mode 100644 index 00000000..c84993de --- /dev/null +++ b/demucs/demucs/apply.py @@ -0,0 +1,322 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +""" +Code to apply a model to a mix. It will handle chunking with overlaps and +inteprolation between chunks, as well as the "shift trick". +""" +from concurrent.futures import ThreadPoolExecutor +import copy +import random +from threading import Lock +import typing as tp + +import torch as th +from torch import nn +from torch.nn import functional as F +import tqdm + +from .demucs import Demucs +from .hdemucs import HDemucs +from .htdemucs import HTDemucs +from .utils import center_trim, DummyPoolExecutor + +Model = tp.Union[Demucs, HDemucs, HTDemucs] + + +class BagOfModels(nn.Module): + def __init__(self, models: tp.List[Model], + weights: tp.Optional[tp.List[tp.List[float]]] = None, + segment: tp.Optional[float] = None): + """ + Represents a bag of models with specific weights. + You should call `apply_model` rather than calling directly the forward here for + optimal performance. + + Args: + models (list[nn.Module]): list of Demucs/HDemucs models. + weights (list[list[float]]): list of weights. If None, assumed to + be all ones, otherwise it should be a list of N list (N number of models), + each containing S floats (S number of sources). + segment (None or float): overrides the `segment` attribute of each model + (this is performed inplace, be careful is you reuse the models passed). + """ + super().__init__() + assert len(models) > 0 + first = models[0] + for other in models: + assert other.sources == first.sources + assert other.samplerate == first.samplerate + assert other.audio_channels == first.audio_channels + if segment is not None: + if not isinstance(other, HTDemucs) or segment <= other.segment: + other.segment = segment + + self.audio_channels = first.audio_channels + self.samplerate = first.samplerate + self.sources = first.sources + self.models = nn.ModuleList(models) + + if weights is None: + weights = [[1. for _ in first.sources] for _ in models] + else: + assert len(weights) == len(models) + for weight in weights: + assert len(weight) == len(first.sources) + self.weights = weights + + @property + def max_allowed_segment(self) -> float: + max_allowed_segment = float('inf') + for model in self.models: + if isinstance(model, HTDemucs): + max_allowed_segment = min(max_allowed_segment, float(model.segment)) + return max_allowed_segment + + def forward(self, x): + raise NotImplementedError("Call `apply_model` on this.") + + +class TensorChunk: + def __init__(self, tensor, offset=0, length=None): + total_length = tensor.shape[-1] + assert offset >= 0 + assert offset < total_length + + if length is None: + length = total_length - offset + else: + length = min(total_length - offset, length) + + if isinstance(tensor, TensorChunk): + self.tensor = tensor.tensor + self.offset = offset + tensor.offset + else: + self.tensor = tensor + self.offset = offset + self.length = length + self.device = tensor.device + + @property + def shape(self): + shape = list(self.tensor.shape) + shape[-1] = self.length + return shape + + def padded(self, target_length): + delta = target_length - self.length + total_length = self.tensor.shape[-1] + assert delta >= 0 + + start = self.offset - delta // 2 + end = start + target_length + + correct_start = max(0, start) + correct_end = min(total_length, end) + + pad_left = correct_start - start + pad_right = end - correct_end + + out = F.pad(self.tensor[..., correct_start:correct_end], (pad_left, pad_right)) + assert out.shape[-1] == target_length + return out + + +def tensor_chunk(tensor_or_chunk): + if isinstance(tensor_or_chunk, TensorChunk): + return tensor_or_chunk + else: + assert isinstance(tensor_or_chunk, th.Tensor) + return TensorChunk(tensor_or_chunk) + + +def _replace_dict(_dict: tp.Optional[dict], *subs: tp.Tuple[tp.Hashable, tp.Any]) -> dict: + if _dict is None: + _dict = {} + else: + _dict = copy.copy(_dict) + for key, value in subs: + _dict[key] = value + return _dict + + +def apply_model(model: tp.Union[BagOfModels, Model], + mix: tp.Union[th.Tensor, TensorChunk], + shifts: int = 1, split: bool = True, + overlap: float = 0.25, transition_power: float = 1., + progress: bool = False, device=None, + num_workers: int = 0, segment: tp.Optional[float] = None, + pool=None, lock=None, + callback: tp.Optional[tp.Callable[[dict], None]] = None, + callback_arg: tp.Optional[dict] = None) -> th.Tensor: + """ + Apply model to a given mixture. + + Args: + shifts (int): if > 0, will shift in time `mix` by a random amount between 0 and 0.5 sec + and apply the oppositve shift to the output. This is repeated `shifts` time and + all predictions are averaged. This effectively makes the model time equivariant + and improves SDR by up to 0.2 points. + split (bool): if True, the input will be broken down in 8 seconds extracts + and predictions will be performed individually on each and concatenated. + Useful for model with large memory footprint like Tasnet. + progress (bool): if True, show a progress bar (requires split=True) + device (torch.device, str, or None): if provided, device on which to + execute the computation, otherwise `mix.device` is assumed. + When `device` is different from `mix.device`, only local computations will + be on `device`, while the entire tracks will be stored on `mix.device`. + num_workers (int): if non zero, device is 'cpu', how many threads to + use in parallel. + segment (float or None): override the model segment parameter. + """ + if device is None: + device = mix.device + else: + device = th.device(device) + if pool is None: + if num_workers > 0 and device.type == 'cpu': + pool = ThreadPoolExecutor(num_workers) + else: + pool = DummyPoolExecutor() + if lock is None: + lock = Lock() + callback_arg = _replace_dict( + callback_arg, *{"model_idx_in_bag": 0, "shift_idx": 0, "segment_offset": 0}.items() + ) + kwargs: tp.Dict[str, tp.Any] = { + 'shifts': shifts, + 'split': split, + 'overlap': overlap, + 'transition_power': transition_power, + 'progress': progress, + 'device': device, + 'pool': pool, + 'segment': segment, + 'lock': lock, + } + out: tp.Union[float, th.Tensor] + res: tp.Union[float, th.Tensor] + if isinstance(model, BagOfModels): + # Special treatment for bag of model. + # We explicitely apply multiple times `apply_model` so that the random shifts + # are different for each model. + estimates: tp.Union[float, th.Tensor] = 0. + totals = [0.] * len(model.sources) + callback_arg["models"] = len(model.models) + for sub_model, model_weights in zip(model.models, model.weights): + kwargs["callback"] = (( + lambda d, i=callback_arg["model_idx_in_bag"]: callback( + _replace_dict(d, ("model_idx_in_bag", i))) if callback else None) + ) + original_model_device = next(iter(sub_model.parameters())).device + sub_model.to(device) + + res = apply_model(sub_model, mix, **kwargs, callback_arg=callback_arg) + out = res + sub_model.to(original_model_device) + for k, inst_weight in enumerate(model_weights): + out[:, k, :, :] *= inst_weight + totals[k] += inst_weight + estimates += out + del out + callback_arg["model_idx_in_bag"] += 1 + + assert isinstance(estimates, th.Tensor) + for k in range(estimates.shape[1]): + estimates[:, k, :, :] /= totals[k] + return estimates + + if "models" not in callback_arg: + callback_arg["models"] = 1 + model.to(device) + model.eval() + assert transition_power >= 1, "transition_power < 1 leads to weird behavior." + batch, channels, length = mix.shape + if shifts: + kwargs['shifts'] = 0 + max_shift = int(0.5 * model.samplerate) + mix = tensor_chunk(mix) + assert isinstance(mix, TensorChunk) + padded_mix = mix.padded(length + 2 * max_shift) + out = 0. + for shift_idx in range(shifts): + offset = random.randint(0, max_shift) + shifted = TensorChunk(padded_mix, offset, length + max_shift - offset) + kwargs["callback"] = ( + (lambda d, i=shift_idx: callback(_replace_dict(d, ("shift_idx", i))) + if callback else None) + ) + res = apply_model(model, shifted, **kwargs, callback_arg=callback_arg) + shifted_out = res + out += shifted_out[..., max_shift - offset:] + out /= shifts + assert isinstance(out, th.Tensor) + return out + elif split: + kwargs['split'] = False + out = th.zeros(batch, len(model.sources), channels, length, device=mix.device) + sum_weight = th.zeros(length, device=mix.device) + if segment is None: + segment = model.segment + assert segment is not None and segment > 0. + segment_length: int = int(model.samplerate * segment) + stride = int((1 - overlap) * segment_length) + offsets = range(0, length, stride) + scale = float(format(stride / model.samplerate, ".2f")) + # We start from a triangle shaped weight, with maximal weight in the middle + # of the segment. Then we normalize and take to the power `transition_power`. + # Large values of transition power will lead to sharper transitions. + weight = th.cat([th.arange(1, segment_length // 2 + 1, device=device), + th.arange(segment_length - segment_length // 2, 0, -1, device=device)]) + assert len(weight) == segment_length + # If the overlap < 50%, this will translate to linear transition when + # transition_power is 1. + weight = (weight / weight.max())**transition_power + futures = [] + for offset in offsets: + chunk = TensorChunk(mix, offset, segment_length) + future = pool.submit(apply_model, model, chunk, **kwargs, callback_arg=callback_arg, + callback=(lambda d, i=offset: + callback(_replace_dict(d, ("segment_offset", i))) + if callback else None)) + futures.append((future, offset)) + offset += segment_length + if progress: + futures = tqdm.tqdm(futures, unit_scale=scale, ncols=120, unit='seconds') + for future, offset in futures: + try: + chunk_out = future.result() # type: th.Tensor + except Exception: + pool.shutdown(wait=True, cancel_futures=True) + raise + chunk_length = chunk_out.shape[-1] + out[..., offset:offset + segment_length] += ( + weight[:chunk_length] * chunk_out).to(mix.device) + sum_weight[offset:offset + segment_length] += weight[:chunk_length].to(mix.device) + assert sum_weight.min() > 0 + out /= sum_weight + assert isinstance(out, th.Tensor) + return out + else: + valid_length: int + if isinstance(model, HTDemucs) and segment is not None: + valid_length = int(segment * model.samplerate) + elif hasattr(model, 'valid_length'): + valid_length = model.valid_length(length) # type: ignore + else: + valid_length = length + mix = tensor_chunk(mix) + assert isinstance(mix, TensorChunk) + padded_mix = mix.padded(valid_length).to(device) + with lock: + if callback is not None: + callback(_replace_dict(callback_arg, ("state", "start"))) # type: ignore + with th.no_grad(): + out = model(padded_mix) + with lock: + if callback is not None: + callback(_replace_dict(callback_arg, ("state", "end"))) # type: ignore + assert isinstance(out, th.Tensor) + return center_trim(out, length) diff --git a/demucs/demucs/audio.py b/demucs/demucs/audio.py new file mode 100644 index 00000000..600bd55b --- /dev/null +++ b/demucs/demucs/audio.py @@ -0,0 +1,266 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +import json +import subprocess as sp +from pathlib import Path + +import lameenc +import julius +import numpy as np +from . import audio_legacy +import torch +import torchaudio as ta +import typing as tp + +from .utils import temp_filenames + + +def _read_info(path): + stdout_data = sp.check_output([ + 'ffprobe', "-loglevel", "panic", + str(path), '-print_format', 'json', '-show_format', '-show_streams' + ]) + return json.loads(stdout_data.decode('utf-8')) + + +class AudioFile: + """ + Allows to read audio from any format supported by ffmpeg, as well as resampling or + converting to mono on the fly. See :method:`read` for more details. + """ + def __init__(self, path: Path): + self.path = Path(path) + self._info = None + + def __repr__(self): + features = [("path", self.path)] + features.append(("samplerate", self.samplerate())) + features.append(("channels", self.channels())) + features.append(("streams", len(self))) + features_str = ", ".join(f"{name}={value}" for name, value in features) + return f"AudioFile({features_str})" + + @property + def info(self): + if self._info is None: + self._info = _read_info(self.path) + return self._info + + @property + def duration(self): + return float(self.info['format']['duration']) + + @property + def _audio_streams(self): + return [ + index for index, stream in enumerate(self.info["streams"]) + if stream["codec_type"] == "audio" + ] + + def __len__(self): + return len(self._audio_streams) + + def channels(self, stream=0): + return int(self.info['streams'][self._audio_streams[stream]]['channels']) + + def samplerate(self, stream=0): + return int(self.info['streams'][self._audio_streams[stream]]['sample_rate']) + + def read(self, + seek_time=None, + duration=None, + streams=slice(None), + samplerate=None, + channels=None): + """ + Slightly more efficient implementation than stempeg, + in particular, this will extract all stems at once + rather than having to loop over one file multiple times + for each stream. + + Args: + seek_time (float): seek time in seconds or None if no seeking is needed. + duration (float): duration in seconds to extract or None to extract until the end. + streams (slice, int or list): streams to extract, can be a single int, a list or + a slice. If it is a slice or list, the output will be of size [S, C, T] + with S the number of streams, C the number of channels and T the number of samples. + If it is an int, the output will be [C, T]. + samplerate (int): if provided, will resample on the fly. If None, no resampling will + be done. Original sampling rate can be obtained with :method:`samplerate`. + channels (int): if 1, will convert to mono. We do not rely on ffmpeg for that + as ffmpeg automatically scale by +3dB to conserve volume when playing on speakers. + See https://sound.stackexchange.com/a/42710. + Our definition of mono is simply the average of the two channels. Any other + value will be ignored. + """ + streams = np.array(range(len(self)))[streams] + single = not isinstance(streams, np.ndarray) + if single: + streams = [streams] + + if duration is None: + target_size = None + query_duration = None + else: + target_size = int((samplerate or self.samplerate()) * duration) + query_duration = float((target_size + 1) / (samplerate or self.samplerate())) + + with temp_filenames(len(streams)) as filenames: + command = ['ffmpeg', '-y'] + command += ['-loglevel', 'panic'] + if seek_time: + command += ['-ss', str(seek_time)] + command += ['-i', str(self.path)] + for stream, filename in zip(streams, filenames): + command += ['-map', f'0:{self._audio_streams[stream]}'] + if query_duration is not None: + command += ['-t', str(query_duration)] + command += ['-threads', '1'] + command += ['-f', 'f32le'] + if samplerate is not None: + command += ['-ar', str(samplerate)] + command += [filename] + + sp.run(command, check=True) + wavs = [] + for filename in filenames: + wav = np.fromfile(filename, dtype=np.float32) + wav = torch.from_numpy(wav) + wav = wav.view(-1, self.channels()).t() + if channels is not None: + wav = convert_audio_channels(wav, channels) + if target_size is not None: + wav = wav[..., :target_size] + wavs.append(wav) + wav = torch.stack(wavs, dim=0) + if single: + wav = wav[0] + return wav + + +def convert_audio_channels(wav, channels=2): + """Convert audio to the given number of channels.""" + *shape, src_channels, length = wav.shape + if src_channels == channels: + pass + elif channels == 1: + # Case 1: + # The caller asked 1-channel audio, but the stream have multiple + # channels, downmix all channels. + wav = wav.mean(dim=-2, keepdim=True) + elif src_channels == 1: + # Case 2: + # The caller asked for multiple channels, but the input file have + # one single channel, replicate the audio over all channels. + wav = wav.expand(*shape, channels, length) + elif src_channels >= channels: + # Case 3: + # The caller asked for multiple channels, and the input file have + # more channels than requested. In that case return the first channels. + wav = wav[..., :channels, :] + else: + # Case 4: What is a reasonable choice here? + raise ValueError('The audio file has less channels than requested but is not mono.') + return wav + + +def convert_audio(wav, from_samplerate, to_samplerate, channels) -> torch.Tensor: + """Convert audio from a given samplerate to a target one and target number of channels.""" + wav = convert_audio_channels(wav, channels) + return julius.resample_frac(wav, from_samplerate, to_samplerate) + + +def i16_pcm(wav): + """Convert audio to 16 bits integer PCM format.""" + if wav.dtype.is_floating_point: + return (wav.clamp_(-1, 1) * (2**15 - 1)).short() + else: + return wav + + +def f32_pcm(wav): + """Convert audio to float 32 bits PCM format.""" + if wav.dtype.is_floating_point: + return wav + else: + return wav.float() / (2**15 - 1) + + +def as_dtype_pcm(wav, dtype): + """Convert audio to either f32 pcm or i16 pcm depending on the given dtype.""" + if wav.dtype.is_floating_point: + return f32_pcm(wav) + else: + return i16_pcm(wav) + + +def encode_mp3(wav, path, samplerate=44100, bitrate=320, quality=2, verbose=False): + """Save given audio as mp3. This should work on all OSes.""" + C, T = wav.shape + wav = i16_pcm(wav) + encoder = lameenc.Encoder() + encoder.set_bit_rate(bitrate) + encoder.set_in_sample_rate(samplerate) + encoder.set_channels(C) + encoder.set_quality(quality) # 2-highest, 7-fastest + if not verbose: + encoder.silence() + wav = wav.data.cpu() + wav = wav.transpose(0, 1).numpy() + mp3_data = encoder.encode(wav.tobytes()) + mp3_data += encoder.flush() + with open(path, "wb") as f: + f.write(mp3_data) + + +def prevent_clip(wav, mode='rescale'): + """ + different strategies for avoiding raw clipping. + """ + if mode is None or mode == 'none': + return wav + assert wav.dtype.is_floating_point, "too late for clipping" + if mode == 'rescale': + wav = wav / max(1.01 * wav.abs().max(), 1) + elif mode == 'clamp': + wav = wav.clamp(-0.99, 0.99) + elif mode == 'tanh': + wav = torch.tanh(wav) + else: + raise ValueError(f"Invalid mode {mode}") + return wav + + +def save_audio(wav: torch.Tensor, + path: tp.Union[str, Path], + samplerate: int, + bitrate: int = 320, + clip: tp.Literal["rescale", "clamp", "tanh", "none"] = 'rescale', + bits_per_sample: tp.Literal[16, 24, 32] = 16, + as_float: bool = False, + preset: tp.Literal[2, 3, 4, 5, 6, 7] = 2): + """Save audio file, automatically preventing clipping if necessary + based on the given `clip` strategy. If the path ends in `.mp3`, this + will save as mp3 with the given `bitrate`. Use `preset` to set mp3 quality: + 2 for highest quality, 7 for fastest speed + """ + wav = prevent_clip(wav, mode=clip) + path = Path(path) + suffix = path.suffix.lower() + if suffix == ".mp3": + encode_mp3(wav, path, samplerate, bitrate, preset, verbose=True) + elif suffix == ".wav": + if as_float: + bits_per_sample = 32 + encoding = 'PCM_F' + else: + encoding = 'PCM_S' + ta.save(str(path), wav, sample_rate=samplerate, + encoding=encoding, bits_per_sample=bits_per_sample) + elif suffix == ".flac": + ta.save(str(path), wav, sample_rate=samplerate, bits_per_sample=bits_per_sample) + else: + raise ValueError(f"Invalid suffix for path: {suffix}") diff --git a/demucs/demucs/audio_legacy.py b/demucs/demucs/audio_legacy.py new file mode 100644 index 00000000..ab6bdce4 --- /dev/null +++ b/demucs/demucs/audio_legacy.py @@ -0,0 +1,17 @@ +# This file is to extend support for torchaudio 2.1 + +import importlib +import os +import sys +import warnings + +if not "torchaudio" in sys.modules: + os.environ["TORCHAUDIO_USE_BACKEND_DISPATCHER"] = "0" +elif os.getenv("TORCHAUDIO_USE_BACKEND_DISPATCHER", default="1") == "1": + if sys.modules["torchaudio"].__version__ >= "2.1": + os.environ["TORCHAUDIO_USE_BACKEND_DISPATCHER"] = "0" + importlib.reload(sys.modules["torchaudio"]) + warnings.warn( + "TORCHAUDIO_USE_BACKEND_DISPATCHER is set to 0 and torchaudio is reloaded.", + ImportWarning, + ) diff --git a/demucs/demucs/augment.py b/demucs/demucs/augment.py new file mode 100644 index 00000000..6dab7f12 --- /dev/null +++ b/demucs/demucs/augment.py @@ -0,0 +1,111 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +"""Data augmentations. +""" + +import random +import torch as th +from torch import nn + + +class Shift(nn.Module): + """ + Randomly shift audio in time by up to `shift` samples. + """ + def __init__(self, shift=8192, same=False): + super().__init__() + self.shift = shift + self.same = same + + def forward(self, wav): + batch, sources, channels, time = wav.size() + length = time - self.shift + if self.shift > 0: + if not self.training: + wav = wav[..., :length] + else: + srcs = 1 if self.same else sources + offsets = th.randint(self.shift, [batch, srcs, 1, 1], device=wav.device) + offsets = offsets.expand(-1, sources, channels, -1) + indexes = th.arange(length, device=wav.device) + wav = wav.gather(3, indexes + offsets) + return wav + + +class FlipChannels(nn.Module): + """ + Flip left-right channels. + """ + def forward(self, wav): + batch, sources, channels, time = wav.size() + if self.training and wav.size(2) == 2: + left = th.randint(2, (batch, sources, 1, 1), device=wav.device) + left = left.expand(-1, -1, -1, time) + right = 1 - left + wav = th.cat([wav.gather(2, left), wav.gather(2, right)], dim=2) + return wav + + +class FlipSign(nn.Module): + """ + Random sign flip. + """ + def forward(self, wav): + batch, sources, channels, time = wav.size() + if self.training: + signs = th.randint(2, (batch, sources, 1, 1), device=wav.device, dtype=th.float32) + wav = wav * (2 * signs - 1) + return wav + + +class Remix(nn.Module): + """ + Shuffle sources to make new mixes. + """ + def __init__(self, proba=1, group_size=4): + """ + Shuffle sources within one batch. + Each batch is divided into groups of size `group_size` and shuffling is done within + each group separatly. This allow to keep the same probability distribution no matter + the number of GPUs. Without this grouping, using more GPUs would lead to a higher + probability of keeping two sources from the same track together which can impact + performance. + """ + super().__init__() + self.proba = proba + self.group_size = group_size + + def forward(self, wav): + batch, streams, channels, time = wav.size() + device = wav.device + + if self.training and random.random() < self.proba: + group_size = self.group_size or batch + if batch % group_size != 0: + raise ValueError(f"Batch size {batch} must be divisible by group size {group_size}") + groups = batch // group_size + wav = wav.view(groups, group_size, streams, channels, time) + permutations = th.argsort(th.rand(groups, group_size, streams, 1, 1, device=device), + dim=1) + wav = wav.gather(1, permutations.expand(-1, -1, -1, channels, time)) + wav = wav.view(batch, streams, channels, time) + return wav + + +class Scale(nn.Module): + def __init__(self, proba=1., min=0.25, max=1.25): + super().__init__() + self.proba = proba + self.min = min + self.max = max + + def forward(self, wav): + batch, streams, channels, time = wav.size() + device = wav.device + if self.training and random.random() < self.proba: + scales = th.empty(batch, streams, 1, 1, device=device).uniform_(self.min, self.max) + wav *= scales + return wav diff --git a/demucs/demucs/demucs.py b/demucs/demucs/demucs.py new file mode 100644 index 00000000..f6a4305c --- /dev/null +++ b/demucs/demucs/demucs.py @@ -0,0 +1,447 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import math +import typing as tp + +import julius +import torch +from torch import nn +from torch.nn import functional as F + +from .states import capture_init +from .utils import center_trim, unfold +from .transformer import LayerScale + + +class BLSTM(nn.Module): + """ + BiLSTM with same hidden units as input dim. + If `max_steps` is not None, input will be splitting in overlapping + chunks and the LSTM applied separately on each chunk. + """ + def __init__(self, dim, layers=1, max_steps=None, skip=False): + super().__init__() + assert max_steps is None or max_steps % 4 == 0 + self.max_steps = max_steps + self.lstm = nn.LSTM(bidirectional=True, num_layers=layers, hidden_size=dim, input_size=dim) + self.linear = nn.Linear(2 * dim, dim) + self.skip = skip + + def forward(self, x): + B, C, T = x.shape + y = x + framed = False + if self.max_steps is not None and T > self.max_steps: + width = self.max_steps + stride = width // 2 + frames = unfold(x, width, stride) + nframes = frames.shape[2] + framed = True + x = frames.permute(0, 2, 1, 3).reshape(-1, C, width) + + x = x.permute(2, 0, 1) + + x = self.lstm(x)[0] + x = self.linear(x) + x = x.permute(1, 2, 0) + if framed: + out = [] + frames = x.reshape(B, -1, C, width) + limit = stride // 2 + for k in range(nframes): + if k == 0: + out.append(frames[:, k, :, :-limit]) + elif k == nframes - 1: + out.append(frames[:, k, :, limit:]) + else: + out.append(frames[:, k, :, limit:-limit]) + out = torch.cat(out, -1) + out = out[..., :T] + x = out + if self.skip: + x = x + y + return x + + +def rescale_conv(conv, reference): + """Rescale initial weight scale. It is unclear why it helps but it certainly does. + """ + std = conv.weight.std().detach() + scale = (std / reference)**0.5 + conv.weight.data /= scale + if conv.bias is not None: + conv.bias.data /= scale + + +def rescale_module(module, reference): + for sub in module.modules(): + if isinstance(sub, (nn.Conv1d, nn.ConvTranspose1d, nn.Conv2d, nn.ConvTranspose2d)): + rescale_conv(sub, reference) + + +class DConv(nn.Module): + """ + New residual branches in each encoder layer. + This alternates dilated convolutions, potentially with LSTMs and attention. + Also before entering each residual branch, dimension is projected on a smaller subspace, + e.g. of dim `channels // compress`. + """ + def __init__(self, channels: int, compress: float = 4, depth: int = 2, init: float = 1e-4, + norm=True, attn=False, heads=4, ndecay=4, lstm=False, gelu=True, + kernel=3, dilate=True): + """ + Args: + channels: input/output channels for residual branch. + compress: amount of channel compression inside the branch. + depth: number of layers in the residual branch. Each layer has its own + projection, and potentially LSTM and attention. + init: initial scale for LayerNorm. + norm: use GroupNorm. + attn: use LocalAttention. + heads: number of heads for the LocalAttention. + ndecay: number of decay controls in the LocalAttention. + lstm: use LSTM. + gelu: Use GELU activation. + kernel: kernel size for the (dilated) convolutions. + dilate: if true, use dilation, increasing with the depth. + """ + + super().__init__() + assert kernel % 2 == 1 + self.channels = channels + self.compress = compress + self.depth = abs(depth) + dilate = depth > 0 + + norm_fn: tp.Callable[[int], nn.Module] + norm_fn = lambda d: nn.Identity() # noqa + if norm: + norm_fn = lambda d: nn.GroupNorm(1, d) # noqa + + hidden = int(channels / compress) + + act: tp.Type[nn.Module] + if gelu: + act = nn.GELU + else: + act = nn.ReLU + + self.layers = nn.ModuleList([]) + for d in range(self.depth): + dilation = 2 ** d if dilate else 1 + padding = dilation * (kernel // 2) + mods = [ + nn.Conv1d(channels, hidden, kernel, dilation=dilation, padding=padding), + norm_fn(hidden), act(), + nn.Conv1d(hidden, 2 * channels, 1), + norm_fn(2 * channels), nn.GLU(1), + LayerScale(channels, init), + ] + if attn: + mods.insert(3, LocalState(hidden, heads=heads, ndecay=ndecay)) + if lstm: + mods.insert(3, BLSTM(hidden, layers=2, max_steps=200, skip=True)) + layer = nn.Sequential(*mods) + self.layers.append(layer) + + def forward(self, x): + for layer in self.layers: + x = x + layer(x) + return x + + +class LocalState(nn.Module): + """Local state allows to have attention based only on data (no positional embedding), + but while setting a constraint on the time window (e.g. decaying penalty term). + + Also a failed experiments with trying to provide some frequency based attention. + """ + def __init__(self, channels: int, heads: int = 4, nfreqs: int = 0, ndecay: int = 4): + super().__init__() + assert channels % heads == 0, (channels, heads) + self.heads = heads + self.nfreqs = nfreqs + self.ndecay = ndecay + self.content = nn.Conv1d(channels, channels, 1) + self.query = nn.Conv1d(channels, channels, 1) + self.key = nn.Conv1d(channels, channels, 1) + if nfreqs: + self.query_freqs = nn.Conv1d(channels, heads * nfreqs, 1) + if ndecay: + self.query_decay = nn.Conv1d(channels, heads * ndecay, 1) + # Initialize decay close to zero (there is a sigmoid), for maximum initial window. + self.query_decay.weight.data *= 0.01 + assert self.query_decay.bias is not None # stupid type checker + self.query_decay.bias.data[:] = -2 + self.proj = nn.Conv1d(channels + heads * nfreqs, channels, 1) + + def forward(self, x): + B, C, T = x.shape + heads = self.heads + indexes = torch.arange(T, device=x.device, dtype=x.dtype) + # left index are keys, right index are queries + delta = indexes[:, None] - indexes[None, :] + + queries = self.query(x).view(B, heads, -1, T) + keys = self.key(x).view(B, heads, -1, T) + # t are keys, s are queries + dots = torch.einsum("bhct,bhcs->bhts", keys, queries) + dots /= keys.shape[2]**0.5 + if self.nfreqs: + periods = torch.arange(1, self.nfreqs + 1, device=x.device, dtype=x.dtype) + freq_kernel = torch.cos(2 * math.pi * delta / periods.view(-1, 1, 1)) + freq_q = self.query_freqs(x).view(B, heads, -1, T) / self.nfreqs ** 0.5 + dots += torch.einsum("fts,bhfs->bhts", freq_kernel, freq_q) + if self.ndecay: + decays = torch.arange(1, self.ndecay + 1, device=x.device, dtype=x.dtype) + decay_q = self.query_decay(x).view(B, heads, -1, T) + decay_q = torch.sigmoid(decay_q) / 2 + decay_kernel = - decays.view(-1, 1, 1) * delta.abs() / self.ndecay**0.5 + dots += torch.einsum("fts,bhfs->bhts", decay_kernel, decay_q) + + # Kill self reference. + dots.masked_fill_(torch.eye(T, device=dots.device, dtype=torch.bool), -100) + weights = torch.softmax(dots, dim=2) + + content = self.content(x).view(B, heads, -1, T) + result = torch.einsum("bhts,bhct->bhcs", weights, content) + if self.nfreqs: + time_sig = torch.einsum("bhts,fts->bhfs", weights, freq_kernel) + result = torch.cat([result, time_sig], 2) + result = result.reshape(B, -1, T) + return x + self.proj(result) + + +class Demucs(nn.Module): + @capture_init + def __init__(self, + sources, + # Channels + audio_channels=2, + channels=64, + growth=2., + # Main structure + depth=6, + rewrite=True, + lstm_layers=0, + # Convolutions + kernel_size=8, + stride=4, + context=1, + # Activations + gelu=True, + glu=True, + # Normalization + norm_starts=4, + norm_groups=4, + # DConv residual branch + dconv_mode=1, + dconv_depth=2, + dconv_comp=4, + dconv_attn=4, + dconv_lstm=4, + dconv_init=1e-4, + # Pre/post processing + normalize=True, + resample=True, + # Weight init + rescale=0.1, + # Metadata + samplerate=44100, + segment=4 * 10): + """ + Args: + sources (list[str]): list of source names + audio_channels (int): stereo or mono + channels (int): first convolution channels + depth (int): number of encoder/decoder layers + growth (float): multiply (resp divide) number of channels by that + for each layer of the encoder (resp decoder) + depth (int): number of layers in the encoder and in the decoder. + rewrite (bool): add 1x1 convolution to each layer. + lstm_layers (int): number of lstm layers, 0 = no lstm. Deactivated + by default, as this is now replaced by the smaller and faster small LSTMs + in the DConv branches. + kernel_size (int): kernel size for convolutions + stride (int): stride for convolutions + context (int): kernel size of the convolution in the + decoder before the transposed convolution. If > 1, + will provide some context from neighboring time steps. + gelu: use GELU activation function. + glu (bool): use glu instead of ReLU for the 1x1 rewrite conv. + norm_starts: layer at which group norm starts being used. + decoder layers are numbered in reverse order. + norm_groups: number of groups for group norm. + dconv_mode: if 1: dconv in encoder only, 2: decoder only, 3: both. + dconv_depth: depth of residual DConv branch. + dconv_comp: compression of DConv branch. + dconv_attn: adds attention layers in DConv branch starting at this layer. + dconv_lstm: adds a LSTM layer in DConv branch starting at this layer. + dconv_init: initial scale for the DConv branch LayerScale. + normalize (bool): normalizes the input audio on the fly, and scales back + the output by the same amount. + resample (bool): upsample x2 the input and downsample /2 the output. + rescale (float): rescale initial weights of convolutions + to get their standard deviation closer to `rescale`. + samplerate (int): stored as meta information for easing + future evaluations of the model. + segment (float): duration of the chunks of audio to ideally evaluate the model on. + This is used by `demucs.apply.apply_model`. + """ + + super().__init__() + self.audio_channels = audio_channels + self.sources = sources + self.kernel_size = kernel_size + self.context = context + self.stride = stride + self.depth = depth + self.resample = resample + self.channels = channels + self.normalize = normalize + self.samplerate = samplerate + self.segment = segment + self.encoder = nn.ModuleList() + self.decoder = nn.ModuleList() + self.skip_scales = nn.ModuleList() + + if glu: + activation = nn.GLU(dim=1) + ch_scale = 2 + else: + activation = nn.ReLU() + ch_scale = 1 + if gelu: + act2 = nn.GELU + else: + act2 = nn.ReLU + + in_channels = audio_channels + padding = 0 + for index in range(depth): + norm_fn = lambda d: nn.Identity() # noqa + if index >= norm_starts: + norm_fn = lambda d: nn.GroupNorm(norm_groups, d) # noqa + + encode = [] + encode += [ + nn.Conv1d(in_channels, channels, kernel_size, stride), + norm_fn(channels), + act2(), + ] + attn = index >= dconv_attn + lstm = index >= dconv_lstm + if dconv_mode & 1: + encode += [DConv(channels, depth=dconv_depth, init=dconv_init, + compress=dconv_comp, attn=attn, lstm=lstm)] + if rewrite: + encode += [ + nn.Conv1d(channels, ch_scale * channels, 1), + norm_fn(ch_scale * channels), activation] + self.encoder.append(nn.Sequential(*encode)) + + decode = [] + if index > 0: + out_channels = in_channels + else: + out_channels = len(self.sources) * audio_channels + if rewrite: + decode += [ + nn.Conv1d(channels, ch_scale * channels, 2 * context + 1, padding=context), + norm_fn(ch_scale * channels), activation] + if dconv_mode & 2: + decode += [DConv(channels, depth=dconv_depth, init=dconv_init, + compress=dconv_comp, attn=attn, lstm=lstm)] + decode += [nn.ConvTranspose1d(channels, out_channels, + kernel_size, stride, padding=padding)] + if index > 0: + decode += [norm_fn(out_channels), act2()] + self.decoder.insert(0, nn.Sequential(*decode)) + in_channels = channels + channels = int(growth * channels) + + channels = in_channels + if lstm_layers: + self.lstm = BLSTM(channels, lstm_layers) + else: + self.lstm = None + + if rescale: + rescale_module(self, reference=rescale) + + def valid_length(self, length): + """ + Return the nearest valid length to use with the model so that + there is no time steps left over in a convolution, e.g. for all + layers, size of the input - kernel_size % stride = 0. + + Note that input are automatically padded if necessary to ensure that the output + has the same length as the input. + """ + if self.resample: + length *= 2 + + for _ in range(self.depth): + length = math.ceil((length - self.kernel_size) / self.stride) + 1 + length = max(1, length) + + for idx in range(self.depth): + length = (length - 1) * self.stride + self.kernel_size + + if self.resample: + length = math.ceil(length / 2) + return int(length) + + def forward(self, mix): + x = mix + length = x.shape[-1] + + if self.normalize: + mono = mix.mean(dim=1, keepdim=True) + mean = mono.mean(dim=-1, keepdim=True) + std = mono.std(dim=-1, keepdim=True) + x = (x - mean) / (1e-5 + std) + else: + mean = 0 + std = 1 + + delta = self.valid_length(length) - length + x = F.pad(x, (delta // 2, delta - delta // 2)) + + if self.resample: + x = julius.resample_frac(x, 1, 2) + + saved = [] + for encode in self.encoder: + x = encode(x) + saved.append(x) + + if self.lstm: + x = self.lstm(x) + + for decode in self.decoder: + skip = saved.pop(-1) + skip = center_trim(skip, x) + x = decode(x + skip) + + if self.resample: + x = julius.resample_frac(x, 2, 1) + x = x * std + mean + x = center_trim(x, length) + x = x.view(x.size(0), len(self.sources), self.audio_channels, x.size(-1)) + return x + + def load_state_dict(self, state, strict=True): + # fix a mismatch with previous generation Demucs models. + for idx in range(self.depth): + for a in ['encoder', 'decoder']: + for b in ['bias', 'weight']: + new = f'{a}.{idx}.3.{b}' + old = f'{a}.{idx}.2.{b}' + if old in state and new not in state: + state[new] = state.pop(old) + super().load_state_dict(state, strict=strict) diff --git a/demucs/demucs/distrib.py b/demucs/demucs/distrib.py new file mode 100644 index 00000000..dc1576cb --- /dev/null +++ b/demucs/demucs/distrib.py @@ -0,0 +1,100 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +"""Distributed training utilities. +""" +import logging +import pickle + +import numpy as np +import torch +from torch.utils.data.distributed import DistributedSampler +from torch.utils.data import DataLoader, Subset +from torch.nn.parallel.distributed import DistributedDataParallel + +from dora import distrib as dora_distrib + +logger = logging.getLogger(__name__) +rank = 0 +world_size = 1 + + +def init(): + global rank, world_size + if not torch.distributed.is_initialized(): + dora_distrib.init() + rank = dora_distrib.rank() + world_size = dora_distrib.world_size() + + +def average(metrics, count=1.): + if isinstance(metrics, dict): + keys, values = zip(*sorted(metrics.items())) + values = average(values, count) + return dict(zip(keys, values)) + if world_size == 1: + return metrics + tensor = torch.tensor(list(metrics) + [1], device='cuda', dtype=torch.float32) + tensor *= count + torch.distributed.all_reduce(tensor, op=torch.distributed.ReduceOp.SUM) + return (tensor[:-1] / tensor[-1]).cpu().numpy().tolist() + + +def wrap(model): + if world_size == 1: + return model + else: + return DistributedDataParallel( + model, + # find_unused_parameters=True, + device_ids=[torch.cuda.current_device()], + output_device=torch.cuda.current_device()) + + +def barrier(): + if world_size > 1: + torch.distributed.barrier() + + +def share(obj=None, src=0): + if world_size == 1: + return obj + size = torch.empty(1, device='cuda', dtype=torch.long) + if rank == src: + dump = pickle.dumps(obj) + size[0] = len(dump) + torch.distributed.broadcast(size, src=src) + # size variable is now set to the length of pickled obj in all processes + + if rank == src: + buffer = torch.from_numpy(np.frombuffer(dump, dtype=np.uint8).copy()).cuda() + else: + buffer = torch.empty(size[0].item(), device='cuda', dtype=torch.uint8) + torch.distributed.broadcast(buffer, src=src) + # buffer variable is now set to pickled obj in all processes + + if rank != src: + obj = pickle.loads(buffer.cpu().numpy().tobytes()) + logger.debug(f"Shared object of size {len(buffer)}") + return obj + + +def loader(dataset, *args, shuffle=False, klass=DataLoader, **kwargs): + """ + Create a dataloader properly in case of distributed training. + If a gradient is going to be computed you must set `shuffle=True`. + """ + if world_size == 1: + return klass(dataset, *args, shuffle=shuffle, **kwargs) + + if shuffle: + # train means we will compute backward, we use DistributedSampler + sampler = DistributedSampler(dataset) + # We ignore shuffle, DistributedSampler already shuffles + return klass(dataset, *args, **kwargs, sampler=sampler) + else: + # We make a manual shard, as DistributedSampler otherwise replicate some examples + dataset = Subset(dataset, list(range(rank, len(dataset), world_size))) + return klass(dataset, *args, shuffle=shuffle, **kwargs) diff --git a/demucs/demucs/ema.py b/demucs/demucs/ema.py new file mode 100644 index 00000000..101bee02 --- /dev/null +++ b/demucs/demucs/ema.py @@ -0,0 +1,66 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +# Inspired from https://github.com/rwightman/pytorch-image-models +from contextlib import contextmanager + +import torch + +from .states import swap_state + + +class ModelEMA: + """ + Perform EMA on a model. You can switch to the EMA weights temporarily + with the `swap` method. + + ema = ModelEMA(model) + with ema.swap(): + # compute valid metrics with averaged model. + """ + def __init__(self, model, decay=0.9999, unbias=True, device='cpu'): + self.decay = decay + self.model = model + self.state = {} + self.count = 0 + self.device = device + self.unbias = unbias + + self._init() + + def _init(self): + for key, val in self.model.state_dict().items(): + if val.dtype != torch.float32: + continue + device = self.device or val.device + if key not in self.state: + self.state[key] = val.detach().to(device, copy=True) + + def update(self): + if self.unbias: + self.count = self.count * self.decay + 1 + w = 1 / self.count + else: + w = 1 - self.decay + for key, val in self.model.state_dict().items(): + if val.dtype != torch.float32: + continue + device = self.device or val.device + self.state[key].mul_(1 - w) + self.state[key].add_(val.detach().to(device), alpha=w) + + @contextmanager + def swap(self): + with swap_state(self.model, self.state): + yield + + def state_dict(self): + return {'state': self.state, 'count': self.count} + + def load_state_dict(self, state): + self.count = state['count'] + for k, v in state['state'].items(): + self.state[k].copy_(v) diff --git a/demucs/demucs/evaluate.py b/demucs/demucs/evaluate.py new file mode 100755 index 00000000..fa2ff453 --- /dev/null +++ b/demucs/demucs/evaluate.py @@ -0,0 +1,174 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +"""Test time evaluation, either using the original SDR from [Vincent et al. 2006] +or the newest SDR definition from the MDX 2021 competition (this one will +be reported as `nsdr` for `new sdr`). +""" + +from concurrent import futures +import logging + +from dora.log import LogProgress +import numpy as np +import musdb +import museval +import torch as th + +from .apply import apply_model +from .audio import convert_audio, save_audio +from . import distrib +from .utils import DummyPoolExecutor + + +logger = logging.getLogger(__name__) + + +def new_sdr(references, estimates): + """ + Compute the SDR according to the MDX challenge definition. + Adapted from AIcrowd/music-demixing-challenge-starter-kit (MIT license) + """ + assert references.dim() == 4 + assert estimates.dim() == 4 + delta = 1e-7 # avoid numerical errors + num = th.sum(th.square(references), dim=(2, 3)) + den = th.sum(th.square(references - estimates), dim=(2, 3)) + num += delta + den += delta + scores = 10 * th.log10(num / den) + return scores + + +def eval_track(references, estimates, win, hop, compute_sdr=True): + references = references.transpose(1, 2).double() + estimates = estimates.transpose(1, 2).double() + + new_scores = new_sdr(references.cpu()[None], estimates.cpu()[None])[0] + + if not compute_sdr: + return None, new_scores + else: + references = references.numpy() + estimates = estimates.numpy() + scores = museval.metrics.bss_eval( + references, estimates, + compute_permutation=False, + window=win, + hop=hop, + framewise_filters=False, + bsseval_sources_version=False)[:-1] + return scores, new_scores + + +def evaluate(solver, compute_sdr=False): + """ + Evaluate model using museval. + compute_sdr=False means using only the MDX definition of the SDR, which + is much faster to evaluate. + """ + + args = solver.args + + output_dir = solver.folder / "results" + output_dir.mkdir(exist_ok=True, parents=True) + json_folder = solver.folder / "results/test" + json_folder.mkdir(exist_ok=True, parents=True) + + # we load tracks from the original musdb set + if args.test.nonhq is None: + test_set = musdb.DB(args.dset.musdb, subsets=["test"], is_wav=True) + else: + test_set = musdb.DB(args.test.nonhq, subsets=["test"], is_wav=False) + src_rate = args.dset.musdb_samplerate + + eval_device = 'cpu' + + model = solver.model + win = int(1. * model.samplerate) + hop = int(1. * model.samplerate) + + indexes = range(distrib.rank, len(test_set), distrib.world_size) + indexes = LogProgress(logger, indexes, updates=args.misc.num_prints, + name='Eval') + pendings = [] + + pool = futures.ProcessPoolExecutor if args.test.workers else DummyPoolExecutor + with pool(args.test.workers) as pool: + for index in indexes: + track = test_set.tracks[index] + + mix = th.from_numpy(track.audio).t().float() + if mix.dim() == 1: + mix = mix[None] + mix = mix.to(solver.device) + ref = mix.mean(dim=0) # mono mixture + mix = (mix - ref.mean()) / ref.std() + mix = convert_audio(mix, src_rate, model.samplerate, model.audio_channels) + estimates = apply_model(model, mix[None], + shifts=args.test.shifts, split=args.test.split, + overlap=args.test.overlap)[0] + estimates = estimates * ref.std() + ref.mean() + estimates = estimates.to(eval_device) + + references = th.stack( + [th.from_numpy(track.targets[name].audio).t() for name in model.sources]) + if references.dim() == 2: + references = references[:, None] + references = references.to(eval_device) + references = convert_audio(references, src_rate, + model.samplerate, model.audio_channels) + if args.test.save: + folder = solver.folder / "wav" / track.name + folder.mkdir(exist_ok=True, parents=True) + for name, estimate in zip(model.sources, estimates): + save_audio(estimate.cpu(), folder / (name + ".mp3"), model.samplerate) + + pendings.append((track.name, pool.submit( + eval_track, references, estimates, win=win, hop=hop, compute_sdr=compute_sdr))) + + pendings = LogProgress(logger, pendings, updates=args.misc.num_prints, + name='Eval (BSS)') + tracks = {} + for track_name, pending in pendings: + pending = pending.result() + scores, nsdrs = pending + tracks[track_name] = {} + for idx, target in enumerate(model.sources): + tracks[track_name][target] = {'nsdr': [float(nsdrs[idx])]} + if scores is not None: + (sdr, isr, sir, sar) = scores + for idx, target in enumerate(model.sources): + values = { + "SDR": sdr[idx].tolist(), + "SIR": sir[idx].tolist(), + "ISR": isr[idx].tolist(), + "SAR": sar[idx].tolist() + } + tracks[track_name][target].update(values) + + all_tracks = {} + for src in range(distrib.world_size): + all_tracks.update(distrib.share(tracks, src)) + + result = {} + metric_names = next(iter(all_tracks.values()))[model.sources[0]] + for metric_name in metric_names: + avg = 0 + avg_of_medians = 0 + for source in model.sources: + medians = [ + np.nanmedian(all_tracks[track][source][metric_name]) + for track in all_tracks.keys()] + mean = np.mean(medians) + median = np.median(medians) + result[metric_name.lower() + "_" + source] = mean + result[metric_name.lower() + "_med" + "_" + source] = median + avg += mean / len(model.sources) + avg_of_medians += median / len(model.sources) + result[metric_name.lower()] = avg + result[metric_name.lower() + "_med"] = avg_of_medians + return result diff --git a/demucs/demucs/grids/__init__.py b/demucs/demucs/grids/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/demucs/demucs/grids/_explorers.py b/demucs/demucs/grids/_explorers.py new file mode 100644 index 00000000..ec3a858d --- /dev/null +++ b/demucs/demucs/grids/_explorers.py @@ -0,0 +1,64 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +from dora import Explorer +import treetable as tt + + +class MyExplorer(Explorer): + test_metrics = ['nsdr', 'sdr_med'] + + def get_grid_metrics(self): + """Return the metrics that should be displayed in the tracking table. + """ + return [ + tt.group("train", [ + tt.leaf("epoch"), + tt.leaf("reco", ".3f"), + ], align=">"), + tt.group("valid", [ + tt.leaf("penalty", ".1f"), + tt.leaf("ms", ".1f"), + tt.leaf("reco", ".2%"), + tt.leaf("breco", ".2%"), + tt.leaf("b_nsdr", ".2f"), + # tt.leaf("b_nsdr_drums", ".2f"), + # tt.leaf("b_nsdr_bass", ".2f"), + # tt.leaf("b_nsdr_other", ".2f"), + # tt.leaf("b_nsdr_vocals", ".2f"), + ], align=">"), + tt.group("test", [ + tt.leaf(name, ".2f") + for name in self.test_metrics + ], align=">") + ] + + def process_history(self, history): + train = { + 'epoch': len(history), + } + valid = {} + test = {} + best_v_main = float('inf') + breco = float('inf') + for metrics in history: + train.update(metrics['train']) + valid.update(metrics['valid']) + if 'main' in metrics['valid']: + best_v_main = min(best_v_main, metrics['valid']['main']['loss']) + valid['bmain'] = best_v_main + valid['breco'] = min(breco, metrics['valid']['reco']) + breco = valid['breco'] + if (metrics['valid']['loss'] == metrics['valid']['best'] or + metrics['valid'].get('nsdr') == metrics['valid']['best']): + for k, v in metrics['valid'].items(): + if k.startswith('reco_'): + valid['b_' + k[len('reco_'):]] = v + if k.startswith('nsdr'): + valid[f'b_{k}'] = v + if 'test' in metrics: + test.update(metrics['test']) + metrics = history[-1] + return {"train": train, "valid": valid, "test": test} diff --git a/demucs/demucs/grids/mdx.py b/demucs/demucs/grids/mdx.py new file mode 100644 index 00000000..62d447f1 --- /dev/null +++ b/demucs/demucs/grids/mdx.py @@ -0,0 +1,33 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +""" +Main training for the Track A MDX models. +""" + +from ._explorers import MyExplorer +from ..train import main + + +TRACK_A = ['0d19c1c6', '7ecf8ec1', 'c511e2ab', '7d865c68'] + + +@MyExplorer +def explorer(launcher): + launcher.slurm_( + gpus=8, + time=3 * 24 * 60, + partition='learnlab') + + # Reproduce results from MDX competition Track A + # This trains the first round of models. Once this is trained, + # you will need to schedule `mdx_refine`. + for sig in TRACK_A: + xp = main.get_xp_from_sig(sig) + parent = xp.cfg.continue_from + xp = main.get_xp_from_sig(parent) + launcher(xp.argv) + launcher(xp.argv, {'quant.diffq': 1e-4}) + launcher(xp.argv, {'quant.diffq': 3e-4}) diff --git a/demucs/demucs/grids/mdx_extra.py b/demucs/demucs/grids/mdx_extra.py new file mode 100644 index 00000000..b99a37b0 --- /dev/null +++ b/demucs/demucs/grids/mdx_extra.py @@ -0,0 +1,36 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +""" +Main training for the Track A MDX models. +""" + +from ._explorers import MyExplorer +from ..train import main + +TRACK_B = ['e51eebcc', 'a1d90b5c', '5d2d6c55', 'cfa93e08'] + + +@MyExplorer +def explorer(launcher): + launcher.slurm_( + gpus=8, + time=3 * 24 * 60, + partition='learnlab') + + # Reproduce results from MDX competition Track A + # This trains the first round of models. Once this is trained, + # you will need to schedule `mdx_refine`. + for sig in TRACK_B: + while sig is not None: + xp = main.get_xp_from_sig(sig) + sig = xp.cfg.continue_from + + for dset in ['extra44', 'extra_test']: + sub = launcher.bind(xp.argv, dset=dset) + sub() + if dset == 'extra_test': + sub({'quant.diffq': 1e-4}) + sub({'quant.diffq': 3e-4}) diff --git a/demucs/demucs/grids/mdx_refine.py b/demucs/demucs/grids/mdx_refine.py new file mode 100644 index 00000000..f62da1de --- /dev/null +++ b/demucs/demucs/grids/mdx_refine.py @@ -0,0 +1,34 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +""" +Main training for the Track A MDX models. +""" + +from ._explorers import MyExplorer +from .mdx import TRACK_A +from ..train import main + + +@MyExplorer +def explorer(launcher): + launcher.slurm_( + gpus=8, + time=3 * 24 * 60, + partition='learnlab') + + # Reproduce results from MDX competition Track A + # WARNING: all the experiments in the `mdx` grid must have completed. + for sig in TRACK_A: + xp = main.get_xp_from_sig(sig) + launcher(xp.argv) + for diffq in [1e-4, 3e-4]: + xp_src = main.get_xp_from_sig(xp.cfg.continue_from) + q_argv = [f'quant.diffq={diffq}'] + actual_src = main.get_xp(xp_src.argv + q_argv) + actual_src.link.load() + assert len(actual_src.link.history) == actual_src.cfg.epochs + argv = xp.argv + q_argv + [f'continue_from="{actual_src.sig}"'] + launcher(argv) diff --git a/demucs/demucs/grids/mmi.py b/demucs/demucs/grids/mmi.py new file mode 100644 index 00000000..d75aa2b6 --- /dev/null +++ b/demucs/demucs/grids/mmi.py @@ -0,0 +1,69 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +from ._explorers import MyExplorer +from dora import Launcher + + +@MyExplorer +def explorer(launcher: Launcher): + launcher.slurm_(gpus=8, time=3 * 24 * 60, partition="devlab,learnlab,learnfair") # 3 days + + sub = launcher.bind_( + { + "dset": "extra_mmi_goodclean", + "test.shifts": 0, + "model": "htdemucs", + "htdemucs.dconv_mode": 3, + "htdemucs.depth": 4, + "htdemucs.t_dropout": 0.02, + "htdemucs.t_layers": 5, + "max_batches": 800, + "ema.epoch": [0.9, 0.95], + "ema.batch": [0.9995, 0.9999], + "dset.segment": 10, + "batch_size": 32, + } + ) + sub({"model": "hdemucs"}) + sub({"model": "hdemucs", "dset": "extra44"}) + sub({"model": "hdemucs", "dset": "musdb44"}) + + sparse = { + 'batch_size': 3 * 8, + 'augment.remix.group_size': 3, + 'htdemucs.t_auto_sparsity': True, + 'htdemucs.t_sparse_self_attn': True, + 'htdemucs.t_sparse_cross_attn': True, + 'htdemucs.t_sparsity': 0.9, + "htdemucs.t_layers": 7 + } + + with launcher.job_array(): + for transf_layers in [5, 7]: + for bottom_channels in [0, 512]: + sub = launcher.bind({ + "htdemucs.t_layers": transf_layers, + "htdemucs.bottom_channels": bottom_channels, + }) + if bottom_channels == 0 and transf_layers == 5: + sub({"augment.remix.proba": 0.0}) + sub({ + "augment.repitch.proba": 0.0, + # when doing repitching, we trim the outut to align on the + # highest change of BPM. When removing repitching, + # we simulate it here to ensure the training context is the same. + # Another second is lost for all experiments due to the random + # shift augmentation. + "dset.segment": 10 * 0.88}) + elif bottom_channels == 512 and transf_layers == 5: + sub(dset="musdb44") + sub(dset="extra44") + # Sparse kernel XP, currently not released as kernels are still experimental. + sub(sparse, {'dset.segment': 15, "htdemucs.t_layers": 7}) + + for duration in [5, 10, 15]: + sub({"dset.segment": duration}) diff --git a/demucs/demucs/grids/mmi_ft.py b/demucs/demucs/grids/mmi_ft.py new file mode 100644 index 00000000..73e488b5 --- /dev/null +++ b/demucs/demucs/grids/mmi_ft.py @@ -0,0 +1,55 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +from ._explorers import MyExplorer +from dora import Launcher +from demucs import train + + +def get_sub(launcher, sig): + xp = train.main.get_xp_from_sig(sig) + sub = launcher.bind(xp.argv) + sub() + sub.bind_({ + 'continue_from': sig, + 'continue_best': True}) + return sub + + +@MyExplorer +def explorer(launcher: Launcher): + launcher.slurm_(gpus=4, time=3 * 24 * 60, partition="devlab,learnlab,learnfair") # 3 days + ft = { + 'optim.lr': 1e-4, + 'augment.remix.proba': 0, + 'augment.scale.proba': 0, + 'augment.shift_same': True, + 'htdemucs.t_weight_decay': 0.05, + 'batch_size': 8, + 'optim.clip_grad': 5, + 'optim.optim': 'adamw', + 'epochs': 50, + 'dset.wav2_valid': True, + 'ema.epoch': [], # let's make valid a bit faster + } + with launcher.job_array(): + for sig in ['2899e11a']: + sub = get_sub(launcher, sig) + sub.bind_(ft) + for segment in [15, 18]: + for source in range(4): + w = [0] * 4 + w[source] = 1 + sub({'weights': w, 'dset.segment': segment}) + + for sig in ['955717e8']: + sub = get_sub(launcher, sig) + sub.bind_(ft) + for segment in [10, 15]: + for source in range(4): + w = [0] * 4 + w[source] = 1 + sub({'weights': w, 'dset.segment': segment}) diff --git a/demucs/demucs/grids/repro.py b/demucs/demucs/grids/repro.py new file mode 100644 index 00000000..21d33fce --- /dev/null +++ b/demucs/demucs/grids/repro.py @@ -0,0 +1,50 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +""" +Easier training for reproducibility +""" + +from ._explorers import MyExplorer + + +@MyExplorer +def explorer(launcher): + launcher.slurm_( + gpus=8, + time=3 * 24 * 60, + partition='devlab,learnlab') + + launcher.bind_({'ema.epoch': [0.9, 0.95]}) + launcher.bind_({'ema.batch': [0.9995, 0.9999]}) + launcher.bind_({'epochs': 600}) + + base = {'model': 'demucs', 'demucs.dconv_mode': 0, 'demucs.gelu': False, + 'demucs.lstm_layers': 2} + newt = {'model': 'demucs', 'demucs.normalize': True} + hdem = {'model': 'hdemucs'} + svd = {'svd.penalty': 1e-5, 'svd': 'base2'} + + with launcher.job_array(): + for model in [base, newt, hdem]: + sub = launcher.bind(model) + if model is base: + # Training the v2 Demucs on MusDB HQ + sub(epochs=360) + continue + + # those two will be used in the repro_mdx_a bag of models. + sub(svd) + sub(svd, seed=43) + if model == newt: + # Ablation study + sub() + abl = sub.bind(svd) + abl({'ema.epoch': [], 'ema.batch': []}) + abl({'demucs.dconv_lstm': 10}) + abl({'demucs.dconv_attn': 10}) + abl({'demucs.dconv_attn': 10, 'demucs.dconv_lstm': 10, 'demucs.lstm_layers': 2}) + abl({'demucs.dconv_mode': 0}) + abl({'demucs.gelu': False}) diff --git a/demucs/demucs/grids/repro_ft.py b/demucs/demucs/grids/repro_ft.py new file mode 100644 index 00000000..7bb4ee89 --- /dev/null +++ b/demucs/demucs/grids/repro_ft.py @@ -0,0 +1,46 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +""" +Fine tuning experiments +""" + +from ._explorers import MyExplorer +from ..train import main + + +@MyExplorer +def explorer(launcher): + launcher.slurm_( + gpus=8, + time=300, + partition='devlab,learnlab') + + # Mus + launcher.slurm_(constraint='volta32gb') + + grid = "repro" + folder = main.dora.dir / "grids" / grid + + for sig in folder.iterdir(): + if not sig.is_symlink(): + continue + xp = main.get_xp_from_sig(sig) + xp.link.load() + if len(xp.link.history) != xp.cfg.epochs: + continue + sub = launcher.bind(xp.argv, [f'continue_from="{xp.sig}"']) + sub.bind_({'ema.epoch': [0.9, 0.95], 'ema.batch': [0.9995, 0.9999]}) + sub.bind_({'test.every': 1, 'test.sdr': True, 'epochs': 4}) + sub.bind_({'dset.segment': 28, 'dset.shift': 2}) + sub.bind_({'batch_size': 32}) + auto = {'dset': 'auto_mus'} + auto.update({'augment.remix.proba': 0, 'augment.scale.proba': 0, + 'augment.shift_same': True}) + sub.bind_(auto) + sub.bind_({'batch_size': 16}) + sub.bind_({'optim.lr': 1e-4}) + sub.bind_({'model_segment': 44}) + sub() diff --git a/demucs/demucs/grids/sdx23.py b/demucs/demucs/grids/sdx23.py new file mode 100644 index 00000000..3bdb4191 --- /dev/null +++ b/demucs/demucs/grids/sdx23.py @@ -0,0 +1,19 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +from ._explorers import MyExplorer +from dora import Launcher + + +@MyExplorer +def explorer(launcher: Launcher): + launcher.slurm_(gpus=8, time=3 * 24 * 60, partition="speechgpt,learnfair", + mem_per_gpu=None, constraint='') + launcher.bind_({"dset.use_musdb": False}) + + with launcher.job_array(): + launcher(dset='sdx23_bleeding') + launcher(dset='sdx23_labelnoise') diff --git a/demucs/demucs/hdemucs.py b/demucs/demucs/hdemucs.py new file mode 100644 index 00000000..9992b60a --- /dev/null +++ b/demucs/demucs/hdemucs.py @@ -0,0 +1,796 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +""" +This code contains the spectrogram and Hybrid version of Demucs. +""" +from copy import deepcopy +import math +import typing as tp + +from openunmix.filtering import wiener +import torch +from torch import nn +from torch.nn import functional as F + +from .demucs import DConv, rescale_module +from .states import capture_init +from .spec import spectro, ispectro + + +def pad1d(x: torch.Tensor, paddings: tp.Tuple[int, int], mode: str = 'constant', value: float = 0.): + """Tiny wrapper around F.pad, just to allow for reflect padding on small input. + If this is the case, we insert extra 0 padding to the right before the reflection happen.""" + x0 = x + length = x.shape[-1] + padding_left, padding_right = paddings + if mode == 'reflect': + max_pad = max(padding_left, padding_right) + if length <= max_pad: + extra_pad = max_pad - length + 1 + extra_pad_right = min(padding_right, extra_pad) + extra_pad_left = extra_pad - extra_pad_right + paddings = (padding_left - extra_pad_left, padding_right - extra_pad_right) + x = F.pad(x, (extra_pad_left, extra_pad_right)) + out = F.pad(x, paddings, mode, value) + assert out.shape[-1] == length + padding_left + padding_right + assert (out[..., padding_left: padding_left + length] == x0).all() + return out + + +class ScaledEmbedding(nn.Module): + """ + Boost learning rate for embeddings (with `scale`). + Also, can make embeddings continuous with `smooth`. + """ + def __init__(self, num_embeddings: int, embedding_dim: int, + scale: float = 10., smooth=False): + super().__init__() + self.embedding = nn.Embedding(num_embeddings, embedding_dim) + if smooth: + weight = torch.cumsum(self.embedding.weight.data, dim=0) + # when summing gaussian, overscale raises as sqrt(n), so we nornalize by that. + weight = weight / torch.arange(1, num_embeddings + 1).to(weight).sqrt()[:, None] + self.embedding.weight.data[:] = weight + self.embedding.weight.data /= scale + self.scale = scale + + @property + def weight(self): + return self.embedding.weight * self.scale + + def forward(self, x): + out = self.embedding(x) * self.scale + return out + + +class HEncLayer(nn.Module): + def __init__(self, chin, chout, kernel_size=8, stride=4, norm_groups=1, empty=False, + freq=True, dconv=True, norm=True, context=0, dconv_kw={}, pad=True, + rewrite=True): + """Encoder layer. This used both by the time and the frequency branch. + + Args: + chin: number of input channels. + chout: number of output channels. + norm_groups: number of groups for group norm. + empty: used to make a layer with just the first conv. this is used + before merging the time and freq. branches. + freq: this is acting on frequencies. + dconv: insert DConv residual branches. + norm: use GroupNorm. + context: context size for the 1x1 conv. + dconv_kw: list of kwargs for the DConv class. + pad: pad the input. Padding is done so that the output size is + always the input size / stride. + rewrite: add 1x1 conv at the end of the layer. + """ + super().__init__() + norm_fn = lambda d: nn.Identity() # noqa + if norm: + norm_fn = lambda d: nn.GroupNorm(norm_groups, d) # noqa + if pad: + pad = kernel_size // 4 + else: + pad = 0 + klass = nn.Conv1d + self.freq = freq + self.kernel_size = kernel_size + self.stride = stride + self.empty = empty + self.norm = norm + self.pad = pad + if freq: + kernel_size = [kernel_size, 1] + stride = [stride, 1] + pad = [pad, 0] + klass = nn.Conv2d + self.conv = klass(chin, chout, kernel_size, stride, pad) + if self.empty: + return + self.norm1 = norm_fn(chout) + self.rewrite = None + if rewrite: + self.rewrite = klass(chout, 2 * chout, 1 + 2 * context, 1, context) + self.norm2 = norm_fn(2 * chout) + + self.dconv = None + if dconv: + self.dconv = DConv(chout, **dconv_kw) + + def forward(self, x, inject=None): + """ + `inject` is used to inject the result from the time branch into the frequency branch, + when both have the same stride. + """ + if not self.freq and x.dim() == 4: + B, C, Fr, T = x.shape + x = x.view(B, -1, T) + + if not self.freq: + le = x.shape[-1] + if not le % self.stride == 0: + x = F.pad(x, (0, self.stride - (le % self.stride))) + y = self.conv(x) + if self.empty: + return y + if inject is not None: + assert inject.shape[-1] == y.shape[-1], (inject.shape, y.shape) + if inject.dim() == 3 and y.dim() == 4: + inject = inject[:, :, None] + y = y + inject + y = F.gelu(self.norm1(y)) + if self.dconv: + if self.freq: + B, C, Fr, T = y.shape + y = y.permute(0, 2, 1, 3).reshape(-1, C, T) + y = self.dconv(y) + if self.freq: + y = y.view(B, Fr, C, T).permute(0, 2, 1, 3) + if self.rewrite: + z = self.norm2(self.rewrite(y)) + z = F.glu(z, dim=1) + else: + z = y + return z + + +class MultiWrap(nn.Module): + """ + Takes one layer and replicate it N times. each replica will act + on a frequency band. All is done so that if the N replica have the same weights, + then this is exactly equivalent to applying the original module on all frequencies. + + This is a bit over-engineered to avoid edge artifacts when splitting + the frequency bands, but it is possible the naive implementation would work as well... + """ + def __init__(self, layer, split_ratios): + """ + Args: + layer: module to clone, must be either HEncLayer or HDecLayer. + split_ratios: list of float indicating which ratio to keep for each band. + """ + super().__init__() + self.split_ratios = split_ratios + self.layers = nn.ModuleList() + self.conv = isinstance(layer, HEncLayer) + assert not layer.norm + assert layer.freq + assert layer.pad + if not self.conv: + assert not layer.context_freq + for k in range(len(split_ratios) + 1): + lay = deepcopy(layer) + if self.conv: + lay.conv.padding = (0, 0) + else: + lay.pad = False + for m in lay.modules(): + if hasattr(m, 'reset_parameters'): + m.reset_parameters() + self.layers.append(lay) + + def forward(self, x, skip=None, length=None): + B, C, Fr, T = x.shape + + ratios = list(self.split_ratios) + [1] + start = 0 + outs = [] + for ratio, layer in zip(ratios, self.layers): + if self.conv: + pad = layer.kernel_size // 4 + if ratio == 1: + limit = Fr + frames = -1 + else: + limit = int(round(Fr * ratio)) + le = limit - start + if start == 0: + le += pad + frames = round((le - layer.kernel_size) / layer.stride + 1) + limit = start + (frames - 1) * layer.stride + layer.kernel_size + if start == 0: + limit -= pad + assert limit - start > 0, (limit, start) + assert limit <= Fr, (limit, Fr) + y = x[:, :, start:limit, :] + if start == 0: + y = F.pad(y, (0, 0, pad, 0)) + if ratio == 1: + y = F.pad(y, (0, 0, 0, pad)) + outs.append(layer(y)) + start = limit - layer.kernel_size + layer.stride + else: + if ratio == 1: + limit = Fr + else: + limit = int(round(Fr * ratio)) + last = layer.last + layer.last = True + + y = x[:, :, start:limit] + s = skip[:, :, start:limit] + out, _ = layer(y, s, None) + if outs: + outs[-1][:, :, -layer.stride:] += ( + out[:, :, :layer.stride] - layer.conv_tr.bias.view(1, -1, 1, 1)) + out = out[:, :, layer.stride:] + if ratio == 1: + out = out[:, :, :-layer.stride // 2, :] + if start == 0: + out = out[:, :, layer.stride // 2:, :] + outs.append(out) + layer.last = last + start = limit + out = torch.cat(outs, dim=2) + if not self.conv and not last: + out = F.gelu(out) + if self.conv: + return out + else: + return out, None + + +class HDecLayer(nn.Module): + def __init__(self, chin, chout, last=False, kernel_size=8, stride=4, norm_groups=1, empty=False, + freq=True, dconv=True, norm=True, context=1, dconv_kw={}, pad=True, + context_freq=True, rewrite=True): + """ + Same as HEncLayer but for decoder. See `HEncLayer` for documentation. + """ + super().__init__() + norm_fn = lambda d: nn.Identity() # noqa + if norm: + norm_fn = lambda d: nn.GroupNorm(norm_groups, d) # noqa + if pad: + pad = kernel_size // 4 + else: + pad = 0 + self.pad = pad + self.last = last + self.freq = freq + self.chin = chin + self.empty = empty + self.stride = stride + self.kernel_size = kernel_size + self.norm = norm + self.context_freq = context_freq + klass = nn.Conv1d + klass_tr = nn.ConvTranspose1d + if freq: + kernel_size = [kernel_size, 1] + stride = [stride, 1] + klass = nn.Conv2d + klass_tr = nn.ConvTranspose2d + self.conv_tr = klass_tr(chin, chout, kernel_size, stride) + self.norm2 = norm_fn(chout) + if self.empty: + return + self.rewrite = None + if rewrite: + if context_freq: + self.rewrite = klass(chin, 2 * chin, 1 + 2 * context, 1, context) + else: + self.rewrite = klass(chin, 2 * chin, [1, 1 + 2 * context], 1, + [0, context]) + self.norm1 = norm_fn(2 * chin) + + self.dconv = None + if dconv: + self.dconv = DConv(chin, **dconv_kw) + + def forward(self, x, skip, length): + if self.freq and x.dim() == 3: + B, C, T = x.shape + x = x.view(B, self.chin, -1, T) + + if not self.empty: + x = x + skip + + if self.rewrite: + y = F.glu(self.norm1(self.rewrite(x)), dim=1) + else: + y = x + if self.dconv: + if self.freq: + B, C, Fr, T = y.shape + y = y.permute(0, 2, 1, 3).reshape(-1, C, T) + y = self.dconv(y) + if self.freq: + y = y.view(B, Fr, C, T).permute(0, 2, 1, 3) + else: + y = x + assert skip is None + z = self.norm2(self.conv_tr(y)) + if self.freq: + if self.pad: + z = z[..., self.pad:-self.pad, :] + else: + z = z[..., self.pad:self.pad + length] + assert z.shape[-1] == length, (z.shape[-1], length) + if not self.last: + z = F.gelu(z) + return z, y + + +class HDemucs(nn.Module): + """ + Spectrogram and hybrid Demucs model. + The spectrogram model has the same structure as Demucs, except the first few layers are over the + frequency axis, until there is only 1 frequency, and then it moves to time convolutions. + Frequency layers can still access information across time steps thanks to the DConv residual. + + Hybrid model have a parallel time branch. At some layer, the time branch has the same stride + as the frequency branch and then the two are combined. The opposite happens in the decoder. + + Models can either use naive iSTFT from masking, Wiener filtering ([Ulhih et al. 2017]), + or complex as channels (CaC) [Choi et al. 2020]. Wiener filtering is based on + Open Unmix implementation [Stoter et al. 2019]. + + The loss is always on the temporal domain, by backpropagating through the above + output methods and iSTFT. This allows to define hybrid models nicely. However, this breaks + a bit Wiener filtering, as doing more iteration at test time will change the spectrogram + contribution, without changing the one from the waveform, which will lead to worse performance. + I tried using the residual option in OpenUnmix Wiener implementation, but it didn't improve. + CaC on the other hand provides similar performance for hybrid, and works naturally with + hybrid models. + + This model also uses frequency embeddings are used to improve efficiency on convolutions + over the freq. axis, following [Isik et al. 2020] (https://arxiv.org/pdf/2008.04470.pdf). + + Unlike classic Demucs, there is no resampling here, and normalization is always applied. + """ + @capture_init + def __init__(self, + sources, + # Channels + audio_channels=2, + channels=48, + channels_time=None, + growth=2, + # STFT + nfft=4096, + wiener_iters=0, + end_iters=0, + wiener_residual=False, + cac=True, + # Main structure + depth=6, + rewrite=True, + hybrid=True, + hybrid_old=False, + # Frequency branch + multi_freqs=None, + multi_freqs_depth=2, + freq_emb=0.2, + emb_scale=10, + emb_smooth=True, + # Convolutions + kernel_size=8, + time_stride=2, + stride=4, + context=1, + context_enc=0, + # Normalization + norm_starts=4, + norm_groups=4, + # DConv residual branch + dconv_mode=1, + dconv_depth=2, + dconv_comp=4, + dconv_attn=4, + dconv_lstm=4, + dconv_init=1e-4, + # Weight init + rescale=0.1, + # Metadata + samplerate=44100, + segment=4 * 10): + """ + Args: + sources (list[str]): list of source names. + audio_channels (int): input/output audio channels. + channels (int): initial number of hidden channels. + channels_time: if not None, use a different `channels` value for the time branch. + growth: increase the number of hidden channels by this factor at each layer. + nfft: number of fft bins. Note that changing this require careful computation of + various shape parameters and will not work out of the box for hybrid models. + wiener_iters: when using Wiener filtering, number of iterations at test time. + end_iters: same but at train time. For a hybrid model, must be equal to `wiener_iters`. + wiener_residual: add residual source before wiener filtering. + cac: uses complex as channels, i.e. complex numbers are 2 channels each + in input and output. no further processing is done before ISTFT. + depth (int): number of layers in the encoder and in the decoder. + rewrite (bool): add 1x1 convolution to each layer. + hybrid (bool): make a hybrid time/frequency domain, otherwise frequency only. + hybrid_old: some models trained for MDX had a padding bug. This replicates + this bug to avoid retraining them. + multi_freqs: list of frequency ratios for splitting frequency bands with `MultiWrap`. + multi_freqs_depth: how many layers to wrap with `MultiWrap`. Only the outermost + layers will be wrapped. + freq_emb: add frequency embedding after the first frequency layer if > 0, + the actual value controls the weight of the embedding. + emb_scale: equivalent to scaling the embedding learning rate + emb_smooth: initialize the embedding with a smooth one (with respect to frequencies). + kernel_size: kernel_size for encoder and decoder layers. + stride: stride for encoder and decoder layers. + time_stride: stride for the final time layer, after the merge. + context: context for 1x1 conv in the decoder. + context_enc: context for 1x1 conv in the encoder. + norm_starts: layer at which group norm starts being used. + decoder layers are numbered in reverse order. + norm_groups: number of groups for group norm. + dconv_mode: if 1: dconv in encoder only, 2: decoder only, 3: both. + dconv_depth: depth of residual DConv branch. + dconv_comp: compression of DConv branch. + dconv_attn: adds attention layers in DConv branch starting at this layer. + dconv_lstm: adds a LSTM layer in DConv branch starting at this layer. + dconv_init: initial scale for the DConv branch LayerScale. + rescale: weight recaling trick + + """ + super().__init__() + self.cac = cac + self.wiener_residual = wiener_residual + self.audio_channels = audio_channels + self.sources = sources + self.kernel_size = kernel_size + self.context = context + self.stride = stride + self.depth = depth + self.channels = channels + self.samplerate = samplerate + self.segment = segment + + self.nfft = nfft + self.hop_length = nfft // 4 + self.wiener_iters = wiener_iters + self.end_iters = end_iters + self.freq_emb = None + self.hybrid = hybrid + self.hybrid_old = hybrid_old + if hybrid_old: + assert hybrid, "hybrid_old must come with hybrid=True" + if hybrid: + assert wiener_iters == end_iters + + self.encoder = nn.ModuleList() + self.decoder = nn.ModuleList() + + if hybrid: + self.tencoder = nn.ModuleList() + self.tdecoder = nn.ModuleList() + + chin = audio_channels + chin_z = chin # number of channels for the freq branch + if self.cac: + chin_z *= 2 + chout = channels_time or channels + chout_z = channels + freqs = nfft // 2 + + for index in range(depth): + lstm = index >= dconv_lstm + attn = index >= dconv_attn + norm = index >= norm_starts + freq = freqs > 1 + stri = stride + ker = kernel_size + if not freq: + assert freqs == 1 + ker = time_stride * 2 + stri = time_stride + + pad = True + last_freq = False + if freq and freqs <= kernel_size: + ker = freqs + pad = False + last_freq = True + + kw = { + 'kernel_size': ker, + 'stride': stri, + 'freq': freq, + 'pad': pad, + 'norm': norm, + 'rewrite': rewrite, + 'norm_groups': norm_groups, + 'dconv_kw': { + 'lstm': lstm, + 'attn': attn, + 'depth': dconv_depth, + 'compress': dconv_comp, + 'init': dconv_init, + 'gelu': True, + } + } + kwt = dict(kw) + kwt['freq'] = 0 + kwt['kernel_size'] = kernel_size + kwt['stride'] = stride + kwt['pad'] = True + kw_dec = dict(kw) + multi = False + if multi_freqs and index < multi_freqs_depth: + multi = True + kw_dec['context_freq'] = False + + if last_freq: + chout_z = max(chout, chout_z) + chout = chout_z + + enc = HEncLayer(chin_z, chout_z, + dconv=dconv_mode & 1, context=context_enc, **kw) + if hybrid and freq: + tenc = HEncLayer(chin, chout, dconv=dconv_mode & 1, context=context_enc, + empty=last_freq, **kwt) + self.tencoder.append(tenc) + + if multi: + enc = MultiWrap(enc, multi_freqs) + self.encoder.append(enc) + if index == 0: + chin = self.audio_channels * len(self.sources) + chin_z = chin + if self.cac: + chin_z *= 2 + dec = HDecLayer(chout_z, chin_z, dconv=dconv_mode & 2, + last=index == 0, context=context, **kw_dec) + if multi: + dec = MultiWrap(dec, multi_freqs) + if hybrid and freq: + tdec = HDecLayer(chout, chin, dconv=dconv_mode & 2, empty=last_freq, + last=index == 0, context=context, **kwt) + self.tdecoder.insert(0, tdec) + self.decoder.insert(0, dec) + + chin = chout + chin_z = chout_z + chout = int(growth * chout) + chout_z = int(growth * chout_z) + if freq: + if freqs <= kernel_size: + freqs = 1 + else: + freqs //= stride + if index == 0 and freq_emb: + self.freq_emb = ScaledEmbedding( + freqs, chin_z, smooth=emb_smooth, scale=emb_scale) + self.freq_emb_scale = freq_emb + + if rescale: + rescale_module(self, reference=rescale) + + def _spec(self, x): + hl = self.hop_length + nfft = self.nfft + x0 = x # noqa + + if self.hybrid: + # We re-pad the signal in order to keep the property + # that the size of the output is exactly the size of the input + # divided by the stride (here hop_length), when divisible. + # This is achieved by padding by 1/4th of the kernel size (here nfft). + # which is not supported by torch.stft. + # Having all convolution operations follow this convention allow to easily + # align the time and frequency branches later on. + assert hl == nfft // 4 + le = int(math.ceil(x.shape[-1] / hl)) + pad = hl // 2 * 3 + if not self.hybrid_old: + x = pad1d(x, (pad, pad + le * hl - x.shape[-1]), mode='reflect') + else: + x = pad1d(x, (pad, pad + le * hl - x.shape[-1])) + + z = spectro(x, nfft, hl)[..., :-1, :] + if self.hybrid: + assert z.shape[-1] == le + 4, (z.shape, x.shape, le) + z = z[..., 2:2+le] + return z + + def _ispec(self, z, length=None, scale=0): + hl = self.hop_length // (4 ** scale) + z = F.pad(z, (0, 0, 0, 1)) + if self.hybrid: + z = F.pad(z, (2, 2)) + pad = hl // 2 * 3 + if not self.hybrid_old: + le = hl * int(math.ceil(length / hl)) + 2 * pad + else: + le = hl * int(math.ceil(length / hl)) + x = ispectro(z, hl, length=le) + if not self.hybrid_old: + x = x[..., pad:pad + length] + else: + x = x[..., :length] + else: + x = ispectro(z, hl, length) + return x + + def _magnitude(self, z): + # return the magnitude of the spectrogram, except when cac is True, + # in which case we just move the complex dimension to the channel one. + if self.cac: + B, C, Fr, T = z.shape + m = torch.view_as_real(z).permute(0, 1, 4, 2, 3) + m = m.reshape(B, C * 2, Fr, T) + else: + m = z.abs() + return m + + def _mask(self, z, m): + # Apply masking given the mixture spectrogram `z` and the estimated mask `m`. + # If `cac` is True, `m` is actually a full spectrogram and `z` is ignored. + niters = self.wiener_iters + if self.cac: + B, S, C, Fr, T = m.shape + out = m.view(B, S, -1, 2, Fr, T).permute(0, 1, 2, 4, 5, 3) + out = torch.view_as_complex(out.contiguous()) + return out + if self.training: + niters = self.end_iters + if niters < 0: + z = z[:, None] + return z / (1e-8 + z.abs()) * m + else: + return self._wiener(m, z, niters) + + def _wiener(self, mag_out, mix_stft, niters): + # apply wiener filtering from OpenUnmix. + init = mix_stft.dtype + wiener_win_len = 300 + residual = self.wiener_residual + + B, S, C, Fq, T = mag_out.shape + mag_out = mag_out.permute(0, 4, 3, 2, 1) + mix_stft = torch.view_as_real(mix_stft.permute(0, 3, 2, 1)) + + outs = [] + for sample in range(B): + pos = 0 + out = [] + for pos in range(0, T, wiener_win_len): + frame = slice(pos, pos + wiener_win_len) + z_out = wiener( + mag_out[sample, frame], mix_stft[sample, frame], niters, + residual=residual) + out.append(z_out.transpose(-1, -2)) + outs.append(torch.cat(out, dim=0)) + out = torch.view_as_complex(torch.stack(outs, 0)) + out = out.permute(0, 4, 3, 2, 1).contiguous() + if residual: + out = out[:, :-1] + assert list(out.shape) == [B, S, C, Fq, T] + return out.to(init) + + def forward(self, mix): + x = mix + length = x.shape[-1] + + z = self._spec(mix) + mag = self._magnitude(z).to(mix.device) + x = mag + + B, C, Fq, T = x.shape + + # unlike previous Demucs, we always normalize because it is easier. + mean = x.mean(dim=(1, 2, 3), keepdim=True) + std = x.std(dim=(1, 2, 3), keepdim=True) + x = (x - mean) / (1e-5 + std) + # x will be the freq. branch input. + + if self.hybrid: + # Prepare the time branch input. + xt = mix + meant = xt.mean(dim=(1, 2), keepdim=True) + stdt = xt.std(dim=(1, 2), keepdim=True) + xt = (xt - meant) / (1e-5 + stdt) + + # okay, this is a giant mess I know... + saved = [] # skip connections, freq. + saved_t = [] # skip connections, time. + lengths = [] # saved lengths to properly remove padding, freq branch. + lengths_t = [] # saved lengths for time branch. + for idx, encode in enumerate(self.encoder): + lengths.append(x.shape[-1]) + inject = None + if self.hybrid and idx < len(self.tencoder): + # we have not yet merged branches. + lengths_t.append(xt.shape[-1]) + tenc = self.tencoder[idx] + xt = tenc(xt) + if not tenc.empty: + # save for skip connection + saved_t.append(xt) + else: + # tenc contains just the first conv., so that now time and freq. + # branches have the same shape and can be merged. + inject = xt + x = encode(x, inject) + if idx == 0 and self.freq_emb is not None: + # add frequency embedding to allow for non equivariant convolutions + # over the frequency axis. + frs = torch.arange(x.shape[-2], device=x.device) + emb = self.freq_emb(frs).t()[None, :, :, None].expand_as(x) + x = x + self.freq_emb_scale * emb + + saved.append(x) + + x = torch.zeros_like(x) + if self.hybrid: + xt = torch.zeros_like(x) + # initialize everything to zero (signal will go through u-net skips). + + for idx, decode in enumerate(self.decoder): + skip = saved.pop(-1) + x, pre = decode(x, skip, lengths.pop(-1)) + # `pre` contains the output just before final transposed convolution, + # which is used when the freq. and time branch separate. + + if self.hybrid: + offset = self.depth - len(self.tdecoder) + if self.hybrid and idx >= offset: + tdec = self.tdecoder[idx - offset] + length_t = lengths_t.pop(-1) + if tdec.empty: + assert pre.shape[2] == 1, pre.shape + pre = pre[:, :, 0] + xt, _ = tdec(pre, None, length_t) + else: + skip = saved_t.pop(-1) + xt, _ = tdec(xt, skip, length_t) + + # Let's make sure we used all stored skip connections. + assert len(saved) == 0 + assert len(lengths_t) == 0 + assert len(saved_t) == 0 + + S = len(self.sources) + x = x.view(B, S, -1, Fq, T) + x = x * std[:, None] + mean[:, None] + + # to cpu as mps doesnt support complex numbers + # demucs issue #435 ##432 + # NOTE: in this case z already is on cpu + # TODO: remove this when mps supports complex numbers + x_is_mps_xpu = x.device.type in ["mps", "xpu"] + x_device = x.device + if x_is_mps_xpu: + x = x.cpu() + + zout = self._mask(z, x) + x = self._ispec(zout, length) + + # back to mps device + if x_is_mps_xpu: + x = x.to(x_device) + + + if self.hybrid: + xt = xt.view(B, S, -1, length) + xt = xt * stdt[:, None] + meant[:, None] + x = xt + x + return x diff --git a/demucs/demucs/htdemucs.py b/demucs/demucs/htdemucs.py new file mode 100644 index 00000000..56568608 --- /dev/null +++ b/demucs/demucs/htdemucs.py @@ -0,0 +1,661 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +# First author is Simon Rouard. +""" +This code contains the spectrogram and Hybrid version of Demucs. +""" +import math + +from openunmix.filtering import wiener +import torch +from torch import nn +from torch.nn import functional as F +from fractions import Fraction +from einops import rearrange + +from .transformer import CrossTransformerEncoder + +from .demucs import rescale_module +from .states import capture_init +from .spec import spectro, ispectro +from .hdemucs import pad1d, ScaledEmbedding, HEncLayer, MultiWrap, HDecLayer + + +class HTDemucs(nn.Module): + """ + Spectrogram and hybrid Demucs model. + The spectrogram model has the same structure as Demucs, except the first few layers are over the + frequency axis, until there is only 1 frequency, and then it moves to time convolutions. + Frequency layers can still access information across time steps thanks to the DConv residual. + + Hybrid model have a parallel time branch. At some layer, the time branch has the same stride + as the frequency branch and then the two are combined. The opposite happens in the decoder. + + Models can either use naive iSTFT from masking, Wiener filtering ([Ulhih et al. 2017]), + or complex as channels (CaC) [Choi et al. 2020]. Wiener filtering is based on + Open Unmix implementation [Stoter et al. 2019]. + + The loss is always on the temporal domain, by backpropagating through the above + output methods and iSTFT. This allows to define hybrid models nicely. However, this breaks + a bit Wiener filtering, as doing more iteration at test time will change the spectrogram + contribution, without changing the one from the waveform, which will lead to worse performance. + I tried using the residual option in OpenUnmix Wiener implementation, but it didn't improve. + CaC on the other hand provides similar performance for hybrid, and works naturally with + hybrid models. + + This model also uses frequency embeddings are used to improve efficiency on convolutions + over the freq. axis, following [Isik et al. 2020] (https://arxiv.org/pdf/2008.04470.pdf). + + Unlike classic Demucs, there is no resampling here, and normalization is always applied. + """ + + @capture_init + def __init__( + self, + sources, + # Channels + audio_channels=2, + channels=48, + channels_time=None, + growth=2, + # STFT + nfft=4096, + wiener_iters=0, + end_iters=0, + wiener_residual=False, + cac=True, + # Main structure + depth=4, + rewrite=True, + # Frequency branch + multi_freqs=None, + multi_freqs_depth=3, + freq_emb=0.2, + emb_scale=10, + emb_smooth=True, + # Convolutions + kernel_size=8, + time_stride=2, + stride=4, + context=1, + context_enc=0, + # Normalization + norm_starts=4, + norm_groups=4, + # DConv residual branch + dconv_mode=1, + dconv_depth=2, + dconv_comp=8, + dconv_init=1e-3, + # Before the Transformer + bottom_channels=0, + # Transformer + t_layers=5, + t_emb="sin", + t_hidden_scale=4.0, + t_heads=8, + t_dropout=0.0, + t_max_positions=10000, + t_norm_in=True, + t_norm_in_group=False, + t_group_norm=False, + t_norm_first=True, + t_norm_out=True, + t_max_period=10000.0, + t_weight_decay=0.0, + t_lr=None, + t_layer_scale=True, + t_gelu=True, + t_weight_pos_embed=1.0, + t_sin_random_shift=0, + t_cape_mean_normalize=True, + t_cape_augment=True, + t_cape_glob_loc_scale=[5000.0, 1.0, 1.4], + t_sparse_self_attn=False, + t_sparse_cross_attn=False, + t_mask_type="diag", + t_mask_random_seed=42, + t_sparse_attn_window=500, + t_global_window=100, + t_sparsity=0.95, + t_auto_sparsity=False, + # ------ Particuliar parameters + t_cross_first=False, + # Weight init + rescale=0.1, + # Metadata + samplerate=44100, + segment=10, + use_train_segment=True, + ): + """ + Args: + sources (list[str]): list of source names. + audio_channels (int): input/output audio channels. + channels (int): initial number of hidden channels. + channels_time: if not None, use a different `channels` value for the time branch. + growth: increase the number of hidden channels by this factor at each layer. + nfft: number of fft bins. Note that changing this require careful computation of + various shape parameters and will not work out of the box for hybrid models. + wiener_iters: when using Wiener filtering, number of iterations at test time. + end_iters: same but at train time. For a hybrid model, must be equal to `wiener_iters`. + wiener_residual: add residual source before wiener filtering. + cac: uses complex as channels, i.e. complex numbers are 2 channels each + in input and output. no further processing is done before ISTFT. + depth (int): number of layers in the encoder and in the decoder. + rewrite (bool): add 1x1 convolution to each layer. + multi_freqs: list of frequency ratios for splitting frequency bands with `MultiWrap`. + multi_freqs_depth: how many layers to wrap with `MultiWrap`. Only the outermost + layers will be wrapped. + freq_emb: add frequency embedding after the first frequency layer if > 0, + the actual value controls the weight of the embedding. + emb_scale: equivalent to scaling the embedding learning rate + emb_smooth: initialize the embedding with a smooth one (with respect to frequencies). + kernel_size: kernel_size for encoder and decoder layers. + stride: stride for encoder and decoder layers. + time_stride: stride for the final time layer, after the merge. + context: context for 1x1 conv in the decoder. + context_enc: context for 1x1 conv in the encoder. + norm_starts: layer at which group norm starts being used. + decoder layers are numbered in reverse order. + norm_groups: number of groups for group norm. + dconv_mode: if 1: dconv in encoder only, 2: decoder only, 3: both. + dconv_depth: depth of residual DConv branch. + dconv_comp: compression of DConv branch. + dconv_attn: adds attention layers in DConv branch starting at this layer. + dconv_lstm: adds a LSTM layer in DConv branch starting at this layer. + dconv_init: initial scale for the DConv branch LayerScale. + bottom_channels: if >0 it adds a linear layer (1x1 Conv) before and after the + transformer in order to change the number of channels + t_layers: number of layers in each branch (waveform and spec) of the transformer + t_emb: "sin", "cape" or "scaled" + t_hidden_scale: the hidden scale of the Feedforward parts of the transformer + for instance if C = 384 (the number of channels in the transformer) and + t_hidden_scale = 4.0 then the intermediate layer of the FFN has dimension + 384 * 4 = 1536 + t_heads: number of heads for the transformer + t_dropout: dropout in the transformer + t_max_positions: max_positions for the "scaled" positional embedding, only + useful if t_emb="scaled" + t_norm_in: (bool) norm before addinf positional embedding and getting into the + transformer layers + t_norm_in_group: (bool) if True while t_norm_in=True, the norm is on all the + timesteps (GroupNorm with group=1) + t_group_norm: (bool) if True, the norms of the Encoder Layers are on all the + timesteps (GroupNorm with group=1) + t_norm_first: (bool) if True the norm is before the attention and before the FFN + t_norm_out: (bool) if True, there is a GroupNorm (group=1) at the end of each layer + t_max_period: (float) denominator in the sinusoidal embedding expression + t_weight_decay: (float) weight decay for the transformer + t_lr: (float) specific learning rate for the transformer + t_layer_scale: (bool) Layer Scale for the transformer + t_gelu: (bool) activations of the transformer are GeLU if True, ReLU else + t_weight_pos_embed: (float) weighting of the positional embedding + t_cape_mean_normalize: (bool) if t_emb="cape", normalisation of positional embeddings + see: https://arxiv.org/abs/2106.03143 + t_cape_augment: (bool) if t_emb="cape", must be True during training and False + during the inference, see: https://arxiv.org/abs/2106.03143 + t_cape_glob_loc_scale: (list of 3 floats) if t_emb="cape", CAPE parameters + see: https://arxiv.org/abs/2106.03143 + t_sparse_self_attn: (bool) if True, the self attentions are sparse + t_sparse_cross_attn: (bool) if True, the cross-attentions are sparse (don't use it + unless you designed really specific masks) + t_mask_type: (str) can be "diag", "jmask", "random", "global" or any combination + with '_' between: i.e. "diag_jmask_random" (note that this is permutation + invariant i.e. "diag_jmask_random" is equivalent to "jmask_random_diag") + t_mask_random_seed: (int) if "random" is in t_mask_type, controls the seed + that generated the random part of the mask + t_sparse_attn_window: (int) if "diag" is in t_mask_type, for a query (i), and + a key (j), the mask is True id |i-j|<=t_sparse_attn_window + t_global_window: (int) if "global" is in t_mask_type, mask[:t_global_window, :] + and mask[:, :t_global_window] will be True + t_sparsity: (float) if "random" is in t_mask_type, t_sparsity is the sparsity + level of the random part of the mask. + t_cross_first: (bool) if True cross attention is the first layer of the + transformer (False seems to be better) + rescale: weight rescaling trick + use_train_segment: (bool) if True, the actual size that is used during the + training is used during inference. + """ + super().__init__() + self.cac = cac + self.wiener_residual = wiener_residual + self.audio_channels = audio_channels + self.sources = sources + self.kernel_size = kernel_size + self.context = context + self.stride = stride + self.depth = depth + self.bottom_channels = bottom_channels + self.channels = channels + self.samplerate = samplerate + self.segment = segment + self.use_train_segment = use_train_segment + self.nfft = nfft + self.hop_length = nfft // 4 + self.wiener_iters = wiener_iters + self.end_iters = end_iters + self.freq_emb = None + assert wiener_iters == end_iters + + self.encoder = nn.ModuleList() + self.decoder = nn.ModuleList() + + self.tencoder = nn.ModuleList() + self.tdecoder = nn.ModuleList() + + chin = audio_channels + chin_z = chin # number of channels for the freq branch + if self.cac: + chin_z *= 2 + chout = channels_time or channels + chout_z = channels + freqs = nfft // 2 + + for index in range(depth): + norm = index >= norm_starts + freq = freqs > 1 + stri = stride + ker = kernel_size + if not freq: + assert freqs == 1 + ker = time_stride * 2 + stri = time_stride + + pad = True + last_freq = False + if freq and freqs <= kernel_size: + ker = freqs + pad = False + last_freq = True + + kw = { + "kernel_size": ker, + "stride": stri, + "freq": freq, + "pad": pad, + "norm": norm, + "rewrite": rewrite, + "norm_groups": norm_groups, + "dconv_kw": { + "depth": dconv_depth, + "compress": dconv_comp, + "init": dconv_init, + "gelu": True, + }, + } + kwt = dict(kw) + kwt["freq"] = 0 + kwt["kernel_size"] = kernel_size + kwt["stride"] = stride + kwt["pad"] = True + kw_dec = dict(kw) + multi = False + if multi_freqs and index < multi_freqs_depth: + multi = True + kw_dec["context_freq"] = False + + if last_freq: + chout_z = max(chout, chout_z) + chout = chout_z + + enc = HEncLayer( + chin_z, chout_z, dconv=dconv_mode & 1, context=context_enc, **kw + ) + if freq: + tenc = HEncLayer( + chin, + chout, + dconv=dconv_mode & 1, + context=context_enc, + empty=last_freq, + **kwt + ) + self.tencoder.append(tenc) + + if multi: + enc = MultiWrap(enc, multi_freqs) + self.encoder.append(enc) + if index == 0: + chin = self.audio_channels * len(self.sources) + chin_z = chin + if self.cac: + chin_z *= 2 + dec = HDecLayer( + chout_z, + chin_z, + dconv=dconv_mode & 2, + last=index == 0, + context=context, + **kw_dec + ) + if multi: + dec = MultiWrap(dec, multi_freqs) + if freq: + tdec = HDecLayer( + chout, + chin, + dconv=dconv_mode & 2, + empty=last_freq, + last=index == 0, + context=context, + **kwt + ) + self.tdecoder.insert(0, tdec) + self.decoder.insert(0, dec) + + chin = chout + chin_z = chout_z + chout = int(growth * chout) + chout_z = int(growth * chout_z) + if freq: + if freqs <= kernel_size: + freqs = 1 + else: + freqs //= stride + if index == 0 and freq_emb: + self.freq_emb = ScaledEmbedding( + freqs, chin_z, smooth=emb_smooth, scale=emb_scale + ) + self.freq_emb_scale = freq_emb + + if rescale: + rescale_module(self, reference=rescale) + + transformer_channels = channels * growth ** (depth - 1) + if bottom_channels: + self.channel_upsampler = nn.Conv1d(transformer_channels, bottom_channels, 1) + self.channel_downsampler = nn.Conv1d( + bottom_channels, transformer_channels, 1 + ) + self.channel_upsampler_t = nn.Conv1d( + transformer_channels, bottom_channels, 1 + ) + self.channel_downsampler_t = nn.Conv1d( + bottom_channels, transformer_channels, 1 + ) + + transformer_channels = bottom_channels + + if t_layers > 0: + self.crosstransformer = CrossTransformerEncoder( + dim=transformer_channels, + emb=t_emb, + hidden_scale=t_hidden_scale, + num_heads=t_heads, + num_layers=t_layers, + cross_first=t_cross_first, + dropout=t_dropout, + max_positions=t_max_positions, + norm_in=t_norm_in, + norm_in_group=t_norm_in_group, + group_norm=t_group_norm, + norm_first=t_norm_first, + norm_out=t_norm_out, + max_period=t_max_period, + weight_decay=t_weight_decay, + lr=t_lr, + layer_scale=t_layer_scale, + gelu=t_gelu, + sin_random_shift=t_sin_random_shift, + weight_pos_embed=t_weight_pos_embed, + cape_mean_normalize=t_cape_mean_normalize, + cape_augment=t_cape_augment, + cape_glob_loc_scale=t_cape_glob_loc_scale, + sparse_self_attn=t_sparse_self_attn, + sparse_cross_attn=t_sparse_cross_attn, + mask_type=t_mask_type, + mask_random_seed=t_mask_random_seed, + sparse_attn_window=t_sparse_attn_window, + global_window=t_global_window, + sparsity=t_sparsity, + auto_sparsity=t_auto_sparsity, + ) + else: + self.crosstransformer = None + + def _spec(self, x): + hl = self.hop_length + nfft = self.nfft + x0 = x # noqa + + # We re-pad the signal in order to keep the property + # that the size of the output is exactly the size of the input + # divided by the stride (here hop_length), when divisible. + # This is achieved by padding by 1/4th of the kernel size (here nfft). + # which is not supported by torch.stft. + # Having all convolution operations follow this convention allow to easily + # align the time and frequency branches later on. + assert hl == nfft // 4 + le = int(math.ceil(x.shape[-1] / hl)) + pad = hl // 2 * 3 + x = pad1d(x, (pad, pad + le * hl - x.shape[-1]), mode="reflect") + + z = spectro(x, nfft, hl)[..., :-1, :] + assert z.shape[-1] == le + 4, (z.shape, x.shape, le) + z = z[..., 2: 2 + le] + return z + + def _ispec(self, z, length=None, scale=0): + hl = self.hop_length // (4**scale) + z = F.pad(z, (0, 0, 0, 1)) + z = F.pad(z, (2, 2)) + pad = hl // 2 * 3 + le = hl * int(math.ceil(length / hl)) + 2 * pad + x = ispectro(z, hl, length=le) + x = x[..., pad: pad + length] + return x + + def _magnitude(self, z): + # return the magnitude of the spectrogram, except when cac is True, + # in which case we just move the complex dimension to the channel one. + if self.cac: + B, C, Fr, T = z.shape + m = torch.view_as_real(z).permute(0, 1, 4, 2, 3) + m = m.reshape(B, C * 2, Fr, T) + else: + m = z.abs() + return m + + def _mask(self, z, m): + # Apply masking given the mixture spectrogram `z` and the estimated mask `m`. + # If `cac` is True, `m` is actually a full spectrogram and `z` is ignored. + niters = self.wiener_iters + if self.cac: + B, S, C, Fr, T = m.shape + out = m.view(B, S, -1, 2, Fr, T).permute(0, 1, 2, 4, 5, 3) + out = torch.view_as_complex(out.contiguous()) + return out + if self.training: + niters = self.end_iters + if niters < 0: + z = z[:, None] + return z / (1e-8 + z.abs()) * m + else: + return self._wiener(m, z, niters) + + def _wiener(self, mag_out, mix_stft, niters): + # apply wiener filtering from OpenUnmix. + init = mix_stft.dtype + wiener_win_len = 300 + residual = self.wiener_residual + + B, S, C, Fq, T = mag_out.shape + mag_out = mag_out.permute(0, 4, 3, 2, 1) + mix_stft = torch.view_as_real(mix_stft.permute(0, 3, 2, 1)) + + outs = [] + for sample in range(B): + pos = 0 + out = [] + for pos in range(0, T, wiener_win_len): + frame = slice(pos, pos + wiener_win_len) + z_out = wiener( + mag_out[sample, frame], + mix_stft[sample, frame], + niters, + residual=residual, + ) + out.append(z_out.transpose(-1, -2)) + outs.append(torch.cat(out, dim=0)) + out = torch.view_as_complex(torch.stack(outs, 0)) + out = out.permute(0, 4, 3, 2, 1).contiguous() + if residual: + out = out[:, :-1] + assert list(out.shape) == [B, S, C, Fq, T] + return out.to(init) + + def valid_length(self, length: int): + """ + Return a length that is appropriate for evaluation. + In our case, always return the training length, unless + it is smaller than the given length, in which case this + raises an error. + """ + if not self.use_train_segment: + return length + training_length = int(self.segment * self.samplerate) + if training_length < length: + raise ValueError( + f"Given length {length} is longer than " + f"training length {training_length}") + return training_length + + def forward(self, mix): + length = mix.shape[-1] + length_pre_pad = None + if self.use_train_segment: + if self.training: + self.segment = Fraction(mix.shape[-1], self.samplerate) + else: + training_length = int(self.segment * self.samplerate) + if mix.shape[-1] < training_length: + length_pre_pad = mix.shape[-1] + mix = F.pad(mix, (0, training_length - length_pre_pad)) + z = self._spec(mix) + mag = self._magnitude(z).to(mix.device) + x = mag + + B, C, Fq, T = x.shape + + # unlike previous Demucs, we always normalize because it is easier. + mean = x.mean(dim=(1, 2, 3), keepdim=True) + std = x.std(dim=(1, 2, 3), keepdim=True) + x = (x - mean) / (1e-5 + std) + # x will be the freq. branch input. + + # Prepare the time branch input. + xt = mix + meant = xt.mean(dim=(1, 2), keepdim=True) + stdt = xt.std(dim=(1, 2), keepdim=True) + xt = (xt - meant) / (1e-5 + stdt) + + # okay, this is a giant mess I know... + saved = [] # skip connections, freq. + saved_t = [] # skip connections, time. + lengths = [] # saved lengths to properly remove padding, freq branch. + lengths_t = [] # saved lengths for time branch. + for idx, encode in enumerate(self.encoder): + lengths.append(x.shape[-1]) + inject = None + if idx < len(self.tencoder): + # we have not yet merged branches. + lengths_t.append(xt.shape[-1]) + tenc = self.tencoder[idx] + xt = tenc(xt) + if not tenc.empty: + # save for skip connection + saved_t.append(xt) + else: + # tenc contains just the first conv., so that now time and freq. + # branches have the same shape and can be merged. + inject = xt + x = encode(x, inject) + if idx == 0 and self.freq_emb is not None: + # add frequency embedding to allow for non equivariant convolutions + # over the frequency axis. + frs = torch.arange(x.shape[-2], device=x.device) + emb = self.freq_emb(frs).t()[None, :, :, None].expand_as(x) + x = x + self.freq_emb_scale * emb + + saved.append(x) + if self.crosstransformer: + if self.bottom_channels: + b, c, f, t = x.shape + x = rearrange(x, "b c f t-> b c (f t)") + x = self.channel_upsampler(x) + x = rearrange(x, "b c (f t)-> b c f t", f=f) + xt = self.channel_upsampler_t(xt) + + x, xt = self.crosstransformer(x, xt) + + if self.bottom_channels: + x = rearrange(x, "b c f t-> b c (f t)") + x = self.channel_downsampler(x) + x = rearrange(x, "b c (f t)-> b c f t", f=f) + xt = self.channel_downsampler_t(xt) + + for idx, decode in enumerate(self.decoder): + skip = saved.pop(-1) + x, pre = decode(x, skip, lengths.pop(-1)) + # `pre` contains the output just before final transposed convolution, + # which is used when the freq. and time branch separate. + + offset = self.depth - len(self.tdecoder) + if idx >= offset: + tdec = self.tdecoder[idx - offset] + length_t = lengths_t.pop(-1) + if tdec.empty: + assert pre.shape[2] == 1, pre.shape + pre = pre[:, :, 0] + xt, _ = tdec(pre, None, length_t) + else: + skip = saved_t.pop(-1) + xt, _ = tdec(xt, skip, length_t) + + # Let's make sure we used all stored skip connections. + assert len(saved) == 0 + assert len(lengths_t) == 0 + assert len(saved_t) == 0 + + S = len(self.sources) + x = x.view(B, S, -1, Fq, T) + x = x * std[:, None] + mean[:, None] + + # to cpu as mps doesnt support complex numbers + # demucs issue #435 ##432 + # NOTE: in this case z already is on cpu + # TODO: remove this when mps supports complex numbers + x_is_mps_xpu = x.device.type in ["mps", "xpu"] + x_device = x.device + if x_is_mps_xpu: + x = x.cpu() + + zout = self._mask(z, x) + if self.use_train_segment: + if self.training: + x = self._ispec(zout, length) + else: + x = self._ispec(zout, training_length) + else: + x = self._ispec(zout, length) + + # back to mps device + if x_is_mps_xpu: + x = x.to(x_device) + + if self.use_train_segment: + if self.training: + xt = xt.view(B, S, -1, length) + else: + xt = xt.view(B, S, -1, training_length) + else: + xt = xt.view(B, S, -1, length) + xt = xt * stdt[:, None] + meant[:, None] + x = xt + x + if length_pre_pad: + x = x[..., :length_pre_pad] + return x diff --git a/demucs/demucs/pretrained.py b/demucs/demucs/pretrained.py new file mode 100644 index 00000000..80ae49cb --- /dev/null +++ b/demucs/demucs/pretrained.py @@ -0,0 +1,98 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +"""Loading pretrained models. +""" + +import logging +from pathlib import Path +import typing as tp + +from dora.log import fatal, bold + +from .hdemucs import HDemucs +from .repo import RemoteRepo, LocalRepo, ModelOnlyRepo, BagOnlyRepo, AnyModelRepo, ModelLoadingError # noqa +from .states import _check_diffq + +logger = logging.getLogger(__name__) +ROOT_URL = "https://dl.fbaipublicfiles.com/demucs/" +REMOTE_ROOT = Path(__file__).parent / 'remote' + +SOURCES = ["drums", "bass", "other", "vocals"] +DEFAULT_MODEL = 'htdemucs' + + +def demucs_unittest(): + model = HDemucs(channels=4, sources=SOURCES) + return model + + +def add_model_flags(parser): + group = parser.add_mutually_exclusive_group(required=False) + group.add_argument("-s", "--sig", help="Locally trained XP signature.") + group.add_argument("-n", "--name", default="htdemucs", + help="Pretrained model name or signature. Default is htdemucs.") + parser.add_argument("--repo", type=Path, + help="Folder containing all pre-trained models for use with -n.") + + +def _parse_remote_files(remote_file_list) -> tp.Dict[str, str]: + root: str = '' + models: tp.Dict[str, str] = {} + for line in remote_file_list.read_text().split('\n'): + line = line.strip() + if line.startswith('#'): + continue + elif len(line) == 0: + continue + elif line.startswith('root:'): + root = line.split(':', 1)[1].strip() + else: + sig = line.split('-', 1)[0] + assert sig not in models + models[sig] = ROOT_URL + root + line + return models + + +def get_model(name: str, + repo: tp.Optional[Path] = None): + """`name` must be a bag of models name or a pretrained signature + from the remote AWS model repo or the specified local repo if `repo` is not None. + """ + if name == 'demucs_unittest': + return demucs_unittest() + model_repo: ModelOnlyRepo + if repo is None: + models = _parse_remote_files(REMOTE_ROOT / 'files.txt') + model_repo = RemoteRepo(models) + bag_repo = BagOnlyRepo(REMOTE_ROOT, model_repo) + else: + if not repo.is_dir(): + fatal(f"{repo} must exist and be a directory.") + model_repo = LocalRepo(repo) + bag_repo = BagOnlyRepo(repo, model_repo) + any_repo = AnyModelRepo(model_repo, bag_repo) + try: + model = any_repo.get_model(name) + except ImportError as exc: + if 'diffq' in exc.args[0]: + _check_diffq() + raise + + model.eval() + return model + + +def get_model_from_args(args): + """ + Load local model package or pre-trained model. + """ + if args.name is None: + args.name = DEFAULT_MODEL + print(bold("Important: the default model was recently changed to `htdemucs`"), + "the latest Hybrid Transformer Demucs model. In some cases, this model can " + "actually perform worse than previous models. To get back the old default model " + "use `-n mdx_extra_q`.") + return get_model(name=args.name, repo=args.repo) diff --git a/demucs/demucs/py.typed b/demucs/demucs/py.typed new file mode 100644 index 00000000..e69de29b diff --git a/demucs/demucs/remote/files.txt b/demucs/demucs/remote/files.txt new file mode 100644 index 00000000..346eb33c --- /dev/null +++ b/demucs/demucs/remote/files.txt @@ -0,0 +1,32 @@ +# MDX Models +root: mdx_final/ +0d19c1c6-0f06f20e.th +5d2d6c55-db83574e.th +7d865c68-3d5dd56b.th +7ecf8ec1-70f50cc9.th +a1d90b5c-ae9d2452.th +c511e2ab-fe698775.th +cfa93e08-61801ae1.th +e51eebcc-c1b80bdd.th +6b9c2ca1-3fd82607.th +b72baf4e-8778635e.th +42e558d4-196e0e1b.th +305bc58f-18378783.th +14fc6a69-a89dd0ee.th +464b36d7-e5a9386e.th +7fd6ef75-a905dd85.th +83fc094f-4a16d450.th +1ef250f1-592467ce.th +902315c2-b39ce9c9.th +9a6b4851-03af0aa6.th +fa0cb7f9-100d8bf4.th +# Hybrid Transformer models +root: hybrid_transformer/ +955717e8-8726e21a.th +f7e0c4bc-ba3fe64a.th +d12395a8-e57c48e6.th +92cfc3b6-ef3bcb9c.th +04573f0d-f3cf25b2.th +75fc33f5-1941ce65.th +# Experimental 6 sources model +5c90dfd2-34c22ccb.th diff --git a/demucs/demucs/remote/hdemucs_mmi.yaml b/demucs/demucs/remote/hdemucs_mmi.yaml new file mode 100644 index 00000000..0ea08913 --- /dev/null +++ b/demucs/demucs/remote/hdemucs_mmi.yaml @@ -0,0 +1,2 @@ +models: ['75fc33f5'] +segment: 44 diff --git a/demucs/demucs/remote/htdemucs.yaml b/demucs/demucs/remote/htdemucs.yaml new file mode 100644 index 00000000..0d5f2089 --- /dev/null +++ b/demucs/demucs/remote/htdemucs.yaml @@ -0,0 +1 @@ +models: ['955717e8'] diff --git a/demucs/demucs/remote/htdemucs_6s.yaml b/demucs/demucs/remote/htdemucs_6s.yaml new file mode 100644 index 00000000..651a0fa5 --- /dev/null +++ b/demucs/demucs/remote/htdemucs_6s.yaml @@ -0,0 +1 @@ +models: ['5c90dfd2'] diff --git a/demucs/demucs/remote/htdemucs_ft.yaml b/demucs/demucs/remote/htdemucs_ft.yaml new file mode 100644 index 00000000..ba5c69c2 --- /dev/null +++ b/demucs/demucs/remote/htdemucs_ft.yaml @@ -0,0 +1,7 @@ +models: ['f7e0c4bc', 'd12395a8', '92cfc3b6', '04573f0d'] +weights: [ + [1., 0., 0., 0.], + [0., 1., 0., 0.], + [0., 0., 1., 0.], + [0., 0., 0., 1.], +] \ No newline at end of file diff --git a/demucs/demucs/remote/mdx.yaml b/demucs/demucs/remote/mdx.yaml new file mode 100644 index 00000000..4e81a506 --- /dev/null +++ b/demucs/demucs/remote/mdx.yaml @@ -0,0 +1,8 @@ +models: ['0d19c1c6', '7ecf8ec1', 'c511e2ab', '7d865c68'] +weights: [ + [1., 1., 0., 0.], + [0., 1., 0., 0.], + [1., 0., 1., 1.], + [1., 0., 1., 1.], +] +segment: 44 diff --git a/demucs/demucs/remote/mdx_extra.yaml b/demucs/demucs/remote/mdx_extra.yaml new file mode 100644 index 00000000..847bf665 --- /dev/null +++ b/demucs/demucs/remote/mdx_extra.yaml @@ -0,0 +1,2 @@ +models: ['e51eebcc', 'a1d90b5c', '5d2d6c55', 'cfa93e08'] +segment: 44 \ No newline at end of file diff --git a/demucs/demucs/remote/mdx_extra_q.yaml b/demucs/demucs/remote/mdx_extra_q.yaml new file mode 100644 index 00000000..87702bc8 --- /dev/null +++ b/demucs/demucs/remote/mdx_extra_q.yaml @@ -0,0 +1,2 @@ +models: ['83fc094f', '464b36d7', '14fc6a69', '7fd6ef75'] +segment: 44 diff --git a/demucs/demucs/remote/mdx_q.yaml b/demucs/demucs/remote/mdx_q.yaml new file mode 100644 index 00000000..827d2c66 --- /dev/null +++ b/demucs/demucs/remote/mdx_q.yaml @@ -0,0 +1,8 @@ +models: ['6b9c2ca1', 'b72baf4e', '42e558d4', '305bc58f'] +weights: [ + [1., 1., 0., 0.], + [0., 1., 0., 0.], + [1., 0., 1., 1.], + [1., 0., 1., 1.], +] +segment: 44 diff --git a/demucs/demucs/remote/repro_mdx_a.yaml b/demucs/demucs/remote/repro_mdx_a.yaml new file mode 100644 index 00000000..691abc2c --- /dev/null +++ b/demucs/demucs/remote/repro_mdx_a.yaml @@ -0,0 +1,2 @@ +models: ['9a6b4851', '1ef250f1', 'fa0cb7f9', '902315c2'] +segment: 44 diff --git a/demucs/demucs/remote/repro_mdx_a_hybrid_only.yaml b/demucs/demucs/remote/repro_mdx_a_hybrid_only.yaml new file mode 100644 index 00000000..78eb8e0c --- /dev/null +++ b/demucs/demucs/remote/repro_mdx_a_hybrid_only.yaml @@ -0,0 +1,2 @@ +models: ['fa0cb7f9', '902315c2', 'fa0cb7f9', '902315c2'] +segment: 44 diff --git a/demucs/demucs/remote/repro_mdx_a_time_only.yaml b/demucs/demucs/remote/repro_mdx_a_time_only.yaml new file mode 100644 index 00000000..d5d16ea8 --- /dev/null +++ b/demucs/demucs/remote/repro_mdx_a_time_only.yaml @@ -0,0 +1,2 @@ +models: ['9a6b4851', '9a6b4851', '1ef250f1', '1ef250f1'] +segment: 44 diff --git a/demucs/demucs/repitch.py b/demucs/demucs/repitch.py new file mode 100644 index 00000000..b69c0d25 --- /dev/null +++ b/demucs/demucs/repitch.py @@ -0,0 +1,87 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +"""Utility for on the fly pitch/tempo change for data augmentation.""" + +import random +import subprocess as sp +import tempfile + +from . import audio_legacy +import torch +import torchaudio as ta + +from .audio import save_audio + + +class RepitchedWrapper: + """ + Wrap a dataset to apply online change of pitch / tempo. + """ + def __init__(self, dataset, proba=0.2, max_pitch=2, max_tempo=12, + tempo_std=5, vocals=[3], same=True): + self.dataset = dataset + self.proba = proba + self.max_pitch = max_pitch + self.max_tempo = max_tempo + self.tempo_std = tempo_std + self.same = same + self.vocals = vocals + + def __len__(self): + return len(self.dataset) + + def __getitem__(self, index): + streams = self.dataset[index] + in_length = streams.shape[-1] + out_length = int((1 - 0.01 * self.max_tempo) * in_length) + + if random.random() < self.proba: + outs = [] + for idx, stream in enumerate(streams): + if idx == 0 or not self.same: + delta_pitch = random.randint(-self.max_pitch, self.max_pitch) + delta_tempo = random.gauss(0, self.tempo_std) + delta_tempo = min(max(-self.max_tempo, delta_tempo), self.max_tempo) + stream = repitch( + stream, + delta_pitch, + delta_tempo, + voice=idx in self.vocals) + outs.append(stream[:, :out_length]) + streams = torch.stack(outs) + else: + streams = streams[..., :out_length] + return streams + + +def repitch(wav, pitch, tempo, voice=False, quick=False, samplerate=44100): + """ + tempo is a relative delta in percentage, so tempo=10 means tempo at 110%! + pitch is in semi tones. + Requires `soundstretch` to be installed, see + https://www.surina.net/soundtouch/soundstretch.html + """ + infile = tempfile.NamedTemporaryFile(suffix=".wav") + outfile = tempfile.NamedTemporaryFile(suffix=".wav") + save_audio(wav, infile.name, samplerate, clip='clamp') + command = [ + "soundstretch", + infile.name, + outfile.name, + f"-pitch={pitch}", + f"-tempo={tempo:.6f}", + ] + if quick: + command += ["-quick"] + if voice: + command += ["-speech"] + try: + sp.run(command, capture_output=True, check=True) + except sp.CalledProcessError as error: + raise RuntimeError(f"Could not change bpm because {error.stderr.decode('utf-8')}") + wav, sr = ta.load(outfile.name) + assert sr == samplerate + return wav diff --git a/demucs/demucs/repo.py b/demucs/demucs/repo.py new file mode 100644 index 00000000..5e20ff51 --- /dev/null +++ b/demucs/demucs/repo.py @@ -0,0 +1,166 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +"""Represents a model repository, including pre-trained models and bags of models. +A repo can either be the main remote repository stored in AWS, or a local repository +with your own models. +""" + +from hashlib import sha256 +from pathlib import Path +import typing as tp + +import torch +import yaml + +from .apply import BagOfModels, Model +from .states import load_model + + +AnyModel = tp.Union[Model, BagOfModels] + + +class ModelLoadingError(RuntimeError): + pass + + +def check_checksum(path: Path, checksum: str): + sha = sha256() + with open(path, 'rb') as file: + while True: + buf = file.read(2**20) + if not buf: + break + sha.update(buf) + actual_checksum = sha.hexdigest()[:len(checksum)] + if actual_checksum != checksum: + raise ModelLoadingError(f'Invalid checksum for file {path}, ' + f'expected {checksum} but got {actual_checksum}') + + +class ModelOnlyRepo: + """Base class for all model only repos. + """ + def has_model(self, sig: str) -> bool: + raise NotImplementedError() + + def get_model(self, sig: str) -> Model: + raise NotImplementedError() + + def list_model(self) -> tp.Dict[str, tp.Union[str, Path]]: + raise NotImplementedError() + + +class RemoteRepo(ModelOnlyRepo): + def __init__(self, models: tp.Dict[str, str]): + self._models = models + + def has_model(self, sig: str) -> bool: + return sig in self._models + + def get_model(self, sig: str) -> Model: + try: + url = self._models[sig] + except KeyError: + raise ModelLoadingError(f'Could not find a pre-trained model with signature {sig}.') + pkg = torch.hub.load_state_dict_from_url( + url, map_location='cpu', check_hash=True) # type: ignore + return load_model(pkg) + + def list_model(self) -> tp.Dict[str, tp.Union[str, Path]]: + return self._models # type: ignore + + +class LocalRepo(ModelOnlyRepo): + def __init__(self, root: Path): + self.root = root + self.scan() + + def scan(self): + self._models = {} + self._checksums = {} + for file in self.root.iterdir(): + if file.suffix == '.th': + if '-' in file.stem: + xp_sig, checksum = file.stem.split('-') + self._checksums[xp_sig] = checksum + else: + xp_sig = file.stem + if xp_sig in self._models: + raise ModelLoadingError( + f'Duplicate pre-trained model exist for signature {xp_sig}. ' + 'Please delete all but one.') + self._models[xp_sig] = file + + def has_model(self, sig: str) -> bool: + return sig in self._models + + def get_model(self, sig: str) -> Model: + try: + file = self._models[sig] + except KeyError: + raise ModelLoadingError(f'Could not find pre-trained model with signature {sig}.') + if sig in self._checksums: + check_checksum(file, self._checksums[sig]) + return load_model(file) + + def list_model(self) -> tp.Dict[str, tp.Union[str, Path]]: + return self._models + + +class BagOnlyRepo: + """Handles only YAML files containing bag of models, leaving the actual + model loading to some Repo. + """ + def __init__(self, root: Path, model_repo: ModelOnlyRepo): + self.root = root + self.model_repo = model_repo + self.scan() + + def scan(self): + self._bags = {} + for file in self.root.iterdir(): + if file.suffix == '.yaml': + self._bags[file.stem] = file + + def has_model(self, name: str) -> bool: + return name in self._bags + + def get_model(self, name: str) -> BagOfModels: + try: + yaml_file = self._bags[name] + except KeyError: + raise ModelLoadingError(f'{name} is neither a single pre-trained model or ' + 'a bag of models.') + bag = yaml.safe_load(open(yaml_file)) + signatures = bag['models'] + models = [self.model_repo.get_model(sig) for sig in signatures] + weights = bag.get('weights') + segment = bag.get('segment') + return BagOfModels(models, weights, segment) + + def list_model(self) -> tp.Dict[str, tp.Union[str, Path]]: + return self._bags + + +class AnyModelRepo: + def __init__(self, model_repo: ModelOnlyRepo, bag_repo: BagOnlyRepo): + self.model_repo = model_repo + self.bag_repo = bag_repo + + def has_model(self, name_or_sig: str) -> bool: + return self.model_repo.has_model(name_or_sig) or self.bag_repo.has_model(name_or_sig) + + def get_model(self, name_or_sig: str) -> AnyModel: + if self.model_repo.has_model(name_or_sig): + return self.model_repo.get_model(name_or_sig) + else: + return self.bag_repo.get_model(name_or_sig) + + def list_model(self) -> tp.Dict[str, tp.Union[str, Path]]: + models = self.model_repo.list_model() + for key, value in self.bag_repo.list_model().items(): + models[key] = value + return models diff --git a/demucs/demucs/separate.py b/demucs/demucs/separate.py new file mode 100644 index 00000000..7de5f114 --- /dev/null +++ b/demucs/demucs/separate.py @@ -0,0 +1,228 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import argparse +import sys +from pathlib import Path + +from dora.log import fatal +import torch as th + +from .api import Separator, save_audio, list_models + +from .apply import BagOfModels +from .htdemucs import HTDemucs +from .pretrained import add_model_flags, ModelLoadingError + + +def get_parser(): + parser = argparse.ArgumentParser("demucs.separate", + description="Separate the sources for the given tracks") + parser.add_argument("tracks", nargs='*', type=Path, default=[], help='Path to tracks') + add_model_flags(parser) + parser.add_argument("--list-models", action="store_true", help="List available models " + "from current repo and exit") + parser.add_argument("-v", "--verbose", action="store_true") + parser.add_argument("-o", + "--out", + type=Path, + default=Path("separated"), + help="Folder where to put extracted tracks. A subfolder " + "with the model name will be created.") + parser.add_argument("--filename", + default="{track}/{stem}.{ext}", + help="Set the name of output file. \n" + 'Use "{track}", "{trackext}", "{stem}", "{ext}" to use ' + "variables of track name without extension, track extension, " + "stem name and default output file extension. \n" + 'Default is "{track}/{stem}.{ext}".') + parser.add_argument("-d", + "--device", + default=( + "cuda" + if th.cuda.is_available() + else "mps" + if th.backends.mps.is_available() + else "cpu" + ), + help="Device to use, default is cuda if available else cpu") + parser.add_argument("--shifts", + default=1, + type=int, + help="Number of random shifts for equivariant stabilization." + "Increase separation time but improves quality for Demucs. 10 was used " + "in the original paper.") + parser.add_argument("--overlap", + default=0.25, + type=float, + help="Overlap between the splits.") + split_group = parser.add_mutually_exclusive_group() + split_group.add_argument("--no-split", + action="store_false", + dest="split", + default=True, + help="Doesn't split audio in chunks. " + "This can use large amounts of memory.") + split_group.add_argument("--segment", type=int, + help="Set split size of each chunk. " + "This can help save memory of graphic card. ") + parser.add_argument("--two-stems", + dest="stem", metavar="STEM", + help="Only separate audio into {STEM} and no_{STEM}. ") + parser.add_argument("--other-method", dest="other_method", choices=["none", "add", "minus"], + default="add", help='Decide how to get "no_{STEM}". "none" will not save ' + '"no_{STEM}". "add" will add all the other stems. "minus" will use the ' + "original track minus the selected stem.") + depth_group = parser.add_mutually_exclusive_group() + depth_group.add_argument("--int24", action="store_true", + help="Save wav output as 24 bits wav.") + depth_group.add_argument("--float32", action="store_true", + help="Save wav output as float32 (2x bigger).") + parser.add_argument("--clip-mode", default="rescale", choices=["rescale", "clamp", "none"], + help="Strategy for avoiding clipping: rescaling entire signal " + "if necessary (rescale) or hard clipping (clamp).") + format_group = parser.add_mutually_exclusive_group() + format_group.add_argument("--flac", action="store_true", + help="Convert the output wavs to flac.") + format_group.add_argument("--mp3", action="store_true", + help="Convert the output wavs to mp3.") + parser.add_argument("--mp3-bitrate", + default=320, + type=int, + help="Bitrate of converted mp3.") + parser.add_argument("--mp3-preset", choices=range(2, 8), type=int, default=2, + help="Encoder preset of MP3, 2 for highest quality, 7 for " + "fastest speed. Default is 2") + parser.add_argument("-j", "--jobs", + default=0, + type=int, + help="Number of jobs. This can increase memory usage but will " + "be much faster when multiple cores are available.") + + return parser + + +def main(opts=None): + parser = get_parser() + args = parser.parse_args(opts) + if args.list_models: + models = list_models(args.repo) + print("Bag of models:", end="\n ") + print("\n ".join(models["bag"])) + print("Single models:", end="\n ") + print("\n ".join(models["single"])) + sys.exit(0) + if len(args.tracks) == 0: + print("error: the following arguments are required: tracks", file=sys.stderr) + sys.exit(1) + + try: + separator = Separator(model=args.name, + repo=args.repo, + device=args.device, + shifts=args.shifts, + split=args.split, + overlap=args.overlap, + progress=True, + jobs=args.jobs, + segment=args.segment) + except ModelLoadingError as error: + fatal(error.args[0]) + + max_allowed_segment = float('inf') + if isinstance(separator.model, HTDemucs): + max_allowed_segment = float(separator.model.segment) + elif isinstance(separator.model, BagOfModels): + max_allowed_segment = separator.model.max_allowed_segment + if args.segment is not None and args.segment > max_allowed_segment: + fatal("Cannot use a Transformer model with a longer segment " + f"than it was trained for. Maximum segment is: {max_allowed_segment}") + + if isinstance(separator.model, BagOfModels): + print( + f"Selected model is a bag of {len(separator.model.models)} models. " + "You will see that many progress bars per track." + ) + + if args.stem is not None and args.stem not in separator.model.sources: + fatal( + 'error: stem "{stem}" is not in selected model. ' + "STEM must be one of {sources}.".format( + stem=args.stem, sources=", ".join(separator.model.sources) + ) + ) + out = args.out / args.name + out.mkdir(parents=True, exist_ok=True) + print(f"Separated tracks will be stored in {out.resolve()}") + for track in args.tracks: + if not track.exists(): + print(f"File {track} does not exist. If the path contains spaces, " + 'please try again after surrounding the entire path with quotes "".', + file=sys.stderr) + continue + print(f"Separating track {track}") + + origin, res = separator.separate_audio_file(track) + + if args.mp3: + ext = "mp3" + elif args.flac: + ext = "flac" + else: + ext = "wav" + kwargs = { + "samplerate": separator.samplerate, + "bitrate": args.mp3_bitrate, + "preset": args.mp3_preset, + "clip": args.clip_mode, + "as_float": args.float32, + "bits_per_sample": 24 if args.int24 else 16, + } + if args.stem is None: + for name, source in res.items(): + stem = out / args.filename.format( + track=track.name.rsplit(".", 1)[0], + trackext=track.name.rsplit(".", 1)[-1], + stem=name, + ext=ext, + ) + stem.parent.mkdir(parents=True, exist_ok=True) + save_audio(source, str(stem), **kwargs) + else: + stem = out / args.filename.format( + track=track.name.rsplit(".", 1)[0], + trackext=track.name.rsplit(".", 1)[-1], + stem="minus_" + args.stem, + ext=ext, + ) + if args.other_method == "minus": + stem.parent.mkdir(parents=True, exist_ok=True) + save_audio(origin - res[args.stem], str(stem), **kwargs) + stem = out / args.filename.format( + track=track.name.rsplit(".", 1)[0], + trackext=track.name.rsplit(".", 1)[-1], + stem=args.stem, + ext=ext, + ) + stem.parent.mkdir(parents=True, exist_ok=True) + save_audio(res.pop(args.stem), str(stem), **kwargs) + # Warning : after poping the stem, selected stem is no longer in the dict 'res' + if args.other_method == "add": + other_stem = th.zeros_like(next(iter(res.values()))) + for i in res.values(): + other_stem += i + stem = out / args.filename.format( + track=track.name.rsplit(".", 1)[0], + trackext=track.name.rsplit(".", 1)[-1], + stem="no_" + args.stem, + ext=ext, + ) + stem.parent.mkdir(parents=True, exist_ok=True) + save_audio(other_stem, str(stem), **kwargs) + + +if __name__ == "__main__": + main() diff --git a/demucs/demucs/solver.py b/demucs/demucs/solver.py new file mode 100644 index 00000000..7c80b148 --- /dev/null +++ b/demucs/demucs/solver.py @@ -0,0 +1,405 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +"""Main training loop.""" + +import logging + +from dora import get_xp +from dora.utils import write_and_rename +from dora.log import LogProgress, bold +import torch +import torch.nn.functional as F + +from . import augment, distrib, states, pretrained +from .apply import apply_model +from .ema import ModelEMA +from .evaluate import evaluate, new_sdr +from .svd import svd_penalty +from .utils import pull_metric, EMA + +logger = logging.getLogger(__name__) + + +def _summary(metrics): + return " | ".join(f"{key.capitalize()}={val}" for key, val in metrics.items()) + + +class Solver(object): + def __init__(self, loaders, model, optimizer, args): + self.args = args + self.loaders = loaders + + self.model = model + self.optimizer = optimizer + self.quantizer = states.get_quantizer(self.model, args.quant, self.optimizer) + self.dmodel = distrib.wrap(model) + self.device = next(iter(self.model.parameters())).device + + # Exponential moving average of the model, either updated every batch or epoch. + # The best model from all the EMAs and the original one is kept based on the valid + # loss for the final best model. + self.emas = {'batch': [], 'epoch': []} + for kind in self.emas.keys(): + decays = getattr(args.ema, kind) + device = self.device if kind == 'batch' else 'cpu' + if decays: + for decay in decays: + self.emas[kind].append(ModelEMA(self.model, decay, device=device)) + + # data augment + augments = [augment.Shift(shift=int(args.dset.samplerate * args.dset.shift), + same=args.augment.shift_same)] + if args.augment.flip: + augments += [augment.FlipChannels(), augment.FlipSign()] + for aug in ['scale', 'remix']: + kw = getattr(args.augment, aug) + if kw.proba: + augments.append(getattr(augment, aug.capitalize())(**kw)) + self.augment = torch.nn.Sequential(*augments) + + xp = get_xp() + self.folder = xp.folder + # Checkpoints + self.checkpoint_file = xp.folder / 'checkpoint.th' + self.best_file = xp.folder / 'best.th' + logger.debug("Checkpoint will be saved to %s", self.checkpoint_file.resolve()) + self.best_state = None + self.best_changed = False + + self.link = xp.link + self.history = self.link.history + + self._reset() + + def _serialize(self, epoch): + package = {} + package['state'] = self.model.state_dict() + package['optimizer'] = self.optimizer.state_dict() + package['history'] = self.history + package['best_state'] = self.best_state + package['args'] = self.args + for kind, emas in self.emas.items(): + for k, ema in enumerate(emas): + package[f'ema_{kind}_{k}'] = ema.state_dict() + with write_and_rename(self.checkpoint_file) as tmp: + torch.save(package, tmp) + + save_every = self.args.save_every + if save_every and (epoch + 1) % save_every == 0 and epoch + 1 != self.args.epochs: + with write_and_rename(self.folder / f'checkpoint_{epoch + 1}.th') as tmp: + torch.save(package, tmp) + + if self.best_changed: + # Saving only the latest best model. + with write_and_rename(self.best_file) as tmp: + package = states.serialize_model(self.model, self.args) + package['state'] = self.best_state + torch.save(package, tmp) + self.best_changed = False + + def _reset(self): + """Reset state of the solver, potentially using checkpoint.""" + if self.checkpoint_file.exists(): + logger.info(f'Loading checkpoint model: {self.checkpoint_file}') + package = torch.load(self.checkpoint_file, 'cpu') + self.model.load_state_dict(package['state']) + self.optimizer.load_state_dict(package['optimizer']) + self.history[:] = package['history'] + self.best_state = package['best_state'] + for kind, emas in self.emas.items(): + for k, ema in enumerate(emas): + ema.load_state_dict(package[f'ema_{kind}_{k}']) + elif self.args.continue_pretrained: + model = pretrained.get_model( + name=self.args.continue_pretrained, + repo=self.args.pretrained_repo) + self.model.load_state_dict(model.state_dict()) + elif self.args.continue_from: + name = 'checkpoint.th' + root = self.folder.parent + cf = root / str(self.args.continue_from) / name + logger.info("Loading from %s", cf) + package = torch.load(cf, 'cpu') + self.best_state = package['best_state'] + if self.args.continue_best: + self.model.load_state_dict(package['best_state'], strict=False) + else: + self.model.load_state_dict(package['state'], strict=False) + if self.args.continue_opt: + self.optimizer.load_state_dict(package['optimizer']) + + def _format_train(self, metrics: dict) -> dict: + """Formatting for train/valid metrics.""" + losses = { + 'loss': format(metrics['loss'], ".4f"), + 'reco': format(metrics['reco'], ".4f"), + } + if 'nsdr' in metrics: + losses['nsdr'] = format(metrics['nsdr'], ".3f") + if self.quantizer is not None: + losses['ms'] = format(metrics['ms'], ".2f") + if 'grad' in metrics: + losses['grad'] = format(metrics['grad'], ".4f") + if 'best' in metrics: + losses['best'] = format(metrics['best'], '.4f') + if 'bname' in metrics: + losses['bname'] = metrics['bname'] + if 'penalty' in metrics: + losses['penalty'] = format(metrics['penalty'], ".4f") + if 'hloss' in metrics: + losses['hloss'] = format(metrics['hloss'], ".4f") + return losses + + def _format_test(self, metrics: dict) -> dict: + """Formatting for test metrics.""" + losses = {} + if 'sdr' in metrics: + losses['sdr'] = format(metrics['sdr'], '.3f') + if 'nsdr' in metrics: + losses['nsdr'] = format(metrics['nsdr'], '.3f') + for source in self.model.sources: + key = f'sdr_{source}' + if key in metrics: + losses[key] = format(metrics[key], '.3f') + key = f'nsdr_{source}' + if key in metrics: + losses[key] = format(metrics[key], '.3f') + return losses + + def train(self): + # Optimizing the model + if self.history: + logger.info("Replaying metrics from previous run") + for epoch, metrics in enumerate(self.history): + formatted = self._format_train(metrics['train']) + logger.info( + bold(f'Train Summary | Epoch {epoch + 1} | {_summary(formatted)}')) + formatted = self._format_train(metrics['valid']) + logger.info( + bold(f'Valid Summary | Epoch {epoch + 1} | {_summary(formatted)}')) + if 'test' in metrics: + formatted = self._format_test(metrics['test']) + if formatted: + logger.info(bold(f"Test Summary | Epoch {epoch + 1} | {_summary(formatted)}")) + + epoch = 0 + for epoch in range(len(self.history), self.args.epochs): + # Train one epoch + self.model.train() # Turn on BatchNorm & Dropout + metrics = {} + logger.info('-' * 70) + logger.info("Training...") + metrics['train'] = self._run_one_epoch(epoch) + formatted = self._format_train(metrics['train']) + logger.info( + bold(f'Train Summary | Epoch {epoch + 1} | {_summary(formatted)}')) + + # Cross validation + logger.info('-' * 70) + logger.info('Cross validation...') + self.model.eval() # Turn off Batchnorm & Dropout + with torch.no_grad(): + valid = self._run_one_epoch(epoch, train=False) + bvalid = valid + bname = 'main' + state = states.copy_state(self.model.state_dict()) + metrics['valid'] = {} + metrics['valid']['main'] = valid + key = self.args.test.metric + for kind, emas in self.emas.items(): + for k, ema in enumerate(emas): + with ema.swap(): + valid = self._run_one_epoch(epoch, train=False) + name = f'ema_{kind}_{k}' + metrics['valid'][name] = valid + a = valid[key] + b = bvalid[key] + if key.startswith('nsdr'): + a = -a + b = -b + if a < b: + bvalid = valid + state = ema.state + bname = name + metrics['valid'].update(bvalid) + metrics['valid']['bname'] = bname + + valid_loss = metrics['valid'][key] + mets = pull_metric(self.link.history, f'valid.{key}') + [valid_loss] + if key.startswith('nsdr'): + best_loss = max(mets) + else: + best_loss = min(mets) + metrics['valid']['best'] = best_loss + if self.args.svd.penalty > 0: + kw = dict(self.args.svd) + kw.pop('penalty') + with torch.no_grad(): + penalty = svd_penalty(self.model, exact=True, **kw) + metrics['valid']['penalty'] = penalty + + formatted = self._format_train(metrics['valid']) + logger.info( + bold(f'Valid Summary | Epoch {epoch + 1} | {_summary(formatted)}')) + + # Save the best model + if valid_loss == best_loss or self.args.dset.train_valid: + logger.info(bold('New best valid loss %.4f'), valid_loss) + self.best_state = states.copy_state(state) + self.best_changed = True + + # Eval model every `test.every` epoch or on last epoch + should_eval = (epoch + 1) % self.args.test.every == 0 + is_last = epoch == self.args.epochs - 1 + # # Tries to detect divergence in a reliable way and finish job + # # not to waste compute. + # # Commented out as this was super specific to the MDX competition. + # reco = metrics['valid']['main']['reco'] + # div = epoch >= 180 and reco > 0.18 + # div = div or epoch >= 100 and reco > 0.25 + # div = div and self.args.optim.loss == 'l1' + # if div: + # logger.warning("Finishing training early because valid loss is too high.") + # is_last = True + if should_eval or is_last: + # Evaluate on the testset + logger.info('-' * 70) + logger.info('Evaluating on the test set...') + # We switch to the best known model for testing + if self.args.test.best: + state = self.best_state + else: + state = states.copy_state(self.model.state_dict()) + compute_sdr = self.args.test.sdr and is_last + with states.swap_state(self.model, state): + with torch.no_grad(): + metrics['test'] = evaluate(self, compute_sdr=compute_sdr) + formatted = self._format_test(metrics['test']) + logger.info(bold(f"Test Summary | Epoch {epoch + 1} | {_summary(formatted)}")) + self.link.push_metrics(metrics) + + if distrib.rank == 0: + # Save model each epoch + self._serialize(epoch) + logger.debug("Checkpoint saved to %s", self.checkpoint_file.resolve()) + if is_last: + break + + def _run_one_epoch(self, epoch, train=True): + args = self.args + data_loader = self.loaders['train'] if train else self.loaders['valid'] + if distrib.world_size > 1 and train: + data_loader.sampler.set_epoch(epoch) + + label = ["Valid", "Train"][train] + name = label + f" | Epoch {epoch + 1}" + total = len(data_loader) + if args.max_batches: + total = min(total, args.max_batches) + logprog = LogProgress(logger, data_loader, total=total, + updates=self.args.misc.num_prints, name=name) + averager = EMA() + + for idx, sources in enumerate(logprog): + sources = sources.to(self.device) + if train: + sources = self.augment(sources) + mix = sources.sum(dim=1) + else: + mix = sources[:, 0] + sources = sources[:, 1:] + + if not train and self.args.valid_apply: + estimate = apply_model(self.model, mix, split=self.args.test.split, overlap=0) + else: + estimate = self.dmodel(mix) + if train and hasattr(self.model, 'transform_target'): + sources = self.model.transform_target(mix, sources) + assert estimate.shape == sources.shape, (estimate.shape, sources.shape) + dims = tuple(range(2, sources.dim())) + + if args.optim.loss == 'l1': + loss = F.l1_loss(estimate, sources, reduction='none') + loss = loss.mean(dims).mean(0) + reco = loss + elif args.optim.loss == 'mse': + loss = F.mse_loss(estimate, sources, reduction='none') + loss = loss.mean(dims) + reco = loss**0.5 + reco = reco.mean(0) + else: + raise ValueError(f"Invalid loss {self.args.loss}") + weights = torch.tensor(args.weights).to(sources) + loss = (loss * weights).sum() / weights.sum() + + ms = 0 + if self.quantizer is not None: + ms = self.quantizer.model_size() + if args.quant.diffq: + loss += args.quant.diffq * ms + + losses = {} + losses['reco'] = (reco * weights).sum() / weights.sum() + losses['ms'] = ms + + if not train: + nsdrs = new_sdr(sources, estimate.detach()).mean(0) + total = 0 + for source, nsdr, w in zip(self.model.sources, nsdrs, weights): + losses[f'nsdr_{source}'] = nsdr + total += w * nsdr + losses['nsdr'] = total / weights.sum() + + if train and args.svd.penalty > 0: + kw = dict(args.svd) + kw.pop('penalty') + penalty = svd_penalty(self.model, **kw) + losses['penalty'] = penalty + loss += args.svd.penalty * penalty + + losses['loss'] = loss + + for k, source in enumerate(self.model.sources): + losses[f'reco_{source}'] = reco[k] + + # optimize model in training mode + if train: + loss.backward() + grad_norm = 0 + grads = [] + for p in self.model.parameters(): + if p.grad is not None: + grad_norm += p.grad.data.norm()**2 + grads.append(p.grad.data) + losses['grad'] = grad_norm ** 0.5 + if args.optim.clip_grad: + torch.nn.utils.clip_grad_norm_( + self.model.parameters(), + args.optim.clip_grad) + + if self.args.flag == 'uns': + for n, p in self.model.named_parameters(): + if p.grad is None: + print('no grad', n) + self.optimizer.step() + self.optimizer.zero_grad() + for ema in self.emas['batch']: + ema.update() + losses = averager(losses) + logs = self._format_train(losses) + logprog.update(**logs) + # Just in case, clear some memory + del loss, estimate, reco, ms + if args.max_batches == idx: + break + if self.args.debug and train: + break + if self.args.flag == 'debug': + break + if train: + for ema in self.emas['epoch']: + ema.update() + return distrib.average(losses, idx + 1) diff --git a/demucs/demucs/spec.py b/demucs/demucs/spec.py new file mode 100644 index 00000000..d8f6ee5e --- /dev/null +++ b/demucs/demucs/spec.py @@ -0,0 +1,47 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +"""Conveniance wrapper to perform STFT and iSTFT""" + +import torch as th + + +def spectro(x, n_fft=512, hop_length=None, pad=0): + *other, length = x.shape + x = x.reshape(-1, length) + is_mps_xpu = x.device.type in ['mps', 'xpu'] + if is_mps_xpu: + x = x.cpu() + z = th.stft(x, + n_fft * (1 + pad), + hop_length or n_fft // 4, + window=th.hann_window(n_fft).to(x), + win_length=n_fft, + normalized=True, + center=True, + return_complex=True, + pad_mode='reflect') + _, freqs, frame = z.shape + return z.view(*other, freqs, frame) + + +def ispectro(z, hop_length=None, length=None, pad=0): + *other, freqs, frames = z.shape + n_fft = 2 * freqs - 2 + z = z.view(-1, freqs, frames) + win_length = n_fft // (1 + pad) + is_mps_xpu = z.device.type in ['mps', 'xpu'] + if is_mps_xpu: + z = z.cpu() + x = th.istft(z, + n_fft, + hop_length, + window=th.hann_window(win_length).to(z.real), + win_length=win_length, + normalized=True, + length=length, + center=True) + _, length = x.shape + return x.view(*other, length) diff --git a/demucs/demucs/states.py b/demucs/demucs/states.py new file mode 100644 index 00000000..361bb419 --- /dev/null +++ b/demucs/demucs/states.py @@ -0,0 +1,163 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +""" +Utilities to save and load models. +""" +from contextlib import contextmanager + +import functools +import hashlib +import inspect +import io +from pathlib import Path +import warnings + +from omegaconf import OmegaConf +from dora.log import fatal +import torch + + +def _check_diffq(): + try: + import diffq # noqa + except ImportError: + fatal('Trying to use DiffQ, but diffq is not installed.\n' + 'On Windows run: python.exe -m pip install diffq \n' + 'On Linux/Mac, run: python3 -m pip install diffq') + + +def get_quantizer(model, args, optimizer=None): + """Return the quantizer given the XP quantization args.""" + quantizer = None + if args.diffq: + _check_diffq() + from diffq import DiffQuantizer + quantizer = DiffQuantizer( + model, min_size=args.min_size, group_size=args.group_size) + if optimizer is not None: + quantizer.setup_optimizer(optimizer) + elif args.qat: + _check_diffq() + from diffq import UniformQuantizer + quantizer = UniformQuantizer( + model, bits=args.qat, min_size=args.min_size) + return quantizer + + +def load_model(path_or_package, strict=False): + """Load a model from the given serialized model, either given as a dict (already loaded) + or a path to a file on disk.""" + if isinstance(path_or_package, dict): + package = path_or_package + elif isinstance(path_or_package, (str, Path)): + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + path = path_or_package + package = torch.load(path, 'cpu') + else: + raise ValueError(f"Invalid type for {path_or_package}.") + + klass = package["klass"] + args = package["args"] + kwargs = package["kwargs"] + + if strict: + model = klass(*args, **kwargs) + else: + sig = inspect.signature(klass) + for key in list(kwargs): + if key not in sig.parameters: + warnings.warn("Dropping inexistant parameter " + key) + del kwargs[key] + model = klass(*args, **kwargs) + + state = package["state"] + + set_state(model, state) + return model + + +def get_state(model, quantizer, half=False): + """Get the state from a model, potentially with quantization applied. + If `half` is True, model are stored as half precision, which shouldn't impact performance + but half the state size.""" + if quantizer is None: + dtype = torch.half if half else None + state = {k: p.data.to(device='cpu', dtype=dtype) for k, p in model.state_dict().items()} + else: + state = quantizer.get_quantized_state() + state['__quantized'] = True + return state + + +def set_state(model, state, quantizer=None): + """Set the state on a given model.""" + if state.get('__quantized'): + if quantizer is not None: + quantizer.restore_quantized_state(model, state['quantized']) + else: + _check_diffq() + from diffq import restore_quantized_state + restore_quantized_state(model, state) + else: + model.load_state_dict(state) + return state + + +def save_with_checksum(content, path): + """Save the given value on disk, along with a sha256 hash. + Should be used with the output of either `serialize_model` or `get_state`.""" + buf = io.BytesIO() + torch.save(content, buf) + sig = hashlib.sha256(buf.getvalue()).hexdigest()[:8] + + path = path.parent / (path.stem + "-" + sig + path.suffix) + path.write_bytes(buf.getvalue()) + + +def serialize_model(model, training_args, quantizer=None, half=True): + args, kwargs = model._init_args_kwargs + klass = model.__class__ + + state = get_state(model, quantizer, half) + return { + 'klass': klass, + 'args': args, + 'kwargs': kwargs, + 'state': state, + 'training_args': OmegaConf.to_container(training_args, resolve=True), + } + + +def copy_state(state): + return {k: v.cpu().clone() for k, v in state.items()} + + +@contextmanager +def swap_state(model, state): + """ + Context manager that swaps the state of a model, e.g: + + # model is in old state + with swap_state(model, new_state): + # model in new state + # model back to old state + """ + old_state = copy_state(model.state_dict()) + model.load_state_dict(state, strict=False) + try: + yield + finally: + model.load_state_dict(old_state) + + +def capture_init(init): + @functools.wraps(init) + def __init__(self, *args, **kwargs): + self._init_args_kwargs = (args, kwargs) + init(self, *args, **kwargs) + + return __init__ diff --git a/demucs/demucs/svd.py b/demucs/demucs/svd.py new file mode 100644 index 00000000..1cbaa82c --- /dev/null +++ b/demucs/demucs/svd.py @@ -0,0 +1,83 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +"""Ways to make the model stronger.""" +import random +import torch + + +def power_iteration(m, niters=1, bs=1): + """This is the power method. batch size is used to try multiple starting point in parallel.""" + assert m.dim() == 2 + assert m.shape[0] == m.shape[1] + dim = m.shape[0] + b = torch.randn(dim, bs, device=m.device, dtype=m.dtype) + + for _ in range(niters): + n = m.mm(b) + norm = n.norm(dim=0, keepdim=True) + b = n / (1e-10 + norm) + + return norm.mean() + + +# We need a shared RNG to make sure all the distributed worker will skip the penalty together, +# as otherwise we wouldn't get any speed up. +penalty_rng = random.Random(1234) + + +def svd_penalty(model, min_size=0.1, dim=1, niters=2, powm=False, convtr=True, + proba=1, conv_only=False, exact=False, bs=1): + """ + Penalty on the largest singular value for a layer. + Args: + - model: model to penalize + - min_size: minimum size in MB of a layer to penalize. + - dim: projection dimension for the svd_lowrank. Higher is better but slower. + - niters: number of iterations in the algorithm used by svd_lowrank. + - powm: use power method instead of lowrank SVD, my own experience + is that it is both slower and less stable. + - convtr: when True, differentiate between Conv and Transposed Conv. + this is kept for compatibility with older experiments. + - proba: probability to apply the penalty. + - conv_only: only apply to conv and conv transposed, not LSTM + (might not be reliable for other models than Demucs). + - exact: use exact SVD (slow but useful at validation). + - bs: batch_size for power method. + """ + total = 0 + if penalty_rng.random() > proba: + return 0. + + for m in model.modules(): + for name, p in m.named_parameters(recurse=False): + if p.numel() / 2**18 < min_size: + continue + if convtr: + if isinstance(m, (torch.nn.ConvTranspose1d, torch.nn.ConvTranspose2d)): + if p.dim() in [3, 4]: + p = p.transpose(0, 1).contiguous() + if p.dim() == 3: + p = p.view(len(p), -1) + elif p.dim() == 4: + p = p.view(len(p), -1) + elif p.dim() == 1: + continue + elif conv_only: + continue + assert p.dim() == 2, (name, p.shape) + if exact: + estimate = torch.svd(p, compute_uv=False)[1].pow(2).max() + elif powm: + a, b = p.shape + if a < b: + n = p.mm(p.t()) + else: + n = p.t().mm(p) + estimate = power_iteration(n, niters, bs) + else: + estimate = torch.svd_lowrank(p, dim, niters)[1][0].pow(2) + total += estimate + return total / proba diff --git a/demucs/demucs/train.py b/demucs/demucs/train.py new file mode 100644 index 00000000..e045b83f --- /dev/null +++ b/demucs/demucs/train.py @@ -0,0 +1,252 @@ +#!/usr/bin/env python3 +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +"""Main training script entry point""" + +import logging +import os +from pathlib import Path +import sys + +from dora import hydra_main +import hydra +from hydra.core.global_hydra import GlobalHydra +from omegaconf import OmegaConf +from . import audio_legacy +import torch +from torch import nn +import torchaudio +from torch.utils.data import ConcatDataset + +from . import distrib +from .wav import get_wav_datasets, get_musdb_wav_datasets +from .demucs import Demucs +from .hdemucs import HDemucs +from .htdemucs import HTDemucs +from .repitch import RepitchedWrapper +from .solver import Solver +from .states import capture_init +from .utils import random_subset + +logger = logging.getLogger(__name__) + + +class TorchHDemucsWrapper(nn.Module): + """Wrapper around torchaudio HDemucs implementation to provide the proper metadata + for model evaluation. + See https://pytorch.org/audio/stable/tutorials/hybrid_demucs_tutorial.html""" + + @capture_init + def __init__(self, **kwargs): + super().__init__() + try: + from torchaudio.models import HDemucs as TorchHDemucs + except ImportError: + raise ImportError("Please upgrade torchaudio for using its implementation of HDemucs") + self.samplerate = kwargs.pop('samplerate') + self.segment = kwargs.pop('segment') + self.sources = kwargs['sources'] + self.torch_hdemucs = TorchHDemucs(**kwargs) + + def forward(self, mix): + return self.torch_hdemucs.forward(mix) + + +def get_model(args): + extra = { + 'sources': list(args.dset.sources), + 'audio_channels': args.dset.channels, + 'samplerate': args.dset.samplerate, + 'segment': args.model_segment or 4 * args.dset.segment, + } + klass = { + 'demucs': Demucs, + 'hdemucs': HDemucs, + 'htdemucs': HTDemucs, + 'torch_hdemucs': TorchHDemucsWrapper, + }[args.model] + kw = OmegaConf.to_container(getattr(args, args.model), resolve=True) + model = klass(**extra, **kw) + return model + + +def get_optimizer(model, args): + seen_params = set() + other_params = [] + groups = [] + for n, module in model.named_modules(): + if hasattr(module, "make_optim_group"): + group = module.make_optim_group() + params = set(group["params"]) + assert params.isdisjoint(seen_params) + seen_params |= set(params) + groups.append(group) + for param in model.parameters(): + if param not in seen_params: + other_params.append(param) + groups.insert(0, {"params": other_params}) + parameters = groups + if args.optim.optim == "adam": + return torch.optim.Adam( + parameters, + lr=args.optim.lr, + betas=(args.optim.momentum, args.optim.beta2), + weight_decay=args.optim.weight_decay, + ) + elif args.optim.optim == "adamw": + return torch.optim.AdamW( + parameters, + lr=args.optim.lr, + betas=(args.optim.momentum, args.optim.beta2), + weight_decay=args.optim.weight_decay, + ) + else: + raise ValueError("Invalid optimizer %s", args.optim.optimizer) + + +def get_datasets(args): + if args.dset.backend: + torchaudio.set_audio_backend(args.dset.backend) + if args.dset.use_musdb: + train_set, valid_set = get_musdb_wav_datasets(args.dset) + else: + train_set, valid_set = [], [] + if args.dset.wav: + extra_train_set, extra_valid_set = get_wav_datasets(args.dset) + if len(args.dset.sources) <= 4: + train_set = ConcatDataset([train_set, extra_train_set]) + valid_set = ConcatDataset([valid_set, extra_valid_set]) + else: + train_set = extra_train_set + valid_set = extra_valid_set + + if args.dset.wav2: + extra_train_set, extra_valid_set = get_wav_datasets(args.dset, "wav2") + weight = args.dset.wav2_weight + if weight is not None: + b = len(train_set) + e = len(extra_train_set) + reps = max(1, round(e / b * (1 / weight - 1))) + else: + reps = 1 + train_set = ConcatDataset([train_set] * reps + [extra_train_set]) + if args.dset.wav2_valid: + if weight is not None: + b = len(valid_set) + n_kept = int(round(weight * b / (1 - weight))) + valid_set = ConcatDataset( + [valid_set, random_subset(extra_valid_set, n_kept)] + ) + else: + valid_set = ConcatDataset([valid_set, extra_valid_set]) + if args.dset.valid_samples is not None: + valid_set = random_subset(valid_set, args.dset.valid_samples) + assert len(train_set) + assert len(valid_set) + return train_set, valid_set + + +def get_solver(args, model_only=False): + distrib.init() + + torch.manual_seed(args.seed) + model = get_model(args) + if args.misc.show: + logger.info(model) + mb = sum(p.numel() for p in model.parameters()) * 4 / 2**20 + logger.info('Size: %.1f MB', mb) + if hasattr(model, 'valid_length'): + field = model.valid_length(1) + logger.info('Field: %.1f ms', field / args.dset.samplerate * 1000) + sys.exit(0) + + # torch also initialize cuda seed if available + if torch.cuda.is_available(): + model.cuda() + + # optimizer + optimizer = get_optimizer(model, args) + + assert args.batch_size % distrib.world_size == 0 + args.batch_size //= distrib.world_size + + if model_only: + return Solver(None, model, optimizer, args) + + train_set, valid_set = get_datasets(args) + + if args.augment.repitch.proba: + vocals = [] + if 'vocals' in args.dset.sources: + vocals.append(args.dset.sources.index('vocals')) + else: + logger.warning('No vocal source found') + if args.augment.repitch.proba: + train_set = RepitchedWrapper(train_set, vocals=vocals, **args.augment.repitch) + + logger.info("train/valid set size: %d %d", len(train_set), len(valid_set)) + train_loader = distrib.loader( + train_set, batch_size=args.batch_size, shuffle=True, + num_workers=args.misc.num_workers, drop_last=True) + if args.dset.full_cv: + valid_loader = distrib.loader( + valid_set, batch_size=1, shuffle=False, + num_workers=args.misc.num_workers) + else: + valid_loader = distrib.loader( + valid_set, batch_size=args.batch_size, shuffle=False, + num_workers=args.misc.num_workers, drop_last=True) + loaders = {"train": train_loader, "valid": valid_loader} + + # Construct Solver + return Solver(loaders, model, optimizer, args) + + +def get_solver_from_sig(sig, model_only=False): + inst = GlobalHydra.instance() + hyd = None + if inst.is_initialized(): + hyd = inst.hydra + inst.clear() + xp = main.get_xp_from_sig(sig) + if hyd is not None: + inst.clear() + inst.initialize(hyd) + + with xp.enter(stack=True): + return get_solver(xp.cfg, model_only) + + +@hydra_main(config_path="../conf", config_name="config", version_base="1.1") +def main(args): + global __file__ + __file__ = hydra.utils.to_absolute_path(__file__) + for attr in ["musdb", "wav", "metadata"]: + val = getattr(args.dset, attr) + if val is not None: + setattr(args.dset, attr, hydra.utils.to_absolute_path(val)) + + os.environ["OMP_NUM_THREADS"] = "1" + os.environ["MKL_NUM_THREADS"] = "1" + + if args.misc.verbose: + logger.setLevel(logging.DEBUG) + + logger.info("For logs, checkpoints and samples check %s", os.getcwd()) + logger.debug(args) + from dora import get_xp + logger.debug(get_xp().cfg) + + solver = get_solver(args) + solver.train() + + +if '_DORA_TEST_PATH' in os.environ: + main.dora.dir = Path(os.environ['_DORA_TEST_PATH']) + + +if __name__ == "__main__": + main() diff --git a/demucs/demucs/transformer.py b/demucs/demucs/transformer.py new file mode 100644 index 00000000..56a465b8 --- /dev/null +++ b/demucs/demucs/transformer.py @@ -0,0 +1,839 @@ +# Copyright (c) 2019-present, Meta, Inc. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +# First author is Simon Rouard. + +import random +import typing as tp + +import torch +import torch.nn as nn +import torch.nn.functional as F +import numpy as np +import math +from einops import rearrange + + +def create_sin_embedding( + length: int, dim: int, shift: int = 0, device="cpu", max_period=10000 +): + # We aim for TBC format + assert dim % 2 == 0 + pos = shift + torch.arange(length, device=device).view(-1, 1, 1) + half_dim = dim // 2 + adim = torch.arange(dim // 2, device=device).view(1, 1, -1) + phase = pos / (max_period ** (adim / (half_dim - 1))) + return torch.cat( + [ + torch.cos(phase), + torch.sin(phase), + ], + dim=-1, + ) + + +def create_2d_sin_embedding(d_model, height, width, device="cpu", max_period=10000): + """ + :param d_model: dimension of the model + :param height: height of the positions + :param width: width of the positions + :return: d_model*height*width position matrix + """ + if d_model % 4 != 0: + raise ValueError( + "Cannot use sin/cos positional encoding with " + "odd dimension (got dim={:d})".format(d_model) + ) + pe = torch.zeros(d_model, height, width) + # Each dimension use half of d_model + d_model = int(d_model / 2) + div_term = torch.exp( + torch.arange(0.0, d_model, 2) * -(math.log(max_period) / d_model) + ) + pos_w = torch.arange(0.0, width).unsqueeze(1) + pos_h = torch.arange(0.0, height).unsqueeze(1) + pe[0:d_model:2, :, :] = ( + torch.sin(pos_w * div_term).transpose(0, 1).unsqueeze(1).repeat(1, height, 1) + ) + pe[1:d_model:2, :, :] = ( + torch.cos(pos_w * div_term).transpose(0, 1).unsqueeze(1).repeat(1, height, 1) + ) + pe[d_model::2, :, :] = ( + torch.sin(pos_h * div_term).transpose(0, 1).unsqueeze(2).repeat(1, 1, width) + ) + pe[d_model + 1:: 2, :, :] = ( + torch.cos(pos_h * div_term).transpose(0, 1).unsqueeze(2).repeat(1, 1, width) + ) + + return pe[None, :].to(device) + + +def create_sin_embedding_cape( + length: int, + dim: int, + batch_size: int, + mean_normalize: bool, + augment: bool, # True during training + max_global_shift: float = 0.0, # delta max + max_local_shift: float = 0.0, # epsilon max + max_scale: float = 1.0, + device: str = "cpu", + max_period: float = 10000.0, +): + # We aim for TBC format + assert dim % 2 == 0 + pos = 1.0 * torch.arange(length).view(-1, 1, 1) # (length, 1, 1) + pos = pos.repeat(1, batch_size, 1) # (length, batch_size, 1) + if mean_normalize: + pos -= torch.nanmean(pos, dim=0, keepdim=True) + + if augment: + delta = np.random.uniform( + -max_global_shift, +max_global_shift, size=[1, batch_size, 1] + ) + delta_local = np.random.uniform( + -max_local_shift, +max_local_shift, size=[length, batch_size, 1] + ) + log_lambdas = np.random.uniform( + -np.log(max_scale), +np.log(max_scale), size=[1, batch_size, 1] + ) + pos = (pos + delta + delta_local) * np.exp(log_lambdas) + + pos = pos.to(device) + + half_dim = dim // 2 + adim = torch.arange(dim // 2, device=device).view(1, 1, -1) + phase = pos / (max_period ** (adim / (half_dim - 1))) + return torch.cat( + [ + torch.cos(phase), + torch.sin(phase), + ], + dim=-1, + ).float() + + +def get_causal_mask(length): + pos = torch.arange(length) + return pos > pos[:, None] + + +def get_elementary_mask( + T1, + T2, + mask_type, + sparse_attn_window, + global_window, + mask_random_seed, + sparsity, + device, +): + """ + When the input of the Decoder has length T1 and the output T2 + The mask matrix has shape (T2, T1) + """ + assert mask_type in ["diag", "jmask", "random", "global"] + + if mask_type == "global": + mask = torch.zeros(T2, T1, dtype=torch.bool) + mask[:, :global_window] = True + line_window = int(global_window * T2 / T1) + mask[:line_window, :] = True + + if mask_type == "diag": + + mask = torch.zeros(T2, T1, dtype=torch.bool) + rows = torch.arange(T2)[:, None] + cols = ( + (T1 / T2 * rows + torch.arange(-sparse_attn_window, sparse_attn_window + 1)) + .long() + .clamp(0, T1 - 1) + ) + mask.scatter_(1, cols, torch.ones(1, dtype=torch.bool).expand_as(cols)) + + elif mask_type == "jmask": + mask = torch.zeros(T2 + 2, T1 + 2, dtype=torch.bool) + rows = torch.arange(T2 + 2)[:, None] + t = torch.arange(0, int((2 * T1) ** 0.5 + 1)) + t = (t * (t + 1) / 2).int() + t = torch.cat([-t.flip(0)[:-1], t]) + cols = (T1 / T2 * rows + t).long().clamp(0, T1 + 1) + mask.scatter_(1, cols, torch.ones(1, dtype=torch.bool).expand_as(cols)) + mask = mask[1:-1, 1:-1] + + elif mask_type == "random": + gene = torch.Generator(device=device) + gene.manual_seed(mask_random_seed) + mask = ( + torch.rand(T1 * T2, generator=gene, device=device).reshape(T2, T1) + > sparsity + ) + + mask = mask.to(device) + return mask + + +def get_mask( + T1, + T2, + mask_type, + sparse_attn_window, + global_window, + mask_random_seed, + sparsity, + device, +): + """ + Return a SparseCSRTensor mask that is a combination of elementary masks + mask_type can be a combination of multiple masks: for instance "diag_jmask_random" + """ + from xformers.sparse import SparseCSRTensor + # create a list + mask_types = mask_type.split("_") + + all_masks = [ + get_elementary_mask( + T1, + T2, + mask, + sparse_attn_window, + global_window, + mask_random_seed, + sparsity, + device, + ) + for mask in mask_types + ] + + final_mask = torch.stack(all_masks).sum(axis=0) > 0 + + return SparseCSRTensor.from_dense(final_mask[None]) + + +class ScaledEmbedding(nn.Module): + def __init__( + self, + num_embeddings: int, + embedding_dim: int, + scale: float = 1.0, + boost: float = 3.0, + ): + super().__init__() + self.embedding = nn.Embedding(num_embeddings, embedding_dim) + self.embedding.weight.data *= scale / boost + self.boost = boost + + @property + def weight(self): + return self.embedding.weight * self.boost + + def forward(self, x): + return self.embedding(x) * self.boost + + +class LayerScale(nn.Module): + """Layer scale from [Touvron et al 2021] (https://arxiv.org/pdf/2103.17239.pdf). + This rescales diagonaly residual outputs close to 0 initially, then learnt. + """ + + def __init__(self, channels: int, init: float = 0, channel_last=False): + """ + channel_last = False corresponds to (B, C, T) tensors + channel_last = True corresponds to (T, B, C) tensors + """ + super().__init__() + self.channel_last = channel_last + self.scale = nn.Parameter(torch.zeros(channels, requires_grad=True)) + self.scale.data[:] = init + + def forward(self, x): + if self.channel_last: + return self.scale * x + else: + return self.scale[:, None] * x + + +class MyGroupNorm(nn.GroupNorm): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def forward(self, x): + """ + x: (B, T, C) + if num_groups=1: Normalisation on all T and C together for each B + """ + x = x.transpose(1, 2) + return super().forward(x).transpose(1, 2) + + +class MyTransformerEncoderLayer(nn.TransformerEncoderLayer): + def __init__( + self, + d_model, + nhead, + dim_feedforward=2048, + dropout=0.1, + activation=F.relu, + group_norm=0, + norm_first=False, + norm_out=False, + layer_norm_eps=1e-5, + layer_scale=False, + init_values=1e-4, + device=None, + dtype=None, + sparse=False, + mask_type="diag", + mask_random_seed=42, + sparse_attn_window=500, + global_window=50, + auto_sparsity=False, + sparsity=0.95, + batch_first=False, + ): + factory_kwargs = {"device": device, "dtype": dtype} + super().__init__( + d_model=d_model, + nhead=nhead, + dim_feedforward=dim_feedforward, + dropout=dropout, + activation=activation, + layer_norm_eps=layer_norm_eps, + batch_first=batch_first, + norm_first=norm_first, + device=device, + dtype=dtype, + ) + self.sparse = sparse + self.auto_sparsity = auto_sparsity + if sparse: + if not auto_sparsity: + self.mask_type = mask_type + self.sparse_attn_window = sparse_attn_window + self.global_window = global_window + self.sparsity = sparsity + if group_norm: + self.norm1 = MyGroupNorm(int(group_norm), d_model, eps=layer_norm_eps, **factory_kwargs) + self.norm2 = MyGroupNorm(int(group_norm), d_model, eps=layer_norm_eps, **factory_kwargs) + + self.norm_out = None + if self.norm_first & norm_out: + self.norm_out = MyGroupNorm(num_groups=int(norm_out), num_channels=d_model) + self.gamma_1 = ( + LayerScale(d_model, init_values, True) if layer_scale else nn.Identity() + ) + self.gamma_2 = ( + LayerScale(d_model, init_values, True) if layer_scale else nn.Identity() + ) + + if sparse: + self.self_attn = MultiheadAttention( + d_model, nhead, dropout=dropout, batch_first=batch_first, + auto_sparsity=sparsity if auto_sparsity else 0, + ) + self.__setattr__("src_mask", torch.zeros(1, 1)) + self.mask_random_seed = mask_random_seed + + def forward(self, src, src_mask=None, src_key_padding_mask=None): + """ + if batch_first = False, src shape is (T, B, C) + the case where batch_first=True is not covered + """ + device = src.device + x = src + T, B, C = x.shape + if self.sparse and not self.auto_sparsity: + assert src_mask is None + src_mask = self.src_mask + if src_mask.shape[-1] != T: + src_mask = get_mask( + T, + T, + self.mask_type, + self.sparse_attn_window, + self.global_window, + self.mask_random_seed, + self.sparsity, + device, + ) + self.__setattr__("src_mask", src_mask) + + if self.norm_first: + x = x + self.gamma_1( + self._sa_block(self.norm1(x), src_mask, src_key_padding_mask) + ) + x = x + self.gamma_2(self._ff_block(self.norm2(x))) + + if self.norm_out: + x = self.norm_out(x) + else: + x = self.norm1( + x + self.gamma_1(self._sa_block(x, src_mask, src_key_padding_mask)) + ) + x = self.norm2(x + self.gamma_2(self._ff_block(x))) + + return x + + +class CrossTransformerEncoderLayer(nn.Module): + def __init__( + self, + d_model: int, + nhead: int, + dim_feedforward: int = 2048, + dropout: float = 0.1, + activation=F.relu, + layer_norm_eps: float = 1e-5, + layer_scale: bool = False, + init_values: float = 1e-4, + norm_first: bool = False, + group_norm: bool = False, + norm_out: bool = False, + sparse=False, + mask_type="diag", + mask_random_seed=42, + sparse_attn_window=500, + global_window=50, + sparsity=0.95, + auto_sparsity=None, + device=None, + dtype=None, + batch_first=False, + ): + factory_kwargs = {"device": device, "dtype": dtype} + super().__init__() + + self.sparse = sparse + self.auto_sparsity = auto_sparsity + if sparse: + if not auto_sparsity: + self.mask_type = mask_type + self.sparse_attn_window = sparse_attn_window + self.global_window = global_window + self.sparsity = sparsity + + self.cross_attn: nn.Module + self.cross_attn = nn.MultiheadAttention( + d_model, nhead, dropout=dropout, batch_first=batch_first) + # Implementation of Feedforward model + self.linear1 = nn.Linear(d_model, dim_feedforward, **factory_kwargs) + self.dropout = nn.Dropout(dropout) + self.linear2 = nn.Linear(dim_feedforward, d_model, **factory_kwargs) + + self.norm_first = norm_first + self.norm1: nn.Module + self.norm2: nn.Module + self.norm3: nn.Module + if group_norm: + self.norm1 = MyGroupNorm(int(group_norm), d_model, eps=layer_norm_eps, **factory_kwargs) + self.norm2 = MyGroupNorm(int(group_norm), d_model, eps=layer_norm_eps, **factory_kwargs) + self.norm3 = MyGroupNorm(int(group_norm), d_model, eps=layer_norm_eps, **factory_kwargs) + else: + self.norm1 = nn.LayerNorm(d_model, eps=layer_norm_eps, **factory_kwargs) + self.norm2 = nn.LayerNorm(d_model, eps=layer_norm_eps, **factory_kwargs) + self.norm3 = nn.LayerNorm(d_model, eps=layer_norm_eps, **factory_kwargs) + + self.norm_out = None + if self.norm_first & norm_out: + self.norm_out = MyGroupNorm(num_groups=int(norm_out), num_channels=d_model) + + self.gamma_1 = ( + LayerScale(d_model, init_values, True) if layer_scale else nn.Identity() + ) + self.gamma_2 = ( + LayerScale(d_model, init_values, True) if layer_scale else nn.Identity() + ) + + self.dropout1 = nn.Dropout(dropout) + self.dropout2 = nn.Dropout(dropout) + + # Legacy string support for activation function. + if isinstance(activation, str): + self.activation = self._get_activation_fn(activation) + else: + self.activation = activation + + if sparse: + self.cross_attn = MultiheadAttention( + d_model, nhead, dropout=dropout, batch_first=batch_first, + auto_sparsity=sparsity if auto_sparsity else 0) + if not auto_sparsity: + self.__setattr__("mask", torch.zeros(1, 1)) + self.mask_random_seed = mask_random_seed + + def forward(self, q, k, mask=None): + """ + Args: + q: tensor of shape (T, B, C) + k: tensor of shape (S, B, C) + mask: tensor of shape (T, S) + + """ + device = q.device + T, B, C = q.shape + S, B, C = k.shape + if self.sparse and not self.auto_sparsity: + assert mask is None + mask = self.mask + if mask.shape[-1] != S or mask.shape[-2] != T: + mask = get_mask( + S, + T, + self.mask_type, + self.sparse_attn_window, + self.global_window, + self.mask_random_seed, + self.sparsity, + device, + ) + self.__setattr__("mask", mask) + + if self.norm_first: + x = q + self.gamma_1(self._ca_block(self.norm1(q), self.norm2(k), mask)) + x = x + self.gamma_2(self._ff_block(self.norm3(x))) + if self.norm_out: + x = self.norm_out(x) + else: + x = self.norm1(q + self.gamma_1(self._ca_block(q, k, mask))) + x = self.norm2(x + self.gamma_2(self._ff_block(x))) + + return x + + # self-attention block + def _ca_block(self, q, k, attn_mask=None): + x = self.cross_attn(q, k, k, attn_mask=attn_mask, need_weights=False)[0] + return self.dropout1(x) + + # feed forward block + def _ff_block(self, x): + x = self.linear2(self.dropout(self.activation(self.linear1(x)))) + return self.dropout2(x) + + def _get_activation_fn(self, activation): + if activation == "relu": + return F.relu + elif activation == "gelu": + return F.gelu + + raise RuntimeError("activation should be relu/gelu, not {}".format(activation)) + + +# ----------------- MULTI-BLOCKS MODELS: ----------------------- + + +class CrossTransformerEncoder(nn.Module): + def __init__( + self, + dim: int, + emb: str = "sin", + hidden_scale: float = 4.0, + num_heads: int = 8, + num_layers: int = 6, + cross_first: bool = False, + dropout: float = 0.0, + max_positions: int = 1000, + norm_in: bool = True, + norm_in_group: bool = False, + group_norm: int = False, + norm_first: bool = False, + norm_out: bool = False, + max_period: float = 10000.0, + weight_decay: float = 0.0, + lr: tp.Optional[float] = None, + layer_scale: bool = False, + gelu: bool = True, + sin_random_shift: int = 0, + weight_pos_embed: float = 1.0, + cape_mean_normalize: bool = True, + cape_augment: bool = True, + cape_glob_loc_scale: list = [5000.0, 1.0, 1.4], + sparse_self_attn: bool = False, + sparse_cross_attn: bool = False, + mask_type: str = "diag", + mask_random_seed: int = 42, + sparse_attn_window: int = 500, + global_window: int = 50, + auto_sparsity: bool = False, + sparsity: float = 0.95, + ): + super().__init__() + """ + """ + assert dim % num_heads == 0 + + hidden_dim = int(dim * hidden_scale) + + self.num_layers = num_layers + # classic parity = 1 means that if idx%2 == 1 there is a + # classical encoder else there is a cross encoder + self.classic_parity = 1 if cross_first else 0 + self.emb = emb + self.max_period = max_period + self.weight_decay = weight_decay + self.weight_pos_embed = weight_pos_embed + self.sin_random_shift = sin_random_shift + if emb == "cape": + self.cape_mean_normalize = cape_mean_normalize + self.cape_augment = cape_augment + self.cape_glob_loc_scale = cape_glob_loc_scale + if emb == "scaled": + self.position_embeddings = ScaledEmbedding(max_positions, dim, scale=0.2) + + self.lr = lr + + activation: tp.Any = F.gelu if gelu else F.relu + + self.norm_in: nn.Module + self.norm_in_t: nn.Module + if norm_in: + self.norm_in = nn.LayerNorm(dim) + self.norm_in_t = nn.LayerNorm(dim) + elif norm_in_group: + self.norm_in = MyGroupNorm(int(norm_in_group), dim) + self.norm_in_t = MyGroupNorm(int(norm_in_group), dim) + else: + self.norm_in = nn.Identity() + self.norm_in_t = nn.Identity() + + # spectrogram layers + self.layers = nn.ModuleList() + # temporal layers + self.layers_t = nn.ModuleList() + + kwargs_common = { + "d_model": dim, + "nhead": num_heads, + "dim_feedforward": hidden_dim, + "dropout": dropout, + "activation": activation, + "group_norm": group_norm, + "norm_first": norm_first, + "norm_out": norm_out, + "layer_scale": layer_scale, + "mask_type": mask_type, + "mask_random_seed": mask_random_seed, + "sparse_attn_window": sparse_attn_window, + "global_window": global_window, + "sparsity": sparsity, + "auto_sparsity": auto_sparsity, + "batch_first": True, + } + + kwargs_classic_encoder = dict(kwargs_common) + kwargs_classic_encoder.update({ + "sparse": sparse_self_attn, + }) + kwargs_cross_encoder = dict(kwargs_common) + kwargs_cross_encoder.update({ + "sparse": sparse_cross_attn, + }) + + for idx in range(num_layers): + if idx % 2 == self.classic_parity: + + self.layers.append(MyTransformerEncoderLayer(**kwargs_classic_encoder)) + self.layers_t.append( + MyTransformerEncoderLayer(**kwargs_classic_encoder) + ) + + else: + self.layers.append(CrossTransformerEncoderLayer(**kwargs_cross_encoder)) + + self.layers_t.append( + CrossTransformerEncoderLayer(**kwargs_cross_encoder) + ) + + def forward(self, x, xt): + B, C, Fr, T1 = x.shape + pos_emb_2d = create_2d_sin_embedding( + C, Fr, T1, x.device, self.max_period + ) # (1, C, Fr, T1) + pos_emb_2d = rearrange(pos_emb_2d, "b c fr t1 -> b (t1 fr) c") + x = rearrange(x, "b c fr t1 -> b (t1 fr) c") + x = self.norm_in(x) + x = x + self.weight_pos_embed * pos_emb_2d + + B, C, T2 = xt.shape + xt = rearrange(xt, "b c t2 -> b t2 c") # now T2, B, C + pos_emb = self._get_pos_embedding(T2, B, C, x.device) + pos_emb = rearrange(pos_emb, "t2 b c -> b t2 c") + xt = self.norm_in_t(xt) + xt = xt + self.weight_pos_embed * pos_emb + + for idx in range(self.num_layers): + if idx % 2 == self.classic_parity: + x = self.layers[idx](x) + xt = self.layers_t[idx](xt) + else: + old_x = x + x = self.layers[idx](x, xt) + xt = self.layers_t[idx](xt, old_x) + + x = rearrange(x, "b (t1 fr) c -> b c fr t1", t1=T1) + xt = rearrange(xt, "b t2 c -> b c t2") + return x, xt + + def _get_pos_embedding(self, T, B, C, device): + if self.emb == "sin": + shift = random.randrange(self.sin_random_shift + 1) + pos_emb = create_sin_embedding( + T, C, shift=shift, device=device, max_period=self.max_period + ) + elif self.emb == "cape": + if self.training: + pos_emb = create_sin_embedding_cape( + T, + C, + B, + device=device, + max_period=self.max_period, + mean_normalize=self.cape_mean_normalize, + augment=self.cape_augment, + max_global_shift=self.cape_glob_loc_scale[0], + max_local_shift=self.cape_glob_loc_scale[1], + max_scale=self.cape_glob_loc_scale[2], + ) + else: + pos_emb = create_sin_embedding_cape( + T, + C, + B, + device=device, + max_period=self.max_period, + mean_normalize=self.cape_mean_normalize, + augment=False, + ) + + elif self.emb == "scaled": + pos = torch.arange(T, device=device) + pos_emb = self.position_embeddings(pos)[:, None] + + return pos_emb + + def make_optim_group(self): + group = {"params": list(self.parameters()), "weight_decay": self.weight_decay} + if self.lr is not None: + group["lr"] = self.lr + return group + + +# Attention Modules + + +class MultiheadAttention(nn.Module): + def __init__( + self, + embed_dim, + num_heads, + dropout=0.0, + bias=True, + add_bias_kv=False, + add_zero_attn=False, + kdim=None, + vdim=None, + batch_first=False, + auto_sparsity=None, + ): + super().__init__() + assert auto_sparsity is not None, "sanity check" + self.num_heads = num_heads + self.q = torch.nn.Linear(embed_dim, embed_dim, bias=bias) + self.k = torch.nn.Linear(embed_dim, embed_dim, bias=bias) + self.v = torch.nn.Linear(embed_dim, embed_dim, bias=bias) + self.attn_drop = torch.nn.Dropout(dropout) + self.proj = torch.nn.Linear(embed_dim, embed_dim, bias) + self.proj_drop = torch.nn.Dropout(dropout) + self.batch_first = batch_first + self.auto_sparsity = auto_sparsity + + def forward( + self, + query, + key, + value, + key_padding_mask=None, + need_weights=True, + attn_mask=None, + average_attn_weights=True, + ): + + if not self.batch_first: # N, B, C + query = query.permute(1, 0, 2) # B, N_q, C + key = key.permute(1, 0, 2) # B, N_k, C + value = value.permute(1, 0, 2) # B, N_k, C + B, N_q, C = query.shape + B, N_k, C = key.shape + + q = ( + self.q(query) + .reshape(B, N_q, self.num_heads, C // self.num_heads) + .permute(0, 2, 1, 3) + ) + q = q.flatten(0, 1) + k = ( + self.k(key) + .reshape(B, N_k, self.num_heads, C // self.num_heads) + .permute(0, 2, 1, 3) + ) + k = k.flatten(0, 1) + v = ( + self.v(value) + .reshape(B, N_k, self.num_heads, C // self.num_heads) + .permute(0, 2, 1, 3) + ) + v = v.flatten(0, 1) + + if self.auto_sparsity: + assert attn_mask is None + x = dynamic_sparse_attention(q, k, v, sparsity=self.auto_sparsity) + else: + x = scaled_dot_product_attention(q, k, v, attn_mask, dropout=self.attn_drop) + x = x.reshape(B, self.num_heads, N_q, C // self.num_heads) + + x = x.transpose(1, 2).reshape(B, N_q, C) + x = self.proj(x) + x = self.proj_drop(x) + if not self.batch_first: + x = x.permute(1, 0, 2) + return x, None + + +def scaled_query_key_softmax(q, k, att_mask): + from xformers.ops import masked_matmul + q = q / (k.size(-1)) ** 0.5 + att = masked_matmul(q, k.transpose(-2, -1), att_mask) + att = torch.nn.functional.softmax(att, -1) + return att + + +def scaled_dot_product_attention(q, k, v, att_mask, dropout): + att = scaled_query_key_softmax(q, k, att_mask=att_mask) + att = dropout(att) + y = att @ v + return y + + +def _compute_buckets(x, R): + qq = torch.einsum('btf,bfhi->bhti', x, R) + qq = torch.cat([qq, -qq], dim=-1) + buckets = qq.argmax(dim=-1) + + return buckets.permute(0, 2, 1).byte().contiguous() + + +def dynamic_sparse_attention(query, key, value, sparsity, infer_sparsity=True, attn_bias=None): + # assert False, "The code for the custom sparse kernel is not ready for release yet." + from xformers.ops import find_locations, sparse_memory_efficient_attention + n_hashes = 32 + proj_size = 4 + query, key, value = [x.contiguous() for x in [query, key, value]] + with torch.no_grad(): + R = torch.randn(1, query.shape[-1], n_hashes, proj_size // 2, device=query.device) + bucket_query = _compute_buckets(query, R) + bucket_key = _compute_buckets(key, R) + row_offsets, column_indices = find_locations( + bucket_query, bucket_key, sparsity, infer_sparsity) + return sparse_memory_efficient_attention( + query, key, value, row_offsets, column_indices, attn_bias) diff --git a/demucs/demucs/utils.py b/demucs/demucs/utils.py new file mode 100755 index 00000000..a3f5993e --- /dev/null +++ b/demucs/demucs/utils.py @@ -0,0 +1,149 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +from collections import defaultdict +from concurrent.futures import CancelledError +from contextlib import contextmanager +import math +import os +import tempfile +import typing as tp + +import torch +from torch.nn import functional as F +from torch.utils.data import Subset + + +def unfold(a, kernel_size, stride): + """Given input of size [*OT, T], output Tensor of size [*OT, F, K] + with K the kernel size, by extracting frames with the given stride. + + This will pad the input so that `F = ceil(T / K)`. + + see https://github.com/pytorch/pytorch/issues/60466 + """ + *shape, length = a.shape + n_frames = math.ceil(length / stride) + tgt_length = (n_frames - 1) * stride + kernel_size + a = F.pad(a, (0, tgt_length - length)) + strides = list(a.stride()) + assert strides[-1] == 1, 'data should be contiguous' + strides = strides[:-1] + [stride, 1] + return a.as_strided([*shape, n_frames, kernel_size], strides) + + +def center_trim(tensor: torch.Tensor, reference: tp.Union[torch.Tensor, int]): + """ + Center trim `tensor` with respect to `reference`, along the last dimension. + `reference` can also be a number, representing the length to trim to. + If the size difference != 0 mod 2, the extra sample is removed on the right side. + """ + ref_size: int + if isinstance(reference, torch.Tensor): + ref_size = reference.size(-1) + else: + ref_size = reference + delta = tensor.size(-1) - ref_size + if delta < 0: + raise ValueError("tensor must be larger than reference. " f"Delta is {delta}.") + if delta: + tensor = tensor[..., delta // 2:-(delta - delta // 2)] + return tensor + + +def pull_metric(history: tp.List[dict], name: str): + out = [] + for metrics in history: + metric = metrics + for part in name.split("."): + metric = metric[part] + out.append(metric) + return out + + +def EMA(beta: float = 1): + """ + Exponential Moving Average callback. + Returns a single function that can be called to repeatidly update the EMA + with a dict of metrics. The callback will return + the new averaged dict of metrics. + + Note that for `beta=1`, this is just plain averaging. + """ + fix: tp.Dict[str, float] = defaultdict(float) + total: tp.Dict[str, float] = defaultdict(float) + + def _update(metrics: dict, weight: float = 1) -> dict: + nonlocal total, fix + for key, value in metrics.items(): + total[key] = total[key] * beta + weight * float(value) + fix[key] = fix[key] * beta + weight + return {key: tot / fix[key] for key, tot in total.items()} + return _update + + +def sizeof_fmt(num: float, suffix: str = 'B'): + """ + Given `num` bytes, return human readable size. + Taken from https://stackoverflow.com/a/1094933 + """ + for unit in ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi']: + if abs(num) < 1024.0: + return "%3.1f%s%s" % (num, unit, suffix) + num /= 1024.0 + return "%.1f%s%s" % (num, 'Yi', suffix) + + +@contextmanager +def temp_filenames(count: int, delete=True): + names = [] + try: + for _ in range(count): + names.append(tempfile.NamedTemporaryFile(delete=False).name) + yield names + finally: + if delete: + for name in names: + os.unlink(name) + + +def random_subset(dataset, max_samples: int, seed: int = 42): + if max_samples >= len(dataset): + return dataset + + generator = torch.Generator().manual_seed(seed) + perm = torch.randperm(len(dataset), generator=generator) + return Subset(dataset, perm[:max_samples].tolist()) + + +class DummyPoolExecutor: + class DummyResult: + def __init__(self, func, _dict, *args, **kwargs): + self.func = func + self._dict = _dict + self.args = args + self.kwargs = kwargs + + def result(self): + if self._dict["run"]: + return self.func(*self.args, **self.kwargs) + else: + raise CancelledError() + + def __init__(self, workers=0): + self._dict = {"run": True} + + def submit(self, func, *args, **kwargs): + return DummyPoolExecutor.DummyResult(func, self._dict, *args, **kwargs) + + def shutdown(self, *_, **__): + self._dict["run"] = False + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, exc_tb): + return diff --git a/demucs/demucs/wav.py b/demucs/demucs/wav.py new file mode 100644 index 00000000..ca1e23a3 --- /dev/null +++ b/demucs/demucs/wav.py @@ -0,0 +1,255 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +"""Loading wav based datasets, including MusdbHQ.""" + +from collections import OrderedDict +import hashlib +import math +import json +import os +from pathlib import Path +import tqdm + +import musdb +import julius +from . import audio_legacy +import torch as th +from torch import distributed +import torchaudio as ta +from torch.nn import functional as F + +from .audio import convert_audio_channels +from . import distrib + +MIXTURE = "mixture" +EXT = ".wav" + + +def _track_metadata(track, sources, normalize=True, ext=EXT): + track_length = None + track_samplerate = None + mean = 0 + std = 1 + for source in sources + [MIXTURE]: + file = track / f"{source}{ext}" + if source == MIXTURE and not file.exists(): + audio = 0 + for sub_source in sources: + sub_file = track / f"{sub_source}{ext}" + sub_audio, sr = ta.load(sub_file) + audio += sub_audio + would_clip = audio.abs().max() >= 1 + if would_clip: + assert ta.get_audio_backend() == 'soundfile', 'use dset.backend=soundfile' + ta.save(file, audio, sr, encoding='PCM_F') + + try: + info = ta.info(str(file)) + except RuntimeError: + print(file) + raise + length = info.num_frames + if track_length is None: + track_length = length + track_samplerate = info.sample_rate + elif track_length != length: + raise ValueError( + f"Invalid length for file {file}: " + f"expecting {track_length} but got {length}.") + elif info.sample_rate != track_samplerate: + raise ValueError( + f"Invalid sample rate for file {file}: " + f"expecting {track_samplerate} but got {info.sample_rate}.") + if source == MIXTURE and normalize: + try: + wav, _ = ta.load(str(file)) + except RuntimeError: + print(file) + raise + wav = wav.mean(0) + mean = wav.mean().item() + std = wav.std().item() + + return {"length": length, "mean": mean, "std": std, "samplerate": track_samplerate} + + +def build_metadata(path, sources, normalize=True, ext=EXT): + """ + Build the metadata for `Wavset`. + + Args: + path (str or Path): path to dataset. + sources (list[str]): list of sources to look for. + normalize (bool): if True, loads full track and store normalization + values based on the mixture file. + ext (str): extension of audio files (default is .wav). + """ + + meta = {} + path = Path(path) + pendings = [] + from concurrent.futures import ThreadPoolExecutor + with ThreadPoolExecutor(8) as pool: + for root, folders, files in os.walk(path, followlinks=True): + root = Path(root) + if root.name.startswith('.') or folders or root == path: + continue + name = str(root.relative_to(path)) + pendings.append((name, pool.submit(_track_metadata, root, sources, normalize, ext))) + # meta[name] = _track_metadata(root, sources, normalize, ext) + for name, pending in tqdm.tqdm(pendings, ncols=120): + meta[name] = pending.result() + return meta + + +class Wavset: + def __init__( + self, + root, metadata, sources, + segment=None, shift=None, normalize=True, + samplerate=44100, channels=2, ext=EXT): + """ + Waveset (or mp3 set for that matter). Can be used to train + with arbitrary sources. Each track should be one folder inside of `path`. + The folder should contain files named `{source}.{ext}`. + + Args: + root (Path or str): root folder for the dataset. + metadata (dict): output from `build_metadata`. + sources (list[str]): list of source names. + segment (None or float): segment length in seconds. If `None`, returns entire tracks. + shift (None or float): stride in seconds bewteen samples. + normalize (bool): normalizes input audio, **based on the metadata content**, + i.e. the entire track is normalized, not individual extracts. + samplerate (int): target sample rate. if the file sample rate + is different, it will be resampled on the fly. + channels (int): target nb of channels. if different, will be + changed onthe fly. + ext (str): extension for audio files (default is .wav). + + samplerate and channels are converted on the fly. + """ + self.root = Path(root) + self.metadata = OrderedDict(metadata) + self.segment = segment + self.shift = shift or segment + self.normalize = normalize + self.sources = sources + self.channels = channels + self.samplerate = samplerate + self.ext = ext + self.num_examples = [] + for name, meta in self.metadata.items(): + track_duration = meta['length'] / meta['samplerate'] + if segment is None or track_duration < segment: + examples = 1 + else: + examples = int(math.ceil((track_duration - self.segment) / self.shift) + 1) + self.num_examples.append(examples) + + def __len__(self): + return sum(self.num_examples) + + def get_file(self, name, source): + return self.root / name / f"{source}{self.ext}" + + def __getitem__(self, index): + for name, examples in zip(self.metadata, self.num_examples): + if index >= examples: + index -= examples + continue + meta = self.metadata[name] + num_frames = -1 + offset = 0 + if self.segment is not None: + offset = int(meta['samplerate'] * self.shift * index) + num_frames = int(math.ceil(meta['samplerate'] * self.segment)) + wavs = [] + for source in self.sources: + file = self.get_file(name, source) + wav, _ = ta.load(str(file), frame_offset=offset, num_frames=num_frames) + wav = convert_audio_channels(wav, self.channels) + wavs.append(wav) + + example = th.stack(wavs) + example = julius.resample_frac(example, meta['samplerate'], self.samplerate) + if self.normalize: + example = (example - meta['mean']) / meta['std'] + if self.segment: + length = int(self.segment * self.samplerate) + example = example[..., :length] + example = F.pad(example, (0, length - example.shape[-1])) + return example + + +def get_wav_datasets(args, name='wav'): + """Extract the wav datasets from the XP arguments.""" + path = getattr(args, name) + sig = hashlib.sha1(str(path).encode()).hexdigest()[:8] + metadata_file = Path(args.metadata) / ('wav_' + sig + ".json") + train_path = Path(path) / "train" + valid_path = Path(path) / "valid" + if not metadata_file.is_file() and distrib.rank == 0: + metadata_file.parent.mkdir(exist_ok=True, parents=True) + train = build_metadata(train_path, args.sources) + valid = build_metadata(valid_path, args.sources) + json.dump([train, valid], open(metadata_file, "w")) + if distrib.world_size > 1: + distributed.barrier() + train, valid = json.load(open(metadata_file)) + if args.full_cv: + kw_cv = {} + else: + kw_cv = {'segment': args.segment, 'shift': args.shift} + train_set = Wavset(train_path, train, args.sources, + segment=args.segment, shift=args.shift, + samplerate=args.samplerate, channels=args.channels, + normalize=args.normalize) + valid_set = Wavset(valid_path, valid, [MIXTURE] + list(args.sources), + samplerate=args.samplerate, channels=args.channels, + normalize=args.normalize, **kw_cv) + return train_set, valid_set + + +def _get_musdb_valid(): + # Return musdb valid set. + import yaml + setup_path = Path(musdb.__path__[0]) / 'configs' / 'mus.yaml' + setup = yaml.safe_load(open(setup_path, 'r')) + return setup['validation_tracks'] + + +def get_musdb_wav_datasets(args): + """Extract the musdb dataset from the XP arguments.""" + sig = hashlib.sha1(str(args.musdb).encode()).hexdigest()[:8] + metadata_file = Path(args.metadata) / ('musdb_' + sig + ".json") + root = Path(args.musdb) / "train" + if not metadata_file.is_file() and distrib.rank == 0: + metadata_file.parent.mkdir(exist_ok=True, parents=True) + metadata = build_metadata(root, args.sources) + json.dump(metadata, open(metadata_file, "w")) + if distrib.world_size > 1: + distributed.barrier() + metadata = json.load(open(metadata_file)) + + valid_tracks = _get_musdb_valid() + if args.train_valid: + metadata_train = metadata + else: + metadata_train = {name: meta for name, meta in metadata.items() if name not in valid_tracks} + metadata_valid = {name: meta for name, meta in metadata.items() if name in valid_tracks} + if args.full_cv: + kw_cv = {} + else: + kw_cv = {'segment': args.segment, 'shift': args.shift} + train_set = Wavset(root, metadata_train, args.sources, + segment=args.segment, shift=args.shift, + samplerate=args.samplerate, channels=args.channels, + normalize=args.normalize) + valid_set = Wavset(root, metadata_valid, [MIXTURE] + list(args.sources), + samplerate=args.samplerate, channels=args.channels, + normalize=args.normalize, **kw_cv) + return train_set, valid_set diff --git a/demucs/demucs/wdemucs.py b/demucs/demucs/wdemucs.py new file mode 100644 index 00000000..03d6dd3b --- /dev/null +++ b/demucs/demucs/wdemucs.py @@ -0,0 +1,9 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +# For compat +from .hdemucs import HDemucs + +WDemucs = HDemucs diff --git a/demucs/docs/api.md b/demucs/docs/api.md new file mode 100644 index 00000000..dbd858a7 --- /dev/null +++ b/demucs/docs/api.md @@ -0,0 +1,204 @@ +# Demucs APIs + +## Quick start + +Notes: Type hints have been added to all API functions. It is recommended to check them before passing parameters to a function as some arguments only support limited types (e.g. parameter `repo` of method `load_model` only support type `pathlib.Path`). + +1. The first step is to import api module: + +```python +import demucs.api +``` + +2. Then initialize the `Separator`. Parameters which will be served as default values for methods can be passed. Model should be specified. + +```python +# Initialize with default parameters: +separator = demucs.api.Separator() + +# Use another model and segment: +separator = demucs.api.Separator(model="mdx_extra", segment=12) + +# You can also use other parameters defined +``` + +3. Separate it! + +```python +# Separating an audio file +origin, separated = separator.separate_audio_file("file.mp3") + +# Separating a loaded audio +origin, separated = separator.separate_tensor(audio) + +# If you encounter an error like CUDA out of memory, you can use this to change parameters like `segment`: +separator.update_parameter(segment=smaller_segment) +``` + +4. Save audio + +```python +# Remember to create the destination folder before calling `save_audio` +# Or you are likely to recieve `FileNotFoundError` +for file, sources in separated: + for stem, source in sources.items(): + demucs.api.save_audio(source, f"{stem}_{file}", samplerate=separator.samplerate) +``` + +## API References + +The types of each parameter and return value is not listed in this document. To know the exact type of them, please read the type hints in api.py (most modern code editors support inferring types based on type hints). + +### `class Separator` + +The base separator class + +##### Parameters + +model: Pretrained model name or signature. Default is htdemucs. + +repo: Folder containing all pre-trained models for use. + +segment: Length (in seconds) of each segment (only available if `split` is `True`). If not specified, will use the command line option. + +shifts: If > 0, will shift in time `wav` by a random amount between 0 and 0.5 sec and apply the oppositve shift to the output. This is repeated `shifts` time and all predictions are averaged. This effectively makes the model time equivariant and improves SDR by up to 0.2 points. If not specified, will use the command line option. + +split: If True, the input will be broken down into small chunks (length set by `segment`) and predictions will be performed individually on each and concatenated. Useful for model with large memory footprint like Tasnet. If not specified, will use the command line option. + +overlap: The overlap between the splits. If not specified, will use the command line option. + +device (torch.device, str, or None): If provided, device on which to execute the computation, otherwise `wav.device` is assumed. When `device` is different from `wav.device`, only local computations will be on `device`, while the entire tracks will be stored on `wav.device`. If not specified, will use the command line option. + +jobs: Number of jobs. This can increase memory usage but will be much faster when multiple cores are available. If not specified, will use the command line option. + +callback: A function will be called when the separation of a chunk starts or finished. The argument passed to the function will be a dict. For more information, please see the Callback section. + +callback_arg: A dict containing private parameters to be passed to callback function. For more information, please see the Callback section. + +progress: If true, show a progress bar. + +##### Notes for callback + +The function will be called with only one positional parameter whose type is `dict`. The `callback_arg` will be combined with information of current separation progress. The progress information will override the values in `callback_arg` if same key has been used. To abort the separation, raise an exception in `callback` which should be handled by yourself if you want your codes continue to function. + +Progress information contains several keys (These keys will always exist): +- `model_idx_in_bag`: The index of the submodel in `BagOfModels`. Starts from 0. +- `shift_idx`: The index of shifts. Starts from 0. +- `segment_offset`: The offset of current segment. If the number is 441000, it doesn't mean that it is at the 441000 second of the audio, but the "frame" of the tensor. +- `state`: Could be `"start"` or `"end"`. +- `audio_length`: Length of the audio (in "frame" of the tensor). +- `models`: Count of submodels in the model. + +#### `property samplerate` + +A read-only property saving sample rate of the model requires. Will raise a warning if the model is not loaded and return the default value. + +#### `property audio_channels` + +A read-only property saving audio channels of the model requires. Will raise a warning if the model is not loaded and return the default value. + +#### `property model` + +A read-only property saving the model. + +#### `method update_parameter()` + +Update the parameters of separation. + +##### Parameters + +segment: Length (in seconds) of each segment (only available if `split` is `True`). If not specified, will use the command line option. + +shifts: If > 0, will shift in time `wav` by a random amount between 0 and 0.5 sec and apply the oppositve shift to the output. This is repeated `shifts` time and all predictions are averaged. This effectively makes the model time equivariant and improves SDR by up to 0.2 points. If not specified, will use the command line option. + +split: If True, the input will be broken down into small chunks (length set by `segment`) and predictions will be performed individually on each and concatenated. Useful for model with large memory footprint like Tasnet. If not specified, will use the command line option. + +overlap: The overlap between the splits. If not specified, will use the command line option. + +device (torch.device, str, or None): If provided, device on which to execute the computation, otherwise `wav.device` is assumed. When `device` is different from `wav.device`, only local computations will be on `device`, while the entire tracks will be stored on `wav.device`. If not specified, will use the command line option. + +jobs: Number of jobs. This can increase memory usage but will be much faster when multiple cores are available. If not specified, will use the command line option. + +callback: A function will be called when the separation of a chunk starts or finished. The argument passed to the function will be a dict. For more information, please see the Callback section. + +callback_arg: A dict containing private parameters to be passed to callback function. For more information, please see the Callback section. + +progress: If true, show a progress bar. + +##### Notes for callback + +The function will be called with only one positional parameter whose type is `dict`. The `callback_arg` will be combined with information of current separation progress. The progress information will override the values in `callback_arg` if same key has been used. To abort the separation, raise an exception in `callback` which should be handled by yourself if you want your codes continue to function. + +Progress information contains several keys (These keys will always exist): +- `model_idx_in_bag`: The index of the submodel in `BagOfModels`. Starts from 0. +- `shift_idx`: The index of shifts. Starts from 0. +- `segment_offset`: The offset of current segment. If the number is 441000, it doesn't mean that it is at the 441000 second of the audio, but the "frame" of the tensor. +- `state`: Could be `"start"` or `"end"`. +- `audio_length`: Length of the audio (in "frame" of the tensor). +- `models`: Count of submodels in the model. + +#### `method separate_tensor()` + +Separate an audio. + +##### Parameters + +wav: Waveform of the audio. Should have 2 dimensions, the first is each audio channel, while the second is the waveform of each channel. e.g. `tuple(wav.shape) == (2, 884000)` means the audio has 2 channels. + +sr: Sample rate of the original audio, the wave will be resampled if it doesn't match the model. + +##### Returns + +A tuple, whose first element is the original wave and second element is a dict, whose keys are the name of stems and values are separated waves. The original wave will have already been resampled. + +##### Notes + +Use this function with cautiousness. This function does not provide data verifying. + +#### `method separate_audio_file()` + +Separate an audio file. The method will automatically read the file. + +##### Parameters + +wav: Path of the file to be separated. + +##### Returns + +A tuple, whose first element is the original wave and second element is a dict, whose keys are the name of stems and values are separated waves. The original wave will have already been resampled. + +### `function save_audio()` + +Save audio file. + +##### Parameters + +wav: Audio to be saved + +path: The file path to be saved. Ending must be one of `.mp3` and `.wav`. + +samplerate: File sample rate. + +bitrate: If the suffix of `path` is `.mp3`, it will be used to specify the bitrate of mp3. + +clip: Clipping preventing strategy. + +bits_per_sample: If the suffix of `path` is `.wav`, it will be used to specify the bit depth of wav. + +as_float: If it is True and the suffix of `path` is `.wav`, then `bits_per_sample` will be set to 32 and will write the wave file with float format. + +##### Returns + +None + +### `function list_models()` + +List the available models. Please remember that not all the returned models can be successfully loaded. + +##### Parameters + +repo: The repo whose models are to be listed. + +##### Returns + +A dict with two keys ("single" for single models and "bag" for bag of models). The values are lists whose components are strs. \ No newline at end of file diff --git a/demucs/docs/linux.md b/demucs/docs/linux.md new file mode 100644 index 00000000..31d9a695 --- /dev/null +++ b/demucs/docs/linux.md @@ -0,0 +1,28 @@ +# Linux support for Demucs + +If your distribution has at least Python 3.8, and you just wish to separate +tracks with Demucs, not train it, you can just run + +```bash +pip3 install --user -U demucs +# Then anytime you want to use demucs, just do +python3 -m demucs -d cpu PATH_TO_AUDIO_FILE_1 +# If you have added the user specific pip bin/ folder to your path, you can also do +demucs -d cpu PATH_TO_AUDIO_FILE_1 +``` + +If Python is too old, or you want to be able to train, I recommend [installing Miniconda][miniconda], with Python 3.8 or more. + +```bash +conda activate +pip3 install -U demucs +# Then anytime you want to use demucs, first do conda activate, then +demucs -d cpu PATH_TO_AUDIO_FILE_1 +``` + +Of course, you can also use a specific env for Demucs. + +**Important, torchaudio 0.12 update:** Torchaudio no longer supports decoding mp3s without ffmpeg installed. You must have ffmpeg installed, either through Anaconda (`conda install ffmpeg -c conda-forge`) or as a distribution package (e.g. `sudo apt-get install ffmpeg`). + + +[miniconda]: https://docs.conda.io/en/latest/miniconda.html#linux-installers diff --git a/demucs/docs/mac.md b/demucs/docs/mac.md new file mode 100644 index 00000000..62dd235e --- /dev/null +++ b/demucs/docs/mac.md @@ -0,0 +1,28 @@ +# macOS support for Demucs + +If you have a sufficiently recent version of macOS, you can just run + +```bash +python3 -m pip install --user -U demucs +# Then anytime you want to use demucs, just do +python3 -m demucs -d cpu PATH_TO_AUDIO_FILE_1 +# If you have added the user specific pip bin/ folder to your path, you can also do +demucs -d cpu PATH_TO_AUDIO_FILE_1 +``` + +If you do not already have Anaconda installed or much experience with the terminal on macOS, here are some detailed instructions: + +1. Download [Anaconda 3.8 (or more recent) 64-bit for macOS][anaconda]: +2. Open [Anaconda Prompt in macOS][prompt] +3. Follow these commands: +```bash +conda activate +pip3 install -U demucs +# Then anytime you want to use demucs, first do conda activate, then +demucs -d cpu PATH_TO_AUDIO_FILE_1 +``` + +**Important, torchaudio 0.12 update:** Torchaudio no longer supports decoding mp3s without ffmpeg installed. You must have ffmpeg installed, either through Anaconda (`conda install ffmpeg -c conda-forge`) or with Homebrew for instance (`brew install ffmpeg`). + +[anaconda]: https://www.anaconda.com/download +[prompt]: https://docs.anaconda.com/anaconda/user-guide/getting-started/#open-nav-mac diff --git a/demucs/docs/mdx.md b/demucs/docs/mdx.md new file mode 100644 index 00000000..2a20f9cb --- /dev/null +++ b/demucs/docs/mdx.md @@ -0,0 +1,73 @@ +# Music DemiXing challenge (MDX) + +If you want to use Demucs for the [MDX challenge](https://www.aicrowd.com/challenges/music-demixing-challenge-ismir-2021), +please follow the instructions hereafter + +## Installing Demucs + +Follow the instructions from the [main README](https://github.com/facebookresearch/demucs#requirements) +in order to setup Demucs using Anaconda. You will need the full setup up for training, including soundstretch. + +## Getting MusDB-HQ + +Download [MusDB-HQ](https://zenodo.org/record/3338373) to some folder and unzip it. + +## Training Demucs + +Train Demucs (you might need to change the batch size depending on the number of GPUs available). +It seems 48 channels is enough to get the best performance on MusDB-HQ, and training will faster +and less memory demanding. In any case, the 64 channels versions is timing out on the challenge. +```bash +./run.py --channels=48 --batch_size 64 --musdb=PATH_TO_MUSDB --is_wav [EXTRA_FLAGS] +``` + +### Post training + +Once the training is completed, a new model file will be exported in `models/`. + +You can look at the SDR on the MusDB dataset using `python result_table.py`. + + +### Evaluate and export a model before training is over + +If you want to export a model before training is complete, use the following command: +```bash +python -m demucs [ALL EXACT TRAINING FLAGS] --save_model +``` +You can also pass the `--half` flag, in order to save weights in half precision. This will divide the model size by 2 and won't impact SDR. + +Once this is done, you can partially evaluate a model with +```bash +./run.py --test NAME_OF_MODEL.th --musdb=PATH_TO_MUSDB --is_wav +``` + +**Note:** `NAME_OF_MODEL.th` is given relative to the models folder (given by `--models`, defaults to `models/`), so don't include it in the name. + + +### Training smaller models + +If you want to quickly test idea, I would recommend training a 16 kHz model, and testing if things work there or not, before training the full 44kHz model. You can train one of those with +```bash +./run.py --channels=32 --samplerate 16000 --samples 160000 --data_stride 16000 --depth=5 --batch_size 64 --repitch=0 --musdb=PATH_TO_MUSDB --is_wav [EXTRA_FLAGS] +``` +(repitch must be turned off, because things will break at 16kHz). + +## Submitting your model + +1. Git clone [the Music Demixing Challenge - Starter Kit - Demucs Edition](https://github.com/adefossez/music-demixing-challenge-starter-kit). +2. Inside the starter kit, create a `models/` folder and copy over the trained model from the Demucs repo (renaming +it for instance `my_model.th`) +3. Inside the `test_demuc.py` file, change the function `prediction_setup`: comment the loading +of the pre-trained model, and uncomment the code to load your own model. +4. Edit the file `aicrowd.json` with your username. +5. Install [git-lfs](https://git-lfs.github.com/). Then run + +```bash +git lfs install +git add models/ +git add -u . +git commit -m "My Demucs submission" +``` +6. Follow the [submission instructions](https://github.com/AIcrowd/music-demixing-challenge-starter-kit/blob/master/docs/SUBMISSION.md). + +Best of luck 🤞 diff --git a/demucs/docs/release.md b/demucs/docs/release.md new file mode 100644 index 00000000..df8f122f --- /dev/null +++ b/demucs/docs/release.md @@ -0,0 +1,114 @@ +# Release notes for Demucs + +## V4.1.0a, TBD + +Get models list + +Check segment of HTDemucs inside BagOfModels + +Added api.py to be called from another program + +Use api in separate.py + +Added `--other-method`: method to get `no_{STEM}`, add up all the other stems (add), original track substract the specific stem (minus), and discard (none) + +Added type `HTDemucs` to type alias `AnyModel`. + +Improving recent torchaudio versions support (Thanks @CarlGao4) + +## V4.0.1, 8th of September 2023 + +**From this version, Python 3.7 is no longer supported. This is not a problem since the latest PyTorch 2.0.0 no longer support it either.** + +Various improvements by @CarlGao4. Support for `segment` param inside of HTDemucs +model. + +Made diffq an optional dependency, with an error message if not installed. + +Added output format flac (Free Lossless Audio Codec) + +Will use CPU for complex numbers, when using MPS device (all other computations are performed by mps). + +Optimize codes to save memory + +Allow changing preset of MP3 + +## V4.0.0, 7th of December 2022 + +Adding hybrid transformer Demucs model. + +Added support for [Torchaudio implementation of HDemucs](https://pytorch.org/audio/main/tutorials/hybrid_demucs_tutorial.html), thanks @skim0514. + +Added experimental 6 sources model `htdemucs_6s` (`drums`, `bass`, `other`, `vocals`, `piano`, `guitar`). + +## V3.0.6, 16th of November 2022 + +Option to customize output path of stems (@CarlGao4) + +Fixed bug in pad1d leading to failure sometimes. + +## V3.0.5, 17th of August 2022 + +Added `--segment` flag to customize the segment length and use less memory (thanks @CarlGao4). + +Fix reflect padding bug on small inputs. + +Compatible with pyTorch 1.12 + +## V3.0.4, 24th of February 2022 + +Added option to split into two stems (i.e. vocals, vs. non vocals), thanks to @CarlGao4. + +Added `--float32`, `--int24` and `--clip-mode` options to customize how output stems are saved. + +## V3.0.3, 2nd of December 2021 + +Fix bug in weights used for different sources. Thanks @keunwoochoi for the report and fix. + +Improving drastically memory usage on GPU for long files. Thanks a lot @famzah for providing this. + +Adding multithread evaluation on CPU (`-j` option). + +(v3.0.2 had a bug with the CPU pool and is skipped.) + +## V3.0.1, 12th of November 2021 + +Release of Demucs v3, featuring hybrid domain separation and much more. +This drops support for Conv-Tasnet and training on the non HQ MusDB dataset. +There is no version 3.0.0 because I messed up. + +## V2.0.2, 26th of May 2021 + +- Fix in Tasnet (PR #178) +- Use ffmpeg in priority when available instead of torchaudio to avoid small shift in MP3 data. +- other minor fixes + +## v2.0.1, 11th of May 2021 + +MusDB HQ support added. Custom wav dataset support added. +Minor changes: issue with padding of mp3 and torchaudio reading, in order to limit that, +Demucs now uses ffmpeg in priority and fallback to torchaudio. +Replaced pre-trained demucs model with one trained on more recent codebase. + +## v2.0.0, 28th of April 2021 + +This is a big release, with at lof of breaking changes. You will likely +need to install Demucs from scratch. + + + +- Demucs now supports on the fly resampling by a factor of 2. +This improves SDR almost 0.3 points. +- Random scaling of each source added (From Uhlich et al. 2017). +- Random pitch and tempo augmentation addded, from [Cohen-Hadria et al. 2019]. +- With extra augmentation, the best performing Demucs model now has only 64 channels +instead of 100, so model size goes from 2.4GB to 1GB. Also SDR is up from 5.6 SDR to 6.3 when trained only on MusDB. +- Quantized model using [DiffQ](https://github.com/facebookresearch/diffq) has been added. Model size is 150MB, no loss in quality as far as I, or the metrics, +can say. +- Pretrained models are now using the TorchHub interface. +- Overlap mode for separation, to limit inconsitencies at + frame boundaries, with linear transition over the overlap. Overlap is currently + at 25%. Not that this is only done for separation, not training, because + I added that quite late to the code. For Conv-TasNet this can improve + SDR quite a bit (+0.3 points, to 6.0). +- PyPI hosting, for separation, not training! diff --git a/demucs/docs/sdx23.md b/demucs/docs/sdx23.md new file mode 100644 index 00000000..65c5df9a --- /dev/null +++ b/demucs/docs/sdx23.md @@ -0,0 +1,61 @@ +# SDX 23 challenge + +Checkout [the challenge page](https://www.aicrowd.com/challenges/sound-demixing-challenge-2023) +for more information. This page is specifically on training models for the [MDX'23 sub-challenge](https://www.aicrowd.com/challenges/sound-demixing-challenge-2023/problems/music-demixing-track-mdx-23). +There are two tracks: one trained on a dataset with bleeding, and the other with label mixups. + +This gives instructions on training an Hybrid Demucs model on those datasets. +I haven't tried the HT Demucs model, as it typically requires quite a bit of training data but the same could be done with it. + +You will need to work from an up to date clone of this repo. See the [generic training instructions](./training.md) for more information. + +## Getting the data + +Register on the challenge, then checkout the [Resources page](https://www.aicrowd.com/challenges/sound-demixing-challenge-2023/problems/music-demixing-track-mdx-23/dataset_files) and download the dataset you are +interested in. + +Update the `conf/dset/sdx23_bleeding.yaml` and `conf/dset/sdx23_labelnoise.yaml` files to point to the right path. + +**Make sure soundfile** is installed (`conda install -c conda-forge libsndfile; pip install soundfile`). + +### Create proper train / valid structure + +Demucs requires a valid set to work properly. Go to the folder where you extracted the tracks then do: + +```shell +mkdir train +mv * train # there will be a warning saying cannot move train to itself but that's fine the other tracks should have. +mkdir valid +cd train +mv 5640831d-7853-4d06-8166-988e2844b652 bc964128-da16-4e4c-af95-4d1211e78c70 \ + cc7f7675-d3c8-4a49-a2d7-a8959b694004 f40ffd10-4e8b-41e6-bd8a-971929ca9138 \ + bc1f2967-f834-43bd-aadc-95afc897cfe7 cc3e4991-6cce-40fe-a917-81a4fbb92ea6 \ + ed90a89a-bf22-444d-af3d-d9ac3896ebd2 f4b735de-14b1-4091-a9ba-c8b30c0740a7 ../valid +``` + +## Training + +See `dora grid sdx23` for a starting point. You can do `dora grid sdx23 --init --dry_run` then `dora run -f SIG -d` with `SIG` one of the signature +to train on a machine with GPUs if you do not have a SLURM cluster. + +Keep in mind that the valid tracks and train tracks are corrupted in different ways for those tasks, so do not expect +the valid loss to go down as smoothly as with normal training on the clean MusDB. + +I only trained Hybrid Demucs baselines as Hybrid Transformer typically requires more data. + + +## Exporting models + +Run +``` +python -m tools.export SIG +``` + +This will export the trained model into the `release_models` folder. + +## Submitting a model + +Clone the [Demucs Starter Kit for SDX23](https://github.com/adefossez/sdx23). Follow the instructions there. + +You will to copy the models under `release_models` in the `sdx23/models/` folder before you can use them. +Make sure you have git-lfs properly installed and setup before adding those files to your fork of `sdx23`. diff --git a/demucs/docs/training.md b/demucs/docs/training.md new file mode 100644 index 00000000..fa046070 --- /dev/null +++ b/demucs/docs/training.md @@ -0,0 +1,290 @@ +# Training (Hybrid) Demucs + +## Install all the dependencies + +You should install all the dependencies either with either Anaconda (using the env file `environment-cuda.yml` ) +or `pip`, with `requirements.txt`. + +## Datasets + +### MusDB HQ + +Note that we do not support MusDB non HQ training anymore. +Get the [Musdb HQ](https://zenodo.org/record/3338373) dataset, and update the path to it in two places: +- The `dset.musdb` key inside `conf/config.yaml`. +- The variable `MUSDB_PATH` inside `tools/automix.py`. + +### Create the fine tuning datasets + +**This is only for the MDX 2021 competition models** + +I use a fine tuning on a dataset crafted by remixing songs in a musically plausible way. +The automix script will make sure that BPM, first beat and pitches are aligned. +In the file `tools/automix.py`, edit `OUTPATH` to suit your setup, as well as the `MUSDB_PATH` +to point to your copy of MusDB HQ. Then run + +```bash +export NUMBA_NUM_THREADS=1; python3 -m tools.automix +``` + +**Important:** the script will show many errors, those are normals. They just indicate when two stems + do not batch due to BPM or music scale difference. + +Finally, edit the file `conf/dset/auto_mus.yaml` and replace `dset.wav` to the value of `OUTPATH`. + +If you have a custom dataset, you can also uncomment the lines `dset2 = ...` and +`dset3 = ...` to add your custom wav data and the test set of MusDB for Track B models. +You can then replace the paths in `conf/dset/auto_extra.yaml`, `conf/dset/auto_extra_test.yaml` +and `conf/dset/aetl.yaml` (this last one was using 10 mixes instead of 6 for each song). + +### Dataset metadata cache + +Datasets are scanned the first time they are used to determine the files and their durations. +If you change a dataset and need a rescan, just delete the `metadata` folder. + +## A short intro to Dora + +I use [Dora][dora] for all the of experiments (XPs) management. You should have a look at the Dora README +to learn about the tool. Here is a quick summary of what to know: + +- An XP is a unique set of hyper-parameters with a given signature. The signature is a hash of + those hyper-parameters. I will always refer to an XP with its signature, e.g. `9357e12e`. + We will see after that you can retrieve the hyper-params and re-rerun it in a single command. +- In fact, the hash is defined as a delta between the base config and the one obtained with + the config overrides you passed from the command line. + **This means you must never change the `conf/**.yaml` files directly.**, + except for editing things like paths. Changing the default values in the config files means + the XP signature won't reflect that change, and wrong checkpoints might be reused. + I know, this is annoying, but the reason is that otherwise, any change to the config file would + mean that all XPs ran so far would see their signature change. + +### Dora commands + +Run `tar xvf outputs.tar.gz`. This will initialize the Dora XP repository, so that Dora knows +which hyper-params match the signature like `9357e12e`. Once you have done that, you should be able +to run the following: + +```bash +dora info -f 81de367c # this will show the hyper-parameter used by a specific XP. + # Be careful some overrides might present twice, and the right most one + # will give you the right value for it. +dora run -d -f 81de367c # run an XP with the hyper-parameters from XP 81de367c. + # `-d` is for distributed, it will use all available GPUs. +dora run -d -f 81de367c hdemucs.channels=32 # start from the config of XP 81de367c but change some hyper-params. + # This will give you a new XP with a new signature (here 3fe9c332). +``` + +An XP runs from a specific folder based on its signature, by default under the `outputs/` folder. +You can safely interrupt a training and resume it, it will reuse any existing checkpoint, as it will +reuse the same folder. +If you made some change to the code and need to ignore a previous checkpoint you can use `dora run --clear [RUN ARGS]`. + +If you have a Slurm cluster, you can also use the `dora grid` command, e.g. `dora grid mdx`. +Please refer to the [Dora documentation][dora] for more information. + +## Hyper parameters + +Have a look at [conf/config.yaml](../conf/config.yaml) for a list of all the hyper-parameters you can override. +If you are not familiar with [Hydra](https://github.com/facebookresearch/hydra), go checkout their page +to be familiar with how to provide overrides for your trainings. + + +## Model architecture + +A number of architectures are supported. You can select one with `model=NAME`, and have a look +in [conf/config.yaml'(../conf/config.yaml) for each architecture specific hyperparams. +Those specific params will be always prefixed with the architecture name when passing the override +from the command line or in grid files. Here is the list of models: + +- demucs: original time-only Demucs. +- hdemucs: Hybrid Demucs (v3). +- torch_hdemucs: Same as Hybrid Demucs, but using [torchaudio official implementation](https://pytorch.org/audio/stable/tutorials/hybrid_demucs_tutorial.html). +- htdemucs: Hybrid Transformer Demucs (v4). + +### Storing config in files + +As mentioned earlier, you should never change the base config files. However, you can use Hydra config groups +in order to store variants you often use. If you want to create a new variant combining multiple hyper-params, +copy the file `conf/variant/example.yaml` to `conf/variant/my_variant.yaml`, and then you can use it with + +```bash +dora run -d variant=my_variant +``` + +Once you have created this file, you should not edit it once you have started training models with it. + + +## Fine tuning + +If a first model is trained, you can fine tune it with other settings (e.g. automix dataset) with + +```bash +dora run -d -f 81de367c continue_from=81de367c dset=auto_mus variant=finetune +```` + +Note that you need both `-f 81de367c` and `continue_from=81de367c`. The first one indicates +that the hyper-params of `81de367c` should be used as a starting point for the config. +The second indicates that the weights from `81de367c` should be used as a starting point for the solver. + + +## Model evaluation + +Your model will be evaluated automatically with the new SDR definition from MDX every 20 epochs. +Old style SDR (which is quite slow) will only happen at the end of training. + +## Model Export + + +In order to use your models with other commands (such as the `demucs` command for separation) you must +export it. For that run + +```bash +python3 -m tools.export 9357e12e [OTHER SIGS ...] # replace with the appropriate signatures. +``` + +The models will be stored under `release_models/`. You can use them with the `demucs` separation command with the following flags: +```bash +demucs --repo ./release_models -n 9357e12e my_track.mp3 +``` + +### Bag of models + +If you want to combine multiple models, potentially with different weights for each source, you can copy +`demucs/remote/mdx.yaml` to `./release_models/my_bag.yaml`. You can then edit the list of models (all models used should have been exported first) and the weights per source and model (list of list, outer list is over models, inner list is over sources). You can then use your bag of model as + +```bash +demucs --repo ./release_models -n my_bag my_track.mp3 +``` + +## Model evaluation + +You can evaluate any pre-trained model or bag of models using the following command: +```bash +python3 -m tools.test_pretrained -n NAME_OF_MODEL [EXTRA ARGS] +``` +where `NAME_OF_MODEL` is either the name of the bag (e.g. `mdx`, `repro_mdx_a`), +or a single Dora signature of one of the model of the bags. You can pass `EXTRA ARGS` to customize +the test options, like the number of random shifts (e.g. `test.shifts=2`). This will compute the old-style +SDR and can take quite bit of time. + +For custom models that were trained locally, you will need to indicate that you wish +to use the local model repositories, with the `--repo ./release_models` flag, e.g., +```bash +python3 -m tools.test_pretrained --repo ./release_models -n my_bag +``` + + +## API to retrieve the model + +You can retrieve officially released models in Python using the following API: +```python +from demucs import pretrained +from demucs.apply import apply_model +bag = pretrained.get_model('htdemucs') # for a bag of models or a named model + # (which is just a bag with 1 model). +model = pretrained.get_model('955717e8') # using the signature for single models. + +bag.models # list of individual models +stems = apply_model(model, mix) # apply the model to the given mix. +``` + +## Model Zoo + +### Hybrid Transformer Demucs + +The configuration for the Hybrid Transformer models are available in: + +```shell +dora grid mmi --dry_run --init +dora grid mmi_ft --dry_run --init # fined tuned on each sources. +``` + +We release in particular `955717e8`, Hybrid Transformer Demucs using 5 layers, 512 channels, 10 seconds training segment length. We also release its fine tuned version, with one model +for each source `f7e0c4bc`, `d12395a8`, `92cfc3b6`, `04573f0d` (drums, bass, other, vocals). +The model `955717e8` is also named `htdemucs`, while the bag of models is provided +as `htdemucs_ft`. + +We also release `75fc33f5`, a regular Hybrid Demucs trained on the same dataset, +available as `hdemucs_mmi`. + + + +### Models from the MDX Competition 2021 + + +Here is a short descriptions of the models used for the MDX submission, either Track A (MusDB HQ only) +or Track B (extra training data allowed). Training happen in two stage, with the second stage +being the fine tunining on the automix generated dataset. +All the fine tuned models are available on our AWS repository +(you can retrieve it with `demucs.pretrained.get_model(SIG)`). The bag of models are available +by doing `demucs.pretrained.get_model(NAME)` with `NAME` begin either `mdx` (for Track A) or `mdx_extra` +(for Track B). + +#### Track A + +The 4 models are: + +- `0d19c1c6`: fine-tuned on automix dataset from `9357e12e` +- `7ecf8ec1`: fine-tuned on automix dataset from `e312f349` +- `c511e2ab`: fine-tuned on automix dataset from `81de367c` +- `7d865c68`: fine-tuned on automix dataset from `80a68df8` + +The 4 initial models (before fine tuning are): + +- `9357e12e`: 64ch time domain only improved Demucs, with new residual branches, group norm, + and singular value penalty. +- `e312f349`: 64ch time domain only improved, with new residual branches, group norm, + and singular value penalty, trained with a loss that focus only on drums and bass. +- `81de367c`: 48ch hybrid model , with residual branches, group norm, + singular value penalty penalty and amplitude spectrogram. +- `80a68df8`: same as b5559babb but using CaC and different + random seed, as well different weigths per frequency bands in outermost layers. + +The hybrid models are combined with equal weights for all sources except for the bass. +`0d19c1c6` (time domain) is used for both drums and bass. `7ecf8ec1` is used only for the bass. + +You can see all the hyper parameters at once with (one common line for all common hyper params, and then only shows +the hyper parameters that differs), along with the DiffQ variants that are used for the `mdx_q` models: +``` +dora grid mdx --dry_run --init +dora grid mdx --dry_run --init +``` + +#### Track B + +- `e51eebcc` +- `a1d90b5c` +- `5d2d6c55` +- `cfa93e08` + +All the models are 48ch hybrid demucs with different random seeds. Two of them +are using CaC, and two are using amplitude spectrograms with masking. +All the models are combined with equal weights for all sources. + +Things are a bit messy for Track B, there was a lot of fine tuning +over different datasets. I won't describe the entire genealogy of models here, +but all the information can be accessed with the `dora info -f SIG` command. + +Similarly you can do (those will contain a few extra lines, for training without the MusDB test set as training, and extra DiffQ XPs): +``` +dora grid mdx_extra --dry_run --init +``` + +### Reproducibility and Ablation + +I updated the paper to report numbers with a more homogeneous setup than the one used for the competition. +On MusDB HQ, I still need to use a combination of time only and hybrid models to achieve the best performance. +The experiments are provided in the grids [repro.py](../demucs/grids/repro.py) and +[repro_ft._py](../demucs/grids/repro_ft.py) for the fine tuning on the realistic mix datasets. + +The new bag of models reaches an SDR of 7.64 (vs. 7.68 for the original track A model). It uses +2 time only models trained with residual branches, local attention and the SVD penalty, +along with 2 hybrid models, with the same features, and using CaC representation. +We average the performance of all the models with the same weight over all sources, unlike +what was done for the original track A model. We trained for 600 epochs, against 360 before. + +The new bag of model is available as part of the pretrained model as `repro_mdx_a`. +The time only bag is named `repro_mdx_a_time_only`, and the hybrid only `repro_mdx_a_hybrid_only`. +Checkout the paper for more information on the training. + +[dora]: https://github.com/facebookresearch/dora diff --git a/demucs/docs/windows.md b/demucs/docs/windows.md new file mode 100644 index 00000000..b259b765 --- /dev/null +++ b/demucs/docs/windows.md @@ -0,0 +1,67 @@ +# Windows support for Demucs + +## Installation and usage + +If you don't have much experience with Anaconda, python or the shell, here are more detailed instructions. Note that **Demucs is not supported on 32bits systems** (as Pytorch is not available there). + +- First install Anaconda with **Python 3.8** or more recent, which you can find [here][install]. +- Start the [Anaconda prompt][prompt]. + +Then, all commands that follow must be run from this prompt. + +

+ I have no coding experience and these are too difficult for me + +> Then a GUI is suitable for you. See [Demucs GUI](https://github.com/CarlGao4/Demucs-Gui) + +
+ +### If you want to use your GPU + +If you have graphic cards produced by NVIDIA with more than 2GiB of memory, you can separate tracks with GPU acceleration. To achieve this, you must install Pytorch with CUDA. If Pytorch was already installed (you already installed Demucs for instance), first run `python.exe -m pip uninstall torch torchaudio`. +Then visit [Pytorch Home Page](https://pytorch.org/get-started/locally/) and follow the guide on it to install with CUDA support. Please make sure that the version of torchaudio should no greater than 2.1 (which is the latest version when this document is written, but 2.2.0 is sure unsupported) + +### Installation + +Start the Anaconda prompt, and run the following + +```cmd +conda install -c conda-forge ffmpeg +python.exe -m pip install -U demucs SoundFile +``` + +### Upgrade + +To upgrade Demucs, simply run `python.exe -m pip install -U demucs`, from the Anaconda prompt. + +### Usage + +Then to use Demucs, just start the **Anaconda prompt** and run: +``` +demucs -d cpu "PATH_TO_AUDIO_FILE_1" ["PATH_TO_AUDIO_FILE_2" ...] +``` +The `"` around the filename are required if the path contains spaces. A simple way to input these paths is draging a file from a folder into the terminal. + +To find out the separated files, you can run this command and open the folders: +``` +explorer separated +``` + +### Separating an entire folder + +You can use the following command to separate an entire folder of mp3s for instance (replace the extension `.mp3` if needs be for other file types) +``` +cd FOLDER +for %i in (*.mp3) do (demucs -d cpu "%i") +``` + +## Potential errors + +If you have an error saying that `mkl_intel_thread.dll` cannot be found, you can try to first run +`conda install -c defaults intel-openmp -f`. Then try again to run the `demucs` command. If it still doesn't work, you can try to run first `set CONDA_DLL_SEARCH_MODIFICATION_ENABLE=1`, then again the `demucs` command and hopefully it will work 🙏. + +**If you get a permission error**, please try starting the Anaconda Prompt as administrator. + + +[install]: https://www.anaconda.com/download +[prompt]: https://docs.anaconda.com/anaconda/user-guide/getting-started/#open-prompt-win diff --git a/demucs/environment-cpu.yml b/demucs/environment-cpu.yml new file mode 100644 index 00000000..2419bf35 --- /dev/null +++ b/demucs/environment-cpu.yml @@ -0,0 +1,28 @@ +name: demucs + +channels: + - pytorch + - conda-forge + +dependencies: + - python>=3.8,<3.10 + - ffmpeg>=4.2 + - pytorch>=1.8.1 + - torchaudio>=0.8 + - tqdm>=4.36 + - pip + - pip: + - diffq>=0.2 + - dora-search + - einops + - hydra-colorlog>=1.1 + - hydra-core>=1.1 + - julius>=0.2.3 + - lameenc>=1.2 + - openunmix + - musdb>=0.4.0 + - museval>=0.4.0 + - soundfile + - submitit + - treetable>=0.2.3 + diff --git a/demucs/environment-cuda.yml b/demucs/environment-cuda.yml new file mode 100644 index 00000000..0d61d33d --- /dev/null +++ b/demucs/environment-cuda.yml @@ -0,0 +1,28 @@ +name: demucs + +channels: + - pytorch + - conda-forge + +dependencies: + - python>=3.8,<3.10 + - ffmpeg>=4.2 + - pytorch>=1.8.1 + - torchaudio>=0.8 + - cudatoolkit>=10 + - tqdm>=4.36 + - pip + - pip: + - diffq>=0.2 + - dora-search + - einops + - hydra-colorlog>=1.1 + - hydra-core>=1.1 + - julius>=0.2.3 + - lameenc>=1.2 + - openunmix + - musdb>=0.4.0 + - museval>=0.4.0 + - soundfile + - submitit + - treetable>=0.2.3 diff --git a/demucs/hubconf.py b/demucs/hubconf.py new file mode 100644 index 00000000..0cdb553e --- /dev/null +++ b/demucs/hubconf.py @@ -0,0 +1,11 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +dependencies = ['dora-search', 'julius', 'lameenc', 'openunmix', 'pyyaml', + 'torch', 'torchaudio', 'tqdm'] + +from demucs.pretrained import get_model + diff --git a/demucs/mypy.ini b/demucs/mypy.ini new file mode 100644 index 00000000..c4e17f16 --- /dev/null +++ b/demucs/mypy.ini @@ -0,0 +1,5 @@ +[mypy] + +[mypy-treetable,torchaudio.*,diffq,yaml,tqdm,lameenc,musdb,museval,openunmix.*,einops,xformers.*] +ignore_missing_imports = True + diff --git a/demucs/outputs.tar.gz b/demucs/outputs.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..51933ac9ad898690980dd85c53ff4160567dbc8c GIT binary patch literal 1885 zcmXBOdo+}ZAIEW*sYbge%2qPJ8Y0wUT5Y1}sdkl=r3({l4BG`I6kU`&>#~#)>ryh) zxeHXGzKj$9vs$XA!6A^8K0p`!|RO z8?oBiPloDb@*-X zZR5<&T}Xc@Tzrtv*xO+0=pN_N1T*nxBfe zEg6K6{z%BYQU<9wncxTxM=Lx^L!jDJz3VHk+S7rv$v{Q|k*d0G2X5XaL7J%!`wFy3 zrHmduNY-nXBD*Vs_l;je`{dva+q)!%R}QubsMBAkW^F-Df7$1 zRp0P{xF!oF&VEFewx!2T!X_n}phQgm(exbR+Li@MfDPO)4+(tq=bqo&1d*D7>1vxH z*cOC&?Kidjao=(y*ps38YAR1ZzDCmlJ2uJahd@`)8ggtdUMSGyL<&QkclECFxGd4^ zX`in}_&#AUXd8kqpmxHu373tPv}`XSD|};>X$kL{88KoiLe9yyF@Ut|4Hb^dtSDB> zvkf*+TWV>|pPl{f1z~mX?CA=zFYAr%GdWTIL~x`wzQ7*)ZE4zZj-Q)x?K?|sI$>`j zhc%NKH-5HlU-u+Y&u{8`X(%}YHw|ILp#JJ?&dIQdw63P_{47T|40V(SW5P37>Xw50 z{0Q+Rudru*2D8j&!0X|$m39o#pG@TPxMLZ^$KBvFUNu?IV~)kn^3Rih0mBoJ8|FF< z{_Yua!-Q0EfuFB0Nnre{Nh{Csn@ka>q`VjZZ)tnuqXvh%nK^_%z5cCk*~^i)M`GRQ z(?{~hDGPU7n_!{MjxSvfUf&rtrk}6OvRjB*B~Ps-Y+1LMb+YD==XF1Kt83~?$7@&j z+X}aA`0FUkXHNT&#DI7;>5*@AXo08vcr^1^q{5qA*F5QAW!(_#pMPfYef1+xto>fU zx0YUboJqAk^)OEuN)0coq*cvyv+?*||H}54M_4C6-U+S}XIXa(oX#CA&mZa@omd|9 zSH|6EDJ6MUWfsY`V0aI1_Zh0d|MVNwDBTfPZ}S!~MdB5{vMXFDons`rV!n zufC=ur~d@e&0Ba+2 zTW>(cA8jhcC|w9!63=tbgLV4*%!+fc^(F?cLU0^Ii?u%m*U3RFMHI$BzY*soLUkWO zl8RDn(}xgto&bwZpl1`DM4;CR`z!I5tFXo=6pT!&v=`D|HjLg5!9%eNfln$1<|t#U(V4Qn@?g5i@K})ZLw04<+b-ft=-VoJFDDL z&atf?hzFQ_2mn$eKJWrIj-e;q)`OwmE1+$|r#f8^kEHs!@LzH+78##DcL2g@OE1MJ zZ%ry`BaE))m%i&9Mq5V_3*lTOrZEfv-Gw3}IIJDcQh8C)vMOEjRl^k!lc1fLyW!RE ziYWuID~lzGm@;zJSPN?yInMq8^b^NqP%w&gPIYnaR}HY?Jp#s!_yK?e3N7dV?|PkLvrybzEm(ESxSS?1G9G;z@|>`9Z6 z&FTZSWbWKl$VTy=~q5n+u zQ(8lAU;s=sE@^zXx}e-LW(%um^;~w+&C4Ytd|=0.1.12 +diffq>=0.2.1 +einops +flake8 +hydra-colorlog>=1.1 +hydra-core>=1.1 +julius>=0.2.3 +lameenc>=1.2 +museval +mypy +openunmix +pyyaml +submitit +torch>=1.8.1 +torchaudio>=0.8,<2.3.1 +tqdm +treetable +soundfile>=0.10.3 diff --git a/demucs/requirements_minimal.txt b/demucs/requirements_minimal.txt new file mode 100644 index 00000000..28909d7d --- /dev/null +++ b/demucs/requirements_minimal.txt @@ -0,0 +1,10 @@ +# please make sure you have already a pytorch install that is cuda enabled! +dora-search +einops +julius>=0.2.3 +lameenc>=1.2 +openunmix +pyyaml +torch>=1.8.1 +torchaudio>=0.8,<2.3.1 +tqdm diff --git a/demucs/setup.cfg b/demucs/setup.cfg new file mode 100644 index 00000000..d54d56a0 --- /dev/null +++ b/demucs/setup.cfg @@ -0,0 +1,8 @@ +[pep8] +max-line-length = 100 + +[flake8] +max-line-length = 100 + +[yapf] +column_limit = 100 diff --git a/demucs/setup.py b/demucs/setup.py new file mode 100644 index 00000000..47163d79 --- /dev/null +++ b/demucs/setup.py @@ -0,0 +1,75 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. +# author: adefossez +# Inspired from https://github.com/kennethreitz/setup.py + +from pathlib import Path + +from setuptools import setup + + +NAME = 'demucs' +DESCRIPTION = 'Music source separation in the waveform domain.' + +URL = 'https://github.com/facebookresearch/demucs' +EMAIL = 'defossez@fb.com' +AUTHOR = 'Alexandre Défossez' +REQUIRES_PYTHON = '>=3.8.0' + +HERE = Path(__file__).parent + +# Get version without explicitely loading the module. +for line in open('demucs/__init__.py'): + line = line.strip() + if '__version__' in line: + context = {} + exec(line, context) + VERSION = context['__version__'] + + +def load_requirements(name): + required = [i.strip() for i in open(HERE / name)] + required = [i for i in required if not i.startswith('#')] + return required + + +REQUIRED = load_requirements('requirements_minimal.txt') +ALL_REQUIRED = load_requirements('requirements.txt') + +try: + with open(HERE / "README.md", encoding='utf-8') as f: + long_description = '\n' + f.read() +except FileNotFoundError: + long_description = DESCRIPTION + +setup( + name=NAME, + version=VERSION, + description=DESCRIPTION, + long_description=long_description, + long_description_content_type='text/markdown', + author=AUTHOR, + author_email=EMAIL, + python_requires=REQUIRES_PYTHON, + url=URL, + packages=['demucs'], + extras_require={ + 'dev': ALL_REQUIRED, + }, + install_requires=REQUIRED, + include_package_data=True, + entry_points={ + 'console_scripts': ['demucs=demucs.separate:main'], + }, + license='MIT License', + classifiers=[ + # Trove classifiers + # Full list: https://pypi.python.org/pypi?%3Aaction=list_classifiers + 'License :: OSI Approved :: MIT License', + 'Topic :: Multimedia :: Sound/Audio', + 'Topic :: Scientific/Engineering :: Artificial Intelligence', + ], +) diff --git a/demucs/test.mp3 b/demucs/test.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..668604d876880d39913ef73bcf9df4b4308a9d70 GIT binary patch literal 802480 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

+RjCwR>N)iXJXs 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%0Aqy_xmoqZfCK1|6r_B#CSPwnR~(-p z7^HCr=10l|z^U@EsJQ~{Db^I#H@qsvlsBo)L)iIjizQ!)ian!g3W+OKwGVH#7l@lH zkc-Do)E@|&=uM-aTrl19NL0^o9eeX^wDn1{?)YrFj(P63cWim!yG!1~DvybP%JHP$>r`?hjKtA-U!~9`p8&# zwGhjLj2ysjUvO0sB0)^FYvlSE1`x0~Ci(8?NHA0j%hj6OH^fLHv?0*M{0Q#y(8#Du zB0@y+aaB1JyVAn^rH#mNTDyzZe)cFGnfgbJ66Krq7e*7jWg&A5i`;NKxw{(5|q_o;gR z!p72Un`flXTyztu$NZ`E<>mMJ&rh5Vg2%UJx;B<@oh>;W;ltD3y+CU$?OrWzU3)JI zy7nO?mU5dFh+l!bkpi*6As2ALFSsK@^w6DFa*U3IFp!rZ@&c-m1?>u@3>F?Dk!}GZ z`)E160)^0dxw(l$Id7r6gVg?yo#~zKoi6Ly=gXeG__%tf%6A57?y~-Ja_fACMz@xR zPIg%V)AZiychR130 zA6z~4rsy&SYtAM7AlWcBKo#|}Qrsg6J@8O%B#4u{9d~ovxZ>4}2O4G^;S5sO3Iey>Z z9+%WP#*a*+^A~1SdznfUn&Q>T37(e~`iq#q?o85bn`*~qIgUf=2BFzd+RTZTo!c){ z^s`^-*Fj%2J<8f~X=Z=&U4Z1hrzgJcljp7bu7wX>KCPd99OB%z^4pQW%Gvzbb8(>L z@o&4HoXe?_%hikyNXjg)eKV_xHhUa1o?v^Jq5U z`9IaGaS?zX3=Ct@gnccYe8!n%Z#C)sc2blgMG=_np|_}v(%4pE&e$s8sgh#B&CD2) z2vF(s29QhsI1`D3X*&sLy51e0Cv%E(RMl~Y(joo0L`Zn6>DC7I&Qm$c2=+f#M z1Iw0Q^HaH?6iJ6~B|v6-)oHj@@VyRblj2T;Ol|i{j}z6zBC5)R`^L>xSmT7f2X%Qj zouC2K@gdSV$o|MxF_!cN-TA{!WgY36mFeP&DSETasu^OR9>A_m@ry=^?c^hk# z8oH}llk@IRZNWq7vL~8s=Tw?ZogQYQ*)>TkPs?kXFANizb`=xQu0pnnz4zCQ@DOq#UFGP&WBCx4APUg+^^`0& zl!(M8gc>sS59gt<)llh&{p_V8xnob#{yLX`tO$vsFwfA%9C&DAJl?MaL4=tFnG9E? zKXxf(uCJPRVho!~)7HD<2x$$biyd1IcDH=1bex)uhngnKtgqgR7CptvA3v(O%>B;) z{*UMPN0%%pGk=)TE2K3`29t85)LRNETEr!y(r1$~wN_FXvUy_r2GD|G zuSKP%!U-TB)Z(?_2(Bp`C*UZLKW8LS5IF;pV>O-1;$Z9n5^Qk1BW091LLnVQ08Cls ziKXt*vdyXFoZ4unR_jWldHbpEd@*>uc{tDk_@dHR@Cwl*9ElLVC|^|roV5NFa!)pR*y{84X>ePn#x?$U~X zw&ma7WL}M}gN>>4m~aZ>u-ql1&8#uYX@%Umxx&E2sHLbc>#31TF`RU14)XEEMrCUU z5H%?t6-UE$|5)h*Ws*$2O%uaKn948l!aJl?I0Zcjn{xW8+8CG-O%o9@8mB_R(nFd- zomdxL_%*upl6yJwhSid3^S{qWG+&LHBTD84g!xj(mH{zduX++i}dBelZ3B@^Y+eN%M*m>Llb$q{%w?eMwMC3S|_R5Kwhr{76)7qY4uwkJn?l1ndUF@H4 z9|V=;+P@*yb&@2aEowaKL&7VKbglo!MRmQX7(f5DzvHn`J=Wc#Uz7XyK+3o)I^02piXo7|B?fHZDo5mJCu47x;U6?a;V4W|qgVzsl4BiExnv*kK(aoE$7m z_!;DzOZTOoL#dmMo*aq~+W`2i2|T)-&$d*?>e~(1vqn);PljFzNn=D~Zd^-XsqEW> zJSHBfDPD}8=M4-(O%7+KrKoQt1TLSZP=FGg7`gkJ z2lmi+APE=CD%%JzObbN295P6vSlIUOMFpyI6@8L+~ zKE9|el4LiU6WJtvn|@uC*-sBFV@lHUi5jz%cV4;98{RW*BZStQvCpO0qUftLJ}~UZ zYzH5vcoFYsob3Pk7V~#Ze9kpPDWl|mX)}iLsHJ9GbNGS0$xD?zMjxF|K?CikVw5n{d0zFB&N;)m{0ms7{|w~p%O(6Lu|dHjcg+DS4Z%!k4C@aewsD;wEB4}l0qjhqLc zj3ArBX~{R-C~Z89wvAF?(jD^@3HPeX5>;0p7!Oom?v-*x+6lNkQG3$;oeWm5*>?`2;bL#tCu?Bl|T$LXdKQoCX(SsdcF9FcSQ|&&C_6&D8xI|WYQTQ zCGon);Fh_z?2me$3@1mR0W~m0meNc~B>SzT8n8wrFrExWYPgQ1GG_GxON&I4DEI3H z&5groTIbj}nQKKROLPM#ZjR>Hm~pX#n6xbE%Bf(+n&x6u>1*YNy%x0;Ywcw`rfQ|s zeQKcvRT&jR&vF=&O_%!ytbPdAW$;p7U|)#Ww1q}H7{rvp+S=-bvc_Dh8DA}asG>2s zAHB@sGLXhr`j3CfJv@@nU4M0d=$uh%wOz}ztn*0A*IvwQ&k()ey*4@^GF5~lnJme zgJT4@rq$;pw9

I04kLkdX|T(P_Xa{5%1uDK61pqw4Hj=|7aIEc>HW@_NfxLAzqt znv*!Q+I#=GDL5~tj2S=EqFf36R_>-v7bKV@RKLY3@i1*HypW%26O|0!2 zJr~+d%r@$$lpd|8oQ?LhW48WuVwx3aZ?Wl{*&He;EZ08mxyoig+!(Q+jOl!Tx&Kur zh=_;4tRnSFiC;E%fk}46*fNNxdeeQ#vTS6C+#0GO6@TC1`2t+_?>k^^t_^KY{tWyUe|Z;sB#!e1oR z$@gazR0#}9wOM8tbbc;P3r0gP>)DdktF+}fwLnc~ZX5dYd=Ubm7VV`w`d;!f^sS+{ zCGXy<(zs?}Y0d?DR^xa=sxr0dbt900bV3EEV|Z=;LKXVN>RFJ>PTfF9jRjAHieb{@ zVx7As>1XsOoOjQMD>fZ;t~6P(kH4zW)4U_fQTtc$Zp9g6 zqWMOU0PnFZ-B2<>n?jEONc}=~-g`rDZ2f$C!);P+aZ09R!d#4a%s7lw8bq7EZ?x?> z&>JS`SEgpfxWqT4;fi@|b0w*Yl-tN0bx6!7qo1Qs_Q#*AR+yw`GJR~b+VE}J?9-;YZVz#w!e72Q5C6mI4`gRCU2c6~lAs~Jmf4sFuMA6fQ!UT8;igoQU%$B)K-{iHP3Hu^$$U(fGd#Sgiy z_xs;%tSh#Bp3+jt(PmPKcDPmWyJbTSvYALdn%kxJul-`qd!r#!0(|fPo^O|gzt&u`;Ik8Ug0uC|&l6YOkXRBS!mkUmle3dunOYh(F zFMcNW<_syLc?}9`JJh?4<{J4c(?*cGJ*gnEI)3#c_ z3^X>wp6qU<|G_Gkn2Ji_qP+~)nx6VS3f{kNqabX;1V*$<4V*D!10&ArecKt1m2N$RN=vgEH%reQ>`)Tj z0!EQH&OwZRh?83ZZ49aetOcNH(E=$3d2&2K0`ku_F(PiPM6e%nG#|W8m&)0cfZ+?t zirl^lW*r&w^l^wK0J!{supt^*1gsy>kGy8Wq>98W8X?TY6@lAXG zu!8PSn|=ct3GTmg-Wz$m+$s?8P>!y13{c!^@a*2|Osacu^!D4})%@8%*SfG({|7&B z*IFpP`rQMQ&y9qV<02<1(r|gQA<=kvNDN6iMIr#z85Is$O8h{Ii1wig-3gGm6GCcwuPIcSt5!WxGa208nu3%FpvIifI75RuPH zpMx28n-oS$#)M)l%WJ)jN3)ll82TK?Q1jsdj7(tV&9)wC75Y)`Ca(BNB~~q@^9V`} zs=@eF8jPEVra6ICR6fjXQ!#=#5IYrJKn9eWb|Fv?6w8ocmCJ|AeJHXX~?ABYw#{9SDT04VGFJ~$GiM!~~EDHBNbf?;3w(KO56FAYgUu%rnG zDxwyUj}h+F8!ip31aL{BzX^>BaNU(c&d`H^sOB@jK}jPg(gG=Z)4=ADBsH}Xs+X$n zuZ2k*`zv;+@1QkQ&~h+2vi;ls%#gy~@~Ww5l76Tc4>>KCj$F0zybdaR;i_y<_nm9d zvlJXrXi_zXF?DK>oCN)HUtqp7Qlz8u(bL~qNZxemfHM8gz}Gq^6Vnrq>fuM|CwF2m zE4;hR+WNFPgOi_`3JBbM&-d`4^o5vO-94(WY?-GUTfBG8U-$R?tlUj4cKDEz_FCDM zBlZo{01W_`Y?1-?kOCC`6dQxc90-E|xt&xzke9;u9pV+W38mo<;x;L&m<%t5{RIK) zk)ZVYy5n(#|3D!Jw$orSlK(Nx?{a+4B+M(tE+qEaq48+E9^sOF^tS0P6R;0ELkR#z z`LK<{=&`np+334u8jsT&E69+}eo1?}_t}B)H%P7^GOg^P^o~X#_SHspu5zn>qj1%= z{t(vx{IJ8>Fu02&wtARyEl<}n727qN78b?xUgn-?-QVd2FYTZl_YFypzcWD|OF;ol zZzj6l*39+&6V>DLSeRFT+nD*HEux8Ub@iTbgD~BfdiK$;PrgRg?r4^S)YE8u?V0IW zFQeAx0^jGkUfTR%x6AuNxZbJlpQ{b)!w9vzDsln%6=7Tet=_{Vm|kk|`1#GGVoI$^ z>D;6{Y8~_CGQ_*a!F}wqdJuvVp$eJ>R_lwCGaHdXcM8yYX_YkPuferOh%7rmjiS`j zX2*{~yclIjO9{?#{L@KkcYN)56_9)XL2}i)?&ToBghDcRgXsT5l*P+rNw|T zoRQ45TxjkMd({ZCcM8}tP>dJ}+?IPKqHopJ0pK|G?e)}xBxsuFm#(tm8CcUL@!uJm zPcW8Ch*dp-;d5p0ASWmDuNmx^)Tv&I>D<&&$%_x|cI+AYx=EhOg$JMYZq(jwi)KK+ zezC%mq?VTaV%c=AlK8 z%e$UYOQcKUW{=V;iBz@U6S`Bb?p+C<&oyljKF5gl>RdnTNrY93lfE^89-*9Tq;HC< zm~cx4J}^pu*jvSTy}Ly_($7s(PRIod_4)w~RY3bR{Jzl!EDjmH8$1`4gi;=>(g{+m zZyNbf`b}2ps_-;JFzQrP8%X51?@Fyz1sO0v)9n%fryEk<4w1c)$^w+6GVP`VTN;y# zY=9&I2VW4Ky^ss|Ic?FBb6g`0C)2m?>R=6TwVSkJmf5?LcV@PAxu;19BaXb2tfR+ozn=rT;8Sltv>tRD+o_+Q57cV=U3;lZQOgpi zErvsr#L2+HxOJQy0dJC)mhgcdFWt2C9KgZ$f+jD*fmKu%Zve$U?*{<}W9b1@5Owt^ zJ@(y?A51#>{_|aOu1y*F=rElBC(N&ETUaXWjR0@RGtNi8$9=AN=lE3~L?2#i22pQ_z*%-=*>@zJzW>z~e{K8}F!DMHRQOLTS#JfV}p5e<6N++H? zoC*5sS^Jc=VlJE1J4l}QSyuHM*`DvnXIB@RKmU39a=W~B|MoQK8?Uj1$sq-Zn`=zl z2+x>tktTEtzS+T@lUi`&#yjqj(z9H)tm;X_4c0Ci*4Sb(d<#(9kY0}k1p%`Nn5h}- z-KYeXR5~lbDy4bzEg@ivf|wyWSwyGv=K3ZC3+z>AL#&cFq90-d&2CdiEC zqw=|b6V0Y0bu?!7BWcT3W@}`2qH6dmp<3(Gx|>-!Iym$!JXNq#E5r|`_~LFl7gt!I^r<( z0Y@$G>0%nA#9u+*Uu)pFkNH+s;+?~HgKbTYoG9ORKLn4>`Oe=&YL?C{zEfCTfG z&R|^r;mzZetB8dC`s}c)B|QKjJ(EzSM0^kd9}?qD`b{c5%Mh6ObdaCmN(L7z*@CMJ=j$#yZB(*%|*&{GsAWQ*C0|e zLH69ARAKEIaarl(3gqQr;pm&lMC4c7bvZlBS4!g%4XWnTH_BlLxz-)G%_clXN(6~Q zu6=>c8cq@t#G&fbI)>1@YD@u2Q>S?LnhQ!58~wp4tY6)zrx^Wy%)x<`oGvO0ShJh|xU0rf`Hk+sIrDMXTo1@l#QoEQj;EUz zXU9TqehpVw+Xcc@CBJLz9=2I~-uH-ucOPM39QxX~SkvL&XS>C|LdpEBxb#^)sU{8K4a*Y|_?yr6D99ZoU00@kRC0lLjSERr-sEV^ z5l*P-#;Ku)u>%vvwDc5s0ay`jDK4^w19T?F=!a9H;*IW)6t}}RdO5gBa&W@AWMX*6 zG(f72sqs8%v;E@z(R0Q907?KE4T@UJ)jJ<9>F7gkmnGiK3)|B z;=2D?`C3J!crp&1IFABP+v@N)*NG~#7X_vkXPHxEG@5;#zk_C|&=Gc#7~8VZ-+23E zL48cabfF(`OQ*Z<@O5oZK&_FP2+*c;g^Os*9;LY zm$_GW>-8&Kk4&q)8*;bXsa}OznN@H)Jn9y=yN{$~5g+q(^3at%zGE!^cZatxU!s#_ zZs_<&eJFl0!7Bde1)4OV=t}Il1qwiu<2DhX3{%SN23Ke>v@JTAo(b5Nrab&dfuY-o zK)>KZmxv*F$y)#fCKBxW^Nw%^Kqn5%h~FX&7SZ~YIzmo;TaK_qMn_Y?2i3^!jGG)2 zXO6t@4KPy|@&Ou9Nz-D8MuBxby`zR7)^eZikdV4DATv-DgF&r>X^tOTBH6-xqK`I{ z-ej~D-w&1eVDawvNJ3RS6Y@{$%3xLy8{w-&?W>`;moIgn-JRmF8)mST2@iO9_<7LY zY;Jg($d~kZ!H;GlpUGK^U%}x&>4VfQBm!afe+>Z8i3a%y8OqU5w>Kkc!s)NB^H&a( zB1O8@CMRXg%jp!3P-8IRSmQ?0f>4P25rCB`uxqltCL$5`O-PlEmDpWJMmf12tpnmX5Gf&iIs`8;qtX@&~V5Txv^C#2aV91xWCpuM`NX#sP?4ic5E|cKn`O z!NXi0C@aT^rwoVoHlqP|4e_j_kTJ$FLM%*J$Eoi|{E!1x7(jHK=8b7Dw}$8uY$HZv-e9SGQqtr5^=fT+7fW_E-n$!2yDd4mP~V2!h&)A6Mdlt@n5_V&KzA@U&SN6F{! z-PNsV0kyoZ1-12WU)!;^h(cd6s41hdol5JA#tOFJ{ z6y8_rFipD+D^+mhyP=V79XP;EPQI8TPQ*x&KfdL{Tg>#!5Rt=z8w6QARSwyp#MmCUdJI5YAxe zPF26#l_mI1rn%yqOFj0^H<8nEuymO?JFCS5v2d3$ zQ&`d{gC4sbm6Mp>QTfE$SJ=Grb9NzO9bXazmLvtx^MLBnk*ES&`1<(S!BN|aaS^fL zW=OBtz%yX{-&E8Vs#$B$-Rj9``j;KBN;znBQf_9GYV}=7qF?;4=$(~ig>XV<;Ze|6 zi(8eI)!hBm4)1nie|G;3$~y8BAS0z3?C)`5vlNNGovt98irf8H*_|sT1ZSonSQoLS zsf&oe?i&KA$w?fhn$CB5DI%e?e)z8^VhA}NqD2x^cM zO7f>9oW&nROGNOIW`GST*l04?XonH|uzp%dGMkzdP^^y>_^3q(r^^MCEevo)gJZ@>=>moX0C-zYujakzm`Y`q$ms2tT9M2^ zpMH5;U1?JdL$1JlImpvt4g`dQ{03|Lb22(XR&2KmPC12qh~-Z1p)0JC66r!KE!UR8 zJ&a>+xnu{Z%C4}JKd9{<-ENW1(TlmkN`{a7<<4VNKjEylNd+p|e}r{?c=~NtUTbv@dp4rWx^?BbmOeptD4U{`6b%MHRa{gy``_-r8??+NX z=a6CUimK=o+ZHJN%_F$9HqUeD7+4YHEkjIXIrYJyCIT|WWnSJkQ1O{QFYBlvYjV^y? zPIYS=1t9BH^}%=8i&I4q0Hbrft;%{auVtPZssoTa|AE34mWDo&=pBXy-Z30~IOzp& zo>($l?FK+Ys&{|4qW}X#bu$wAG=)m!D(~wHCAq+KtjIo7?MsZ*dOVc|DK}fAm9SMz zBwjg}J{Zh5NkX7R16rc)N|%H9*_lWs6jey+n;1xes-!7J+&)n~k;uoC!I>lgz`7i5 z9io@Cw~s50FEn&P3aNhWHmMo$AXKAXUA9^mTR0X0e?0ZKpgF`bzsl)AF`867-*4xb z)%Nu&cQ~9LjY|2#HuKdpOXdZ~Yj*pA3r>AJz-!cfA z%}h@nJKkW|Uf5MyAYPRH-^BgTIN4_ZeD&{XidVhF?Au~V83|IrtpvfRp_YI9pZ%ZT z{C}U<4xs=3&sTqbr&0U+T|7lnW8L}yaCK>(r|9OAw6~9L_>N}WV-vZikip@G>75B# zU>Uq{@CTwKxAkGm;n~me*G+#yK9BeOoqscNmhaDtsYq+Vzz$nEegIf$k5Oe+%AkKUMeT*zV00lj2(IiZ`)NAp|aDe3E zNODLkz$EJMLjEWrZ=7D$!A+u}-l{e;)s$L~{%v;$zRWSLI+v+c?K_Vr^o&}>=9u+4 zE56^2d5yWwD%8-JO@C5bpSfF_$YXa$o#&g5){;zl}9P zdLnMGyg_|<9WPYA;f*-SzD_J3DzlarQRA^$M`XA5t@ zgI$|XYsM%n|AFWuTM#2F>{{+p&XMwJiOuz_G{Znd^CzWa0TlVaC9 z^?r(y7|QZ*22<*_iwV|!TQ6R{8rwel{N=m2cvf`Fo7~kF*5RWd%O4e<0X^>=tnaX_ zezLD6wm(0(x$y7m^r}`y^I9x>O=ygcfLDY}iRKej%4@6Be2?k$w5Z9K-=OaV88{}5$RY8Wb-Im$IGBl{j)*t`^#y?Qp{arv6kNZ zcXe-m^mNGv9bI^|ze=J+j^vkV>pWCQbq(a4_0Y=sVDoTVcdy4Nb-t)f_olXBn|qH| zScIhYYZeLt|96&$uKz8qBsQ7H&MDLk4qKUD;!o-CNmc%B`8U?Cw zUYgr*#8M7w63;3sp7w~(F*xeyGACRt2+?;-j1{531%0QkTpx&X zQ}L9RIy_b8ZDukbiY9jYhUsPkp* z>nZ3EpNhM@%aI@7zaEio;vH@imh~NH(Jd_HZRYTjmw1$}ob$|-#dd3d#L@T1?^+8} zMl5trbiOvCFv_nz zH#cnJ`^DYgOeX)XSPb9B)&z2l^l49hw0pGQE8jI~*Lp4Q5!agq#qA~O#q%@I>%Y(A zpPiq6`g{J9!PAN+a5R4SM0`Lar*NrpYboPxd*V5*05;g?G zbH_1)U{N8X6Gku%ys@Ad&(fh)9ErSeT%~=~1Rd;nmvGgRDrPYt;)J2`TOUS7Qp4cC zLZL6c#vp8xd39|4f?dLeCC-b`bqF(rio`femoKdGG`+;iRQy9~Pd}SY2#jJ0Y@HmS zgMA*7VRgRa)lGT7=B*SlhxB{B!-N%b4FB2_@s6xbsoLzd9NX+`(7W`pqwJn)n#=k5 zzvPAIES$D!Uy>P9^J$-tr2~&RG-GBHXFhT`6Ms)A?fd~0P^-BH2j9~NczHRY0^pkB zQhjBE1OU#NO%{PE(E&k`)Eq3L9uOZoStvCy8cGdQjnxM;YPWyo2_Xv}SMx2gpSmJ> z2iOoEeEjck?@Efz+5eD81M15I(H#^XK`WJ&+l9I5^D@1nwF6G22Q89T?l$Yy=scqU zzx0@<6rFMV)UH?y*-l}ekm5ht3)o>EGq-b5C*sj%Vrn=v-@9*o{c$4S$50{Qazi{qw*}34ObIP!Pe{o!<{MIXTZS5x3 zcRbNVO%z}Z24KgWkmabn6>!mV?N6hQbUSi-vl5lK9_(woQMz%76_& ztbgir4fyn$-oCg3YM|YhxsY&eaE|e*t_0thr(9I_a~Hp>I-YCe1DB({8(CNxE#nvT zGctY3+leybf^_zEtk{Rr3yM3FQ-Ut?61Qv*Z@&KsG2MOoY{u_qZSdwxJ*UI-Y(-w< z+t?2vE{w019hQ; z$5X8LV3&`?^mpbX%sYMo{5c{C};pPfcIS|l;@u&-ZY-Eav693h_43wZ?R6Rqj?sDD0_!?+i&G!sA^=S< zDV`D0e6hx=SsM_Mq=Usvme3xJ!2za&uB&x-SWVHO!y(Lq*AaU9Odv2XHHBexw(CDp zI7Ezpiy8s{du?8AYyb||3lwSo!f*D|ZCsDFZ0K!)==vjt)OL$rtA9CpRdqLQW?$4s zmbPBqdHj*-LC2+=tJazc*OKo#j%KG%idq#To>MwJ?TnR>jK<8x!bE4xbj(=aE)dv# z64_-2>{RPS3t(NI%CGat9}9hOeXbi<>K;FmMsnL6wlyr%6wyM60OB|z0O)eEGJ`!! zpEglcoMkMTU}+=hIxqNA^!@?+c3(~hTmfh&8{aecw6sQ(U8}hg-EN)aT31>mv#M%h zz3uWf34HW@Io(?#{89X}*HGM;GnU=cskn!K=3gmSn(f=Jnd*PGcdj{%-N5d3c4Yd-Txb&P;l z`n5K?0k_=FL7wJ0?m&NT-{K~FC^pAL5NyoN1}?409npy-5VobYzEk2AZ?`?dMPHhpSOdGyM$G=nR#E8SSloL4Q`+(vBHbZA+1PRB zc)TI~`_1^^^_rYw$EWOd*+qM+djQ)|YW25Th&Wy_l{w=kO?4nMl;U}U_@%D}sHfZH z0zg}l_F}OhZU!r$v-k<19Qu%2TL1)-10k)LGzEkOH}fEyFt8khMkqvEi;LBYSpyIx zjrUP=OTqwk5XHbjT+kQzc>`WwoRx}VLOl*p=6P?5n2#ObIpy&-sk)Jy4K_FaKz*B2$6pkntbumrVrv9n)l-myqTXG#^xf^ zR_bb2%@e4`qpv*G6(G$bMnY5Kw{&%>IKIV;XAXvNn#=WRWY2v!z00m7XfbnoWq|eM zB<`c8Q>qeli0|w=OY-Q)uSBwKvWA_c4&xPm-KHgpzXW6oKi2>PD}~V)2OIqgk*(Gm z03=+;y3o(LXei4|`w1|8QNggIwLk=Yj2r;4j>g151|XRnm;_9jKp!n;kGhrC+yxMm z6+`||$cFZS;$8nB?A6pf;M|gQcjPc=i=E-yF!^8d;zHRFHaI=(tMG5YmY9dA<|9IB zeWbe4R=FdulBhm3k*YT;l#MUt&f(Bz`}YpLJoTFj?=vmu3n02PcR7{+R`8~!Ija9B z3V+h!;yxn}PwyO0!+*6$X%Yq1%l-oz2jHxmHlIDo9wt*PFPf(h1DvMxc1~B;B>58J z-{WUUC$x>)E$5C`Zru3jH3q15zkg>Ki!{dHZLf^lZ1QmS8V1K_d%uu^3bd+iZ$_y5>ToVC|*7Qde5ETjRoNaE*8eqQ&nOFDDH$(E!ULF%xmtQfPg-fMLM`C zGM-mdBZl@pG4lBlS+PVpBAD5^KMBIyBl&-4)~$`3V+_j6~VWra{3*1 zOeLDS{kNvB2%*^63k5FoAZDK4n_Ik zFWHmKgxA#{`|b6tKtPOT`99Tw0D4ty?VqLHbo} zOfNQd@r0XdVn=yWA2YD1?Rfj*EiQCbnO00Vj+|dk3_zwJ65dL8mo`ztbo8=rWD{ho zTy)$vwkAYBjZJ6ywhoi!&U{|7mTzCuHgf@RJ+x+@#f+-RsWW0_H$|A$qy6M9>|6O_ z6jk_Wt-?Hh%AzlwK!9*e2ZY?IQxZ(Xd1pbR6Gwk@ab`9X@unnrv_&*oB%hy|2hwQF7Nz0o6^^$C?TMko$a!PSFsw*aAwz4)KwF8;T}6+PFXAA^w<)1JDDb*aLkUn3>ItSD?r(5 zjb*#VCeyxvJF}=}I<9+9R8HnCBegeJR7`GaMdQ$R%|;H3o8}WA4xfKXD%-7qCu}`a zar$lgweN%>+O1{B9Ie3!|Dd>x322eUbj^7nZErmPCsjSvv!t6K!&#KGl8_j7M1g-hvLZ81E%iNJ^hF-#vMyO zj)+?kjP3D*q zQKT5-mwULOHbKCER+F51?JKKOEBt)g$xijTpw>iANmugi_Pk$vhuv~Tiqmgw z!mb8LH1`g6)G28_*W=j69Di|7dpdce`5VK+O@KzR@&&Gv=zZtogHs&jaWjvR+HBc# z*C)MqvE!rkC=ezH&5pqJm-p5CAiAao2dyQDLXe1lq6kHTkkdy*P)djX4d9RzB#xV` zt%@*;E+jXBiQZcCefn$^Q_N3pgmv}d^pu72SR#d}eBs{E@Aa-y%?)@($yGxb)8A?$ zA-zZ7=E7SVG&Nb&jibfsZ`t($0{7o=v+|0B&(K%;?($!<3jf!hfsPYwX=hs%^xmcQ zG!esc&dV0utXqyln&uBOLxl!TY$0uHOU$i^&Su+9kw@dS1G}$t4dTq`4N@h{OxspxORwq6$$w2co`<~*Oc+S&E2eoA#Rpzb;Am)0Nm54T@d@w*PCYpT$+i|v7&uzwnVF8Jeg#VP=x_tEMB?-O_8>Q5t~W%KQd5yd^%<&t{gS(i?JXNM-f070M7(HivP(w3vqwd!sBs}riTUY* zAFYk9iF9`6OniW1lTln#Oyz`GQMQi#j-#<$ANYZ}l1=e6ytb#amPtJUDi(kt4n2OH5=sN||XRW*q@V&=AqA za6lKq=PJq`zmmYU|BLV^pQ94Q?~pjBWO5}ZGOy}@niWdu|1^Y&<~@<{f`q*IIu}ia-+w; zH%NZ-AMQqmRaAjj9wvHKPt%nW2e+iXKs=ANopPvj9t+8SlJeNIB37C~ZUM zYQ6C|^v_xc<@X*b@Reul_kiJ@>yG!t*L@KGiNXqTc-r3JB1m%Pz4(|`lz$*^m(72o z5W6VuK6%*ON%hCdCFdppR9^mOuFZHa$$5PHU0M-y{jhbQu?#JFCreR&}1M5Wt=F{ngbCsikOyU;nOH#|>vnroMxPP8qFOXfyaV$xAm$X%> z${e>VLLHs`^-FXyp)jvOTcAra?^aNRYcf58p3l)t>Y-+^B*pI{-XxxM5f07VeE5BI z`h8dMu=uA`gyPv-;pc%@8>R}(ugl5h*1V03^eG@Kf^f^XuZ4!&={>Wlxn!8c_49oj z0Q^|M+{jMOjWJa3tY0<8hgphI0DFs$nTMQ%NrbgZd@;tv1DUCj*QsexnY1JpP*ys| zE59j;Z+YbRt?gYqf<7$+a>YN?swM5HfS4cOIk^Gsj1?=j?OJk*_$CP!_=!C@d^EW z+^1y_9nnP+ij_;EC~rzL81dXtO&oK`BCPIMbbjY@{?lw`EOTrbWa8Q7%a;}GnxCqS z_mH1>8D-y);Pn4DxXT13M-({a$9(de7&*Fi z28=iOA=La4Hb9cOAzF@rIUc}bB!r~8k}El8WN!cxH6cW8(J2@Lz?dc;)XC3T@=*5< zLXd-xOPsBnb*%&mKlG+u+pZH5qH4d-n^5yu&v%g|oaWi$$6;J+z@)diIXJfP7)if$ zA|hh&R=sNuIwQrD;+PJ4=#ng!Nw+C%ro{;@w=3qx~Yq3Mw@ z@VLL>G0<(x7<*(IEmpSu!VA>|?8J%;H((oa{Mb(22MR5;s+b|&FPH}@92jTv8sKdHIFKv=}`%?2Nu|U9{3z5B!qFhK4L5(ZSn935n($ zyOCb5+o?>a?E7XuvP(ImT@L4Y?4RxgI9(=QR%>r5C=pg#nW_$+#^3d)X0?T-DK$DvabmxE4WzUHp3k`H0u6mgNsZnlu;Cmlkq=35lS7T6H z^uy%YARxYILw$eP4Yl2l@sehRsF(@DRz)n9Vyf+*NZh~>5IIoJ9r(7!hFk<#_$pKooc;=>h4 zm;{>t8LNJOWhTny0q4p7*G8XiNB@AZaeLvGUD;izn?USKKyO2v5-f+DC3g3Ap!}T6 z&%?FEnl8teM}>dw0euI!XJ2+T6K5(>goM1k9~_`_fMiZ_>VwN zeBHAc4;sc{S6{?1J|eo-O*)zhZvpt_>XPDv#}kx&KHRzK(1=H&@nSJv5(Eq#IB8B! zz+HyyE|y_Mr>SM00p?AU2hMaxM!!LkKsc13|b-Ve?&kF_eG@)ygry6FmPoK zSUE1-56_hjd>DRkeXTA${N{_J@F?fS2FI~JbW(|Xob+hBG9)J8edBK%NvYYkKa-b$ zOsxM)9q|9KP5R1ql_QIQm6=SUl z=={u)EGs#B7>=-YA0&dYxQV+(vUVhvbcb9 zFvu;-`v$gIj4QrcG90yPS`SEaB`c9kKQp-Q_RG4>eW%Ltp29REPAlR=O1W(A#lylh zjhIE(m%fbu(3taX&LsuH9zWkXaNVQ)RA=+x{I612N*@Wbx!68G*%xJ0MGWEPB# z4X@oYIedxfJx$U2_Ab5gvvPtT5?5rnv!XUcPru^ZkY z=_9|xK`B5uV2<<6Ll)S}CMbOm7qD?ZSM2Ez4mV~m(~}op^#|UY2^Wu<1Z!vA`=OFS;{G%3`bQZmIiZa+E$2?)QW= zH_p4$T;>in)Ke7pH!p$E6zN?SCy-3Y}WXY*%?<%2g6L5|Y&qLwt~F>zmP$t25PF?iwu( z^>FUCtC<|y`T&|Di8i$6c?J=;9<+#|GMB}4++J`k$=~s-2~DfxJDhRD9Mi7h|5bq6|5*SDt>x5R1)EC( zA~{ewcIQ@F3oW_PiaCZ>EvzE4Op47?zQQi_YBmGrm|+u=iHIhOfIEFeh=4wpVo~Cg zAIdgCb17P(-iQKD*%S26Tx>EUki2eQJ<{hoTa#zFqr=RJE%fKVI83gTg~I{kz!)G$ zoIaFb$qBn#B1#oDLhz#EARWZeF>?Ua@at|&C@KMl_^MzZ0c$CT@7~gs+v4LKLt#Y> zx=(lE3XXXkIYYO&GfKs>VQ{F9Mg@l0=kcvTjYsVhEuU;x7{4y2(L}22?<3A^ z2x27FK!7T-`^7ldBpeH^B)%4e^M(K<*vC%%Ma!ikn#2(jaE9C6hBPdvR19=t{SQqpfif9N2&3-_39^6M+kw{l$yO?|iY)?#)CEVOQMoHt zt$u?EIxK0!Lf=?05JTH@U3c@x!3MlG0=EjgloZm&-@o(LSqpiYc5TPO>cRfQr;SH{ zGn5|urgZ=7%1l_K1?UK6@OZ@RKL+U2TtG&E31zv=(H1)UAyJe$*-3VJ?3_NRkB!59nZ>AN81qf_uN=)Gv7@4KZ_4WdD4U^$c|2z4O*;y~9} zQv-1@0Gyc?ZHVyzl~Dum7+%0P+9Z@DI3%0|AXs}?112)@Es($xBzhtmr>G4rLo>Nx z2$wJjFx=tK(XCTwfkpnW5_x+F1VOp4nic^h$0<`&pg1*MU;-FNmF6sS9V6 z8RLka^ns4SEss>jtx=$#F9C-JgManPwi|&_-p{bqpippm0M?3GOIKrGe)U2WE`Ub* z&#A+_56D0zV$#WU5J0I##;ofl0Q>;s8+ADoASA~fma32|qQ#hPA$!cUiNL@yCM*MB zb7RaN=NvWe78XK37hsr%xT-i2N1;85@=c=!UtaDU_c~z=N-NNp#}~d^Zv`gA$q$%n zQ$EW_Xc7RTY6eNyVx{0IC6MXGu)8L1aHnF ziAagp*x}{6O8e&8VZ9bj>NS4!A?;NR8U2E2qPogTXVAs!#O9VAIC?x)Cd3aHSyzUg z7@|$wr;pB$?lrqdo$fQHFb&26GVL?DTLarh&QHFdPyajq7x^^uyka-^Q;YVN5zA{Q zcAtuqvj>;opPzp`IxhV8^I1njsLZ*qe}x{iC00o!BBz8~fR6XQ*@M>E=_neiRA2L) zF%J*f3%g_71P^pr6GZ>5aJXN?yK)5WOaAB<;iFfnyyJ<-#h!$kVX zMx6YC^Y02o#V<69 zTO2JN)YT6VET&)+ZbL6T;L-F&Hw^w{$n&2ROWIp*2ZH!^b%Q7*RuQO5m#}=?%VB%$ zh@Y=PGBpsXsc8!ZUU`65ZO(N!Rg zNA4CGIzAg-uD^!8*1vjl_P8Mv^x4>b1~UiEZ-q*v{nLb?-{iL>WlM@+SuUpAR%J@# z+|_-1AN$CxV5R9p=T9Dn%I+N{HmBV`Tz&Rd+}*Z;?NveI(?3&dckYKX)R;IG9$~f? zd+FWHih2jG_cW(d9CK~9rca5oe-;~DLt$aEY@Uf8$`4NV^nUFqI^FmB zcWS?ORVBVVYJlN9=|Rxc>CxIRg`L8>2XCUPTI?)! zC>rpjt`>DT0}x>XYS6nz#UwX=v{);O5YkSDbLK*6!mf`-Iu?dgP0H9SvtN`yXFd7j zU4fD+UQJ4SRSJ(a6RO%!^CkX#5hikPJbNZl-7#H7torYTzqzQ9zKQ(`EX9H|%@-^p znW6VNUFhP&6@D4@eDxhoEgAN0@4w3K2}@)2MRx5KI3%ssNP3(8_41tx@Ip|0*LK7H z=2=2ipoUc+dAnyQYKKljI-(&7s2ka@+8)?p zGY1ueoSacyKerW2Ol>MHuZ>^rRgg&OUb+}@vRP#pXeQO4uH1B^6Whoekk2S2yK2nWoJO;HCu;Sj`R?d3DY$;Ts2 zAeob-M4f29i5F}+=BOk>lsq&MFx0Y+QYhw>WPw3aV20P&k+g|a#7w53dRu<&;Gkrd zL{Y^P4*y93jUui+Zp)&OWCM|~iw3FV>*9}W_ujSg&!#LdX44w@|6#8EF1UO3=WU~~ zQ{Bf)b&{=1PT$7``@WZ2i(~}|y;)Q|t8xhbe!g}-fd^PGQct4-7Xytg@(iHjvYhuI zqK|m*6nJvGf7q2b{Gd4k2F5mZRgad+!GVS){XaZQ0-FVq_a;+=S$j&;;4OB(>W~*0u=Y>#s zsX{=FzI4mzTV?mM)7uSF`;-0GFXzff#!DRp+9m5&OKz^hWfHM#QhN+PCHG&itQEAe z?FC#Ly+c32>R7T=^R->#YuMWYFrso^HXMf<5&O~2YCLGAzGI?R+x$dpEXYg znva-!+`555NXS})vHF@AgcKUi!>k}6>hA^MQ3TR~9t%cbF(5XFp%9XhpS}GhVY=^j zw!gU)a#WgAEoA@c)U_jg50u4%zhS2W@9Aj(Mdva!6S=>K)H`vd(!X8LDKC-i%Kk2Y zD-t27!)OB2-#K}DGehi*>wHMirq%d?JbVq}aZ`4U_M~R>^wJ*2l}COZhmnX>J$;NV z6vQ<1D+L{4aPi8WnplvA9JSmdWzAoh>12&}P(|_;UE`DxzN$-ZmSnU?fOfcc8-5P`#{zwJY?#7gHfu8#6&8u=Z8AA ztyyJ`l+QKgHOn!_3x4I5&HCRX-^>oaF7GzFx%fI#H>lV5N2Wt>4YJz$N63ikRC|x# zkC>sAKz2VXS2J}-D1N^4{H)~ytBgE9uWwnimwj;Q)U#VwU1K4p9uCep*5=D8LIt`9 z^}Xn?tPDcDnnJ!)w3DAKVHUr{sb8!-pgB{F9M~3c%%K7#R3j?#V@8W{PJFVz?$$z3 zRG6lk2K**~V2>&SH-!H_yc2*E=7Zv%+fyq4sYmq4Go`3HebKR(z4Y7L)kr!4vEdag znmS=yNO3VKtag`NobRe)5iay`ad3#FoRwM3b(Qe-elg(Ob=sz>l#rW=+C6*9dZp;e z*CC8CdK35|7E5mz3Ldy9cddTxqm5G4ySTK`2G?Px#+?)j(%DHvN ztz~c8f*)HlG9=s#Lv0Cq2>YhQRZ^*-Zh3e_x~}x`r+nGb7low^^Mir9J09SMK`<*| zd=$gVCd~IDs>+ZoC~gl(7}sZlV3Z*vaF&<8l~iD`1|NO{@p!g6Rno~rL~d!T*T7?u zR&8v}OYj=wcCLd5DnsCe?Jn&t2)ExL5@$5F)P5qAh|tgzT)p-|djg)~J9Bx3aM zsxIl5-y)3aoI0)zy)CtT#1^jhpVXhba_|ey@F7}l7?Iy%2uCfJ)YfVTz zL~nS&BBo%fYIfU1u(B2Y%;i<(m7t?S`XjwxM>F3};@|r9Ub?AwKK{)H1OU;-=M4^M z+YzmSs5!~sY5JV&&Pf6RY2)-gZN!T9FEfWa z7zI^Uwckz%eB602rPuqSs`_|#JaB&gb8_LHM%>*d3?S3ln7qNg;e#1-?HSE29AOfr z#M&=ET7PsK_iP>gX$qYveeqE6;hAmXfag zaMynv7N-2Ziig*QrFq3SZRa=ZeQPk?_*EJ4XETosJ4DYF!V5p0ZTgF5GE1!(2VAH8 zQ8Urp&v^KnQq4$FkEWX6gshesXq|{*AAY=Z8Mm<>WZ?tDktd9C_9rxx+Q^L(3K2cb zfB?4j4bqi=8`2*{ide!@Qo$WHW3=VI;(lfIF9!8%b(QxTb>=G}x;W5?rS!)8Wc$Gt zt}%vM-0gx-QA|0K;=4C%q~oL0Vef^-k2H#}*XE0I9DJEcYV7AZ)zw#z$ zUfl6uz{0@~=8|In?<(*L))BT8DHS*qb!sO6R}GWE`xoOypuHP*)bjnZS$Ev2Q_vIk zqF=4T`AO~7!vEYBQhr&rWgm+N@1T7oA(}A(H zUizgbx(Y)?R6l*2D#h_W-Ml3|@nq^rqAXE;NgM`q*!zd?-)N%I#i1Yj)I-sz4J0=s zR&@QR$8oT7j;IFODAX2PNa{?O5$~2M?Qacxvfhb*&9v~NX-37D2^RMyOMEFO5@^-3 zo0fF%tJRlBc`nDB#oM@il-|0WRBnJ+S%|80P6pAa#c zC`-dO+gug>w)ad*Q}i08`*fa-1zZ%=e|r?pc@?d zY-feZpG+snr{-J7=zXU+g6km7FW+L{D&qTPsxe>3{;hgnb^40-TRP6}qFuFF^^v-D zJKomib`tuQU+p)o_!kWI62*R%sXnf1Nx$sauG_u;P2DMLetCIQ&M$=4_1*ARRZ^^( zEFaR@X<@$tv75jqq_-w#y?D%Y1T%9$~T_3 z<(Ab5z1Z-Wc5irae)hZ0fiidg&XoVy2SOEZ0)Emf2Xk{TPIp&zI}xgtYf9`xw8^BDKyI_pLKoce~g&S<_f|*{x5-r)%1gMExtS0{52#4Yb@?kl}hd8WZi|VI| z#R;u%Z0bRT*|C|T3ZpuEpcW}EgUZ0+aU5p3bqSHLJ{W<54;3Tr*u zFF6=}?D1G$@RnS(I|d?x)uvBsb0tU>pfGl%DJ5FS&V|#xM!b7<6wo}@N;{1G#xR$l zpT=RCNGiI~zTwAy3vlF>OIX?Lo0$oPW~YwtcBsgCLY?a3e%Fezx8vI6rWSYZW&-=Z z*6gax6w7t4lB5kO)54$b5~njyBopGbb?1bbHq~njhP4F*YFjkhW=i;g+V!WUH2m6c z#c~ZCx(w>_oIU+YG>wy)#BRQ^wuDtDdscj>fwSUMuH|J5l_%Heojdup%2aa#-aqdg zZ809$^cV}eweQ_F!Dv11VZ5we+#g%s7ZU`3RG20lKi(#n^@)K`lG!O}CR^!36tt6x zBLE*0t}f%CHUHnS;bw+TFYQDF4>JaSi&sn@?(WK)6GT~HtVYD$TT0rjP-L=+{>n1z zVfnUxZsK(GTKo9rK>73y_165m*GXIzC}VwCbXy5G6u|{Un81xe%(yv&#A4D7 z%OPq*Ne!BnSMelYP<3^6`oSBBMZlE-(g=_Mp0Gg);E`E;!LG0XJgw+62M@$Q{+PR0 zzl_jnyn$TB6~or|W{lhes{&Ph?>Bx5**xMreSI~{z-y(wkWh`*y1@#m`tt$xxu1o8 zH)e%=j8iVIyd2=TJ25geFr=``>mpS0XL{h{T$ht!U4A!M@1fb1SD*P3NskM7+4 zbJ_V*t>UCAK-K6T<`!g*2J;Hj&eO`{`T@$i&Lg*)MNWhycO9 zocI#D&s1XI0&{)OES#qmhk&E7;hT^~;cGZJld*i9ZvmU+JwHJUg8U6uIy%iE30Xhf z^lT{@r;&+{6D9Wz15o`0K?WB9ktU5k58&#n<|D+tNoI1xWeI{H=oqmIT-@GMM?bwz z%SVI`zopeWTx${{QJnJ8#4Xy18D!+wN;vk8yT?5LD#qqb%dhkxFyeu5%_a7;#ovxo z;SyIeh7Q-NQf|^suD(-$wtD^5N$=XnG+*u3yQKazt|>e9nv@?=@Bj2IG=)BqC5N`Y z+XjFtkI4ibM5tPBsJ=IcpLP2!$Ol zQq!UMvIc2mwHcPJG35)Ud7{91dkiA;xkUQ%u;*Zm&@0Sbt0Zkw`;tAk-l8ZrqI^4X~oSA!L1*A!l7j>3F}MZ(=GvLL4VYJ>4xV%c(KP* zqx{Tf{D#xojO-fExjmrtStSH$?&`teMLiVa>ZT#Ad;{+Dk6O6!0JT1R+jXpb5NeD? zp;f0r#c~&&m}^WjDw&B1XlB&<8(SF0)j|f!x}(Yph1-Jk5ze5V$pXjc1y4oHjmUE- zBsUH6dyR$woqW^lQJ-q`EQh814+AhELu1|%?IV9jYP`bY%YNWYJ~<9oyN}TSZ%9(R z9WlIZW5{*kyR>Q86&h6_$+>1DdNbhDK$L_K-C<*pt&_X1KCQ{fLz$Z@dnRDdb3MMJ z!=5K+HV;}R+UTV|-wq7ztr7fj=BEc+`mE*6b@^6<_nKAs11;gR{d#XT$pNd*ug@LM z!$n&|Z}Z`s9kEA4KrzJ=?U(x_2T}Mo%IX~ zxmzP;W~^eM`_k<1qKj58;rnz(^s4a1*ilnYYSg4Y#g) zTC{-jY1{Wa;Q^=!`m;;6%)Q@pADs(!Jot9xcRPt!HhQu{d*W-=9kfm22k58ZF&@mW zdApB)Mzf4WHSV})kvCtUCg`ha7)$$V$iOm(cm=!l^3X*(SlqBrAti8%dm@>aKF*LZ zlqF{Z?c>6fj+h#M5T2RR*O|;xBvvNSaz;No8Qf%3pvo#XQ-(SiWn0eIIw{Nx@7|jT7J&V zl=uWKX9`UP>Y9zc*)0xGE%fU*8qCtNrAdVBtpj%tR1m z%}i-Lxfqne?madHRe*dSdwk*ymA=tv{+QBG_DkF?Z*P0Z--YwOo9>RCWw7SxbL%v1 zP)B!>B7>;7;;_7#QKH8IHvk}Ek&NCa{Q>Qzt|J~}Nm-3^Cxt^fdntc3Q0$q(17p6O zYZj$w-*T;A$GlVkh751&csU>h3$S-@I`i64GZ!XF@(4I2_T?-7aYJF`*{U`F(CBZc z#8C~HsE}9>9>GB3P||jUvY@q4QYMfyzuxuOdVt?6&}VM1BrAH>J=vPpP~2RbmDUAM0q*Y8ET0{3i-u zi65)1bRWMl!F`7tfTOxqc~_h+92&D?muojCKOfIvUYz{31W*}SB;wRjOQe$MIa$nBD{u1wvK znLNE|#u}P%?Z6Hv#U7)r*snZq zrhEIfaRNQIdu7e#cRgP`kx(2uKA&?y1}A!M;)}_!kYTC>;RFERAe&3tMrJUkbSYx6 z$T#&CsCak#FzTVg17#{rF|Q*%@rC})5Wi*HDR{*IkNgei;ma&_93Nli>(#Ej3?+S{ z3v_KVtaZKZ`lGlx_u%(xo`QF~ih8}jyX|35d%XO4)c4>zIc)r&Um@>hwwM#RT^a;4 z55NFW?cyEzt|`XRIqZl>XHk86zDZ4?q)UX7oMSf>Lri9n z^S}oB6=vuIm^#`R#D>AokGhswNk{kX+y((j^8A9Aut@6{vd6{RWU?k%y8|Wyiox&b zo|kGh@YQgzLRsK^EbLbI41ZhN3HY$>?6|#6v*=@79-O>9{raPh#>uDap3lY}adz2) z(|zyK&sOnPwM#_!OYkI1H`tGT?cMz<)V87g_2FHOf`9K`|G0J@<;l2((~zoEVs?~M zQJl>L0E*)JjHrV83t{%;74D>g`TxVzc}KJPhiyCvB7%q&vx!w(#3-t5VviWLS2gxl zdvs{Tp0$Od_NHcwYHQC}HHvC$&sI^|(&6=c&w0;zpFi_W{z%Tr_1yP!U-#$Ya_hUL zIo11yQG0*|YScXm66rs?+)#Ge5w;{yiuQ3vn)6i6qQa(+H)cKOYQ5xwNGjnKa zwq#}1(2KBSQ7$WrQg6*~$b7LSNv^grALDNLf!_CZ6wNl?6iXZvAAP1_^=YA^#p7c1 zRHEMJR#o(VdPl8tyj|Oa=I6DC8wPv?-`dXR-9OvUmoxRkT#!os^R=#T!Y%iAn+7kZ z@ecoq!gt8_&h1MWo73!B&G7o;SDJiCEuMScX=**yrTSl+QI9iis>hUk{`$y_D;Ydv z{(=FpNzl+l4mzJBV-y8=oK4d!SR+H7eJyGJ(W>Gd5`}N9o;d#zp+Ptx@Qgyj6aWmK zk3v`i8;GKDfk*%IFuE#CTjb>wP8$QYUvY4-j{ULb!mN2U*wRv_k)v^RJ;IEtUp1n~ z2#Wk=x(tD?NtEydK!`YockWo)buDpF5RpJ|gQcIiHA32f943{AhDs_-!{8cex+`@6spAGE=E zXK9`P=HmHDu;t#@#p~mPpK71c`zTpZBB#qf|GeS0MDGx% zPoyX%{-`i^9PxnoSu=-Q(NGmxyN}?SX5Ae3xs5j=Ial&d0s?gBe!uCm`#ZtT%rmMO z7T)Z^@xIl#G5htj5?!)8_s`CqbVpJChsTUpP0MW`=dd3fpD5h*Na1|w$J-@Q4$=1&Qi2?w)J=~Le1Lqm(HFRo2-i`Y*6r~M0A)?-A<|JX0A5M^f zIR3e+VZz-cPE7uyP!quDV>t^W9XW|w8A~3QVo~IU*jgy$LHaN=RD|Ro4l><{Uj7yY zFiAB+9&nou*k4^XADD3SVt{a@dux&92{vB02&iV`t6|8ScFr2br$?s=e{e_f%^_05dMTMGX!Ejjetkyi=K~hz)qIZSFYp*3mz({K zU}@Cgw@^ShToIg`9QTY9*E{mc*ekEoQvGVNxbNH7V`V3atrJWlL(VD3CKZr)4*l9Sj2r(hSUK#mW8wNR>*?CiHVO#~cl z-+)YW#H18{Bb;`T*0-FxE>I?)O*4PvAf++I{oXy1!Ao4#^ z_?jbeE;x|M_liNCkY5|J;Wu;S*=G@F!^hRqC!;>EU@q zMw{~t1918P8WEA=Ev{|@JS#xMxXMtzA=G)>28DcdUQ41pY_MeE#8sA+Q)VdYp+;~d)%iN zB{P+pwaqQtxK(tP4;grS%iMWcmP>j%r~CcQ*~9dsRT=L;5?JG<(FHNk;wz{0risrn z9d|FlQ{qfY{b}F6b$xQ1`h%miiz6#<{0kysOZVhB%2IDVy+s)z7?%%z9+ zZ>|Q2Idz4S(dIBdhFy$^~8)3z=&oD>M zjVs6W3l5=adD5p_?_3l#o$c~R&(rl0uY8qy>r;jVug{hhQmPcu z(#+AsV_f4ys#15TN=GTtN&6=!x57I%oy)pz@#aim^5A?_lla1*kW`rH^ExuG2zv-a zv74Hnm4Gfqbof-S`b``?En)=llw3HNKY^bk_mfw~|L`${q{@w1WkakZSqJ~XapKsM z9tjv3faxAe!jJ(Gz+Q+a8LJgHQr^M?qaX-GZYK3Au<_&-DY_>qc6h@g(JRj`J%~j`d-UIbCTiO$%DVCAUhYqY_6_wb@t@0*boqajGsh=Rw=drs zAD{e7oj7NIdP?IG7kSiS3jjsb6)}=vQN63&pRCJj(c@DDqj}*e;yr|YaYDO zk#gLkK^7Ha&3Jk5;M>LGtFE>f>sOQWukKp6oW1|+dHt8?O`k!o-mTxyf*k$|{^wn~ zAkbO54HrBh0M@|nY7Jiiw|b>-SbZb_3pHFnUrVKM=oXe^k$>WOzcA|tQ}Sg^f64Sj zA~6Jhs;C*|`E{Ym8TSPiCQ+7~zt?pq0tEW0VB<4L$_ydx8OHb?fCFB8%L(pbk6OT= zK^=5h{d%{^62gPtdV{0Z&b5Q;p$xo_AdrXSl#qPeOKbna&X^HpSzKJHIs$1-1%uPT z^Qt;_vpAXQTDqtfsEQ$Vm=Qo?sv??3gP&enu{XZwd7h5_!i@+SoNn3Yg~V()<6)D$ zmvIXd5Y24D%M0OFFl!Q8XYob_%_!hxVQNhD@@4J3FJDW?9_T@SHFj%5NSDB9NT%W> zBr)AplNLk7JKGPtK$M+|V_1!Qgo0%UKOBEWsUaYY00$QoltBQU8lWPDM)Y5eq>nJr zR9yxb>Nqko(j=uufEefc-tE_N@0xWz-qYCQOl?YJoMqY=~>`pH3KOB>@%J&5M<@@*H%I#R=Go=xKcYXB zI1cJDT6PPn6wa6cQ%E+#b%4DDak)T-Qqe>q07j7qOie++pkOST*HC~`hjz3(i|Ucw z{C5+uoOuR2SVpIDfACLl@{lSHk9-Qkg6cU%(5Y!$tNA)ql+0J`9Tu+NFQ}P%M~4wn zkn8wZ!jCuam*5gflTy)f=A%~Q@?T}0d6LNDu-coNf&zO=TL`2pXZ;SoJO7r$&U?;S z$@oWr&)qD~(C?tgGl{o4gO*v(|C|I%d>Q?=TCI`%lg>Hmi^Yq7dJ5;*uS*OSnLZmK zKR;c5vsH;q4bF$Rd}1DhLqAr9i=J}VxukpWCO^JByY=kiLb~do#?_zI=Nyk(P(KTw zUA0Nt-ZeTab^xw&7oBYEsKc(jCrAD7i z{i*>nOyL0yN(j2Hfr3@K1ZsjF1oCS%Mk_7ZFKHram{#8zIjn6Dg4kw)dLzvI<*P*d zpU+wwR2t4&VrapDoL7hRIt2H%X?W&`BWMzOM-A&Kv%nZk?{|06Z0RbjwB~E0#p&@#}s(N6zo+2jl^u$*PwL-2iOCq*QW ze8M{`FWD>EeKSyD|7tcl>lfdao{MI`ZYnhX8HO9;Uv#-F6rAh;iZyPpMVC^S(o6Rb_F1PU=kFcv4HzpX&1IoVl{bgYh}F+TT*yyWK z74repBIN5>AEO`st@6oZv)4}5%-?Y5=vI5LXV!9BNd61G$MY(t`R`oIv(>vBf0J{f zZ#_tQ51>$`08@IcVci03IVChn@|?v9#0tV)8o2SL4zbIa<+9M2KM`>&(ko#DxUCKo zqlw>`8w2}E(}-Bw#hc2S+WwlkiU!Hk+8nV{C;BWxLi1KU#K75h(?lgb>#HWx)zn;k znC?zv?K#Sk(2uYTrJv&F9r%|m`cHVOUK?wQDTnTfJpc3Ihs$5hVM)RJ+JD_|Xs|v$ zh@a^VV;F50y1VBxjV!4l(jdRU#LnGhu zj5N+y)|_sxR*)dpX0V)Pi@lSJM}l^*t8nSKAIi;*Zz^><*JN%S$;B%1YTMsWWF~Q3 zmDvd|Oqg{N*8bjz46T8mmYurJYA+c>6b}r`%Q*L85&~RYS?Ox4OiupE6pP%HiRz1T zOzobh#HqsQ4|B=Hz0l&TDhEax2^G6fRZTbQU9~H%q~>47{4_*W5&qKIHkT}zZjrwx z1WLL#wY}0b1x!&J$rB*GFcaE%90&n;o;1oUheQm!bQ|%!)WmajNuNFGK0*Qjmy0ia z&=tA@%6Ll^Zdbi^o%SssjuDG6Hq&Dds|{FZz|?qw&<~cb-XBdDl>LfdAwhqHTa4Jfx9>& zev)g?l+OjS3CGuzHV z%1CFhuSG&Ph<`fVFz57on{@~0OT+iBM@2_HTL#2$oTTr$Sg=^NHCD)?489q65W?1y z`aPESbwT^!)LmdWap~emdE0_%}Y8J~zf5C$|T}Bu6k*KI!_Sd+sF8*)2Y#9Om+}(8F>b`1) zo6gBSQM)Uvm1bXWWF!=D?MQZ&yI~{6P0pzq6j6Q$qwqf*fWh({t|vozJ|%|Xtgw;5 z>oSs^>4+D~3ZYmfBY~=MsNqAiv~jJcr+LTomW(SC{?QK)-%667 zi#znoOI+n=VvyUU2I=MBHg;@rVEy}|?Y67kH=94NHUOBsJ34?OHGj2OQ+^C`v7Qg4 z%<<4+25wwgYcD#J2NzJ=ni^;3|3|G|zMPzio+j*nwYU}i4dVPD!S=#bIM;pvxkk>B zAK43ISC0eg{oGpgMb(S!tFJuFltmvU4sO-68?qHCj&k4Y4nHk*_k^&+ZfJ2TU$>5S zoo;BFn~}4XL|^DF=#cPoON3L)&=dmeU|RaqQ3{Q{rPODqI2>sE;e>+X_JkG%|*x|js-~EsmsJ6 z_~Xncm=Y3rEj4{ra|eYjyK8)}0j8$&cIcJlbu-#O$}Oco7kTKD@nEjQ#Ivq>(~_CJ zsyKtSyn;bbq4mjVw4iO^T+L&UJ9}5NY3N_Sei^s^g-lMfgMi{q0F^re0BCwHP{G7T zDpGNUt|E*k90P`-ngd}qgo!L8FP%RT?c?bw3ozXvGOiRl767#PIIF&3@aQ~!FN zX#em^U3Zh9P*Rn`u=XpYz#m?ysSDTlA>p63{Z!e>H|HV@{OQ~(Y?Bx)#z5LVpGRy$RAvVhCc*Z@bNJnl zw!C1U%Llmqiw|rfSU;u-FMW^>CDcWO%-ZAiDJ*Rk*c^+fQOF;yzhuh*-Cx%$-Ay{s z*>B#OzTQo4JO7?o0a|Y6geA*er?jBy;R5^-C~WMQ|ID8HzKqXNB3^4h9iG8Bbi%e> zwq`$LVVPCB#Gbln;8$O3lpbr*QSxChbfin}np^M4XH(DjcJJBJ`t6zBNm)l;?f%BE z#7}A)&~8?ej6njr{ZnrSguI`YFn_z!7zAUTt};P7e~askiT@C~$qlaSban_aZ;$E( zU@%ZhNRJ}wPti1i3VD@GQkKbWU89bqXCs4nU_jC@a5I~G3hQ)Ed} zCzJ}-IGo^f49r`^#{Az4#23(z z$)ujE>L+B71y<#hRm<3B`y`rYol-sjH7)_pGExiu z7lA+sfW4NPT_-|m`f_pDIF&2Jv$v{XMncs17q|qVnP7O&cL%Y1A5-!HhdQJXpuJN_ ztqO|gr(eul4l5KVkDuC&q(vM?J>W&DD(6oEWdn&>J0c* zZ@_e-<>b7;#ylgx3_^`|FST2Nm6l`u@!C?P% zyB{HhHjZJa_2>Iwy6{c6Kwxsn_@Do^1`Vl+BdMXtgHkT7`1ki-{P<54{t}c5iN=n3 zp~qw1yZzpgozCg>S`(L|fNrm3e!;l=*5ZJL07%r100Y4JqCAXY6vi>ujPQIuM;gG0 zh^7o`VH}GP`{mUUY~toEmBXCszp9>;6m;dUeb%mxc|~z{o3LFlJ2%3D z=k4mfGkZ5tV?x$-M{gU>$KM>c=ilNaIQy*-(LEi|hFlrE0S{w8<;{BY)fuoMt$%8+ z$?e&S@R&2(7n^aT{iW-E%bEAHhkW@ud4@OgUzo*|1)Rvhbx~bu21zUhh57lK51pD7 z;l*KD!=H_d1KsbKb}bs4c}&tr%L}oVeQ$Z`w0Af<*HB}-+s6~L$5L?1b?V<!bT{C z46x6Pg_!T+q$0=oZmF0MmjI9U=9ZH@}o?-Tte`tkH3U z2)$Zvnd8Z3T+-1K$)QaU40p6lIro~_fH!D&a zQGy8dh~G$1k^!rttuvK&A2y67OHCZ2sBNGnD-y5E&&{;AvxyD>GLp_Y%Ssx(>6!px ziU{pnOT@S|mDXqg&1FADNVa^83?;QATwJgb(_6Ii`M4syY^V`J9V%nVd{2f71z4`_ z9~+|cEzV6NI$%R8JaGF&XT$#x#enFwg!yf>Y9R%VUgm8$*28>_x3^N>eYfd8r4sA&%clG)f&7p zZLY35o9KFk>?z{s?N6iA6{$>AiT7oa7ODxiW)Az?05g+n+4i^%lFj{36wV@*nut@S z_Y9lIysd`)1iD<$=`VLAGsc*jDv>XkIHkpZejR-gUKw;n{dm;a2+)t?QbeQjyAMnZ zsBjWlXcgcTwVDkI5@!d|BBiQ>h2g9>8Cghzrmu7~2KivMty-6NQZC@-e?{yHMe2uJ z!D`^b8htNGS8gEHOQ+v1;7uP8xTgRpC|&XQF81~|Fe>G@SCJPdld-eH%vW0D>Z~#z z)*H|@dDx$NR+-YfjCnUiG8pilY;lb>&NqQnuSM_rv(pUU)pe?gS^6!SHv1^_)!lX* zj9oVA>0hSyCmWU5n?d~z@Pt7J7^nnOr@|Cfw9sQu|IxaQh}jCiULhmNSI74ks4c-! zV~Xa_aH~^MMRId27~i=iaT)BBSb`Rk^!v%E|K9S%k9jyMW-v2oQ11x?iZ@#-EupUI zdyrGUS2M^$NUUc%pJV6}66FbP?XVB|@~~LNsjal}V0G7L`Y3s>_@-|sRkmsb1*NA} zjJi@GbDgVVY~+`;l*Oy#VnaeFXmH3`(;+@DB`5*~nqfs~23{e$QIq z?GYI}<`mP}Q1B`}@WcLNRszm40?s)bWnMnQM%lgB8>0@~Oc!|XEPvpOU2t~E&jNS2 zuxNTcyCmNS>Q?@MThw}1yun^^dm4H3;>qi`9V!sR5c<%|C9uoK%{hO1ivfaNma_;! zcw@6O$L+)7ttkGM+XT0%FA%U#1wYR#q!B{&Q+bVTsf&;rsZs2eXN9hi9HO1ojRG=n zo481w`30$3An$QW^|O_Aw_y~O3&lm{fQ?!yWt8`u#6G6~eVUD+=c|ZKO)f?Fd8Lwi zV3Oi=Fvj~SLj;VGQ@!d2Z>Zi^-U7=r9X?_I)}^596F)k~l~vyIi-Q}cuvBk-O07fi zF5Tax-6F}q)snW*yMw${iAnE@e|(u0GUmn1+@p>)H_Q-^bP8-Jt=3~;iNOB}kilh! z-Yo(5y9%Nd@A4!^A^#FKPGea(W)MmAC7eV~%to_Qlvl9yCAW!7Qnll3Z)4a+G^II? zg~II3(rrhvA%AAF?l=P?Y!`Po`JpTAM6cqLZNn$wzM)}$BSz__y5ArAm-GgZ^$DC^g1UcNN$dWaFdkqFPsl;ZG&dsM=Utlg;yzB0v8#9nHr3*0f zb%qrG+YW(_fI0*+Y%sR|&Zsw+fXU0lvt~e8(CFKmdOi;Ew|^#dN0GZixp#!b%O9Jt z+%M{-^%-m}{GbWIZHr@!H|d6Yolbv=4nF(tROC`?!L?8C*yZwz3N5`;F^l*zn? z8lFT4%Af@IP)Gw*J*8q*0MklT)KDKx|0-&rwGQNWCN9x4c%g3g@l}Y8LCil!5 zy-oP~DCN!T!3ga#au0;Y9+jbeI=U`q7XB8XiS)vohEe+Ca&Cw~L*L*X=^qFiXrR>0 zAxR$HgrK5V1nSbdlt-o}>S)0R&px3(;&5@tgJ+n9Te>C~1A2T)QaU4ZC3zTI=axat zl}ch?>rUn^KeCSPQ%6dHd-noTnnMLVXdII2dHRdhc}gF?zAg%Q2F@Vd&|u_lz!ucZRfU8=}-af?~#@xogDQX6kvoN2maU*29GD$2HdFgQUbpRUQ?3)2oqM=fYxV*8% z8GY(Kq7uG#7z1?@rOA{S>H~~Wo$c%_Zo8K^5B|cVv_)ero-hKMW+XzL8gE{4xGred z9p)i-B(PC$UaK_Vr)PaP*E?T#9n7f~;Cb>=JftN2&Z8>VpPd=Y+9HtHDT8)~NIA#@=Ca$wVU!vY}op41^HDru2P|01-z z6D13J1sHm`+oZ-#yPpEoPJbe+bbFnN1l@RTfqJ!Go3JS%xSC8ou9WJyRhq`*UDa`D;Iav0a>&bGl@GlNym*ZFUdk~`Tz z)wZ^R6oGQCYg)e(#Wr*OOO2~+CgmwVRE_OX>%F?{h;2Vfjn|K5*&oztR6838nQ`As zSp;i%20E>C2@POA$^tFEw%%z`d3aiVPr^GH_QuQ9UU-sWbUNTB2BA$U;wM{1Ea&IS zO%u(LiUuVSB%q=78^ze+(W7LdE_ZvkeKxR`M<xQknBE?Hx{sfjNpYYb$VZ@XI zB(an}*ivcFHaSY0XbND1D=fk(^BsJk< zJJwif#87Znpo+So--;|&CKOrFhs2Oo{#5NokVR#={NEoFikNM*X2(9cGVfWs#XT!B zoqvkgHZ*jYyDlggz+G}kFQGSHLwg;1|Gnz%%Y2*%AHd;73RfgWrl;#2A{w3`fu3tb z+rDuE%h~gCT$BFD8eH}1s5A3gaCB8bYw_mttL*PRq}Nws!EU2hs8_|jvwOJI1;(RW zB*Rw03fy*$?8)WDnY+J{`PW!oja$>6k;{8{)i!oiaivz)rGA>PP2ZxDotpEwD>ThU zyS6je63nx=24_~Aj{TI~-smXd(wubaD$j|ON;f}+h-FGJPR$Ry-8bNh*DY0^n){H+ z>I?x2o_YE8O!(}v(pebtD|)MzS=4Me-0xla6m<2IqSS*I>MDP|jGW`k|Bb`HIo@f! ztSiCu^v$^{$Wdlm4$kIjI_7JrrUgY__ej;HB@*Y<8<9GH{=i)M?}}J{Eqt||vQ&;Q ze-;zq=jSn_nN}4WL}7X#tb^ZS0%udUfi7%by!9w-Dnj&w*J&6r;5=hOC!5vsJ)&cj z$NlZm*<)+N?+*@6d~UN9B}!^l27G(PZG$brX^03aV`HLZdEBEJ_OYj~+qp5Up9o{X zL$5M(&scvUK;tW&$cl@9LI4T`pa3K1fs%=^q|s)C|Gnu3sD3)8)ryYOb%D^r{}|!B zYf-vsPC~F|8dm<7pI9Jtw6R|JIyfDu4c>Ra!;ys^*k z>kY*^JXbJc2VOGPzUZ7()p~B-2yb?jXU3F7dS+S$ZCWT=gN%=bo@%gehMsoBfV4kE zx3{O19NaB^j+~IxnHgX*lTXH0%+`ky5A-?2)NXkf|Eq1h-xE!#ynYZI)05S1|Fi8mX_1i5sRi>Uag(( zT9b}EIt|VGwvQT_cAQH*n5OiMtA3lpz8D-!m_{w<^H+(H(seXF44w<7ANlTXjOxZ( zXQS6>4d-KnWxX{a{>}HHka|^eP3ms|$@rp5-vODH7f;_TS-ZFse=r{jR zA4lc0646DYs5oAkhY)s#xCGcKrw_RNh=}xy!|Gl^`L>%nQvf-rBM{w!)IhLsz9>|9 zM{b18uH0O!2#uhNkU^~0IK&F;_S-ZzEAdw&gi@xOGeAf-y@Z_luwKilb3*IFMm&pc z8?}4-H4Ti7r3Y22adQs44YhcH7Y9uDh zavgogQ9Vv0-jK^Qa=(29tVfH#m!OXIGLRIHQ7y3$PZa%9U5_%_sN3@Y;IY?AY?ARZ zhpm4W63$ylh{3W`V`RbELW!Vg)rvhc=_{SpAX8y0%8Y(J-m}ZB(V{9bFtHWZ_x4}G zjc2D$&C)vn5P-UZY-mjuK;pz>aKuX&i86y4ngI?>`3z@>7fysEOs2L{5CX``*m?no|4mteXt? z>*69kjSsZec@shB#ZRjZMUvjhjq(|e9ln@5EH5f8&wFLY1=Ju%Cg!>es8`a(nab51 zK&7Hx4!2muHgt=G4ZP~*#5}4UgqE9qtQ4{$=PI%y#T7<{r$z#`@$cA~*&M`gWIk0b zbttLh#~s18Q}ex|HRDVb)bFGVO{Fn6tCsMy0{cbi;wn^)2O;Y<4hu*Z4rH%m6jKFn zAH*peJSa+-@Q7g>yayQoSX=QfDs zn=jtrkFFi?P={*TL~8~BisW0FlZ?XDZpmqYf#X+`-4b`$pmnlsrE@zmlvne|f!8!t z&zV4(WZkN8^TJTO4v%{Gz1>Ns^nM=3&5VuMZ2|1@JVT02oX4%8fPqnmKE}%jm;o_i*Pd3_%L)q>77C}KD-CyRGlBc&E>iE8J*Z^IO+B@1)p89z)=QkdW zfhL{?Rm?X;&t&smPB5%h0v}&o>;Y&p)U}_9#bNR4?q!r3HqCMQ$Fm42C#&HT#QM_6tRE^ zfv>E*FDNJ(?HO@vMl*inFyGU9$8c$D`8n;jhEOuUW0XqSS3L{rVy6n|-X5>@Ug?YjzQZ zW;*r&0gAsE+x*I34pu+>wl8V?*EX}< z?V(jW7xeLbH-)`!(iYG1_=YG%z}&0v@KKWB)Jo5NF*4q~Y?w|A5*MM^#|p-Y5-`2p zTuI<=IG%!h10(lZ6WF8dxC1Hb=0e$0^Z`~hP{Xn<;8YzHGhnTX2M(jX{TDz$l@`A- z-A^-!rjKKa^T-PpW<>+^0^^P4ofQsec}r?I*7!nko`=3UtINqt@$_6lnOhz-k;)=Q z{jte6hj(_B+(>k|ba~#9%86vHc@~m$K@XPU2m6I$*8}CZogHt$FMw~CuXob@^UQ3s zBW2|mvWsY0RS7T?z;WG8A?y?dCOVqQ6`nPsC7?Y1o4s&0xslYd9Q6@;>3`+_oTalx z`#OQXo?cjL>Puid?C;f5T6Mu0polUHXBQ_6zlxjyZz@j)0^$)M(Jfm_?Hdru>}9Y+K zh8VDy7|C3j?nm^kCQZumbZ_j;^iFl(7P*{_y+aRo7u7+8NVW{QdyRSK`lJK_k~%Zo z8k|8LLF7!(=*cGb5b+}km_@IT>a)7h!E6)|e#$6a-|AKARGi&OH@=uP&F@5YqzT#z^CnLY%Ep#Ab9s0* zy2~!&aC+|O@KV;{umi&Q;!H)Vdu61Azn?1r7W+OUf#&u+Fb!NfrAK z=R(SlyB4R^+kV6K_PF3?`Y!9OJW44?_q{?Mb~ti>?s8UfasPV>URrVb0|4uo4P-qo z0xY|C2wWN(LxrUk&OQNv!vkBMN=AU}?;+JfY%ld*p}zZ-W$Ztg48GMK0P(tKvvvLb z~FVFQc%%rIz)KEQIWZLnH3c#IXaLw*~MsjGAc&jF4sv6e;kk8K>mQM zvvTG37kRKEi?S%O>5ZcCbeJhlW-o08r|DcM>u7(UET?{U@+cIh!)U|krzR)7QI7q_A${x8e8Rz zE+LU0hBF3o(fi|;Knc^`swAf0igIUNkVP5olM#Lswj{EIk1Q&zQ+bB{dobcBWg(4i zoZCNPpfG=)eYfmYwxm=9m@p19fTrSzZ0vIIhnmWOY)8Y6yFuiZ^?$$R20EBf8r44O z=||7V6(*9oUE!V^P&!3NKezOnff}9Z`z?EX#Z7e z|JJ=A=7RpU0Y@4NT<{ecgrcUNoR#g8wxcW?V4#mRb}-Vp&ccNmdimM^cWr zFQoI|KxLC@=tr8owAt zVOcEKvtGxch>22{ZS$uhQZD17(GVA|_pGsG6blN#Dh0l*+POf?@q`i8sY}ZUL{$JF zxWj2{OQXR_fF)5tRvcP(XpIPcms#Mq1tEI?Dy~>UUo^rQ!wh47JdGqn_Xfl-OyU8UwiMPaO4F-u& zKtymU4!P5!u=g&SrHD+8)`|{|o85{a8R~45x|D>&OQvTRe=q)_o%CVCro0a83`SC_ z2=&SirC6s!!msO7Hky`1DFtzlu!zKI3pcSd6s87s+2h)3fCLmk*zUE zWZ=}cb(%sQp`hF{)0sVy+aH}t086lYw38;M9wS7Ao8eJheMxs3yXr`4VTJhMcO#!k zpru-O)$^`#6T?lp+|Zl>HLF^RM+ND}W&QA<>hB#5Z6|*F-IdsEP@5h)|N4_cJpJsP z^tgI zl@sXh{M|TmHcvE)Z6j;(t;EQSXa98%t_0-_;=7*#06^Lvm)+NHz*X$_&4zD6;Nga? z2y*c++wu6cVj&sqU_*K9_z33dk5_^Q&hjUl!Wqd-Quxf z>Tq6_!K(Qv(U3C*;wi-&@$ps9B=Dfs%x5vyOk{;3B73nu%>;BaFZKnS(bag_zQ(f} zS$<&DxeoiRl??~8hN;fb1Ie9wRwE0nV5f)9Rg;U~KReSkvQt`b8{1{<&u1(e>gZ{( zc*qNW)!`DJ)GnuqC>bbe*t6$)dmaG*C<^n%ph?2qvGC|)^l2cvyzf@OVlazzItqb^ z6;|JlhsV$WDY=ZSpJYRwR=P2zw3k7-NW&+ZE_Ko#y>$p7Y7-2Vq<$>JgDPKcOG)%} zb`n0w-ZAcwoJHZzr|HdvK6C4c!zCZpHV))fsi9SV^uxAmQ))w)($)JB>7`S0>$Y~m>t=g89n1HnKO1`pNS7^F_@{`&6Vp}(v7#Hv7yvA*>qu;6OVIhO=*s4qlw(Q$8 zqq!P?P_KhD3hg$NRjm69Wf=$bY9&A7_9r^zUS-{_wh+%X>{FR|e#OK2*6;29op0ZA zAK&8pc3Kz~0=lXac9CsyZB@;YT1Y)Ou`ICpcB-pO7o0OQ(Ce~l+QOtVFAZ-=NpY$G z@P{fTaQ>Umd*F}>eD88pojRJ95)mHJxRlu>i|}i|i^RZO%;gGTaWCIHI_M}h+B_3< zXSj1Br6EW8zEaX=!f4X-o_Mf*$j!em`mS39v`>17UIZ7xby7-zAGC?eB_A!ZPY)#c z&?jexX2u?FerzF%&?np0uZ*0xUOYah!9TVGpC=FL0Aj;;<_;^f)6X7%9{4q8=D0Hn4R!bFPs1(wEr zdRT2wNn>E(NYh=F!3tJmVLPH?;cP~w-mghd$TjLlwf53bcDrjnV*~+>JS2c@ybg)l zBDv0SLk*srLrwcXOJ^FE)~i`A3fZz_|`x&n@1PFO^rdoj=Zqtxt}b zR@g_4?HfhKr>jXj$dXcnXe2;NYl1X#p#C}lzDR_1dzjQ=h498q`|80}+A54EM>#v` zk2>Gq<%fS*INmPeq1eDRA~U^4@-e5S9%T%EVel9xh{y>{0;?fIK$UO9l7#Ev|WMlqF)1iQ)a1? z-s`{!oH8XPJG_sMD3$w8*9sEd19a`K>Mx2IhBy$v zOKl{7Eog5aaz<-9sK^4|C-t1v1X2pe>~+>Kw(&DpF>#zV^sYWDN?tO1zTud&d5VgZ z(t&t^+0^KgHSf+-*Vrhxv9)R4($QDa^2t$#hva@guu59JAV0o)k$q?EpUa9=vlia7 zXoi6R1K@$Iw^ImLNxqyttwAz=8T!JC#f8>rpKYDRRADc!2+UTAu!xcobLTS!JOeMK zQ<=e5Nz;I7H=Y5*x;Y~RCh^Buag#X^o@t#`5lr%_1Vh=@#|(+rJ!62tj=Gy>cRoO8 zeBX94V1%zI>oUSyCG=GusPz0JdW0E&F4&v&8fiVb$oorc@-O!Mh2CEq4H7)?bJ+IoT%dcs5b#?Kex;N53dnUIY9+6Z6=vf^&Y%XGrI*q2$g$UHG zMM4}x2lbLcffrK*P0g?vdL7hzBf@2~-K3@gqGu-M!ZeXR52WyTH=`z<#@S)hBh8u> z5Y^_$Lwn>#FHdfBx%NNnLEra|`l5w;o438MOOFqpeIXtU8*LhLl_m*qypF>uLrIT* zWOrW=EcfSN{N5qmhO4sw6};JhRkvQtnQ_kbC`T>zXcwuTsq zI2>_z(e-1KbkcElx|v;GMu_YykylbpAz2oF7u8V6~?d?A<|s< zTYXFMCZ$Fn8F}Tb(#oMmyU#N?)VY`d;L^C>9OZ195b+}nN2Z&8cPesfa45B7$~>pM z8lh|O+N-($Wo5;^^*f zMvPABa&+V9fq+cEDg^!(S^8#G~97g;T?hPlexTPsjPLflpWfc@-k znHMuNBPYX?x~Z5!pCL8D8M@i*`FUL}uPDqE7CQ5opqU&1fe%D3oDd%S1 z?J+|1OTB?hxe^8HH>zMJu z*mjl{7*<*4ED!xkqfbxW>{QTa#C6l@9mn73(^*&IchbM8+I><|IsTt0JWHR<3%cVj zg?_G|?qLgZPUTl1rWgFFu3=19KKs6=o6fP*+J#JGDG6MXp0285B56!Jmn*ilY-T!9 zYr>1Va{YHndV712^z+U0f1XLWqvK&2CZJREZgSjdUhZJRZ?a-FWcj#o=BKM0f|8=s zk{-2>R4801K$Kz#!CPK$$WM#vY8v2@~rYkA^YvtpJMb zr!ldjR1hbqNtslaZ;9KYyhE??TrNMQkAi=fz`M6;V!dv5!4T`27qCXj9}}S){AW@o z|7!OWCfyiZWf5wJxa*VC^uE5QvobF}-2S{Pt1q5^eHZF|u_5?gO^YT!4F>bkNF{c7 z4&%qo!nk%AQW*y#wH7~*&Um7wV4ednW^{dGl3MVP+L;67q|~r&>Jf*M)Q5w8Y&|h0 zzc$e3MG7@(+UCiC5G+W)wN@$$7ZrPV25BWE#_&jpGXOSPR_SQebB=a+izbbi&BPSk zKO3Y8X#h7)Z<9JEqSRzzNF!|JASNG=G=`FPG9_|laWBGzoNE;+U?kU&4g-2VVG4R& zSJqyOY~~-Qb86L=oZb7Lrt4cVERxUuRWo-QnJ3@Y@7MK@8}RBW8Fe2#?ltC+pQ$4K z>n&jo^U&6V(4`FyQ!&wuNsm0PIn&bipc;EUV|5RAF4PPCwVF@)F?`xO2AdtU5zK48 zztiL?z6u((PH*i^*{vTuiFD%*)YQ~sa6y;oQ!@_cFGnr>!NB4QUfvpzTv06~1L1OOaei9lwAPZspl z6!2)&4r%W$#JK2dtmD6z^TdhCEslZn%f?bNb946wA#eiyW|^!Hv-5J77n-lqyFM9O z<_$x9F~#OT;{g9^vYnQmO{U-eZ90~Ve$AMR{&K z&xY9nDyz&@@6H(?3GmDG%%Z^wZJa-)aDW?*n>P!m5n?Dq`EP#Jp$Qo^5!3qSMyUTe zam{U8ivB(OM|XbqFZ{iiyDI%#B#pvhiF$;5fQ2wMyup=ADu9$#BxFoFe(Y8 zl@3XqypTJ2Z2FbX2J)jm5EcW+&~jOx*`rWa%*@0xqb}jh@{Y8~5YM7~^Y@Cz z-`E!FIg&~-Z1vlTb64T38tX99Dj`J)J0Q^mF?iUNb#@sMmQtjspuEt03`hVfO8|({ zGnAm#V@0xXG6C$4qfq*K3#{UWU#a_G#{H( zFo=^B<7W4+K*=GTQaPzhPne@EhSv+#7??a#AQ%rvbbMu~)4@?ClNZlJk7l2-1pj6S zmTJj5MhVW{0cuz{%q3P*3k*f=-({%KlDdq?FT)*|5rI!*IK%)0OwG#(#|BJg3 zh>;{*s16+kC_%K4m2lAQM4?|6AX^4O^k(_hc>ugrZJ}Wzt?MI#)zI;_>&R}G@{$<8 z7$$0AATt@lt~Z+>VW*!;OcY0lfLmpcD^FiLveqTj3UpIysK5U7>hJBJ+uNNzMKJ*p z`7%lX>pcJgZ8IFR=_jJ<(oI-x&+MVaY&05uWQZL?Ps{GqmlJY0FbCLWR%g}ReVzaB z5e(vUb_hHc?wa~>Dphpxzmbj6#}Wp0rhH3C16yr(`c4!Y47LLS5ojMtS||{(u>945 zFU=%K*b1;@^c6ogmEpZqwbqG)qF5%$Hvgl6@&UZ3WEg}}MpRM~A|9y9Csl3bL`)Av zI{~`%nsVSnvJ1r2&34ORce>K` z>XB7nCGBZYQrdH3cmffmrbuV$eYTDpG8>VZgd!WG-Q*OTT5#t0>XYlwQTX%0?a)7l zwc#)S&h(|cDw5Skjpg-H(zy3&xW18 z_oY0Yir?6v|K1QSZHA)1WTHkFGG7()eKEPETqw ze6PxtjY>;Yg>gIOjEF6I)~LT+B8Fz+dg=w4(~n>5a_ z^Iu3u}qTd8<6R8yLKf+Mfyvq-w7pnzE zqg<-kjSpuJUXT6io4YCC{1Mh=@y+7CyHVGL%`~xuy+IAWRtHbPn0vw6lhCRR2~Bg& zzV6E+lQzvTqBVBIZi}`LtKzl$7C#=;uHyiB!f+t{#uzh#?7DfM9>CB(*u``g^~O)h z{3pQuydA61LmVy8r!Sxp1&wa5I(`0#xc&!TRdflD-NqDDe{^F+;@c?A(kI!$qVeyH z8yP~>%{iJoXwk$i+E)Q_3XURTkNvncBDy%)H|{PnC?3P((nNB^-6uM2C*Eo68eGCf z7FmG8q}gQAt|=H4{lrzbrqZ`l78t}_18#arp#D(CvcAGinLL)f;?$1sWF^9D6U`5c>?;}?ltM%= z$`R*1Jjn7uPM+e5Q2mWI`Mi?YY11}}&%=LIora>VD&wcvCk6I-iL3kbqoFM8$Y%?! zt4KzBPvmakni%C)^@0Wo9bt+X<%;#BV{^LSjT4``{Mfdd8nQI3+_1u@k)O$Zj`OYw z#%z@q7oo6{psw?58#wj($HTG7GiL_m|>m4}Bw3G1p=7u^WMGt%$#`n=*&X2RE#i_S*Kp{_e29r6T0RII;r( zWT}zT{)qz&*Bok#^0|m8R{0r&Se|kx6)<$+=V1&X=~MbXz3^gpt@o>~hYC;2Fcx!| z*ZOkOc_1N-ZWdm+P?DMr)LrN$VbAM%TeJT}fd}-E#bJ40*U9HFwYSJ!kk8UL&ou3^ z=rC5~Ot`X{^C0|IgusFP@yHUF(N-NdhhQa zy%7PjJ@R-eyJLsMdK>;BOurMy+!vPt??<`Sewb}VCzFP`hw6}@3#DU74x{ZFp}V}H zo|DqIuiHp;-x^r+z9i*+h14bM8+Xz6s7mL6w1B|7?~RW-E|$huarR0)A1vY>lF2FE zmeBwJrLgXdkG^6Fa3-?ZBw8nt=AN3?vPIItP0~x&pu~6Ta09{}RvtGMt?UO>q%tIC zHv+M#E~_YA_*jK>RCpe@P83OmVuL{QTD3~%#fgHBB9&w)am^DN0tcS8K76 z=JnzO+)T(>Sg2*|D*noh$FbGVD0A>C5ervor6NGPY&(i48p4D_dn3>3MZja$K>@57 zLZ~GRxR1Z9`X&Z5AZFE@EC1R*12Qr#VMxp-4W zK2cU-q)Rm$yUgxnU-<7yy5r=CjY-DwdH!;_O!ir!PaR~lGB^Ssg+C8mE>2){pfb?#Z4&|r|4t7=!gZB z227LG0`q{c&CDk)n*UhwI*^aF19{l@qL?^Ug_>yDxsr@=&!38QF(mjEDdxdr$fN&- z*b|0%*$UQ*cRGakJfs{Ld^9>g&-|S1k)BXB=44^}19-M1@xwh=iO>0JfsVO(z)TGn)qO2aTGct+ zVGjaduUn8O4?q)?S~h^9Y~fq~v1P=v9`> zyPbkJE9faxtyEW~88d!C79P05-jvsD#~x^<`cL~oIFp8{FKy<>>|wY7TN$^z=P7_U zmnmU7+O9%GF<|rRw+n8w_`PXJW_mXJZ2dud^ND}S=mKvV%lMj`K|^=%GmDC>I%#A9 zILkGrKV{$ZsXn)=lA1k$3@j3kr~uJ3WQ_l@i-k|DNC1>2Di_JmjL@l4Db}g2?60Dz z{Gw|VBu5?Q1_R!yNy~s5oenM9D=#cQc$uxZNH8W>2sXxso9nQ{F7P9llx3P3~rz-U(Mi60~E$sUWFz-LZA`+rwf z{M3}NQ9?eN+-3^$`~nk5(H##x-yT&wr%Jf*2SvWa&uqbR~x37l>tRK2kFh7^U^3=IpGp z>8Pv-E3|+brquFUpGZtILJUHH^OdM- zGG+yaZWS<0?8gKBo!xF9bt*B-?6}`*5SPEa?xm^lr!nS=IlM8dOd7GKc{2jkzwQEE zAGGX!;lwE_p=ZFFbM)DwPz?gPS^sQ-ItBh(5d!=@f^ADWg&Z~8@+O`%-p$q|N@TZ` zc0FL(luriS5m#GV({7F5xWMoWB*!JHNUhY%A+k9F&?^e3PP?1vN*8ri5KJ4Nn4XTS3NF5G5rAE5lug&6u~^)6ra-jh#(gMQOt48wQ*|2){*m{ zrWzef?%6~q6fZH7!>fH!HqdEUa?RK$xlH@dh^w^>jU2JV9G$B5ryeohep;1u0W1E^ z{i&f|FIjI9=S3V@N{J+`Z;4irTdXOvCw>;ddC|i74$YGa{Cs%M4~O-7qyeAI#l-T$ zp<`(iq{6f{;FO7pm?p@Q#KkJd^NCi?2fZWg8XH9ex29qmc#K6MHjE(l?6Eu9pQI;V zR^M3c6+O7!TgC6Y>x%P{fadp-Ju>CFI(jAomHHTdo2{%xWe(5wJ$!>2{rH8nclG@V z>2&V*?d8XPk~Wt~9#RGu|EMCp^iH*Ov}|uH`}3aN?C9Zhr@A8m0DOHMt(lzc!$-cj z)5^*#d2l^#-NOdy`pE2Ma=uXv`8LrB51fax6|kVIk*APvFOeM;><`+|nY`tt9kv;jZY*#Q~g|Dzf#RX}o2JKGBZ|4l1%clg? zqQ2~Gxz5f@l(bMso3T2Y@oX(q2$KZ7!#~Blv#aNk0h+6$2BJ1c zQZrK(EOAs=Spb6nWrLW2Qh*SUPTxNQg}(w)prevR=f$bUMz`rP2l83l4a5#3Sd?6| zW`avAVG?T`KGW)v^yGIr-^2h=lKz*4G9Ja!6kMem{iHDkq21h5tu(dw-y`0AePj~7 z17-WJ^6r6)go5M4SX`~-PS!d{dp}6u%9)A`9>BH4GeSp!~Ej7Zqsou^T&F3P?ThNQgW84dznBCUp48xbXh z-$KFj`x$ytKC~cO2*Q_3In$9k6~d24NOQ$zC>_ZJiE45iaLbR1Yzd)R(NH7Fazwe3vd_C7Q^v?CdghB zB0z30WPo$*ctMVft7Dd?!4}6ojI^LT-}|;%3Or+)E;y0eU1e&9Y%SWkZ3nkE)%0bW zH<5)G>j=Sq>^7_56$W}+e68Y?&ovu20ggXA$tC-fBhVd;Ga7!zMq+O>p1w}D0VfWY zHk@Ofw=XRg?WK&*4CFsK&dB=cX0Rn^W(a;SQQ)qS!V$gBS9@S2A`we1PE5kuxMlN_ z3$J@MjU4l1g`C}2FEYEQx+f-vgE8_!_p4(7RMjALi@7DIC$pn*YQ%w4cmk@_@i2I1kjHS-T88ha@7#J*-fSr~ z@q%P$fpmsvMqK~Y$`gpJ{u$VH4nbWyA7Tzg&`rAVKn6ZWs`Sx3sKaujhrt&-m9>zM zYhqrH*Z9(nkyknIM!23E|8bL~elbxJVB}wFE1AE4b^iCHOEEL|>wN(>Pyr`_4{o@L z{g#!btK16;kc<_Z+M1oCJetr_52uCb{YBc1sgT;iP%dC(X{Dr`8B9pOd4~lclvqE2 zrXh<4G#hy-R9`upmC9nFL?t=HQ$JKey?h~;USypMtFCRD_QatNeoBBM7!zL0)7MYv z@50LUW~_}Xt1CQFMP+@>{^AgJeepbzV~gh#LUmtLdrih2h>O1Ux#=vXj7+gEcF%~@ zx{6HD?OHatzUVM1Q4DzRiM&pg-YN_P|CF41FBoX0&RA*i8vDmQRWPt&EQi^CeUyPK z#lj#bqM$0AR;Kn{m$ULyxmoc*TsR)6*5080aO>536Ri=ul|#8N9RxM6RJ!z=>Q)&V zCK!=3D-qYS?Fr4EZGbf~=8NyLmuq((qAfU-d`DWeWcFw02y5vYZ0dUfrs*HQNPJ2s6<`rZqltE^ADKqG9glHM1g$Ar=Z zvWA)DGFgs?{;n%r&(})a**n-%ih5oo9nY2~37sJ8R-FIaDEtOUt%Mml1XKIZHx;D>LMD(T&21!%aliQ@IyIC9jIx63;3UTS`yj)RTZJpVP z?Jh#WJ(f$}VPrWzdVOY_`Xp*fm&4um-AT;owJM~)&Ap~%{UtWSI`E?>JBdlEa{1e! zjZ`;i56p)r97 zaMz`bk(9JTXh1xjgfO^9F$Nl!6VC9Z^1h@+wBo(LVjCRu^w&bn1S9~D9%-gYE#I|h z=5aTvY&xhbpLl{sNoDr=pv}SL>2cQTX!p(Ub0|n7YJG+i;x9S8;?rm)DVwwV-R-HA zxz3Zg4(wNkEk zKvVF{TMpfdG67C9@fv+cA%9%1glW)Te+b;<~&FL#9V5!hSO`@TGp5@*~vwGz4z1veHZ zQ^y-VOjX-jD@}j?^oqE73%=clu}mw>Ejt-DN%qjUEwtC;aR1ir`uR zjyJ3J*kN~!^ZKB_NA;0`AC3rZ9P1!p6<;S+)`B7xR!T+#Hga+>0QUIs9}C2M?&~@V zTqSh*l`nxOfC0~mS%CAEfDjN zHg}^dmW7Yaey(htrzQ$UceWpAblGVUMhNGgixr}GN@r(Zh{$-EQ1O)ettAcca@%)w zjj^FzL#3~*3_7Lc;f(mbHCDFtjB2loxfDlL;vLgEB)Ia$c6T3_I zM>>qmy)_=3v^Y?fUum(qQ?Zv+x)59^G~Qc?d~Hc_SS86p1&HnL!+me!We1||(v9nGu5I~slMhI>tY=seLl@yL$5XLDBsY#0X zJP?u{5DKRuF5f{b4M9zhLI_2w>}X{}-n|!bq{_9fwKp$gH2l4%?Em{+=u zL{OaZld3KLs;>hDh+joZej5H;MdY?t)XiwTEiJ!;Fv#!iJ=$5}P-^!3#eZ&C|61$I zh?7CsS5IwwWs|?X#ZI&N2m2v}_L0MNTBEhgNh;f+Op3D44)neDrxrhc`g$q$C5KAJ zr)BrX)&&TF(a(ryLf!gZe)lA##0$~$B6|RpzUs7A^psBd*-RD9ZFeCi50w-ET#(B1 zATZ3_GWh@xi~#seS*PTb*-!)6LFNx7=g~8c!oA(h%u&H1dHiGS3a>jDrPC8f?3*Cn zChSJam*%iX53qzTRaQxPE-U8qiHI&K1xue}bs^pA4ZX#Ir$V(^vp%bq`Q{|1b@$d* z)>PD%Bl<_KL(R@OXhc~xo}9U7F;bBy9=Kx;*w7wk?Z!BqQ*QHN!aZ&i^@)$?|wgOzTwB^qT^&x(^S`v0QSYYYIRPO5smkYqB9EGoCebb^HbHtIE!4Ew(nW;jtV z&>qhhmBO4%nI$h&73HhkX9PB z@Y2648}#uTy@YV?4HS#B{$d?|36FG)a5MSyl6KXbC{(>~@A1D< zmDfaE^rJ^HDw2_S05kx?$k$9KAWv(?R1jQ^rQOAJLW$JGG=Zr-~F+ZcG@EHEw9If zbtSfm@#lB6VaF(1H&G`;{3ZbpUGZ5F5c2}|S_SBahffP8blbozXKrAhEG8-JLMeDs zDH+qA@Tn9Bl3$3dqAo>7bqb<@wi-S2)(wRJtWvGt1v_OX1h_rXG*1va+WDZ^8ZSBO ze9CnwVg?K|?@2!mGq>b=SNblmQ2KRv`QKV9C#5xkFW+hu$mqnNypdROZF1pGG=o-Y z)AUo5U-8TrEr;P%f^9a%iDGm=GI%1%z1pKQ3#!})aFF@m3?r;joby^C!P!O}=o|)h zF;U2BWXispneR`WqG*n1OLN;L-z$o9s?OhQ(vOkxYYY)zWQ^_UKiwu+7dbG{5N}9?)*x*BplO{!ginPp7n6hW3_42iv@5w8}n-bYH2kclv5W$)n=aR{gqPEp=hUO_zV zDMKV{pp)Uugy@;&?GhdXjrn8l1&&K4+`Zv`fwJclctXkw%UZ)|q;ONFJf8UCL%pBW zZAEhp=LE=lO--^##)wBV;;zpnUNGz9sWz8)9O$G6?5D4D@q?=$gPuT%D65!!fA6pOBl*h@A?k-c(WkxCA`Oi^Mf{a8Z zyhf?q3qqQOlVE;#6a|39wZm1S3@@8h82aIOk6fV{mU+oXKcq-Axv7!KK14t1tq3*> zGuEvTGo-PW$!9moFwfb`?#!UMuCKAWXg`c%zF$UB&L)8R&w8yMQoVp@pnzz zv_IIa;`XlmJXFdWBV} zB?zWvHT4~SCY`Y1cNRBYhUg^ED$lD`+>uU7OoxlhC>_f1aD1a3UhePINKGo-GGcK| zcQ&oLR~h|#PEQVTmM?HZwGS*Rf}FYNQMoR4Olv{xFM1#9J-I)F*He9s(mU0y*(`q^ z{8cHbY$I_Q_2EMT6ZqRLT>>HIF75;X8gp26bNmH&0&m$RMLH!iBcUd)xD#*vZhM3q z%FVaVWs!7>reWdDV(7SOH z&$D2aq>(&4X9Vg}QI*R&A4Qk_^~?X`c`irF4qauePA%Cml5q zAhr+lCrlidfl*^e3F>$WsQWVUd`i3>WIiVb^C|-^DJVuMQ&zHfYCyW!Weyzo!{j#M z-|WoX_~y@)?J8sgNdYF!2hrpPf%ziyM}A(8jUtw$Uu3^(W(_fS7DNwt3*;PJR65gn zK-*wb)VtwQiJJ1o!CBzJc^4Q8T+?aBOwpb(7kmGpBVR{xx8%4aQ5c)%=M`VATP{`U zs5#;ic~9dFkNw`BL)%@#eAm^5o?ny=tnjBb>ErvsaKza;vNw-3K-z zg%i_U9vA0(?C?^F0)9!pF?ajpvRj z73<(Sg48>3@hR}7?{+#t*uCzw$D|tp=r+*Ngy;b&E=oHbN{R3uK%;qR-Vv+raB78g z8Pdh+0ixGA5~}-fN<-5?MS2dMsGsz!=qm*k|5f{A#$Vp-OjF-;nzcj#v-RCVkNIezw-m? z&#mJjc3buDe<|~hd>8F*XXTu=2{s;QbT2`Q#TR9|C%s*D#e=J|s%L6e3cg&`uLwPJ znO$mlMcy9QWt6iFkrA*ku-?K&YmVei5dTwJ;NL~O#>L-PM*-sga7%pVz$C-VXp_wCuDo1 zY_Y$H6yK%%`ouu+4e>H7Est7cbGuqdx70*h$?UJ>4wQ&+fgiZuP2)@FsK-l3rFzvL zS;wvqS6$>AqCGWP5e~ICV&XJB7~AJz60d{&I-54TwztNJp|6%OS#P8zk8>Iaf`2rAZ1S#I(rx|e7yNP!RMllw-C4OUeo8IpWwt;!im zm{+s*y>E+rh%7~t4rMTvJpyC(YiE%`{N>#r?vL>GQ%+{;sA(DsO947^gr!v0S%eof z{KjOBk6{s>3ZdL&8jn7e(UTG>fzoDqJ`fhrBp0JH9~ZI;4Vg{{u3u;TCkkIc-OA2y zr@O=Kew=UE1?hURsK0!ie)ws4uc>0;@>O?cy-AGNA1@~l^qJ+N^OeJzpR=%VVYo9> zb3Ze_!(9`Rm&Kf;-ns@sTwfL=^ed&j19=RyAB@>8RTKatXFw0PB<+|ZqFElWYVz?A z5yUY+9T?(Z5c&yz>97;s%pn9|!QZBBb!g;0e4Q_0VCIeSrx8&t3ktU@0J(CzrQKm6jr0k0}_SPragERzz^`CZ3a^om`><0J=9R&Us zyb1jw`(aazuf!f0bz)14#bhMSo6*Yfl*B_rXq7R#E@i7(kpNAAD0a{AH0v3e@RpdaW zAY9oF?MxUyx_O^HBCERlhk2X7!({9qk)sh9Sl>v_yyDhzB0Wfq++l=pmmNw(A6l-3 zjrpV`RB&%e{vOqm(Grzf*q0Utx1B^!pfE{fLLC8iSzpqh$Xdn5T9B8JzJs}}C-Z2@ znTyZsnJ!$AmSNSKu9bb8sgHMSP56aF+i(~;>F0Cr2M&9rk9rJWKC{t2zr7ufT>&C^ zxG@0mR9NOiP%bJ8vasVI5D(R{8?E#zaBiwVN2%>ZIaHWuQxI9&Daw)Ltdfb~XOB;C zl6;B%Ofrnrg4C=lZZkF(tS(*);Qk3rfHQkdlv*Qx=O><6H*;pQN_k`OlvI9=x-wcNZM-!0*p!>9*+#** z@Q2B%ysWMkkKb;T&9kq6+*v7M+YpA)Ou$%%Ihf0v`BOp8!-S&6IFAcsLE?Ej@J?2?yaQn7}}`tLg#FMa1ctt z8lF?IEIUfsFkXVv`DWnMY++kJ#(X1kFd9njSE85-x*4%yC24xJ;L+nIIr6e5OxJ96 zk)PPAg30hRrDwKeu7$r1IG7AbcIw6L@HBQw^u(#Dd+xx5E?rmV>_fK6zExS_oKuzT zN0kq1NG&=by!4fK^`-V#gQg^-vNy`{bp73iOMba1`KfjNx1R(e`7Ag>+oFHoiGtE8 zAi>m8?>soP^+v0vGsuj`Ryae7)aldkwg_tS{p0K24flM9IX`C!p23i3KWC);F5bT^ zUPMDcfPyE?PBNznx(^-P^QAnPAJBqDAkO!Z2xJstnkk?X$0ggVzwoILA4IX2jB#sa zeXtq}VVC|^r?#vdc%l=KsG%xh-(=(DX{!&lQmqc}X6L$-NOMnB6DW zF=DVeL9Zs``C}$M8v-O>24v&Rs;A@Mm>9$mz-}H?xwPXz--$$bNlQQX(TIQbR0t_g zaut*n*(7bdSmz(Cjz{G!hR`V-RUnGE+%A8C6bPatCJ6-&e(22A2=FbbNKyIbbCZN$ zIZyS(n;iW(o(VG#=zW8V$5!%dBBxIOI`KnXTWsCjkB%K-hPSsl#|i*EI+a&+3bq6^ zRbz#mk<&0toDo&r3X%&?NQtzBv|1yNCkvau-5y7h3Kq!)#7;@o~F2+i{<6agIl!K4?t4Elq zNSo}mGc;RTOjQA~W0!B|ypby~UvjM6lIQCo0r-dMw~ zqn@WC`JX;}B#SjceYm9`VaOrDus%z*oSIBLAlJi~urB zk2)m9q_Q#zo5$iC3w86G84%sIRG{H@`YlzGfH@@sJtGD%bzA{YF*|*hDorzunmHPv z(@T;0{(DMS^H;u@Ldtq|6nGFj)XXv%odnA8>FgYz{>6t!y$C;$6@m`Bru=Bep&@C5 zVL0XcIe(JGVa?ezF8mvz{6Bq_)-yba2qG6777%W+Mj!J%QB)2cWaa{Z3jshvMRdbN030!puCx?VxZLjn z(W8wAp|EDTP)2M|rVA$jsqN?U#)DW2LMGM}tF_0hftc!U)IN2$0z0T)P1@}Z8mD}q zqZ;BWDsCLKev$Oo<|+>;QS>lvF+4lOt+HMxVmf5wz*=(;>Zd7kO(3n%$rFt)S@JY1 zf+f#V%)?v25wV-o-fgjYp<&W!JzB)8Bu?o0pc=Tiek};SW+b>DJEk z;xHAH)nnhbdZ#DT8Tnv0;YV*j+^)1rWD8kfpfKunEdPal21}e)3fBUwa zm_-a6fePu1QNjhy%ou(dW&tw~8-&>)_cD7~UjcBtyKF+aN-v%55@q|d@Ncp*7cz_A zVV%Kyh<=#|2cPNi)0ICP!JoQ9)r^=mvV8|iV`J%+s7^>9TA1C)ns-X>tq=9Wlidwnz5JxFfw>(Pa=Q6y*4>_jw2coE-%;`+PWdhoXFa$~=fntAGUh%spg3F7V6 z@>bzp-SbA@ykfYqGRoIDcxTzR(UAI6YvYw?`%$3Z$c1MU! zVAJ(wKhS(|do)`~$KFkW@xHya29VzUA7^ZWVGXRQI}fztV`h9Lhl%V<)D#4j~!#K1e1(HX9IgyrYS_?I<&D=p)u}D}-l-yIqA*t0vn{=Ib12!uF!kTVe%X#?#p6>4>@dqOm^q^GJVohVc$iS%`1kU8mX1V`YYE|q zTWHM)(p<)-tr%89ZG#l}4%-L_ixfS6Ww$>}lCnN*_vVkLz`!aux1}J6FVB^Z9qKY^Q*TNAeZ#F?Hs2qkQMzzmu^`S~)4I^_uknv)KaZ6D27 z3Eg9I1pP*F;xF2DvQ-AtV3jba1z@_iiq&iSEupu1P!QjfIz1ytt=MpsoD%`%FZ z?y-4H3=LBAa9dGA`U^2@2T<){TnTeUi_*DK`5@Q1rdCi*MY~d_yB67*HJ8a2^M4JE zO23k;H&9yBy+ek)GaLG0`2z37^JLOq6>Da-9^JvX&A*gu=_)1LafdJFx99tt=e3W6 zD8Gsv^dvqC4p^~xTW(MCVLP`EK3t<-NRxfcc-r{1mbCB>>&~*F`#k?3+;rDUC5UhY?>P(5a&2D#>xt3C8CeE z7BkjMsQF36(|T=>LEKq15>_p3?dXJ5UQas^=Okj2b$xXD}HeQisD3lXSH0qOj2TIFnMoT7T13j!B$=oyED7G!r0b%#?ZRC455~` z_1XF&xXzRXp?ZD(%wd^TVRXvUJcVnht=e9DQD;P~2AN-+Z;5aNKtuz&m!^l=3!dk6 zilQk{g#pbDrF6QTN5h1s#>ZuQ}X5r0>Z;qy(%uo2m2Y6jIMj(Qt3G& zvEL#~1;`pU4T9{=qP7>qGs8#U66?glA!j2hiY>gbkM zM3ilGcXzj>h)qj(3rb2WX)6!k-;4jN=e#=CIq%Ln*L^;5hisP99z3Q?lR7!S@Z1$l zK#?e1iCIVe$Wg#G7at>nW)`D8VN*;n@^f%(x{Sg#PG|&bh{L&xEa%nU{n*2GTJsl- z3w3b>Q|4cx9I#gRhGBDz<(82njou6JWF{@6)DKQ{f)mX-0EC>%U?-=&|H-u-Cxyh8 zRR8*}rQQLy^S%xu_vFjQT$q`1JI0f`7y;@qGtmA&^x3yF^zV*0R=>#+K-Em^&X!@~ zGxhctRt>FkR9bl^vLbWPgQmxa8P6^9VQx>MN#(4;oD0sSasn660`Wf%@7xo+hrXXX z?l8{qS3F5qh+Fq1DE;Z8?R`+npSN$6E(>dQJ+^6|*yd$gAI>t7-TA0oU3)q4_3~f! z4>AC`vKh7HAE-TAMedb|8aFmg>M=(zR5bxMCMRtaJM5`2$qAzcRF+Jyqb(S_?Nf$C zxHWlLn5ko)*aR?M8*8;}G4eagKOpr=Pod_1{WZOvE44aDR8_c`kP6QD_3&mBIgc?F zwSK0F(Y}C?|K5U;WCz$C{uJi2Ji%B!3p>;;pEXa^T$JEPL04}3tqSwV?^*G zuGANWYK|#O5_apU2UJvkcyNbKMk6}&Sss`i0l7UUq&Q2>Go3~q)40&G+W(+Tq4E9BMvh?JZ~L!&0_d{E9w7Yp1S?PXZ?$MXLYe6Q1W1*fn9ascs!9J! z8psoU^O2ON0kywOunpPt>wJ*g!b+=ID>i&&>p3j3l7u^ZcFPBOo+jtYaaP?T^wmZ2 zx@l%^WrNu8+1C$=z3(1CxnZ&$vpTabM|^ye;gd3f2{KaMGl~>ERd3ErMmCw$!)XEC zJK$a^a7>w`t+q5CMh=9bQl74w*$Ok}liKB@0%{=W2A0WX3Y*T+2De~wqpX&AlfBBV zannV1C#=Gz2Z2cJf}Y%<`}hU6gmiEO_` zzad7gJiUIkK2HNVH&nzde9RmPS`65o{G_e-6HL=j(y~)u&9SJWQ&7bCMo=pG33=X4 zQ9$&!(Kr~Sqgwwdf7vQ+?F#TKw6kn$i&JEM_d;K6F~S8u}z{OeQ~y`QUHU_;seg>q9Z^9kca9`pdeUhMzg>V1lv(YSQ8SC_D-VhJrA| zz8n+Hj9uInL(-u=*v@sguAbr7?*YVQI@h=i5I3(nEEpeTDxUB|ko=nT7$_AH&tc$% zBhP0=^YjpVO45m)v&Q7>IE1V57-J{|?o+!LvL*Le&m ztKhf$^85TBO1h<3_?}1pMb+z^-AQ2ST2-u6vpO#TW%YP8Sk|gYS}4BaZV4jSotlRY z`HCB$s;ZZpRxWfu>$~FRyMLa=S6cA@>A`;mhK6yzF9H;n5l~vWlXdti#tuyplGkrK*K;$OuMc000IcDM|S_j0=M!l@L!N&3}22_xwbY|6m&T8Qn7{RQ~`ks()8%zo7TzYtVbH+blkEbT)~z`m}P- zJ22mcgJ)@q|D8=-(%NekyuJA8{G&fM?9GX*-C7vG^O@iK{eJBip>L0V>3gIB?q1Uy zAX?HbY50_gsuYh3Wgn?@IEX*fy$^yMVwAQZGOxJNr9I*&A50LNf9TXgc5sW@Pc+Y% z@9Eq~Yovw|Xcz_I$^NTGSwOFHd@@o&kS)RWoVKw1kivaa5FR~zN5smw{IS+vrHzD% zw3MMTpTH7onDIcQvB6J2{KU8Pj zCW_xr8#9Yg8ezkJ)Z>FD$$s`)C<$_M_g3s^=-+8*3f5=1x7A+#=F1)D4ZYhzN9kj) zCI@!ymUJ6#hzdHZRXa$zttcD+B-yg?!#3UunV!$pYt@H7mB|>Hh^&>9yIH!r{c7c_ zr`5AWxtoeMIT;7a*D}R9UX8wc))aQY-tpvbh}im{kMd8p?_K^a{^QrS$X%%Y)G3v= zS=&R>&6lH08l^q~m;t3F@KZ`5e=JroNVkkeMM&MKfi6le9uN2W_IL-|ougz}P=jjm zJsfnik_FIN-Y4lWJgl;usT2yuykhH{wJ0RrvoXEzp_O^EGR7wi!s)GCgR76eW8RTo zocx))vV&H+wZc?`)!S}qog_Hf@ix0X6P$z6db}uLatkg#(o@xlGX1$Xz6X|GiMw7E z&u>l(>C_Cbo!=Ch$twJ}mBo9bcg*R-_b*ct7Rv5_?&;or+@^4zcXT9Etgn{Iy6vr) z9a=i_&p;lOrcQpvppXQ}7f>=u6IEUK{|H+AS@Yk_F|&ML+AYdZ+HDM&Pq*^0*&2V%wnifqu8mc-`87n=%{6-Mxjfh2{pu)g{GQRO z!0q#-`BWL?%-f0`nV*Y(Xg{F9DsBhSViYb11!Y30aXW$b5t6#pYHRy7Hg-2=h1fQh zjX6_3Wxqz${I0ds%n z-)^?ZCTEEMsGw1z z-sR43NBWty3*ipo$bn#YqoW0vXkvBO>@p)@21E8jw{G(d(djYE9LvyuFF6lv5~g40 zXPUk<7*VI&vZ9=0NzYKwk*0w~)Z5eGn!3uel044f*O`9(s$h=+pI;w|_j)vUE@;eN z?HSJWqQ0HSq4zPoRhX4ugnF!dj3&TGkUgbRjbhq$S?%Lw)_LC&WvJxP%}uj!{Xqam zFaQofClkp?0K*-MS%QME+aJ7b4r85WoQCQEr-4nT9_b|CyR&AG+yC5$lf7a4ZF@$I zD;7;IozmI9Met`+Ud-8tOr_Ap=xP%Llw5CmfaLe2T=jWHU&h{9Zw{)lYJN#Lr9%YI z)08b2f(6qubKq(TDp!`@3Siu}RP^bRw8)$emdiJ?6q9z7#uq~v_RIpV5jY26zitg} z3K!(WkX2&qYzaS6`#9>QYFFNvAJ1*e0SY2a7o4BSS@ z6fzT;wd6J0#frAcrDKhChKjwo*Rk$pFCHF#v+r#VHqd(%S$sKU?wiB-pP51|hVEGZ z^){^na2760KAGQ7BK0GaY4{jpJm~JYRj9=I&L|hL(x|doGOESB`H~n6O*tp$i8_!0 zQF29?_v0#m71db8AHK#?+ysaL{sRT!aDiRtS;wpBn12Z`Eq$O*??&btB&^Hzp0x@& zzm|S+NUOvW@Uf)vVGvLA?A!~n=_e1b6BYt&Ps*AtOyM$_2a&O~G|R*7`>USPFuNbO#^s`raH$=SR>a5#7h=oRoI-cxC7B-|X(E=i2s1!}m;d z>J4U;6S-0EHjaPumLB}OoS1p971eUMrR}@+MDpeiPr8|MLG^w9)tJ8S0lkP>8I8C@ z|Ku-iRL>@Jrbg@zgdepwVSB=_==rB8SY33kH1#xnG64Kur<^3sCxuB6bTZ+rrX9R&TZF>6(dFxSG;ICtr?QEL$mjfjDo)P_Tx&saq+apB}B{0 zVTbV?nVY&DfjI{Q)AHm=5h8Rdx0%?TU0FLDy*Q-9yLEaE{wj-)(&bllS?+_ITWXl% zhiv&X=J}*As*;U&Y*7ZPfuAy7C&+aXBnE{F+JkNWU8UoGIj10n{PQ$eS|9aM=S}qU;RK=2YC5&eGu+z8BO_4`=?y&M`QGpGl9s;OTOM5z)c`$JzKMT4L zi_U-48CM^0JksAl04f;OZjwy3O=YdT*|xmG)v^I`lrpnplN*jQ8FKf#N_06@?KJnm zY>)hKflp~T10;-7(1nVAy2{KrV{QV)(=z|@+K-|1kH3XGO3(iD6$ z{e?SJHdn6n{ouUGE#O>YccPO!Zy!z#L?ZI^I+SS&QmjXiHL-g0h{emzXIfBOM-W7# z1TPokWFqwnQg?sr;D;WG9Vi%Ygb$|#_E0?>vB9ISV~Fk5)Y;8*gsO+8Ne}hrCedPW z+*|L7SO`?Cq82lWFXaBije5?&%$P?uQK19U`z!rW+0GmFuqHj$*t7Zh)L;-o<0C%4 z|9f;nWY5yltn`;*#z+LR_i1_G(Begil`Z9mscu84#$RD#pHFFZt7sRVHI&XAoq_c? zX_vtH(RPks$e39pXsV6n+oBz6{ylU|FXOaPx^}YgRn6G+bw_8KN;?&y;U`lc8~}g; zS+#9$$h?r@At9+%H-kXZWEOwA`GG^T>f@5a*(}tg(w0Z$6#eR@9fEl=U?h-@f*WQS z!iDlO7nm1gJ3vBkT}&F!t7hWr;eCV9Z-S%52113wQwH0h5tvK!Z`-7gK4l3Yg8p|G=0ib}#{Ut?d1;5LCm zg?vqtv&h$LjVEMI)Mco}e030_)2v{)z}M+qPh;+xw5D_txx*t?nB<<)I~7S^FA-|_ zM~&`osu8B`Jagk7h(-GFk?`E6EF$mw@3-H>vM=`yFC_lmx{Qn9seB*{RRuhNIvu-7 zPUS%*gXH?L<51L6T@P&nk5QLuBng*fI=3tdD@D0@y+-Iy7TXF-o=%UePLG^8d<79Q z-o#)Oud`o?K`mtW&dWkf!c)HC5T+e80pFt_-hc*g{kNnBcm6K|4ARf3adiV*`8FzJ z!`n+Gu2SU_yh65aiq+=OL-@6JISy}_OVkqedCPa@g5zH#wvxk@xAhmARJv9F&~YFt39Qwi*L_233P%w=Ni&P`@0HHfYkFuOw@4=o%1VC@&y;vtGp&XiMP$nsTw?9?x zBa=clw>GMBL1%@gNX13+5{$`C`%P`?>b`^1I(7c-ntDF3%Fd!YXOh}yypKxx(h9>? z8dqM!yss*(mu9j^cc#5L!*<^;`WuO-sgq>86 z(Ft6K#EfBR)@{Bdv()~|g!`<`(=}Eq zoUsQ*VpU|xAs6T&p^bj}f(84nyndGY9lUcI&Vob%2 zo;x?mD!TST&s;KF8n^6xZR0UvQvWjv4^-z4ccKbTIJkk=j*9M56^av%w{5%a{`}#x z4g`+8B1<^0LOEktjwBZK5$Zhm%^i$OKIbESvb|W^0BF?i-cv_q4}jK%Cz(0ez|gElUtDwC~q!y5GN?)3R=jQq`y$COeu=Yi8x}&6&RE zy-R&jn0&J!z^V)0+qY8u5vrXuFU(^;kszb@A}2@2(q>(#*)Df%QMcmcZLv4k_KEXb z1Ty1xsc@!B3XhD4UC)zmPA~gn&nBqo*fk^LSo#e`BNYz?6r2uGXl~lW%vlY=5ms-O zyQ}4YJ#Ga)%uyV^9wrux}- z(E0u;-t3S`c1hX6Q?ZY&*VS@ueR?N0Sj(a1Hob|1_|@;N9K*M+#WGf- zrR~9|+miQmzK8v4Om(^Z^L|D+S51vM5K%%yWtyg-p4cbWJDZR*nADwi-&p~q8tLB% zAJR;@%1BQ+G`~i{n;45%;ux-gkENc=&x@dNqp)|{HL>6#rq6oh?RqpX#5ANKZvC*u zF|AGVycfSBv(;3GaK61y8g76Non`#bz3OwhDpZ)vLVFo)djsORojc8-z= z>9=`6#cp4`+V8=1E36?brlQ7W-pt!+mE}g3>108zzy4Jd5XFOhM2r>Va)RfO-?1SMXXTSm0;K?@%DRkc9bD>R6%71d5N+eeRu~EtEjd`XpQCIUS2CQ zROyZ@ll}T`zE|qOG@1U~sj!u5Jmpgk=h+RNlvt+t&!s%7DA0sSH3uGXi2;H;JFt2L-Wq8F%)ZKrIpSxOuiW^7Li-9L!f#JQ`weg2TjAJ_qQKCp0 z#NDrDDKk8xxBxp+7S$>HA z^l=sE?}hcK7I|>Y?K#?}n9HPZ^^a`&8j`^4 zwETTcefL}&M=IrFF{n@iF-`ULO>K+7VR)7c` zlmtwN32xe$#cOX@Z|d6ZzC+cs2H#c|d$KE;N4)Vl^VV^IL_uY;!@pqx7QIoHYiUXs z#k)=DpFhQg!=<4qKWgL+ChbqWE!Segt=dJ-8G71#!$8Dz?(qg!p2KbVizUJS@kR|Z z#@m8571_God@<_0-H>^1K!J+5OAqTnT31@Il8TdkPIKUNXHi>j+gmh%tg%=|STKCB zFVYaJ>*8OqQQF%lWy3huPYp2YOLe)&i&uOl87Qj&Nps!UA#%ob`TL zEG-D{tL+Du^F|nI=Q`kCpJ;h6w^7}QTyfJiely~ox$6!s+^Nkv)vYcKEc+ei{|FiX zLZMnT((X>o!rb?y$9eb0iY&^lr|Jyn_vEtn)?FjnFE1iF2?-@#eHi`jO(XDbK;L={ zRXAs@LNVYfa8 zr@2ahdi=WMwHW~b06Xkd$r{Z?{svlU(d*#uc!LJ8gQQ++V<2*hn3)1#0*!-(aD7Lu z&CNuV51Qb}&_d20T;ZyH*f9fFwV(XLQ@CwRGX{L4^ zXhiyFY|YsXo>J5{!*vI}Li-zO6KJDPibH4~E@R)5u8`BMm-p{Ati#Rq=t29bm?OP9 zZRCfu`rB08^sJ{Pj5@vcMgM`qJ(2>Klj%Y5qvI}!_06EjQ!ekTLF0P*@M=lT&o?)O zn51$>_}ZU?f@hVlbbCQd5n2{h?PZ#ZI8?>HxK&V6s>U^wYyad*^oV^p3;=)xP*HR_ zZGApVc~1}>BrSGza}0Im3>f=%8yR7)Qvx)h)I2D+NgXtRobth2^2iq+Z( z;d9itfSR1L1En;;y~E7qXvY;>v$IAn{z!hpF99e}{?FN%g(#D&v|D%hN1D zF$vzPd0fF-obDqLeMIyeBTb`fKlQ`kThUHZBM>v@LwR%TT4eJk%5%fKXJvM~&?AsQ!oemvL-17N;N7@p^1BtoMuOsoiIZ zIi4co>;b7lZN^>_2jfk72S2K0$IzI&mF{g`Kd+s^3G02s{iZ6TPU4R@0A z6;zl9+O0&o`N3?wu?JA^r;R!W*wcjD4b6g z6>`kQVm7!=AbRv9ul6tjCoMH^WwRrJ(it=BRI{M=%x^wnPJCM|LpvZf)7gWOSFb+r z>OOd#giN+I4Q^N(xWj^e>G$E1dDdQ9ye%x+Dk~J^Oc~+qtWE$>>9MH^Wwg1ZFSe0; zt@JzHXwe5rO9Dc>xlhr61YQnNgUL?75K1=uYD>(9rm3P~^JdB_Nzvdk+csl0Ku6IA z?ib)v$l%F(Oyr*lz&1|xP_5@GyIN?SN;$4)^cCm~1168>6uj1S2&d9i%tW}*FQa)pF>JgLqKzF(JV+g{kIUi2BHY3r4v}F zT2HKppEs8j4ELJe_0O)qy_3FL8BM8H>0+r30O(P2$jtCgtZy{tFbYfM?DkcYi^b@v zpVNeocAln2ftsmtT~nmBHX2Bjp+i3fBD1bF6a;+bU^F6}p^eK znkBX1Z^cH)DEw7#R`xW0aigL#@nIpYua;Cyc)nwkA7kn zlYvk@wRe@Q*ZaHSkHLQK5$GWkPRS6{f}!%sWQ$h=(TM!|mjeI*vy)M5HahaDq_o1o zTAM{Gl#U8)%39Gg6QRz`&&YAA0aNEIDixDni9*D=0L!#W%3E!vfc8br=UYx59~Xw< zkOB_Z)*SEP=M!+Vl1}l>0frNl9f?xTK!CCjTd`-U*ggC-CkbE_Y1$c=^a$>v^z&k zw^wU+C^oFJoeF0r!P~!!B{0q3UPR|WQ*sNR8Xdl9QJq8Q5Aa5ZKl(dEMzfn?_4QOPR$M}f3@nqF-u!*+n?}D(G-r%U zIqn{==-c=}Iedu56G5CzXL(?&xedQtWF%o3nviwllp4ZDwxB9uopa)^PrZe&@mDNigch;ClL z^Rn<5)!V`jU0{GPtnnc8;I_D$re-xa#1so3NCScMb=|4m?h$zf#6QRU?iJM@7I(Bv zZ>2a-=pGxUaU~m3q7Ayv+_S63TN*W!DaJKlG{63w_HCPpN3)Sq*ELorB3N-X0v+gH zHk8)6DH!pQ!@)($W_S11aFW5g$>X}Eg(SqU;8J*Tna7WryBVLI8ng~g1VF*t;(;qu zd(O6Xht_1fEiVy@ zrkO?=@m+h(2G#XFwzwSt_CsNitUNHyenvaq+f(3Sy(T{3Y=9_lZ15w_E~SiU$w{&D znwRye-|k6fr#|50{$fU!qCm6%6NfcT-0?pdo|n}1M?_S1SCtthIUfH}(`^kAe4>PV z2Em-!^3AW1o5f)=z{IVy!&MDoT4(W;)ALJ)T_qN^!EAZVib1OVFCUZF5(asxYKjhl zZRz0%I}Q`AYX*b*%vS$_!U;j4;I2u)!_d;jLl= zNQAm{j~?6Y>t08zvg!I?94hmyD)fcx?)18EEaaMM5OSPk$0`%H!4{lLipYv?YO5Ij zm=696$e9N|`w9q3goIZ(X|#l#x|*OAib@|>W~i0AigctR0M5x|XreB=;*-TYbJ}gz zkT)LOEoQ@w7JYF)h-v*z=|R`eio-5{6nmfm0RUxwOC?#9cjG{k!9!Y%y;>QKJbOv_ zrh+a*^mQCLy(BNIFgQ;UMnPNn+PIqYdsKF)mlKt9UKGWVY?dWA%$QHJ=!=YrWssar zWvqD&9+dURfr$b~agQ5)$xQu9ObS-{&u)ltH#1xIGp{iK`l3@R`^lZZf@HbR`0#GW z>;vggaWx@x^~YJFIeCC|O=Jva;um>c&IjY*mjl{Q<8sPVv2x_ICnv%Pg!6==%6*-m=XAtYexteWBvod| zo}UV9rE!r{DPl-usU}ar4B{r4jhHd^uvy?O^|%nxkdd_p&LL-2uq@~e)Q#`RzTrk+ zth%N3G}Tm}&D4S@wSzn0z{lHO{BUbYF!+dgGhFP1XMAh4E93r-sLK8FT;WjrLP-a* z%opijTOae#QQ+3iwL5;qP)C=D+5h6Jni-Gqk`(XPxqHQ+`Mw4qj6_n!mD8W34j~<5 zi_MYEsgaPJMboEDJbII*N(fUiP7>YpFUhD;^?unhyV(sMek)jBAm2i%2JbgR%@%?3 znt?shTF;^m_WT8SG_*|Hx#XQ)Htn9XsM)KDv)y7acSfaB0XOuVPCqzkHj@-Jsg4pG zWJQrxh;oF!5#A&Su!l?HiW#t$OoVFw#NLDn#+tg!&r8hA8ajsk0c8f$5aD&86#gX5sIajFdjh0oOLFN9Oz zwx52}DvnFz=gp_vs%7JXl}GF&7m5WoHTouSUCZS=4dYHTaKB>PS4@cNv%QW zY1y!JQtF+@+ejhFom@^P)uiCQg$vH>R&G`^@n*->bNQ$KqsYzfGLukKa&C~TG!%R( z+*xau@AFFQv3V7JRZ(S;TZS~#>4Co8liTsOkM6#2edYG&W>fwR!t%vPeter%)`)09 z@cz=s_0zl?w+bA}pDwziLl=S)Ebfsfykpth&a8F0SblP+*H;hA_BBjY*zw7g-&ljr znF$CMY=%uoqt*Zb#0(I!Y22;`(vV@-b)*|L)w4QdsUa`WD4lA+D&;fZ$?1|{OQC1o zRY96Kg$S4t)G7}%c zTf0d4NNOh49xrH>$ih06(%Ry!T8`%~mlczCmf-|)DNBX}3HJ5_aTpFfiV|n(q>icO zQQ$D_Q>6l<3KbBKd1eJzVoNdW=`6euD_(}b2B2+6MSrETP!Oi8B{4liM?WB?|T36AhZO7&n4M>)*N z5&%ZfFS6h*5`aV)e1Zq~E_Y}aFEVX-JvYtcPK*oWp~OF(JwQCkR?}#(1K-1&Za@%QhOu!;X& z>kpBBU1r4F7~_bGqCQc`J0#uLSz=d%0jM6Bg7MPS7{JwF1OQBPbp1OjPb0bCh)IC_ zS16nU=w#z3zdgVM&HWTF$Grf)`wX{#jsa*En)YrfmjF2AQrwo-Wz@^{B5a_7$VSv- zhpS+nf$f`lm^BA~zno81cQ|fng02-)0jSAXwSfKC*!Cxd^m?dOOR256jb^-fX;RA9 z*g^+-b^B~(AY54NLvB2Z!)^C{_^6Ny>a~JOPcjtQJVR2|EXD9IIdoom5SgmFBvZlw zy?SX(5{s*t6n-_;~xug{ZVy8nTNeB&qsf}lDLVAB%vi|2H*-2%CVnm>Ufv@?ufs?0 z^kStV*&|OY^5%=M!%b7=;=h+~LXK{>&Oa*-JN|n&N~I7y zJzNi{yJjC1tg!ExYIHTvjQ0WMaog=r2$ zq^vxKh-qdtm?=po0ET)NNJ6KQP@XuBnhBuiv97sC?eT{f5(kzJDAE9cD6`fqdmHQS znznb-0xHRN#Ekge$R~`OjRZjCu%lopJO<@PD8O0N%pxNH*m)M}X2w8;c&<^#9JW7~ z%XwDGPjdPEPq2Yw!F&XBzpSNlc1P`No3yFB%*OUN`D9f;93zy>cCyn+8goGsJ;uA& zBy6diRQ$OEjCc;Z^@KWe?_bK7>VeD#?ibMtDmV%^Utq9xsH`-AfNcrKpoMDQQKE!G z@O-?sHGT%GozgcCr(c>PW)PB4Yxb;qe_PXMi_#1fI4;|@kaKvw(fQkcaha8QriUVp zMPdKFh5*s}CoD&fg}-xGMsj!l_hLq#f3|$<_-(U4wkAneg1e+hLA zTh?7@uaSAqy}JoAEb$iaBvS~ReDB?K3cG@~f6ZBo{`UA&PkY7|JfKva=o(2URa~&3 zxVn?QKXJM4!DlTal-FqJ-~Qe2ulcK$hxLCyUOWxEoEY4;dsb(6CQ@u8(UX1c%iTAZ zmj{=^)7Rj@M13K$PkUjPfA0a|^4YSCI3Xq|RP=-SSVVI-u*(=Dy6NqM;*@c4>Xr>Y z)1;9)Yeub^t+;IsV|9mfv_d4}Qt^6)vj2es7XbOe!z|1PMfO@p==>@kiYM~7ZsP05 zI&XvpS~_S_rcc~O%xK|eb#<^_X3|nTjZIP$ag)_~Web1w2j9m(83GV-bXBU+m`7CL)o6G|`kFT~BpmgxtSJ=1ih|7|~D z9!@oO*O2D0_Il~aW@Aia<;)v@YfSFX8x8Sy4o|Y%h3iEt-?3$k2sz80Wb`7Itw2^W zV@tMK4ps84lJBlf6}En+65OUNT7GIev5f+P&;&i9YMcB$f|01@`A533a>+eSy&dFO zMz;jsDIIfHx`mutSKJLu63rB-#HRDr*A+nZzIj5jO`TGQi)hNLvvhJ-_|votZkG9~ zaF1e1*W6ZrTc^ugy{>GQrMe?RKBXh!Om8&N=jMD`ztG@(^Pho7{=uz`j@|wBiFXC> zJ->{_2hSZ995}z-Z~E8#<d=h=z(mUP3oS13~QDLUkKW z!({0Bokp0iQ%xrkZxXw`r^)d(cwX|3gbnFO@aoLedBeb6Pkq0qvemRt8>x2>= z%u%aVf1Tb<$QM<;p)nO1PF2?Cz|E}K!S$(rj4`s~>WpRtBgWn$wX8KzcPK(b$ zH>WL_rGNYcTU*GaW#a;C^@OjMHn!-`K*F!KKD-83 z06MK%Nm-kZuV5{;Xf)5H?PYN3e!3WTyhc;){^*Gfb+En2X8F_gENkJakiTI6Xn3pH zX5O<9lo9Mp&VcbPc;Lc;%-#3tFWsw`1PY-iu<3b~w$_LMG~dm%Fp6L!3-FQS@tcisYcy1VtQ-=o;s)QUj}Y zZg`_4&Rb*E=>owm_dZx@aVZHy!qx8sy>G8yo0`pg`RH2BmqhJ|H)ZiRlz!)PBPht~ zaRjm@;x4}p8MsSRQ8t2EPe)aXWZT`fNl$ID6cM*R7{Hh~OjgALjUYFzutc7dCkgco zq-)TOjAO~*1a+cbWI$;d;pP`aZCwLm#AN8vOM{J&=es!Tqz?#l3;$+xSD>0*ozf3m z5K7-{Fv3Lrb*$=uArtmbJwvY^g+p*Gu7)P~xXph2eSNix|?c4^Jl+^6sn)#T{_ zX?wr9u47u_hOVxHX+k$gzer{@K|o8(Pj5|odr+Wp1v$TD4Yz?#?bWhy>TO2$?6Y4^ zLd(V(i+vB}2)ftBGoJ2~rs*4aw>*tLnoMIOX~(zOsVbh)rE4uk>XdExk81S;w)`ZW zMpNDh+3<)l)5T5eaoKcF7VCX~}XrW<;^fT1tNa zFC(*n$Kbb;0ZPbfmM-Gq++dAmSKhmn7J(PKX{$jpk>Qs1C5rU+_Ts?t4o#d8AC#=m zk}wI6Py_M`fZVQh_J<%qSd67;%5g8BK!8F(7BIww^g1GWCRjbbwCwJn5g`HL8&9V? z9UQlH1aZo@^09-t3gG;`y%Ta-%;J|--6J1z8zft%BoK6JX@I4QLf-?BbHRtUqdq4i7R-3DW<%h1lau{Y7w zv2%gB)yCuVaWm-w_ogk_UIu?kpEEn~6TS-^&kt1E7sB!~c{sguVyk2|M^q~9kk zGjvw`5rS~JlSf5-FRQ1P<|#bkHhgsh3|?vy6{!glcN^>*-D0LBr(lOt&q@;#Be4!? zYFJb$&^cB_3P4U3J2>rQ{)lQ#jJTLqfq-eWYh~N}_3_ksO2-`yRrfQ5A(B@Xdi>Kr z?iXo(73v5Sq#+pW>4xvqs#rX`cn~DM_VA^PRviVSx7U^H-1lctP!5W^EC$?{P)o5B z)6KoXdum_C1lUArqdjOq!sp^pt7o2)&G=^45c8kDx}Tp7U>$r$bo|CUQYJ+qu4I31 zq`44^vU>k~hG(21>;axEO0Q=&V5oRp)n8&0`VhzMo++>I^> zV({a>5es1}F{~T$PqpY*ym7m;P`Ll&$2zDcWuWF{hq`?7-8W^4dl#jx8-9RFhylaU zL3D$cJnBxJ;J_qP2n&1(PL63sP##Y+_CcXY&Gk77=5vc%jJ##@SO=gK@Y?90dN)zaAmhY0 z>Aeiks~ZRCt(rOm7r%W=Dg9V-I2BmSpIPh%0}lc)pp3-lfwUwK5TydvjWSyPIB5H` zx(G8WlvM~$iw|GhBCsYwPdYFF`EuZZUBOOqE**pMgYLRcljp&umU=>=ucAE3J7|aw$~aqE`}?pUuEx=XXJA`TMro6Y`Iro(k@)y<{K# zey9D7!<&=GoYa7RY|py00-c534wyrL5$)IanT7oIk~(wggH(F~6F*kbdrQqw)sn~S zGS%N;m;-rz8Mp{MJm>Twe6KT~9fwjg0^mFjyR8X5QDh_wW=0s+65Oev9hS~^-I+ej z<@SuY%uH0A??9i)i3r5ZjM`O?Jsv^Hu`laG>&swz(;uOigJG~|+uH51q4)J(|nuU%tuetIFNNw-x~v2pm;yPoDuV`r1;v z=g4%&MBr0R!Jk`L*>lmnN=rN^e2=Jh4xFhGubqE%xD+i|EP6_E$In9jGhcE@OK&SY zepR~jrbY`mU688Jul=dGpl#<{#%%pFgSpvbOjFa(dkY}?nkSW8rN1d+iK^;ekZRT7@gf2fl|$She?1xr*f__^RD>e61|GwbU*Lpmxg zNYHH{wYtbq?bptIK4BKA(QKU;=(=swd3C-du2mJ=#zt{A6^RGq4}7CRZ5}lN4ktEM zzAm%z9&F0DM=bs2#ml+vrAvLLYiPpg z4#1{6TscPquvJkpq4)8mWbesdHCpwIxkzY@o26h7#>%KK4a-2>1cy?JOABi+V$aNR zy7G)G`L}u01a9fSceLYBnzDLdFjq+T>i9Iu@qd*<6G0G9GVlkgFB;MJi~ zPkf`&6O>;Af5W?`R5_mTqW8OvcU7M8vnXe8(T;18M`5BDH#@J1sc;&tW7KmDSznu& zwi|pHlsfxM5UP2TRf$_=@x~phTWSA(f1+O-PSJH--Ba=I? zM5oO53cz{(&zWt7DN2((eulv|NO2eGz3v{>CRD_iWD(KCAHemrms!UuYmS9d97Q!$id`kv4i3hL!;_hMarrmC z=QSb84m7=7G8pc(0|rs zcvW#d^t4VOEw8N))jqnFO$T}{bdEHYhOcnoR)Wkhfa{pEa4*_92B1!-CXuN%^qvL1 zvV{$!V4lHh&jZFsOmVKIR%`Z5nuB}JjohIS$g#zOs~)QYiEYDY8Ot<8c@|hEhHPS( z+z`KN7KXlHERiy9tp%o?SCi3%^Gi=ZNwf4Bo(SDpwkamc;K^VqDp?<3ej`U&(}5eb zcV&dbRj6m`BB1|#B)l=>dmt)VIrdAO;PpARfoK@_2C7kHkuA&X;^mAM+6$?E+rFhh z%2;$ITkjjKiHv5bi=Sdv`~vvy;&@}4&xe~F@RS8l=kEDmTRwIdG9`#2D*Y*5aS0xA zQO)8sZm3RHAEh4I5DvQWYUjzA=-hh2ceTe>9XCvLp7n1zmr$e{q$2R>UP3!Iu z0+q!b;644<_I)tDwMP7rkmIA5*J~}KlQi9l0ulG!E@XW>@b606Ap(5KU=jf7`?4eH z195U_wgBmin)BXrSMx?-33u2;xj4r=-1k)xY3ttvJ!n|JMZ1qT#<5e2d=74)& zu&5C38J4yNp8Zrg*_tn;@#6RNQxO*fK=~&}M&MfJ727vLa>bODw~)(^)U4*DItrey zy!fwE_#VlNpiBvc-VLgL{~PYNO_i8o*GP8G>D_L4pEk&1w+sNNAk-SwX9fDsGrq%X}cY5mUD&c-!i+ET%>E{?AHZabJx?p}CZje8z3#=YFPfDvSbE_rc# z1XWs2PGba&d?xAipgoV-{>tunR%v+`Nk^1~qCGz|aGjua2Q#%KOSJAgMt-XpAL#Z< z1>Sro^#gN;McfC*JF=P?u8C@&N~mS8tD?cY@4pt)sAJhJYGL8A^=Y%XXh;eU!;;IWU-e?W{iWlxNeV9^UQ zwY%))lE;(9`!M#y^m%zIS(~8`jx#ZuRkCmz0=59jRDA%;6Y8P~E+VcEWCiCj5@bWA zf%?dko~a(zvaapD8%+^%aRh_;SY%j8B1jv`u%bWv*6k<@ML^DN1g$Kz$Y}Q&T{2Kb zU)w#*GeD+|sj&5bcrijKqSy^)WgBdMksj$|%S?E`3o5@Kqo-cesZ9)i9d@oZU_bE2 z+|k{T{5S6Jv1;vT1w^!1*30f~SI#m&J|=k1joqhK5~2N`39jJPwZ_&kaF2l?|Pq%x|;^Sjh5V>Y^%K5dph=ZrkW*!ahV*kUT#}kGy7h8`rs(WGi(jRT5 zIM{W$3+W|i%l|>Ex-@BEr7T=XGT|~lVUNO=;=XlpQoiV5zU+2`b=;(GanRylp@0<2 z7-BC4Pgn*=6t$3gLL}pvv;_sEjMo{`iHwlbFk8v8ks1TR_iw7~uJNWvO2$zi-A!vB ztjO2YL{at%6gjcD?Y#8I_qO!(57Uk}!EANSOa&9->uZTP`P$B~EP z_$Q>w4637F8QlF5vts$opVVc?T&)-u9<|i}c}DxI@6a9jCLiU|h|mB}Yx|g+lRjZ* zGuoef?i?^Uy>Ey6JpD37I~=W?(S17l+qmQQ;Xm5ZquZ4~9(J5;oF9I1P4vM+%0a^m zrT;)-FA`l8VZK5$325>5+6|V~5cOu(N_Nibr7L(8x2B}JY#e2NC~BFf8qd{R2NM7V zJs_#8^a(=GQ52O-h{%nq(Bdhy+i?|Ajb?~ZW#@TK@5w^T6hP_38z|r5 zdTaYLkjF+>f%Ht^ngMt@Srvi2W?{qW^;llHHtbdGoa*l)T48KpX=HiLt=Uh+mfyg> zV-2MuTQlK&^{2=yn~9T#o4BAs1z#HRO!^cNUG~Nk-xbS+aA}GA1bhUWw{Rc7+coL85A_4u_jP@8Mr?ja=uLRcer-E{ zL%QnfYwQ(rcjd`(^nX<^FC&M;+1S_s$OQm2GRPZG{}M1NnkFnzqU|1;$PeBp^_5i9 z_7avMKnM^kBBg=?zdXNnwTG&X6=l^YiEG^G+9xu5H45bdx~j%R8MB|GqRak}4Cel7 zMrse`j+hFj%`B*0jT1T{71R`vKAg-Z}c%RI6l5)U2bH72cc z>v8_Y{hq9)0Q2qitsdjfA=t6Rn6tmQtAb*|i6n}AoKTYfEB8lx9?@8)%%QQ3d; zQ+nu`Os=oYMo6rz23x{h+A}C(Mc4J9%P?|bmF_>iW_%W%Qd<4Rt8EGz-4bEp87fhs zDoax{MZ~60CEV)>>QIXIIvU0XW%M3>*UjiN%0A&PmG0eY?(b82t9?aB1m9}J!<}!uzH>owJdPnO3d8j7x}9?paoY*TNFQ`M zpBw1y6)~N|F?`MiL4)2go92y8bp=E)1^8bG%&>08lDuNhR$6Xw52mT#1t+taWcpu= zot=_cfn`>Ne&*}{^MEC0JJrTtS`{s9-MwSDaiQw|(~CB+10T-11gd=4gOB*#Cp%JC zu5{b`jr~o&xcawj?2~+#B+o|n+b)ytUzU`E*GKxZN+ac4&ktbh{?)M!Gu_t$uRZ_t z-ps@7KTtS|F6JaGJQcHOW4HVL;?E1~e{=w3Jp!<3 z_Kr}6LAkA4L~Dr>Sa~^kf~UWf8oTtI^4fZ_y62%hAtjbrMqCl}pg8a>2ofI?ot&>~ zBl_f^*}ivsYjS5dIGR#U#Xw$7*|O`q+VCrDSsO8bW_O_%g6_^@o^l4>VEiI45JUSW zokI5F#Ka=#qrNh1k$@FVp^Y+0;pUbTA3C@@H*OdzZ9AFnx^RbjG=I>{e( zEez6Vz`u9jQ6`FM$fLifhA}B+BF8iHI5&7!an#K~Bz7hVUeT{OA$>`?$@)_%H}jy^ za>$XP$d4Rj(}xldMHcJ_Edyt2>MR_z3oJu+{@z}&RSx`Vb$48Mgbpwhh=lPg{ph>T zFE_L0tMa+;L4n4**+_XDu9Ul0XPS~~jlIRaPI7EQifFrI4B5o)V{J@V?y|P>s>Wr% z`=;Gv*}-IIB*^k+)yXetMWF1c!0F3af9vSez-e(yjxVY=wLr+RXUu9F$tuaV($|<| zAA0{h>5^LBH(Usd)@yanGpT`4ndOUBez^;9w_MtN{&zy~`GKzb5b|S|^r+Zz_ARO1 zkO|4Ww60wCw3A<#xvTYlX9386Sx?Efg=vA8Jt)@+fj(3mH9=1~4?gr#TbxBVy24U5 zQDlsXmlX^oV?L*zX^Q&83 z`^+5kR896h=b!lrEj<#tqnqzv7%J^|)hU);YOOzKVcH`0*r@o!++2e2iILZqXNt5x ze8l7`rE8a?GJMs(Aiw*$`>P|H+p(&32h$3WYtkBZf}zv^6woU0V$3d`6RR#luZfw4kgrC}emzaeZlY zw^wjycDW!6+hSYKxmC<)RJN}s$)ObpndaknP0g`tkIELbmJ^xmZf#Dpalh^Pk<+#z z>HR$2UeR;FYvAFKkW*X38-uh7zx%w6#tRR>J-O9ry!Xm@tKRELeOJ>M+`_8pcwVB-m@nh074gq zAaqyTI4|DS-SlD%2F^obOl14Uh2s?9paxJ>+NlEog1PXhw)50_gjO-#p~jF%R21b> zKuQ0|zIlo7*LL;BeoMMKlF%q$bTVC)cT-upeA$+>w+1q?7 z`AWZA-nUe8htn>M6&LAt{9+(SGfY@)I|Zjm661Hqp`f$i*Mh(^*!gOYVv$1A9 zk@6*c#V_zV?`GIZ!|R;B<&_5$B4vN|;-z1lygHczAP}((2mpwG3LjD`jgrf~jykVM zF4>^|-BG$@;Nzr@}L7pl9EaL_I;Mw!{&6tNIVHPH?+3IEW=L|WR z^LV(3W1K&)sUe4>kS1mE_=^tIkedRmwFj@vEi~bM!5zD-Jtz;6(wXG=x{H|y*%i-S z??1LY)2|8>8i{WE4$a(1{B*Tg;Cr-mk!nMs9x%eXaqC-yPtc{4VVL{F|3kt zkW&g$&Ml`d?WxVPvjBtk@P18{`fE3q>>qMd<|A)reRT_d`2kA$Mlt9buPV2kVG=A< zu+K4qySZg=^W9co+~S^G+b8DN#v`EjrYXb1!SB*adVhKALrjfs6ZKVjo}cjZM=_Q0 z-q`s$!6|eVeWp*Rm6!>1$(e9_O~f z882&lkr8`etsrXmlLn!`YIplnI9~r)s~D<_-W#0*kt)1Jdim0W(mHk&2KE z;UVo>N=qcm^^2fB^kxx9+;x=@cMD;CAqqf<0g&~upc0CRW2g(@NE&^v4-5ttJ#`S0 z<>8;*aw*XQ4du;SEu5e0arZSXZ~wYiVm59E%i#Bs^RljmNWOst-PZ=|c$7^6ll&U{ zCMzAfy0{)TIN0CORJ?0(vshl>RbAcO>%TjP_qz{rWcp}!dll|E8cQ*5!FRi$U5WO-jMQPX!gA5m)CXPZ6A&_E121x!!qqZwSSspNS_>A61kOgz1gt9z zWMtCu;GR4)2G5tLa__RGkQ7s41=9W|wTK)L*V|=m{^2z!iL^LmI28ppC+g;xVko-Q zC|q$ijjSau)(9aZbOjk*+#nJKJw!$p9g0p084!QRWy6(R-eI!VbE-)l9fJ$=)5&mS zM5u4*uO3ID786Vu$OQm1_OQlzj=;vTnN=Eibw@#ZD3l;`&SRT_WCa93EOG6e*E!a# z$FDj^3>u=aLHzvy7;cKevPD7&oKS=$sncJg8m)=64^IFLAQlc1frK-tGH>UEC}2s9 zn3=;>0Tq5u7wv5%Cme|4Ad>02cG=?CAN8A~xKy6hc3V2B$Vmiat|R5aBG7$DE5Zff zxn>tGw`o{d*@s;{Yh<}pyh^eZ(OlMg<8MMu>4rTZ}88v zhP9D&`v2*0A)6tSXLcNiq33fmrIuxnRdd#J)^D8L-T&F}pJr>`;h)>zmw!%vx5Nhg zcmHS6`jn?BcdJ>k&;&Yzu&iUm%$f|A53 znGps9N%>!)P!VRHbMY~N@{fqwu^6A`r0h4T3Qq^*oR)2bo2?liHy*v$DDz{^x>BG# zBd#*UkNYT|A8?IhnLp;2lkwkL zBo7?@P$9glp5Z$4{R+!Co|=P;>=MJ_F6{74%lh&{pANZ4b-O-q^3ba@3wxW7ryYz3|e`C*`^Lk#`(V_h0{2zeLnOIDOG% zNZeS(I(jiFi`NUACeC1q?`Z7noyAL;@ND35zeei6GCVTozsUTZ`b$Znr`^@gM_4t7 z7}FP$_wG>23*wPyN88~jdBFfqE_LE2amy=fbA_AeHvf*EHPAGOj39_2r7qgKfdFad z3edy^MoT~sU{g*&)5W|P*JwbFK?e#XC-EXaI{|o^gkchJ7r+N&9OfG@KaUUOK2gHq zdzFieE>>Y75(p3&9X8UWZ+-J@ie^ASFv2J$SAx5YlG9pM`m&6w9hyo-M9bDd! z=!#lYr9?%>j3J}={h0u87>-_Uw^9Y<(gRKX1sg0nJ6C%~Vs%NF=$ZQt*3wnQky3ER zhso(+2}LN61e#Tzqgg0|)clTDd^ney!c3+B$eMr{UZ6vu$eK8ySv4jCpTW$)3~zW> zgc9b?GhDnr4n~oyAR=ci0IrBS9_LPZUeU~zw&}}CSC1|2UKorij)twgR6lSw_^%}P zSw1epm@>w9_S&w=zTh9R3KHY{@A)t2o7ke^l~+&C7bO_?EPb`NS_8Waz7pL75>Am1 z005CWip8T@NWvWCVWwa+wDDEv!;XiErK2EB+!%mg6qgmj_IO<$A{^%JOu>2=?M1Zh zFx~Uy`$g#A7N)pIEl$8cADrPRzM`ie?-Y+t7x}t{M0&cK3Q1$9{%}vAN`{+4+qXsM zL*SW%NDC9gimfeqkCY2)wZU593L}}=dgZQ1nx3VPOG9Sml?g|Ih5Fg1Wf4jgvC+Y? zEGk0rX2GS9@#WHxA6v~mPRqHq^>1r~QuRw%$v6et< zRD~UP1dYoYGRLWo#dW&S)#O|e!gfBaFqL#g9j%xsOV|) zxdf*K!+9qcM>)PM<@i;w>0n{PV!!846Hy;?c=~qr4rco{-@m&^IA8aN0{AtK?u*%I1jKQ&z zxR?PZ5AkXiAKv!#>Bh0Ta5ECA`bu(Ir#?m;l4HIgxh5n%BEZ>#E1vurl1WJg-$93X zA$mhE2CAg4w<`~IVAxPZOL0UWgQu+cM41J*;Fr+u_{KrBc)6eyG2PNTNFwc4VnJD; zu+hML{Wwddxx^~S<Up)}vaDP{(vbXhKcZQN1+c#E$rl4~^Gnc<7cUy+`Gh<6xVCS=6w2w+! zd6=oC4}*WUxA670N!_t;rBcPrNVe>5_@V@3h=Q=!}giqc^|wc zU7hW@3N5;JyiNR{a-1)ooREq2ywZJ`$DX@$d*sqTjkm`pKmatR?@L+@G`&A8YR4dv z6rU#GywU@GD(FnTO`{o9c<298aSe-$18`9nk6W3}fmxCG@>T;}zn}$WK_S9CL*^V5 zO9)Y_VKmqDW)K#==;&YtVxm5yz9VW2P2bIKI`t-1+!Q#Avz+^!^q|~3SWfV$5@){I zY^L+A48zT2V=aAssBSDx<*5mc*!x^};PTBygYff~mQzgxC*pHXrT&P2-ig-w3;!QJ z*ibsvZkbAU4R5CGp!)+|21U1?D$5+O^cq)Ha1Z1lF37R!l-7M*6l8HNUap} zlY+Q5kJU#rlCM125A6)dJIoPCEnYI~!?R>gWU`>UDrpj~&$E8K3DQwY8?NvklCtVn zU8q)kDCZN1x{$kgW?zBCoMJtjbH-=Sy*`SS;zO1lgtc}mmB|Gcc~;gcu3H>k>*`o@)8Bd|CUWYh zBmDSx<`2hjvp38s7)!ZLrt?nv?OZup6GJ}I8O!DyEKw%d-jR6^*Ee+s*N(?75grc> z$h_G8PWp5L(fD(WeaPJ*rSs##Hvk*}qD?iSI$dak+GwX|py(F0NbU0X8M163Bqs<- z2*$(~DY$xTiSnztR#haM??vjJ(d>!WqK2eei?lWK@Zls0sXXWM5^Pgrh!R+J1%>J? z5LB4M0hX+_Cnioh2f8~G{kSxwOKvVX00m8`M)?rhDO z>X7B1sj5^BFJCR^(R$S{r4@;suw#*lKriXp4e?kzYdM8i0#(qCww&_R-6!%)8VcX9 z0IPZDJZ`#^wn~k#4_5W2NwjBTBp=6^?RQ}VTCoK=J)i3B7v23Ovt)g4z%*>DW4)K= zJWd`x;9HG}GL6;tQI)bzITUVm`SWER!tBh2{sJ)fk(HKBr(%?oKYWfGQ7BT zk(6A5!x;uP%IJT~<=kvw8p5z~XOay-=qLB<>$x2nM{qHa1v4zOe?z!|m#lvZ*L6g5 z2>_tZ#grmNQ9Ol?kfm%F7*#Cn{k7G>W_TgC6EmXEhmi%=4=eX;Y3Q|0Vv!Z z^M1`fC@cv9#Q{S4$QvAN#=ji+VPt#f)2VHTF%uT|mp%csM5uf~S)YT$(Dyh=U*rwR zdSn^#sMIyeY_k%L%`;%i(l4SUTj#GlgNg~f_*&_qk$e-UFah76N8IG5^q1zeioPRA z+0*f+We~gkKy!GxRrH!>&z8}hoSLS}^b#gXCa1>BG|p1J)ZK|Jh8s=)bqe7C z*mUS9==I1{YUObBZQZMtNu@Fq2a>?x;;pS!fzWJgXEwM+VP}rO4@f+#9Q#SHqMtcD70Lu7|ngXf8o#Zn+JCtX!{PM zSKe=}p8P!fQ|5N=wfS2QWPew2R2mO^kja4ljG~#nsSyS2%g>*Yr(zp}+=*lw6@lt( zr3E2T)|F@%D3F2uoYER1o#`GP#fe$!gM*!mIe@yujyG8#X4%viF7W>NP1XF5cfOh> zOz)4RdMDhOQ2#M-A^MNa_onLCN(UOmzYZgPc{UFN+7?`&?Cca7)b(Zb#Pc5x7ZeY|$+2+hO7)-Qd;x$3$1A<-B9T;R4z5ON@|MU+G@B6ze_ z=)1dMH_QpeMF@cm7T)O{4|F3P>YEB>qB9OE)0xCr0QIg%Xz^4!e z4n3|09OzL;=qI<52{A>M7G9T$sQPieMU8H+zb#ce!HW*VzxE{2gwOa9Ux|@DEj#sB zLQVmMo~O3RqWxW~#7lEQOKnN;a-aG$)tIODztg6~pOnS7O*4}-*DrGC?6-CXTXA-O zcxrV1S+uriZ&vhTnR#Ga9AhyCFvuCd4It=#XLt7&c4sHMd&doGssZuvNf(3+kY+iF zih{9TkXn4(GmY^80JZS%9}92<+b&`#D>n_v(=(l)uczY3ftiAzFTsRI{j+b~${R~< z^BdL*K3O@DD(Pb*f0^vZ>I$KEFf`UOT?9{+=Iq^c0sH%p&)w(w^5nwhODCYklAoeKy;@a6*QBwtP@xK@Jm6jKaF7)-KejDeRZIZK4=My{c5 zoKI`-(G6GSw}bnXqNwK1eLbyA09=-+3dbiH5b6E{eVVW03qaUaH{M0EoVf*c$%`h_ z_2H)G!Ky8Q7`rI-a#5yttcE^P>HIbe=Z`ptpRlTXmB8$XT?%a`BF-$4c2Py=heYg9 zk$*XyK0*1&JuLSL0-`mNK417Lnt=H_VBsEP`!oG7I46CPdACX6{x#N~U^!3iQf7?n z8Ndi%6uS-=t+j{Ln(x8ZbLXAu_vqH9g)=S<{2RZg*8gzwooS{_QFNyqU;U2oYFzIb ztGG(PqAHY;apg9l-_9OkEfHW}_qzU9xNBWq4FD|Sr5wL@B38p8GFF%{icaTKw*C(k zGU8y#o?||*r%UdEKaK~RsYw=>%bML_8R5!vD_+$MK$%A6-)c)5IeJ!{rrrEOM(N~g zwS-GhP4b%F`r_^Q=%%mdub9d=x}N+D0RmbHRse9-yAT!&rJjQR3JgMFl3WauVq{Wl z1J$E7$ln+>37pJZd6{Tu7tDk>&l%s;-%#_-waS_uxz9RT*jQ1I){}X43`)oJ=xZ6vl7+Vd!5C4~WbU&j{(Siy<7$_%`pH%vAOGE zO&I{fz{_C|{cLEgu<&Kj2Dz<|tsU#;3+gHOwfltuluw8sJLceK);@|V5D_F8JgR8! zN+ST$fR^!0cB*%m=twMO%uQlwebCNu%d|p=F`*uLW=+NCNduu*LEs+Gn~`@)&cn!X zK~B8sbe4Ie1(a*2D^@LLANEvH^wtpH!|n50I%+#`>skh%^2VT*mQRvbup?B2`i_UN zizbJ9r?8Hv%ET)9%!T%S{48X-*WcLSs>mgfy5Dh%QiK*B+Wfb<*4D8bHnURj{OYmc z9z7)l-Yxy&^X;>n;;tI|hs#&&o=d+S>aGG{`N7VWa$l3=S}Ahh%5hj`eE$RaRRA7! zM@|!p14D7GR)PtvzS;ozl6qVQFH15S6JQn#Q;22Eky z%DO<9{3Xoz9h;{>=VZkArYjJscO`EdCp6IVkyqS5Ao*^n?7pbAyw%}0S^3od;N+|6 z=kE*{GT0eLuF!e8?0R@kl%%spl3dp$E=`;fqp+Bvi!m8i>o-tCiogewnC19tTaak;A z;$b!hI|6pQ9P3ifxnv2gOC4VVOR0p7c4PFN9`Uj~i7k#xo>~dMA~Nb{C&3rp??7b6 zTQ}h2J(AH62J;0kUy3ghbb)xe)amQu&f4(eTRtdoGHqwoMBuH`V2yj4vN=|Kd1>{2 z^0^-eZ6|VnJKK}5SVSo6{CI7Bearp6&05_aviDEM<+=cca(o+y`@)D$N&~H69MucD6~TI zp~3nsE4_y?L+E?KI{p$LABo8Z8;soGtMFTu{;bWYhy%K5RY9nfc7Fff8zXHhki-x69DriDcr;_T}3OLab#)}6on zSA8WRn*O$SXnyoC)#9sS^H-nmF>9lLc6fn0xiL@dqP%KS!kJ!4)Ycxo7`&5ka?sFx zFndb;*pqX0XqDV)u_}(a>`_gz=(~KSx|)5KLb>`Z(A26>)V;{!iYWI1Mc&jY*T%5y zo|sGJkN*88>Bz;545q=OU~m~*MM!I3PbotLfxyKo$)@&5PLt3hI8y|W5C!B@>kv4a zlsSMXEEmx@#Zbx=ZP9cux@TKQG$KjY^FnBLg{g|JB0|5sWPW_tQpDFrXzeQsD$0#N zo4H7ut|4BhbeX*FET1&<5o9PE&F@HI;%B9kmM)p!y&hx)B$E+}rCoK+Suls|6Ju#! z&;ze~R!18TrWuZWCCK~=p};k*r-#x2HFn7mpYOb&gfj>&pdPCcYFV?nviz~)0;QzW zMErt|=e^q>R^#%QC4hd@5x2T8@7f!`a_aFNA5TXFMn|+<=COYBbyroNEv;PbRmN1q z%P=CgLCOA~Mtv_sl{MSq2JdRUafkfkgP(i4g)Dacnj|U*PR$&@DJO>%#SPV}^3*G> zCd(C!;~MQifC^BmC@9jopAf)=2cl4h=rL;)n?NL6#NZ{j2!UZfzR!E8HnBjAf|nOY zWf;>`yw_Z#$zU9rUnx{6;md?e{jB@!0zVU2pYc5PW(N(!=Er~Q{OQ@nY$e!Ob*qgN zt^XLxQ2ghs$*UB%ua{0BHn)ra*uLqu^Emm}FaAx0bU-PM6XGI45@chn z8pLp*^nv_rz7nt9=0-r49nQlPpz;?A8OnIR6T_9j7Z>r)NQYvYn~d@DN*G_HacDLW z$JYm}^dq%$$qGNGyZP1KKvj~-oAh-SJJ={c8ygSSI_%F}q-NjwXy5W6_w_P=hp}AI ztlj>u%^Ug0ePr@{d?W|o&9|?vI|W5sC#69x%JqklPolNiOTOKFy#SMkV`R+4OWnOj zl{tLtz2z(bX^WzU!?o?4$19~uclU2!Iw>nG4i`z4>V({@vj27oJaIC=(!$@6GyVgG7i`cO zkKx4EGa*$kiD5Lhx^a3P|$l_|93-aPWM68E!riu>yXfLR)?>pp~!Iq8+f0&oFG&0`3 zS^^&l8w__ntan_Rl35O||0>yXeT`WWY-kyrOVz6a! zoZL&kNFc@vCzY!_bw-XLhpXb0gFDL6$1XK#%B@KV!{K+4nwsJn!m1oIpSl651es;t zDK1b1fL#6e+O`HVIvocFoCWJd_OVQnIRWK2ggi_^(u_e<@o0S|eJ^Fe3vmua1y$Vq z+?PA5lg4-#p~rUOT{Z0@q^4*u9;Vl6p5SMqS6ZO}fWGmKM@(fI z+L_we-&?jc7xv~~j!Xntj$ssKV&GJsdD&u_gxk7s)cJi`USifD_IlksgKMg_bB8ug z`GEE9jY@pY-vRN%lX;bmpDVTP4K=qzUc^fMxZ56bZNK#7Hvs_Q2LdQn;1(!jse(|T`nHgc60^^d#ksk z5D&j~$?*U)!g6snj@~4OB>oBvy*?bO=5_ZR)sW~?nfR?$sYbYGGO$r!hxo$70V9$a ztQx0KwB(ozAEJffr7FHX2J0CRRNP~XLbWBW$`t0#pB%nD`Db`)X>dBw6j3ALxwj!} zze!l+Hg~B%>6lG7kvZM<(0KbQLmbH$DGH-wNY=ap3@&co!=yBFE~w)sam!E6oIyZd z)CwQOfj}xnysPcss>4egguEPGt+wLxa6uGToOx((;|3LIztP``XXU*q@Z|6qi%6~I zvj$>?C$?>?`XdOpY1?kY61j8`W(JqRs1nZWIWQ9+IM99^9H>^Rp?X+E?sSvW6SM@C zu(t_3H<_;By^{O(G-q&-Z|os^S;1Px0ngkUG!K z+ID4#u!QxO+}U6?{rfx2p?ab8jsVJCGt-zRRFY5U(!{-^O(XGHDQ!l|b` z8Bk0EyP@13&~~mRr*5+)RL;)61c~V$F}Wk5jPp3(Q_~3+yrwQQ4bYo2nYkHn7_^4b zpC?PI{GCuE#gqj-x;;uP8WYr4stf-FgEHGT+{)DXL|DdxPgrD z35-A0eEXb4*Q!2WI?POhvFC?QoG1QBOgO&3+IObz(xzF6&B^7Hzoh>_VJ0E&zN^vh z%ALc^3RR!mW>>L)ADuJ1E#3z$66XF?{97)WqXsP+Z4ie#M&IM_Ne;DrR8=Wg)q0oj zFQ0fu4+0el>`2Eh#cGE|xY((f2rwDDNt)#=Q?0;5T2^v^&j1zY!vH4E=u-^_E3+}P zU{VQidb(j=gmKJRForCWEXeSZf`b?Wt%wn#h9{gr0TMlgRSSYZpksf{)hu^fx7(&+ zt}cOet%`?g&oG%g^G&d7ApCUB%QCjD5dY1yf`t9jSv`ttuZq5|$F^-|KDESe`Juupsu!Rb*<7%?-RQ9%i6H z8}*4B>Hhh?5#{3gK~^5a7N%XHPj4CnAP4}1s1=w)OAd^TDCU(jgK{w!O)BbhMgm-n zDO%fanP;UMQ5ifTbP@k#m zFtaYa=3F3qErY%#Q{xd&*&Msu@{+h(w`ltOj^?1nZ-=vWHBk~5IOT$ds>s6?Tf^jG zjr>-g-A@@im} zR>7BN!#wRVf}0(~yDQl}6^a-JG60|&vv`DlrEQV%;RF?!P#x)+dzLj_eXG;YY%`=m`2AmocC(u8*i>3?iTcisns?rATi(@~nE>>CvKiV?A|( zMkZ2+oPkjw@(AKE*D-($Z9Ycl&-)7QFyXlCy|N)B>k|0o!;gm59Gv?8oIqwCoYydG zC%7TbL+|;8$vd!repxFd+k>4=?NG=y^EkWpClc4&K6n|bcq!hvM@<&pjC)b?UR&C` z>ZG9q|FF~HoyNZE{)x=Utv`&q*1GtI{~Xk ziy!ZL-WNK`7m@Wl=yMhk68Kd7>!TE^3u2H?@}}vgGStNKw7$;tG^D#82om_oh`IOt8;`%Z_<-{r8lW=Hq`Kyj) zKrWYaFW7{p|J|^+ny1F<-1NDf4`T;jT+!@Hr&(AFubz9i4Sh8S7{mLF$KG%yNmBZ8 zG`J|E^?Qar>grpC*}8rz2TNw3xvVi_I;4lrJ*b8CWQD^4L-b9Qaf24N2gzvcRPc6g z%$)o=jE#gsibm)nGOsri6a_dTpGDH>Tv#y>bcLe;9ZRG5Fc^7%3Cvr3$C4}I~n z#Za99?y_-MbYw)p5+t?7lMa8J?LK6FvFL4=P646-^)M$=SA7Pa>xa~f9(qiB_B`Io188i*4o>>Kx!Fl0^p~` z&tSzv%Ei^`$fMT<@zrA50D+4*Kv18R{PoTMZwg;)$M41N ziwT)mvl$QY=eDT%Eqs%1c+or>IGCO$`BrV>^{H*>HTWkJAItD1x7xb22AogWY%dZ3 zYT*PJVn@fA@%g)Y3w;5l6bjqU>__HNORKjrT5%@J;h|zx3KopEs4Bb9n?)6gvD=6tn|5(56j1i1FRR!raq?omTVcAM>{RcccBqQW znV&x;hH&ddHp#}%Ax5h*E6IbK*yqnu;zM#jbKVg3c|z-YKQI*UIz63zXN?PXs3pGx zl9x<1lh3oxfCRo%>28-FU#`*!F>J9~aK?p-frO(u6-54P6#gYZ*F1)-PAP>Po#B+* zj0xg@AMrE<%YvlNUiaJgBC%YD($m=ZO2KO!=U~C|snWO?Ok7fwq@ZxQ(5Y1=kP>I^ z@+t#_>NlzCi5kMZYuqe?oyDtHHJ2|+#PkbTK+6VtM2b+EOw}p>6_wG zcQlne(6$Rsjj{6__LW+Rq~W3t$6p_Mj(#@Qv@ZAF=T96ZVQ;bDJSqJ5&!&0qI+*;Q z)fb}Lhqj?Ap1#O~!hna0)^bC7)ri{f@3nV%*qIjOeT>y$g4mxi* z|4Uoj&?GaGn|d{PJ+TTkdbS}hi0QaAT_+GD+4IU-4uqV!F^*Bj)2#y)z-F1Zf2DqV zT&JO7*9Fru><>jFf*=t=wf#ha>Z=pSVS}Pj<&`$eJV%BN|2YTnle5pBz3Tdt^Vjsv z$#IzD&!li8|D_IjpHm;wpYa*hHMugS&-TmfvvYmY#VwS4=br$3h_4O$8g6J@*l$Kndg6RqpaHQuBF>GrRq!{)J?zL|u62l;1 zZ34?q$DkM(d0)1THCl!8fYeEi*sOp>F?$>_Wmm zn*p@J_8t#^2(LD=&}Nh0`>7r{|Gc%ZZTo2{d>at)NQd3b(}?TZgmu{G_-7NQ9D@#d z*%HdF=|iIF?){MUhDuHW_NP2K{CS4e>b5d}=plaRBBpMwn}6N;rx4TlTjy=;p-CaP z-(=_1@tnNus6#|cKP7WioJ-foR!?&G>iSa9j!7M?YC{4T2%2;hzD zMV1oE!sS?`wRr;N<%Z6#nGezUXqqv03^Z+uePn<-iW{g&CS61sL_$a`(Rvik{uWT>OZh~HfjpieA}zrh!9 zDM41}XaWF^*AhEXB{2k?!=?3`FZ;|bB|CZmrFpxjER^JWF;myIl}qWO*C&PH<&z2& zIG{!i3YqvQlsi2}%a)L(sx`SVaRG95&iNlgV^dRVu0Kq#}TpD-bN# zI5p;GbqUfVb{zxKOLQR!9?NL!__Z7ju2cQ0{+Bon=(hZ`{Tg zFh-9aA&zd?=n_Xa(j6NeO1G#R-Q6W2NH7QQ&P5K0#-r!r!nFz5Xvw0W04&ad5jX-yV5?}A zFg{e_{geeAyE12kp8(a}2+R1slTH#h8e<3_ZJx?Ur=}IOvA40q=3I2lhzcV)Lo?6_+owk;mXw3>3ELU~5>N&IKymHu$&dW=^MB87Zr<%P{};TxsSc%( zNskTnWMim|*DQ$>H&`i%*HgcL`{ZwlXxwmkmW=M3v>!nQ>b^#h2@Dxa&TaA?gl+=% zA;17M8is&_X)AGc%4GFAN5Wz_*jgNoNM=N(S~x|7nln^87e4FLC)2qJ0Rzf3vjAvz zB-}#>;L3}Sr)4IL(P2PC!3cA*aP+3qphiM`-*{pP6$q^YOvK!hHxp~LXh4aIqanf! z=!ZmaB-M!pHDmQH2KrfA924afzxWEPWv_(LTTn`fYc%*QNQbcGB9xn*9S8Uk+&l?0 z0Ul2dQT!^SNIeH(=?P998Fq>Bk%PcXH)O}| z1h5Iw<|_V`%`z~Om?QC?-qePcI$M4jC&Bw2)NQf4bu-5j@a#ph*g9Rz29dAzu1&!E zgbX6|8Ex^O<|m{SM#6z+5AU$Iqj%;;YSm6Am?krr!VY<=`0{oQ`AiyKdB_+%(BKW> z9WmniQho3KhEwB2?uds%)3I~lo0fnZb*n{Q!W9 z$r^%_DFFME&+5sT>wzla{j8x{UK6EH%kP5%eT~fQ_*$Pob`d-=vRv#YeU|h0(Z|tm zH>1}#H#sujoBusE&FwWPMZv(j?dD?!`K7>IGEV6)@02BU+QlcP$dPX*LAnr@CBT>w z;9Xst3WR`3+4m}txP)fblZuO_Pb`z3Sfxw3-!n&FKT}`PA^&0g=(zVvo4xnU&{k_b zn0-w^s8!+A=SzOs=MRgYX(PYwx9GfWUwuD^vY|gTo^0VQYp-5T{GM)Dqf5sk0I%jT zdauczrm#x>;#KpafujLRyWXUs_0*mD`~90;03b7q9|Unw?A%Xu)?&ydm~!MC&m&f% zsyd(T8zp!KD>k-<(y`u`!~zf+1e{zRwZCxvWoI~&Ng^Og1Y2q|a;E4^gZoV!|4X5| zEA+#twJgcT3yq))Z?o={fGQ3TDSWAjwSu5CBWKVDzG}HI8W)32I_~!PcM9A~70>t8n&1*oy?S^Wez1DCxVkRE$&h&+%V@_UlXU(xrYV zvZU$Sa1&b5GH|qvGRq$ZG1gmkXf?Q48Ll|f@YNX1$lUw1xL`4tR@M1)Ys>-4)#_J?bFiq4_G^kw>g zEk&wJnJM*EU#ZL!DzCMa`)D>fLD>t(K}KF4x5HRFqiT)5Iyq(+1*T=+qePXNY-j#_ z3705dyo@K`4O3&-a92>cxcNaJzO}_j@PXxK@(KCfR{e(oZG?Jbh`Y0+7Z1LwgeH3k z{h+e+@w%*m5g78~$yQ&;tG7@_l1z;V$MjHg{H{}@L3(%6c$sJb;&}KFLTfus zFI>SZ$Ehq$RV3Gt2xe1v+CNdkdWp?{94pQFeh+g%(k7iay9@pII&kaBsy_#k)Qum1 z`1$Dmqo}A-Ba2#wrtwl#%{xDvlAONzmuhM^BOXJ7*0@82rKN|yo4KjL$k_zjx=kfk zw>>Y==p@^Qe7s$5ggS|)C$mc2Fx=rfe7c9|Xuk%R_fW&efed(ovS(V)&q%n-mL`_{o8RKq6uM^Zk6|?R`ec9fBX2=^z`qx(|?gx-bl`y`$zrOwXe*OCzsj;txu^fG0qZZ~)6GpH_OJFEz>ec80?!B%GnW^Qhnz^GslGgdW7-9XL zTqd;wdx-`^tqi62L&Gy1wA@+IOhY!qVTE$5^oEK18ZE6gbKaRLqJyk=*4KBWSgt*z zsGryZS>NoNXQa^mo^&J_+*dU=^3k$%`a>VA&Z}tasgEh`^soy6(zi0w?}%?NI*Fi@ zvN_`7S<%vgPt}yRC(4HJ6|C$<34ar8!b$9Ev-xkICKzGZ8YTEg&*FP4FpFh*j63nVwr4vBg3!V$88hv6s>^A;pzUC^# z!%2Q$FiTOwFf1lR^1D;g6An|nwV-)eK6>?XOHF6}bZ?ycr)oe`w87q((O(GfQD9{D z(&P!%5BZGqo6z-}-kaW8D9NoK2}Q^{Li4$4F>f*PgwaH}A%{QAl`M+ISSB!p0OJaI zP!7|NMo@rnZzD)nP<_QN+hM+^Hom0~+9C-8R?S7^wzCJG-6=XRlD1N2ECxew!mQzdd5j)$`GCGPRPiV} z2lVh61HGgJpHApY;~4y(#QCO~uBalGmTL>sR|{19Bi~y@{j?aj+nGEJ>`m`pnPz@b z<##HZ^fFq1I9F)HN*w|3nEE8JANj5BpFDArQ#n;&dTd~SR^Hg9JnSWbwnQ>B?4h0Hh;Uq`@DEM2m^F1d7t8qZZ@tS6CxWO+}?grKcwD1qg{Q z9;3{5#ifIhsb4edP&m+dbT|;*A&X|A5r3b4ZLk6+Bi7$GVN*nHq5pR5WrrK5@xhp- zv;#y{@HX()0G421fH2vs9#rQ5R6b>7IUX{Q_LC{OjhqFnk5}wpag`;rbhS=qg%jZvw}Y{+GM72{^EI znekW)J$tKNO%+5M%D(knsxe3r+|^hPJV9NB8Flu4*^;2?j3Xe>6sJXV);Y*8jDWY% z*i>8lP7R;nWw&Y#r_FqpbS8K}t~)V2*#?j@2zKQxzYAnX+H22#(1MQR6Q<&p+^sQ$ z?77x)Rsj|bJL963{0y>)YG&sjVDlLk(LZ8OYaJCbhC8COY{^oMMv5890?9)6L_!^F zDJZ`@VZ!J&;lwvGcz&4UUUfA%q>=|IHcm859xLiJKU?yo{AZjn9dQtRjuxp-O+x}> z7P*G8=I#Kipo}V@J!iH~=d`gW|Q>!D<>V)F6uMp+JWzl1b zQJURgolK#M@~JOV7J9XEONbZ;?RMf8*UP6ztPRWB*wwI4&f~0#gyy313y$MoLD?8> zpFZc&zce&N{}3V;5xIp9)P@HS^Xx-lC$=IKhmW9(st>u7B8|=U3n;Mz+rE{0#TOZ` zF%MWsPA(QuH~l9m%T9L!eNVnWxz-tfG8FL0;)1E5X zEjA9sNKYVhrlh9EnfH^Ej+`-R;^8K*^sXz0x+NE*(5RlmFPPYX$Hyt&@|Z}L$;en~ z730X53R>yBGe7t-nE30;YFgt)a;PoSqOd`Qi(g?N$+O&v59{W1Z?hD329@&Ujce%V z9Ef=*>GR-spNO)RNYg~t5EN!L?img)F*!Leu)9%Ym~Fg@oUsl+d*d)1w)#dfT`Hu% z+P1vbrZlPNLDP%U(dLoWq zf!u!j)!j^6>)nB%o;xs*e}Cz@>654_WY-a|yYID^$t6>7MRmvTxwo&27%c~9?x#V0 zb*{#^v&%#G<-gJYd!7-$cUs9bq87t-{)Nx(L95N#=P_Q93l7{e(yoK?h04 zd*aX8l*#AtVupkcNQQ7!6k#iKwu_hs=>;9ledOgB(si()lPOtifs}(xK#VZc)JXG1 zHJ~6xW{lC?_iU5c_%2)7ZZR2*OH7~BJFZ_D&yL)cX0T`v$<~oCsk$M1MH>@2DH^6s zN|E>--3cp|a(zgYF2rt>fQnR@Xt_LoSYMnmWL7&PFICUhOkwLj;#<`J2mIeo;Vibg z*LBipqu=|a)^+%?m#zJDxmaTm8|ZVjWBo?`0aNnh&HNt zlEJ{Z1Mwsh2oLaO0I)JBaUahZEr{nPEMpt0#;I51`dk~a=j~h~Y)~1vYY1OzbpK4l z&^*!-(N^d7>wM)&fWLI-Ri*cFnT&jQ&hGJ2_Fsf~OI{oNi&1g7T~#`J7lk8VSIsE) ziW>Od@yoxW(AVCYps_4v<={UmN}>w){KUV8F+c==Fz{!KsAN7kp!@QqWNa69-Ag(2 zG~~OI4cUdfJ9WI}R8)xk`5JF}Yq!?AM~#vvPp5Ou{raL+cbbO8yTY$!gilnq9SUZ0 zeDgf&Mh>~|bOYp&J58JK#ygco8o^`C-Fj}*z(C_PH>;wFZ@*-vcg|a#KdD##VUT0? zwjgiloj4D-~<_@H& zF=T8zvJxRS6C;+lCPCN^f<-@)j)unU-=i+!`Xi`ZC1(Qy?t=l!D$M63C|s!n?$6uU zHEV_^$sOmTZw1F-s?H(^q4PamEjLmn)ym*hr?-&Ic7vr*X*TRKHFK7Bba?@;IA}#$ z^|C!J%|ISVEU?)Tj*mU%-tB`!y?LucgpXDt$`xb#O;j>HOR>3@xh=ziF7_sbt>-}f z;lMu(#2v`pIwUbWd?XrdHl2zHRjd4~o-=RvdQ8I}fhGp9LKNZ;W`CE~bSe4vS_=Hl zk@g0^jdCkWmdmMx3sC4t6?abx z+Zq`{mNgmUEuO3=+S*Cb&p7jS5?Y!Nzx$cpU|JtW2!N1pijuQB-0|i{7IKK)1%E{4 zQMD5E;gJdC98!cZBolcny!2Y^0f>fR^B))@s|Y8KxDLlK^0u<-Ez;xy2@XCyzsBG< z8(B2^hYdRm0IcO^6v5-BvAdHbIr16FRLc)FVjKLEDotYRsuC6eRlicD1~Y$WxZ{h1 zMfh_x3}(D|)eN+PvqwUs-#~@<1BXZNGn+Ir4oW3 ze(E|g_+bq5O)z%vF=Z?#Hb+?R3xE7cH5bBNuP1FEYtT~Xym4R{{r@2G>rm_4?-UPldN^MGr9iv{q48j@81ijZyJ9r0&_j1 z7!5@7VwmqTZZfs(G7iFWhhD;WMe`;7a;aJ1nPE^>j!ffQD&X3(t@EAI^=#Lf7y5{_ zD$olgMEJIt!qq`et~9%kiI3l;ndMy~|ES*9m|^2!K>c@s7M0yf-DE5u>}Fx?l00~N zHps8|po}C-_&QH z7yn#)+k+xz@_N&ISk>Uw-*iGXe^zl*^VDpO!@+m~(egn}gv>8fsTuwHGwLTpHuV3T zk_{I6nk?nTWeDYoGGARBI=`WuKG!6Z*Ly-CSxt95=&J$s^rR~?k97L<>aF!F3*kRj zt-Rq3Vj0dx1g{!sdVYROp7cOJC=B^f*)zf61jMNcvZ#&7sWcLAcUi>Mg}l&FjM!wv z_4T(qtR~yfMUc!gy^}djT#2~dD^;$b;)VU$nDE-W{o!II7UrBJjP$W&Q0cU2fJzn* z87ykWR>cVfQjXu(AbdxOO2fet8oL|GtH zmn!C6-)*;n$v%cEeU^w5N5h~`{#{m;g>{;J)<|RQwKV9%$R;TqB90j(Oo6u~kfrnu zX(aw+8+%6+_yUj$bl{Id0tZ22rl9C(ZZ3BKxmqa_Ip(`1=})6Iu*cdwdpI;S`75^) zm8L=f#Oai33yZn|2bSWT69FbB#y~Pw^>jvtdeKC0nCp-9u{HN|Y%M#!u%B>I>$N4Z z<=&weVQlZiLmbzaGzD9yU0jL2iJ2)6U*!GcRpJ_C8+FpAJpYd zqV|1WpmqRyINPvQrDYk#spX&Ndcbg6U+3OSS?0v>p-}q;Doz)SsWkMn(_PK==7nTS zJ)d3h5Yp-V-T=`>-=>QJ&;bI*M9wjIKLHcDK-|=fpplLMzR;ML%vkBqNUnhnB~GWW zFO$q@Ah>UeGLaAmhmjoAU^wgut(ww4fA9z*uX@ryL;Cb0sO6&=t z+Ca$bGURNN?6gzKoGB@z3H3MS#(BB6LwX?2Ey1iV^wjP2-{j#Q?V6pJu|(wY+JB<3 zk7K-aoM_#cQ(7Tim3i#uiNIz^=^cKFpsuYzos@R;!D*qf{R^USDXmN!Hgu4ogvPCz zwwRt`@TA9u?28FJpqff>kH2uq_d%7@i56>b{bM=G!!KMnm%oO7-u&f!BXx6B@cX9X z>6!QtkN{*O;h`kHL5PGsmP){jV{XKubfV(HNSvCebuJOap620D2`&Go{OX%lPK!Pg zrDKvlWoL?qY7@1PpqSG1esR9C5(7${WNAxDJd?61v~Z%% zlrz$QGEx6U-U#qY+C|zy-AV~pCqc#8CLBj~WE&$O+woC&6!0gH)Ji|z;zeT!@Xv7U zp6p_kbF_nu@ZH3rXYn!WZ+PO;r^b*&9&0l^R2t7T;zer->-Npe1|qwYtGT)Ml<2zB zkDN+05MqsFvZQGT59r)tyH=0a{8Lg(cwqxv(#=3>$*(=jN=Rh7^A8F0uDHt9TE!51 z00;!cVG4=V?v%@7t?40F{K59_k`U?=e{z@@H8K|Yfl(RU1VZw#mO}vi$oqs%u!nHP zsLe4xTr|mWW>O_TkW3=YP7Tyo_P!d)f-n}OhL|#W55Ygi<91cHyxFI7)68eBp&Hco zxRVJtwZrW!{ebYm`pNh2r=D4;2V@-03a{ZUX*=HuC9gR{Ao z6ys4j_~6%+_$;K`rymYJ&jc4nr3~A8uO@EvI8t^@7#a0SP5E!fi~&GX5-QNqREjAk zB~1TeC0RF`b7TXq>*^+cCO@?R>#xpc=XQaHlYlfik;KL#3#kY z5emP|HY%o;Zpv5^2HhF#z~Uzy>D$<@Cs~8e!B!kvNx$S1&>tPhTll8pp(dB7%;O9R zeFN|Gdmphghgwhx4C=^e>p`>}3EBMF9(UI*!qQ=NW_;W{`TCf;&^q1vw)MBG7RRIj zeKPj93pDG{wgYNb=FSI_IIIwl5SCmz9q>TNRJk$IMA4)i#tyT< z+ZL87rVd=mi1)N7s0?#eG$nc~bZ#7>qf8D#D?&%e{?RkAqERbAeB_5aAaT*p7!58( zrMm^G@P{hm;zF_oB?fG0$oGd6bPAD}q&7nnu)dw=YnIo&9gYKLWL*=J6zraqkVMW{ z)WLOLb72udIBj4@q$Co?^G-ls#@H0wED>MOI;Svk<-XJ7$@Ri;)kRR3W#AUfvhDa4 z2OW2voZJ}K-=FFve(d4N-kych+qzIrZ{}D%=?NBylT6nx7~iY!{c(`+<*%4kczNS? z?&o1cP5!m$XD1ow0B@KE02E`tQOQd>!b|W{_mA`AJ0pHn5RWJb0#pfS)ueSmZMaJ7 z5P$$Bib;S!BzA+4fq@90k$i4g9@o!HS0^O{Bmpx;LG@iA$rDpaNePLjQEY(mEp1`{~b*cP$LSV6Hwxvw@d4Mi* zGRS;STqwJLA_J}V3JHC?tWJ1bJ})&pyjr}!(0q9I*-KIy>O8G~Ovh)!S_ZhysVO_M z{TF%T*_Fy{&^Pzr+UX0BHU-JVwsLUzS%@PjS=CagH2BmpF1(^6Rm%tzC|5a+_w}(l z_`W*bdIEKw`lQVCzjqFHve)DD1+boXH>WqIsSyBx8u8{V9jyc9S(pUNlk$7tV#Itv zU_wQZSRmB`-S$&t9bkbpbxu?e)JjuLBBA6hwMRX!QUs_&+5z!e|uf?tY$@jU%Iu0 zA+Cv>&Qk1Z7#0wB7<%m4R%h~E7YchO9cS0p!`OZZqb(h9%=J3O!E`qcwV48>6@TcU zX3QPz4_J`!KVQ|B{GnjMTunc3H2qwwzm(rL0Uc=%`p$~;bf<2?FVku_?x%EcnMH^$^rK%W#?YXV64=)`2gmz zvJ?gH0wEDLP*&^Z4-%&l$Z8MaCziX6K&!u=<{J((zZ~RF33E5Tc+UvkqcGYMvRn*v z(`)~_;9a%doAM<~AY0S!^}KFpQ1GwOJycNiF(G_X$Rsb&Dm`b)eAy&G=}4>a`LFYA zIp?F}EnJir=Km$GaaFx^ z&p_Mm`w&rEZJOb`<_>utMY6x@d^w5!18k^&b`Hm%IG>YkW{ zy1X$^!^|A1V8*SPX1`^rZF(>itgK5#spaqWQ;Cw1HW#T&+qmdBM%0ogsGk zP${~2UB5?zzc8$=rrqG4{b#%Ms~S$LCD*r)(&gHOYeki{wD=M-O4___{(2Z23d{sN zvXy^jkW#gGKTAWbWI;RjnMRdrUQXg+5;Bj`=e)E+|0*|x*C0|esX*=S9KK{ZhJZM^ z#VBt$BJPzIvjuQMjBrlxHhfb-A+9m{PJe1GMf-*_KAb7Oj2N#DNJ~ZGolR6`#;IvZ z1XK9YZ=>O4@du*=CHNRvkLYC(6MzcX?J>>hvOJjHt%YK;f8%OAm&jN9x?vB`${!^z zpRy&PpVn4RyeGFxWxq}sVq9tO92^_}fp8ExyS!Vwe2Y-&^fu{k|3}Yb>Ez_OVc9OD zTd>m~(Di=djyk=VjeWffYmof(!wwUaK!hsWP2INkCp)`m7C&yb#!0;5+n?XS04o36 zk^GAL>4eo0>v(+jHQ`nhylfHu&qW?Q`m6#Mu~$6lX@Vj^TS?U9Q6TxgDcVGbxTeWq zQ8HC@N8ch#|A>+cCwDmP5xC^?tTxvHUj{+KFhJv70?GNp3`(A-!Fxn>vzA7P9KKg{ z$J?~dhy8t@c?vVBSCafhmYQZMxTp>e)0|8p2?ZGzW$6mAmSCSd5zCP|s)vpr1hMTt(hm=&2^vcNdj}?KRjZ(?BU2{ zANVW%r{RuT1G4WaAFGToEy=`>=5wP$#JfPxTz5&oYrPSD#U%=V{5@LWiq;DJ<&Y%Z z+{Ar7S_gLeO^xT3+nO{X!x6>unV$9^rMetGvyzINz{RMlbLUxd(L`=z8V_|VM z>xLLln`7!zOkjelPsPIK!HK*qThO6!9e9!C8Y~t8Re-{L>tg$pRETX}tlMzY(UKUC z&;F(XvaK$8a&{=$(O+u2r!|Mf2`W&Cb4h2@U&NM^%u8DtipfXCytL@gjP#Jnb+`YO z6vw{%&!(d~M|I;O+)$!+hw8OA>vBL&P1Ta|TG1nxqm>H8ld*G1nD~(`$7gxGAd4juS(Lsf$Ylv7+bp&IE1!8i%g0tztW z03Aw+&>J%i7b2>Py+6eTjP3XKBfE>%A)&$ocrkhakuP>gAwpyhwr`_cUxMV5e~NbG zdi;ID-{G{U)c=HNfBLPJ3*(zwDf#?E*)O|JCh9Eas|9OAD`JvapLsvEC^t5t{n7MN zo7~{qt1@Gng0JLrQ#+TF;?~tVRe*&F2eQP)kaHlwfwrDInZ4R#K{$5Idh|MnR}NlK zfwLIe@gEtgzr6-7YjrOOvxXiXTfA)7qFb${5 zu8-0%<4h6;0tV@?65}d?mIt!mb{k3-cayRwnp{#Ps>wDMi?*VfL*e(K9~697!BMNK z9v5HROzSQ59#>2hg!Sk$<&2A6=WEk41audT-1qn$7`5A@nQYuu{9&7IVzrLQ1A~VKrnVyn*6r+t9B~^yvtYAi=DV0~^{Lq7#3@|iV$q%J5 zHnzE=!;nZ2fWlPuz1+co$&|cE2@>V$P%`@cE@{|rFgN}w1rYLVL)Z|7AvDYdP|yMi zDA-zQh^BBTDrN>6Lw2Z|GB~4Rix4zJV2V1^AKJR$ri0g5#pBl6wqv{bqB)7e63KXx zRgP0?JB+0umby89*1$6~NZp^PPtX!;X?UgKsiTB~@%EL_kl}SODn=%MR&)LAFz&jt zgt+AHj(>L1B&BCqPQ;H|HGCC_2uv6EDS$K0)rO>{Yc@=Fdg+eob8wFh5uuLz9h834 zbeR}5ybm`h5ZMPHcx)x8nNV-dSM@yldOf~kXyZ|Ay(2_`KrKY^V+2jgRJtn4oM5`5 zl@tdmX(fV81u_!=$fQM4xDc98I{6&@fdvwO+Yz7wmy;{a+> z6FZ~Y;W5ZZ*^xMK0R&J4hzn_02-1a%Lrw8BN}Fqkan=I)6c_=TbwMV9o5nYVD*36N z%wSPM7&ylj8Q%`s0W5bo3dJ|l0#s6c9vjx{pe``D$qu9D`}Z;Eo;xls7lGq-t<1sgdo=$XwfXO>58mXN@BiK)gI@6KXjoJz z;HReElsI@m0Wc8b^MAd!pSb-6lP|0<)8yU0?=GRLH1-fSn*`bS!GtOP*f6+JNtNv?*KaHV%-p`cm7Pn(Qcn)r977Z01f zC&ep0h3nL8$1D=Fla}!>x5@Lq3G-jOAjN+L5TYf6v_&>idJ#g{^-p98GA_gOxiUbHgr zTX+sj%8lCfJhi)7m&^RH$p3zf?2Z3o?R07)w8eJ^oz}{m#<(FmJ8Um;*?OQXs%~@- zgi1$vXN<96!2FB^N_}slH!K;O-hNJ(5GGT0++Amndst&{k9qJxEYPCbhv9{-z?@-r zmWM_1nnvC5D@jdl#VU279T$LTWhvU6(VLYb}fnv459S!xyRtrlq((~q>`;tkX1 zHQ8Avl@4VBlQfI{b!4gegI^yiOWaiVY3U&BRpVl+_9You=J7jeJ9a;yt>Kdon5W^2?6+4Lt=`=ygk{%GI~1H0a0Jw-jGB}&Yk%Z;q- z8u+)wtE5}0$5+A4ce&3$7r8$aD${ul`3ipR+;)jPAdXNgWH9NL$>*7LXS|MiKrLR1YKlZHSJc9scIp~s)yZ7!7W$Z`=8Nd zafxeu##t zjv67@iE^bK9VRRVvWg!lBIamgeT+egd2_dL76?6@pZ1ndnLeh22>L+=p?%Fp@KCev zS~PQ5ry5Yj@Xb46Mkm}8I+fTzAm1cgj<@vCP1TP z;lU^PIu?8bNKFOTVuBJjPNwU`>6p!@-Cov>ER!^pNWdR+xe5CGaq*rilBMc-XDQ6y z>A!hsUDW&NtLYCe;Y^11j&|N-Q)ln5+(jZqIiE6(#-Bfgpd+oEOk6X1VvQqCCX2bb zJyeJUaf9sTB7bTBIOq9FJ~j~a;MV#(G5zJI-L0jt?HCyzG7#`iIe(z9Nk}s*fM>B% z=({AvW_JXc1Q+nQy2HjvkAf_wRmQC7ai`zorFw^n`4gwEu8n)e->%(PRO1a_B7@?NA{}SLzWN?juJX^xpfikRM z|16bVP7^=y#hRAj8J_;U=@plgn`5kN!V-rJ(O?QZ*ZGM(&&L8)?cr!AsHjA_D zsoC&BUUjab7c**n)i0gB`t|83*n{P{*`K?Y#Xs=7MYOl%Mt*KNP&NKw#@ck0aYiEd zkDDR*FlqKI?2+1wq(?-gS1(?F=(y+Advk55Tl<&WsLq*+Tg^C}dnNMoF)2itKnXNNRP%8Jag8cf7e;&+JxE ziVl>mFQN=C=K?C<$F~bFr5_RGWvkn~zb%?3H`tjPR@tW-@p(MjWoCNfltS}~-BL4N z+-&~QuSB5!U-UE9gaJSzj-nzWrC1@6_A zED^^UxzCX9YKbz1AR^P{zgX^jOzb^dS`OWweD=Gu_V=+5Nxesh%}ij<_ab2nr@FVF zgFKYc8BJ#g8jP3z_y1_#ElfT!Qh7d)RFib9wsuh9;bu{8bFBpKqc+hPCE!R9whV*j zF2S%NJLt;kXVJHCCJ>^9kO+-ZS}t%(VYNS~7_Fkb7Mmp=*(>*1^~BfG@yjjJLZQx7;DKNt`oI2lTr^_fzK`;j=}mRwxCo(FZ;^DF^QSd&w1 z0tb_7q1qZEb^hw0MJ+~YP6OjOZ&&gH4UD0_Xjvq|r=H(gpzttwX-oY+9^`V`#Poh! z73w$37u57QnT&@@Qt#^YjIf*9>xPWRhQEi3+cLi%9C*y5MDm)o zUagV-UH7ZupLR%3VEoLVrT;!9MnEpJ=B?;^=G>+3r=I_bLUQck;3MsfHxv4=Jvv1n zt9x>kmW!W$B?Xf-l#idVb<`Iy&M){*+k9sHjOt9L9l|Ovf}3X3kG1^zZu2WxY2p#r z>MJJ|wh^V$U)YbbBVu?src!!eYX^-9djP4$*`>uzJ^&G0=J98XFi`6Zr$1JqjY^RU*tNOM2 z+vr}Sq0I5ZVkx0LtIyn}#l;#b+`BEg2c&t)RPYW__%pk^kmrnR6!16xc|#VAuc&i* z`9TKCjCe4OmpDur$_&eA&|nc~ku36(W^BVq=ulmbffKnmS$wyIBKvHn%+U)5Y{FBz ze|&P@beT~`=6<3)s?hQS3cGDDEGM?VhsaW+HNu901#d8-ULx^I*o~SN5SiRA$f1g^ZzJT6pK3@#e1!QYve5FHLDCT_&c7av;U%w$&H9E8$UNKD9@X@QmJ$Lq1K6@9*_TbKi6`y^4aNB(+ z#uc4xo~WodR{`{_#z!yd6PGMIwK^vXiA0;He{C}x9l)%gd-A=%(^+9cB5ImsU`*;` zNm^F@C9~;nL!Jv(Suil&6cnZLyi2o)y}*umD4nT#(BCgGpU6?+p4SZJh<3|*P^*g2bzkhE0B-NtdqBj2%h38~(hhgIx8=>c~5~|K0 zD|vFW6LE?>N}D)pEU!4B>ja>pP|J)4GkG`zgyv7!@2SbU2`0GSjR?JvYsl*&`faSZ6_XAyR+Pw@V7V|MDzZvTg!ThL9| z{)ntHm+;uVDukP9Q^oP2N3?*$gk$K#5jnswtgPcceP1*tTx5i-1dag^SAsVaF$kzL zuq4-pYSZ6ehd3f^EKUbT_>3_WC4vdc07TPBJjUT;)s_dp2;vM*B#b0;YbZ8~&8@t{ zE&M|w;ILaH(6C9%uK@%Rw&$@={5_QEuzY!ffP*trjehoPm2ZCeW0Rx4?JsyT zO6V9^U)hQomT%uLzfb>?i$|~}Nz3~x*W1%R^l8a>E6w+~;yctraiN8ZWsJ6j$2I)& zZ#v??Sz;d7iwGtql=6K{zL=GwTl;90*{dV{y%y>5`$3*#8ZH(zLjAJOm5y+~+L^>r zuZ}y#Wy}F7zHbQCa6OmeE~=Er7K7B7JZJ2^nJdA!SCI06ePI6^2fI51MBkcU2|Hyb zAtd}*l=<(u!Cye+TRP2weI+I1mff{^WnVBFV&!oGrUC2;L`2DB`a)^4bIxi2u%<`a zn$X-hx7&ShRk|zl!(XJtNLwGX>Xsn3i%(rtlP`7CPUE{(0?QvL|32_HHf*a|ceZaR z8+udW(mZi0wi-lS%S6P_G^LhwFkDKQSUifHfApAwWPG>(MOb2wruCW%JsEs{ag-N6 zr9%A2ymu<>&DeON_{tywTIHp!FS0TV?6tZ5!$P^H;Sr?m_|`SX#4aM9yRKa)ZJ(z3QXZ+H7Nx zn9kJRbx~(_;K}eKM=Sq&thlkhe!Y~cOzQh4Shek|HmO<{b3a?>Db8CpDI(!+Uo<~r zdChJOH-5J*eA=)e8erM?vFoweNwtlF;ar8ot=}QK#Gx}9KpkCZe4_NPX<1{`NsWTL z3-OWMfZRR`dI*n5%+ln&9Sp079>UD=JL=R#sZ6>POiK>F8MsBPY&*V8yr%aaOIQy* zo8v!ddhF`S6;Q$N6{HNlU$TQg>GAfQl0^R*m{nE-k=KoF^{MBOyA|`gpd$>+!c`48 znDw=;`V#fk3`qoqG^`=K3>2_%F8lb>p-2nFr>qDvxu<(o0la{qM;r)ae%2R>{Y?ea zf2({y`G(d70^CMY73v35FIQM};tmRJ4J-01zrOw$Jwg2@@W=OIdBNK00NtStxev0! zuV0_M54fkZc5|4GTW8{RZQ2eB?KB=B8JxU<#E2|&`8##k7@u~}(&xLR%|Pv?Nb z*6YZ*D1G84M}4{)@mNDK3w~4^8r76Y#zjUC(DC>tu1<^}_7pmqMzN7$0eHbW-Y1;Y zRkJMAByV;PpTb!*GD2WN>^a$Q0nwODPN9K$q2c38L~17#J(W?0$IPdNo3{SzHjDkqZQLJ6@fkm7!d5lHRO9=M}= zDEw&bA!0cI4sJJvR=;`->h}I{FwaXG0`Rd1Pt!#XtE!+eeQaeI*YN~`eB!tmd^C4^ zD;Xyd90*$M0D!P;7|?C??#c4wa}ojc8QA^Y8wCiWLX2^{Ac1Y)1g-BlQ;C~)i|k!_ zGavj?c=~G8C81S#DS2eP&Mk>F=&s1|I0fsU)}tRU@l}3bnO^94JYxk%c2EBH`qLY# zLaARQBF7VI{~+%%|3!%3-~Z?jxKw@zK%W~*570`6@J7Le%Vn^eqF;R$sM$i8+`%+y zkCEBH2#9*(7@26*N-3I<7_Ql3|Jx^HsFI5cPOBdm&2GSmaJR>F;(&zcF=}{N+P8S9 zGnygr<}#-NkUqPh)WvIDBB#S+3*0O{JB{=$w;9kYAu&l0qp;^+%Y?EM#-cEStE zkb}w3ELLli?bV4{l>0i$sJQiDw?`8ti)N50oQVKK6@3nJw$A}%zSAVz^iM#R+n8MT zFb`RvHcR@qAM8LP@&u?Nm;|@I+n0(-Ko{9**l2VFfbE==VXt1m?=_Gok&s*Hw=Ysz zKb;-~Vk#1B&uj%~hz~~RN~}y7thjtpfw3Db_jTJkPdI|P3oQZ`jE8%C63%0NLzL_D z0NjyB$*BR)UEC$W$_rx%A`r@HG`#}^6X>T(!0F%l`@nzTKT)WHCglECeVF$i`g}`h z3^C`xJ{L=V91c1XacbVku2OoWnWIrfE6A5mKrw3t$qD9uI^ax#wBOV_L{#>~DEYp3%Z!R4-awe`r-AS*oD0XF zCa0FPF%6Sz-g32-#)d#r5Zxin6pO+y6+K-f1+l7v-T6-pQdnldFZp?gc z7LRX!W}Ppe{nEYpD)8z0uk=F6|Fn1I-%#*fd=~2%jI|*=V=z%@>_QpKCJ4n8$t&mbuNGQ9wdc@jN2=4g(1S@ zjX=X3B{?+Pz3=X6b!rY?G%kN+`jY^5Z~k7fCX1?MpQu?m@f z+J<{UCnqBuw`#Y^8Ywr&UA8 zjlxb@*aqmQ3JD0&vebq7bK2nNJYa%>{D*mjieQ8E)KqDd2YTn2B*Y_7tKCj5Q$BxS zdB}<+yFHSMB2)m@@ct$%>Rx)Qcwa21N|z$jF;;Z`?zl8wJwQ!BT9D-t6+LwE+rqsk zWp2@jJ;V0um?*;Azb9XN$yX6W-|POzxt`@_v|=V*EuyYJNG!aCi}u-Jk<@kE^XY}1 zhThl`a}Fa*@8lND@WadOw{Nfi^oh*-5qM8*?EJd9p~aab;s@t8zi?t5&-U zo#OB0l&XLro=@ik%v+*E`9KsVnjfr4=|tN==m^nzB5`2d>}KO(v|?#O0vJRm71Uhf zd;W3hLW2x-OP{emY6w#nG&OD6c%H&$sf zRA8NFL$CaBXJ)eltXSJwc9Q%@bEJ&ZnIecSyt%1@=+Mb4hmudP zK>`8}^G;8DjD$h7;lf!!5G5hWoUUvZ%^5&qhG(v2uPq*{;P zrp}B}QvRfj*Z)$a&6(C(Gjeb-uwvJPHy7igHlP8U`7-G83msc!H1ARn5_Q_Mi zL+>t!J;7-X$A~B1XiR+QP>s+c!1Cp-2ILAMN%d)3@8RDP42j+{q+}W+tf>I(-MwQ9 z)ymZEL4a9so3ZCRLbd{!!eOH;PZ|?ZUV(eGpL+E#;g5iFhi?NZMeQ9zTdAn$`!8dIwATB)6-PoF(v&9y3p6b|K zRj$E5YD7@LcvuR-)-|XV3#}CffAM21^(DEnNC#v+A+_=jEli{>7r(#F?ka! zcn>L}{eq$e>ICu^JEDg?Wh2TrB|$b&mx@}nkxHSkjU@Ei)2p!(qP^KNx26w-BpuBp z?*XaI&9YP|cNNUE-xEsOoIiW-$@SS02vahK?2YixHPB;GAoYri`b-R<@_ai0#;R>`6bVN}?KCg#ojRFTt7wZOwN$LcJ>4z5FjR@iEPu>a<)^Y7aoD$I})4ehl z5~&rKg?lNL*WKjTaZlW@TM6(i%I0pAn0b&2&F!v{p;t{T!R1VTweDbm)Wxzht=pkz zb*-JAhHdeTBgb@hJ+Gdt-08%;Ty+m{kesVy7nPuB%r3A_6ierF;pMLnH7`$fIQMAW zm#doj%Vi#y!M@?era7-CQ<-=+Dd7IY~n=-AQQ7-f`U(wNor5H zB>Yo|tSc0SCXT27(L%=#)5=ffwI|T#IX5;s$ErV6 zCjL1Q?5vH8^k;TnCD<+9oidBStXX&d>e)EG;HS_klQ1&5+J4^F%nqxgsf9+n{wx2y z8vp=Qn^FJ(Gr0EL{9F=N4-GfopF>2LHc-LMgpCj}Dj3r(00;jP()A7Fz6T1IB)Jbvwsj}Qa}x#2BLIPyvBUNe7$AzwoMZ=a`&fY0a@@&S z06;g1JNtIfUBU9`Sr-K%Ro83O4VQcG9{eIm!Vt+;lC6V7%u0KmUU$O5!EAzSs~ls{ zGV8Vr+wstMnbOoQZs$ziz45D;dP6d^?+mGBjOGI|?AzoA?%a=%gHKo9yNtBNm=9n0 z__w=)v#~JgXd1(5#opQUxAxb^JH}yzES`ClMB~uViO{Wg)BP=Cad-`zvbwyJVh!3~ z`p!@NHsng2iv8kL`k^@OgYCWIIF*rwrEmUwzZHLvPiDH+Jk1{;_BvPiSV#0qdb0YzmeqXY)mAXGxiMk0uCa7gv}r*3peA z2th`M6x`n`e#bECn+4M3X7jJ(%~fb{`~eFd2BU`oXEC$TKBflN)wA~Cpe9&CLXx>Q z;rVI^gn!MfKg3;Vx~yAfj%spHXF@Bo7pGg_S&8@)xEKYTZx;V)7;>__c67IPVknj# zkXzEc{~P_Dfu}I-bA(E$*^dhwoV#M_PrRw7uT@)C^G^R(AACwN@Pl+u$l18otvoW| zO&Y_KElyDIZVMUK4VbfIU@s$%ujcf6W;jjK10seV@|9?dEU-e4q0RR91 literal 0 HcmV?d00001 diff --git a/demucs/tools/__init__.py b/demucs/tools/__init__.py new file mode 100644 index 00000000..0952fcc3 --- /dev/null +++ b/demucs/tools/__init__.py @@ -0,0 +1,5 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. diff --git a/demucs/tools/automix.py b/demucs/tools/automix.py new file mode 100644 index 00000000..a839345e --- /dev/null +++ b/demucs/tools/automix.py @@ -0,0 +1,343 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +""" +This script creates realistic mixes with stems from different songs. +In particular, it will align BPM, sync up the first beat and perform pitch +shift to maximize pitches overlap. +In order to limit artifacts, only parts that can be mixed with less than 15% +tempo shift, and 3 semitones of pitch shift are mixed together. +""" +from collections import namedtuple +from concurrent.futures import ProcessPoolExecutor +import hashlib +from pathlib import Path +import random +import shutil +import tqdm +import pickle + +from librosa.beat import beat_track +from librosa.feature import chroma_cqt +import numpy as np +import torch +from torch.nn import functional as F + +from dora.utils import try_load +from demucs.audio import save_audio +from demucs.repitch import repitch +from demucs.pretrained import SOURCES +from demucs.wav import build_metadata, Wavset, _get_musdb_valid + + +MUSDB_PATH = '/checkpoint/defossez/datasets/musdbhq' +EXTRA_WAV_PATH = "/checkpoint/defossez/datasets/allstems_44" +# WARNING: OUTPATH will be completely erased. +OUTPATH = Path.home() / 'tmp/demucs_mdx/automix_musdb/' +CACHE = Path.home() / 'tmp/automix_cache' # cache BPM and pitch information. +CHANNELS = 2 +SR = 44100 +MAX_PITCH = 3 # maximum allowable pitch shift in semi tones +MAX_TEMPO = 0.15 # maximum allowable tempo shift + + +Spec = namedtuple("Spec", "tempo onsets kr track index") + + +def rms(wav, window=10000): + """efficient rms computed for each time step over a given window.""" + half = window // 2 + window = 2 * half + 1 + wav = F.pad(wav, (half, half)) + tot = wav.pow(2).cumsum(dim=-1) + return ((tot[..., window - 1:] - tot[..., :-window + 1]) / window).sqrt() + + +def analyse_track(dset, index): + """analyse track, extract bpm and distribution of notes from the bass line.""" + track = dset[index] + mix = track.sum(0).mean(0) + ref = mix.std() + + starts = (abs(mix) >= 1e-2 * ref).float().argmax().item() + track = track[..., starts:] + + cache = CACHE / dset.sig + cache.mkdir(exist_ok=True, parents=True) + + cache_file = cache / f"{index}.pkl" + cached = None + if cache_file.exists(): + cached = try_load(cache_file) + if cached is not None: + tempo, events, hist_kr = cached + + if cached is None: + drums = track[0].mean(0) + if drums.std() > 1e-2 * ref: + tempo, events = beat_track(y=drums.numpy(), units='time', sr=SR) + else: + print("failed drums", drums.std(), ref) + return None, track + + bass = track[1].mean(0) + r = rms(bass) + peak = r.max() + mask = r >= 0.05 * peak + bass = bass[mask] + if bass.std() > 1e-2 * ref: + kr = torch.from_numpy(chroma_cqt(y=bass.numpy(), sr=SR)) + hist_kr = (kr.max(dim=0, keepdim=True)[0] == kr).float().mean(1) + else: + print("failed bass", bass.std(), ref) + return None, track + + pickle.dump([tempo, events, hist_kr], open(cache_file, 'wb')) + spec = Spec(tempo, events, hist_kr, track, index) + return spec, None + + +def best_pitch_shift(kr_a, kr_b): + """find the best pitch shift between two chroma distributions.""" + deltas = [] + for p in range(12): + deltas.append((kr_a - kr_b).abs().mean()) + kr_b = kr_b.roll(1, 0) + + ps = np.argmin(deltas) + if ps > 6: + ps = ps - 12 + return ps + + +def align_stems(stems): + """Align the first beats of the stems. + This is a naive implementation. A grid with a time definition 10ms is defined and + each beat onset is represented as a gaussian over this grid. + Then, we try each possible time shift to make two grids align the best. + We repeat for all sources. + """ + sources = len(stems) + width = 5e-3 # grid of 10ms + limit = 5 + std = 2 + x = torch.arange(-limit, limit + 1, 1).float() + gauss = torch.exp(-x**2 / (2 * std**2)) + + grids = [] + for wav, onsets in stems: + le = wav.shape[-1] + dur = le / SR + grid = torch.zeros(int(le / width / SR)) + for onset in onsets: + pos = int(onset / width) + if onset >= dur - 1: + continue + if onset < 1: + continue + grid[pos - limit:pos + limit + 1] += gauss + grids.append(grid) + + shifts = [0] + for s in range(1, sources): + max_shift = int(4 / width) + dots = [] + for shift in range(-max_shift, max_shift): + other = grids[s] + ref = grids[0] + if shift >= 0: + other = other[shift:] + else: + ref = ref[shift:] + le = min(len(other), len(ref)) + dots.append((ref[:le].dot(other[:le]), int(shift * width * SR))) + + _, shift = max(dots) + shifts.append(-shift) + + outs = [] + new_zero = min(shifts) + for (wav, _), shift in zip(stems, shifts): + offset = shift - new_zero + wav = F.pad(wav, (offset, 0)) + outs.append(wav) + + le = min(x.shape[-1] for x in outs) + + outs = [w[..., :le] for w in outs] + return torch.stack(outs) + + +def find_candidate(spec_ref, catalog, pitch_match=True): + """Given reference track, this finds a track in the catalog that + is a potential match (pitch and tempo delta must be within the allowable limits). + """ + candidates = list(catalog) + random.shuffle(candidates) + + for spec in candidates: + ok = False + for scale in [1/4, 1/2, 1, 2, 4]: + tempo = spec.tempo * scale + delta_tempo = spec_ref.tempo / tempo - 1 + if abs(delta_tempo) < MAX_TEMPO: + ok = True + break + if not ok: + print(delta_tempo, spec_ref.tempo, spec.tempo, "FAILED TEMPO") + # too much of a tempo difference + continue + spec = spec._replace(tempo=tempo) + + ps = 0 + if pitch_match: + ps = best_pitch_shift(spec_ref.kr, spec.kr) + if abs(ps) > MAX_PITCH: + print("Failed pitch", ps) + # too much pitch difference + continue + return spec, delta_tempo, ps + + +def get_part(spec, source, dt, dp): + """Apply given delta of tempo and delta of pitch to a stem.""" + wav = spec.track[source] + if dt or dp: + wav = repitch(wav, dp, dt * 100, samplerate=SR, voice=source == 3) + spec = spec._replace(onsets=spec.onsets / (1 + dt)) + return wav, spec + + +def build_track(ref_index, catalog): + """Given the reference track index and a catalog of track, builds + a completely new track. One of the source at random from the ref track will + be kept and other sources will be drawn from the catalog. + """ + order = list(range(len(SOURCES))) + random.shuffle(order) + + stems = [None] * len(order) + indexes = [None] * len(order) + origs = [None] * len(order) + dps = [None] * len(order) + dts = [None] * len(order) + + first = order[0] + spec_ref = catalog[ref_index] + stems[first] = (spec_ref.track[first], spec_ref.onsets) + indexes[first] = ref_index + origs[first] = spec_ref.track[first] + dps[first] = 0 + dts[first] = 0 + + pitch_match = order != 0 + + for src in order[1:]: + spec, dt, dp = find_candidate(spec_ref, catalog, pitch_match=pitch_match) + if not pitch_match: + spec_ref = spec_ref._replace(kr=spec.kr) + pitch_match = True + dps[src] = dp + dts[src] = dt + wav, spec = get_part(spec, src, dt, dp) + stems[src] = (wav, spec.onsets) + indexes[src] = spec.index + origs.append(spec.track[src]) + print("FINAL CHOICES", ref_index, indexes, dps, dts) + stems = align_stems(stems) + return stems, origs + + +def get_musdb_dataset(part='train'): + root = Path(MUSDB_PATH) / part + ext = '.wav' + metadata = build_metadata(root, SOURCES, ext=ext, normalize=False) + valid_tracks = _get_musdb_valid() + metadata_train = {name: meta for name, meta in metadata.items() if name not in valid_tracks} + train_set = Wavset( + root, metadata_train, SOURCES, samplerate=SR, channels=CHANNELS, + normalize=False, ext=ext) + sig = hashlib.sha1(str(root).encode()).hexdigest()[:8] + train_set.sig = sig + return train_set + + +def get_wav_dataset(): + root = Path(EXTRA_WAV_PATH) + ext = '.wav' + metadata = _build_metadata(root, SOURCES, ext=ext, normalize=False) + train_set = Wavset( + root, metadata, SOURCES, samplerate=SR, channels=CHANNELS, + normalize=False, ext=ext) + sig = hashlib.sha1(str(root).encode()).hexdigest()[:8] + train_set.sig = sig + return train_set + + +def main(): + random.seed(4321) + if OUTPATH.exists(): + shutil.rmtree(OUTPATH) + OUTPATH.mkdir(exist_ok=True, parents=True) + (OUTPATH / 'train').mkdir(exist_ok=True, parents=True) + (OUTPATH / 'valid').mkdir(exist_ok=True, parents=True) + out = OUTPATH / 'train' + + dset = get_musdb_dataset() + # dset2 = get_wav_dataset() + # dset3 = get_musdb_dataset('test') + dset2 = None + dset3 = None + pendings = [] + copies = 6 + copies_rej = 2 + + with ProcessPoolExecutor(20) as pool: + for index in range(len(dset)): + pendings.append(pool.submit(analyse_track, dset, index)) + + if dset2: + for index in range(len(dset2)): + pendings.append(pool.submit(analyse_track, dset2, index)) + if dset3: + for index in range(len(dset3)): + pendings.append(pool.submit(analyse_track, dset3, index)) + + catalog = [] + rej = 0 + for pending in tqdm.tqdm(pendings, ncols=120): + spec, track = pending.result() + if spec is not None: + catalog.append(spec) + else: + mix = track.sum(0) + for copy in range(copies_rej): + folder = out / f'rej_{rej}_{copy}' + folder.mkdir() + save_audio(mix, folder / "mixture.wav", SR) + for stem, source in zip(track, SOURCES): + save_audio(stem, folder / f"{source}.wav", SR, clip='clamp') + rej += 1 + + for copy in range(copies): + for index in range(len(catalog)): + track, origs = build_track(index, catalog) + mix = track.sum(0) + mx = mix.abs().max() + scale = max(1, 1.01 * mx) + mix = mix / scale + track = track / scale + folder = out / f'{copy}_{index}' + folder.mkdir() + save_audio(mix, folder / "mixture.wav", SR) + for stem, source, orig in zip(track, SOURCES, origs): + save_audio(stem, folder / f"{source}.wav", SR, clip='clamp') + # save_audio(stem.std() * orig / (1e-6 + orig.std()), folder / f"{source}_orig.wav", + # SR, clip='clamp') + + +if __name__ == '__main__': + main() diff --git a/demucs/tools/bench.py b/demucs/tools/bench.py new file mode 100644 index 00000000..762a7c3f --- /dev/null +++ b/demucs/tools/bench.py @@ -0,0 +1,78 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +""" +benchmarking script, useful to check for OOM, reasonable train time, +and for the MDX competion, estimate if we will match the time limit.""" +from contextlib import contextmanager +import logging +import sys +import time +import torch + +from demucs.train import get_solver, main +from demucs.apply import apply_model + +logging.basicConfig(level=logging.INFO, stream=sys.stderr) + + +class Result: + pass + + +@contextmanager +def bench(): + import gc + gc.collect() + torch.cuda.reset_max_memory_allocated() + torch.cuda.empty_cache() + result = Result() + # before = torch.cuda.memory_allocated() + before = 0 + begin = time.time() + try: + yield result + finally: + torch.cuda.synchronize() + mem = (torch.cuda.max_memory_allocated() - before) / 2 ** 20 + tim = time.time() - begin + result.mem = mem + result.tim = tim + + +xp = main.get_xp_from_sig(sys.argv[1]) +xp = main.get_xp(xp.argv + sys.argv[2:]) +with xp.enter(): + solver = get_solver(xp.cfg) + if getattr(solver.model, 'use_train_segment', False): + batch = solver.augment(next(iter(solver.loaders['train']))) + solver.model.segment = Fraction(batch.shape[-1], solver.model.samplerate) + train_segment = solver.model.segment + solver.model.eval() + model = solver.model + model.cuda() + x = torch.randn(2, xp.cfg.dset.channels, int(10 * model.samplerate), device='cuda') + with bench() as res: + y = model(x) + y.sum().backward() + del y + for p in model.parameters(): + p.grad = None + print(f"FB: {res.mem:.1f} MB, {res.tim * 1000:.1f} ms") + + x = torch.randn(1, xp.cfg.dset.channels, int(model.segment * model.samplerate), device='cuda') + with bench() as res: + with torch.no_grad(): + y = model(x) + del y + print(f"FV: {res.mem:.1f} MB, {res.tim * 1000:.1f} ms") + + model.cpu() + torch.set_num_threads(1) + test = torch.randn(1, xp.cfg.dset.channels, model.samplerate * 40) + b = time.time() + apply_model(model, test, split=True, shifts=1) + print("CPU 40 sec:", time.time() - b) diff --git a/demucs/tools/convert.py b/demucs/tools/convert.py new file mode 100644 index 00000000..dfc022f8 --- /dev/null +++ b/demucs/tools/convert.py @@ -0,0 +1,152 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +# Script to convert option names and model args from the dev branch to +# the cleanup release one. There should be no reaso to use that anymore. + +import argparse +import io +import json +from pathlib import Path +import subprocess as sp + +import torch + +from demucs import train, pretrained, states + +DEV_REPO = Path.home() / 'tmp/release_demucs_mdx' + + +TO_REMOVE = [ + 'demucs.dconv_kw.gelu=True', + 'demucs.dconv_kw.nfreqs=0', + 'demucs.dconv_kw.nfreqs=0', + 'demucs.dconv_kw.version=4', + 'demucs.norm=gn', + 'wdemucs.nice=True', + 'wdemucs.good=True', + 'wdemucs.freq_emb=-0.2', + 'special=True', + 'special=False', +] + +TO_REPLACE = [ + ('power', 'svd'), + ('wdemucs', 'hdemucs'), + ('hdemucs.hybrid=True', 'hdemucs.hybrid_old=True'), + ('hdemucs.hybrid=2', 'hdemucs.hybrid=True'), +] + +TO_INJECT = [ + ('model=hdemucs', ['hdemucs.cac=False']), + ('model=hdemucs', ['hdemucs.norm_starts=999']), +] + + +def get_original_argv(sig): + return json.load(open(Path(DEV_REPO) / f'outputs/xps/{sig}/.argv.json')) + + +def transform(argv, mappings, verbose=False): + for rm in TO_REMOVE: + while rm in argv: + argv.remove(rm) + + for old, new in TO_REPLACE: + argv[:] = [a.replace(old, new) for a in argv] + + for condition, args in TO_INJECT: + if condition in argv: + argv[:] = args + argv + + for idx, arg in enumerate(argv): + if 'continue_from=' in arg: + dep_sig = arg.split('=')[1] + if dep_sig.startswith('"'): + dep_sig = eval(dep_sig) + if verbose: + print("Need to recursively convert dependency XP", dep_sig) + new_sig = convert(dep_sig, mappings, verbose).sig + argv[idx] = f'continue_from="{new_sig}"' + + +def convert(sig, mappings, verbose=False): + argv = get_original_argv(sig) + if verbose: + print("Original argv", argv) + transform(argv, mappings, verbose) + if verbose: + print("New argv", argv) + xp = train.main.get_xp(argv) + train.main.init_xp(xp) + if verbose: + print("Mapping", sig, "->", xp.sig) + mappings[sig] = xp.sig + return xp + + +def _eval_old(old_sig, x): + script = ( + 'from demucs import pretrained; import torch; import sys; import io; ' + 'buf = io.BytesIO(sys.stdin.buffer.read()); ' + 'x = torch.load(buf); m = pretrained.load_pretrained_model(' + f'"{old_sig}"); torch.save(m(x), sys.stdout.buffer)') + + buf = io.BytesIO() + torch.save(x, buf) + proc = sp.run( + ['python3', '-c', script], input=buf.getvalue(), capture_output=True, cwd=DEV_REPO) + if proc.returncode != 0: + print("Error", proc.stderr.decode()) + assert False + + buf = io.BytesIO(proc.stdout) + return torch.load(buf) + + +def compare(old_sig, model): + test = torch.randn(1, 2, 44100 * 10) + old_out = _eval_old(old_sig, test) + out = model(test) + + delta = 20 * torch.log10((out - old_out).norm() / out.norm()).item() + return delta + + +def main(): + torch.manual_seed(1234) + parser = argparse.ArgumentParser('convert') + parser.add_argument('sigs', nargs='*') + parser.add_argument('-o', '--output', type=Path, default=Path('release_models')) + parser.add_argument('-d', '--dump', action='store_true') + parser.add_argument('-c', '--compare', action='store_true') + parser.add_argument('-v', '--verbose', action='store_true') + args = parser.parse_args() + + args.output.mkdir(exist_ok=True, parents=True) + mappings = {} + for sig in args.sigs: + xp = convert(sig, mappings, args.verbose) + if args.dump or args.compare: + old_pkg = pretrained._load_package(sig, old=True) + model = train.get_model(xp.cfg) + model.load_state_dict(old_pkg['state']) + if args.dump: + pkg = states.serialize_model(model, xp.cfg) + states.save_with_checksum(pkg, args.output / f'{xp.sig}.th') + if args.compare: + delta = compare(sig, model) + print("Delta for", sig, xp.sig, delta) + + mappings[sig] = xp.sig + + print("FINAL MAPPINGS") + for old, new in mappings.items(): + print(old, " ", new) + + +if __name__ == '__main__': + main() diff --git a/demucs/tools/export.py b/demucs/tools/export.py new file mode 100644 index 00000000..15795855 --- /dev/null +++ b/demucs/tools/export.py @@ -0,0 +1,71 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +"""Export a trained model from the full checkpoint (with optimizer etc.) to +a final checkpoint, with only the model itself. The model is always stored as +half float to gain space, and because this has zero impact on the final loss. +When DiffQ was used for training, the model will actually be quantized and bitpacked.""" +from argparse import ArgumentParser +from fractions import Fraction +import logging +from pathlib import Path +import sys +import torch + +from demucs import train +from demucs.states import serialize_model, save_with_checksum + + +logger = logging.getLogger(__name__) + + +def main(): + logging.basicConfig(level=logging.INFO, stream=sys.stderr) + + parser = ArgumentParser("tools.export", description="Export trained models from XP sigs.") + parser.add_argument('signatures', nargs='*', help='XP signatures.') + parser.add_argument('-o', '--out', type=Path, default=Path("release_models"), + help="Path where to store release models (default release_models)") + parser.add_argument('-s', '--sign', action='store_true', + help='Add sha256 prefix checksum to the filename.') + + args = parser.parse_args() + args.out.mkdir(exist_ok=True, parents=True) + + for sig in args.signatures: + xp = train.main.get_xp_from_sig(sig) + name = train.main.get_name(xp) + logger.info('Handling %s/%s', sig, name) + + out_path = args.out / (sig + ".th") + + solver = train.get_solver_from_sig(sig) + if len(solver.history) < solver.args.epochs: + logger.warning( + 'Model %s has less epoch than expected (%d / %d)', + sig, len(solver.history), solver.args.epochs) + + solver.model.load_state_dict(solver.best_state) + pkg = serialize_model(solver.model, solver.args, solver.quantizer, half=True) + if getattr(solver.model, 'use_train_segment', False): + batch = solver.augment(next(iter(solver.loaders['train']))) + pkg['kwargs']['segment'] = Fraction(batch.shape[-1], solver.model.samplerate) + print("Override", pkg['kwargs']['segment']) + valid, test = None, None + for m in solver.history: + if 'valid' in m: + valid = m['valid'] + if 'test' in m: + test = m['test'] + pkg['metrics'] = (valid, test) + if args.sign: + save_with_checksum(pkg, out_path) + else: + torch.save(pkg, out_path) + + +if __name__ == '__main__': + main() diff --git a/poetry.lock b/poetry.lock index 909df397..bb6f11e8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -7,7 +7,7 @@ description = "Accelerate" optional = false python-versions = ">=3.8.0" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "accelerate-1.0.1-py3-none-any.whl", hash = "sha256:c6aa0c7b8a797cb150471e90e3ca36ac41f5d4b40512cdd6f058b8bf25589467"}, {file = "accelerate-1.0.1.tar.gz", hash = "sha256:e8f95fc2db14915dc0a9182edfcf3068e5ddb2fa310b583717ad44e5c442399c"}, @@ -40,7 +40,7 @@ description = "Python graph (network) package" optional = false python-versions = "*" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "altgraph-0.17.4-py2.py3-none-any.whl", hash = "sha256:642743b4750de17e655e6711601b077bc6598dbfa3ba5fa2b2a35ce12b508dff"}, {file = "altgraph-0.17.4.tar.gz", hash = "sha256:1b5afbb98f6c4dcadb2e2ae6ab9fa994bbb8c1d75f4fa96d340f9437ae454406"}, @@ -53,7 +53,7 @@ description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, @@ -66,7 +66,7 @@ description = "ANTLR 4.9.3 runtime for Python 3.7" optional = false python-versions = "*" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "antlr4-python3-runtime-4.9.3.tar.gz", hash = "sha256:f224469b4168294902bb1efa80a8bf7855f24c99aef99cbefc1bcd3cce77881b"}, ] @@ -78,7 +78,7 @@ description = "High level compatibility layer for multiple asynchronous event lo optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"}, {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"}, @@ -102,7 +102,7 @@ description = "An abstract syntax tree for Python with inference support." optional = false python-versions = ">=3.7.2" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "astroid-2.15.8-py3-none-any.whl", hash = "sha256:1aa149fc5c6589e3d0ece885b4491acd80af4f087baafa3fb5203b113e68cd3c"}, {file = "astroid-2.15.8.tar.gz", hash = "sha256:6c107453dffee9055899705de3c9ead36e74119cee151e5a9aaf7f0b0e020a6a"}, @@ -116,6 +116,27 @@ wrapt = [ {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, ] +[[package]] +name = "attrs" +version = "25.1.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "attrs-25.1.0-py3-none-any.whl", hash = "sha256:c75a69e28a550a7e93789579c22aa26b0f5b83b75dc4e08fe092980051e1090a"}, + {file = "attrs-25.1.0.tar.gz", hash = "sha256:1c97078a80c814273a76b2a298a932eb681c87415c11dee0a6921de7f1b02c3e"}, +] + +[package.extras] +benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] + [[package]] name = "autopep8" version = "1.7.0" @@ -123,7 +144,7 @@ description = "A tool that automatically formats Python code to conform to the P optional = false python-versions = "*" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "autopep8-1.7.0-py2.py3-none-any.whl", hash = "sha256:6f09e90a2be784317e84dc1add17ebfc7abe3924239957a37e5040e27d812087"}, {file = "autopep8-1.7.0.tar.gz", hash = "sha256:ca9b1a83e53a7fad65d731dc7a2a2d50aa48f43850407c59f6a1a306c4201142"}, @@ -140,7 +161,7 @@ description = "Pythonic bindings for FFmpeg's libraries." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "av-11.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a01f13b37eb6d181e03bbbbda29093fe2d68f10755795188220acdc89560ec27"}, {file = "av-11.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b2236faee1b5d71dff3cdef81ef6eec22cc8b71dbfb45eb037e6437fe80f24e7"}, @@ -196,7 +217,7 @@ description = "Python bindings for the Brotli compression library" optional = false python-versions = "*" groups = ["main"] -markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and implementation_name == \"cpython\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\") and implementation_name == \"cpython\"" files = [ {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752"}, {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9"}, @@ -332,7 +353,7 @@ description = "Python CFFI bindings to the Brotli library" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and implementation_name != \"cpython\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\") and implementation_name != \"cpython\"" files = [ {file = "brotlicffi-1.1.0.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9b7ae6bd1a3f0df532b6d67ff674099a96d22bc0948955cb338488c31bfb8851"}, {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b"}, @@ -368,15 +389,15 @@ cffi = ">=1.0.0" [[package]] name = "certifi" -version = "2024.2.2" +version = "2025.1.31" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ - {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, - {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, + {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, + {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, ] [[package]] @@ -386,7 +407,7 @@ description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, @@ -452,7 +473,7 @@ description = "Validate configuration and produce human readable error messages. optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, @@ -465,7 +486,7 @@ description = "The Real First Universal Charset Detector. Open, modern and activ optional = false python-versions = ">=3.7.0" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, @@ -561,15 +582,15 @@ files = [ [[package]] name = "cloudpickle" -version = "3.1.0" +version = "3.1.1" description = "Pickler class to extend the standard pickle.Pickler functionality" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ - {file = "cloudpickle-3.1.0-py3-none-any.whl", hash = "sha256:fe11acda67f61aaaec473e3afe030feb131d78a43461b718185363384f1ba12e"}, - {file = "cloudpickle-3.1.0.tar.gz", hash = "sha256:81a929b6e3c7335c863c771d673d105f02efdb89dfaba0c90495d1c64796601b"}, + {file = "cloudpickle-3.1.1-py3-none-any.whl", hash = "sha256:c8c5a44295039331ee9dad40ba100a9c7297b6f988e50e87ccdf3765a668350e"}, + {file = "cloudpickle-3.1.1.tar.gz", hash = "sha256:b216fa8ae4019d5482a8ac3c95d8f6346115d8835911fd4aefd1a445e4242c64"}, ] [[package]] @@ -579,7 +600,7 @@ description = "CMake is an open-source, cross-platform family of tools designed optional = false python-versions = "*" groups = ["build"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "cmake-3.28.4-py2.py3-none-macosx_10_10_universal2.macosx_10_10_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:d642ee5e0f8e7252c75968bae3a1729dbbff6965f9dfb76d2f1611c583de14fd"}, {file = "cmake-3.28.4-py2.py3-none-manylinux2010_i686.manylinux_2_12_i686.whl", hash = "sha256:b45bc5d881727a6319d7f4b2b44e68e479ac76f18923a8eb551eb3869f2fe82a"}, @@ -614,7 +635,7 @@ files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -markers = {main = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and platform_system == \"Windows\"", dev = "sys_platform == \"win32\""} +markers = {main = "(python_version <= \"3.11\" or python_version >= \"3.12\") and (platform_system == \"Windows\" or sys_platform == \"win32\")", dev = "sys_platform == \"win32\" and python_version <= \"3.11\" or sys_platform == \"win32\" and python_version >= \"3.12\""} [[package]] name = "coloredlogs" @@ -623,7 +644,7 @@ description = "Colored terminal output for Python's logging module" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, @@ -635,6 +656,25 @@ humanfriendly = ">=9.1" [package.extras] cron = ["capturer (>=2.4)"] +[[package]] +name = "colorlog" +version = "6.9.0" +description = "Add colours to the output of Python's logging module." +optional = false +python-versions = ">=3.6" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "colorlog-6.9.0-py3-none-any.whl", hash = "sha256:5906e71acd67cb07a71e779c47c4bcb45fb8c2993eebe9e5adcd6a6f1b283eff"}, + {file = "colorlog-6.9.0.tar.gz", hash = "sha256:bfba54a1b93b94f54e1f4fe48395725a3d92fd2a4af702f6bd70946bdc0c6ac2"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} + +[package.extras] +development = ["black", "flake8", "mypy", "pytest", "types-colorama"] + [[package]] name = "coverage" version = "7.4.4" @@ -642,7 +682,7 @@ description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "coverage-7.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0be5efd5127542ef31f165de269f77560d6cdef525fffa446de6f7e9186cfb2"}, {file = "coverage-7.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ccd341521be3d1b3daeb41960ae94a5e87abe2f46f17224ba5d6f2b8398016cf"}, @@ -711,7 +751,7 @@ description = "cryptography is a package which provides cryptographic recipes an optional = false python-versions = ">=3.7" groups = ["main"] -markers = "sys_platform == \"linux\"" +markers = "sys_platform == \"linux\" and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:a30596bae9403a342c978fb47d9b0ee277699fa53bbafad14706af51fe543d16"}, {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b7ffe927ee6531c78f81aa17e684e2ff617daeba7f189f911065b2ea2d526dec"}, @@ -767,7 +807,7 @@ description = "Fast inference engine for Transformer models" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "ctranslate2-4.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b3154cb8bfd4f320ee6dcc5ec2962c020a649eb2311e0edb90bc720f0eab529"}, {file = "ctranslate2-4.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7e06cf9a0c6cf4e91c9edb1bdcb0c78fa9cd3fe5b18d7a380194e82f5881917c"}, @@ -808,12 +848,87 @@ description = "Python wrapper generator for ctypes" optional = false python-versions = ">=3.7" groups = ["build"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "ctypesgen-1.1.1-py3-none-any.whl", hash = "sha256:94cc6c89ccdd93a72a4c915266cde9a82bfe693331d9d880f66fe9d82af1fc87"}, {file = "ctypesgen-1.1.1.tar.gz", hash = "sha256:deaa2d64a95d90196a2e8a689cf9b952be6f3366f81e835245354bf9dbac92f6"}, ] +[[package]] +name = "cython" +version = "3.0.12" +description = "The Cython compiler for writing C extensions in the Python language." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "Cython-3.0.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba67eee9413b66dd9fbacd33f0bc2e028a2a120991d77b5fd4b19d0b1e4039b9"}, + {file = "Cython-3.0.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bee2717e5b5f7d966d0c6e27d2efe3698c357aa4d61bb3201997c7a4f9fe485a"}, + {file = "Cython-3.0.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7cffc3464f641c8d0dda942c7c53015291beea11ec4d32421bed2f13b386b819"}, + {file = "Cython-3.0.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d3a8f81980ffbd74e52f9186d8f1654e347d0c44bfea6b5997028977f481a179"}, + {file = "Cython-3.0.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8d32856716c369d01f2385ad9177cdd1a11079ac89ea0932dc4882de1aa19174"}, + {file = "Cython-3.0.12-cp310-cp310-win32.whl", hash = "sha256:712c3f31adec140dc60d064a7f84741f50e2c25a8edd7ae746d5eb4d3ef7072a"}, + {file = "Cython-3.0.12-cp310-cp310-win_amd64.whl", hash = "sha256:d6945694c5b9170cfbd5f2c0d00ef7487a2de7aba83713a64ee4ebce7fad9e05"}, + {file = "Cython-3.0.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:feb86122a823937cc06e4c029d80ff69f082ebb0b959ab52a5af6cdd271c5dc3"}, + {file = "Cython-3.0.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfdbea486e702c328338314adb8e80f5f9741f06a0ae83aaec7463bc166d12e8"}, + {file = "Cython-3.0.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:563de1728c8e48869d2380a1b76bbc1b1b1d01aba948480d68c1d05e52d20c92"}, + {file = "Cython-3.0.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:398d4576c1e1f6316282aa0b4a55139254fbed965cba7813e6d9900d3092b128"}, + {file = "Cython-3.0.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1e5eadef80143026944ea8f9904715a008f5108d1d644a89f63094cc37351e73"}, + {file = "Cython-3.0.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5a93cbda00a5451175b97dea5a9440a3fcee9e54b4cba7a7dbcba9a764b22aec"}, + {file = "Cython-3.0.12-cp311-cp311-win32.whl", hash = "sha256:3109e1d44425a2639e9a677b66cd7711721a5b606b65867cb2d8ef7a97e2237b"}, + {file = "Cython-3.0.12-cp311-cp311-win_amd64.whl", hash = "sha256:d4b70fc339adba1e2111b074ee6119fe9fd6072c957d8597bce9a0dd1c3c6784"}, + {file = "Cython-3.0.12-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fe030d4a00afb2844f5f70896b7f2a1a0d7da09bf3aa3d884cbe5f73fff5d310"}, + {file = "Cython-3.0.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7fec4f052b8fe173fe70eae75091389955b9a23d5cec3d576d21c5913b49d47"}, + {file = "Cython-3.0.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0faa5e39e5c8cdf6f9c3b1c3f24972826e45911e7f5b99cf99453fca5432f45e"}, + {file = "Cython-3.0.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d53de996ed340e9ab0fc85a88aaa8932f2591a2746e1ab1c06e262bd4ec4be7"}, + {file = "Cython-3.0.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ea3a0e19ab77266c738aa110684a753a04da4e709472cadeff487133354d6ab8"}, + {file = "Cython-3.0.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c151082884be468f2f405645858a857298ac7f7592729e5b54788b5c572717ba"}, + {file = "Cython-3.0.12-cp312-cp312-win32.whl", hash = "sha256:3083465749911ac3b2ce001b6bf17f404ac9dd35d8b08469d19dc7e717f5877a"}, + {file = "Cython-3.0.12-cp312-cp312-win_amd64.whl", hash = "sha256:c0b91c7ebace030dd558ea28730de8c580680b50768e5af66db2904a3716c3e3"}, + {file = "Cython-3.0.12-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4ee6f1ea1bead8e6cbc4e64571505b5d8dbdb3b58e679d31f3a84160cebf1a1a"}, + {file = "Cython-3.0.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57aefa6d3341109e46ec1a13e3a763aaa2cbeb14e82af2485b318194be1d9170"}, + {file = "Cython-3.0.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:879ae9023958d63c0675015369384642d0afb9c9d1f3473df9186c42f7a9d265"}, + {file = "Cython-3.0.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:36fcd584dae547de6f095500a380f4a0cce72b7a7e409e9ff03cb9beed6ac7a1"}, + {file = "Cython-3.0.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:62b79dcc0de49efe9e84b9d0e2ae0a6fc9b14691a65565da727aa2e2e63c6a28"}, + {file = "Cython-3.0.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4aa255781b093a8401109d8f2104bbb2e52de7639d5896aefafddc85c30e0894"}, + {file = "Cython-3.0.12-cp313-cp313-win32.whl", hash = "sha256:77d48f2d4bab9fe1236eb753d18f03e8b2619af5b6f05d51df0532a92dfb38ab"}, + {file = "Cython-3.0.12-cp313-cp313-win_amd64.whl", hash = "sha256:86c304b20bd57c727c7357e90d5ba1a2b6f1c45492de2373814d7745ef2e63b4"}, + {file = "Cython-3.0.12-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ff5c0b6a65b08117d0534941d404833d516dac422eee88c6b4fd55feb409a5ed"}, + {file = "Cython-3.0.12-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:680f1d6ed4436ae94805db264d6155ed076d2835d84f20dcb31a7a3ad7f8668c"}, + {file = "Cython-3.0.12-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc24609613fa06d0d896309f7164ba168f7e8d71c1e490ed2a08d23351c3f41"}, + {file = "Cython-3.0.12-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1879c073e2b34924ce9b7ca64c212705dcc416af4337c45f371242b2e5f6d32"}, + {file = "Cython-3.0.12-cp36-cp36m-musllinux_1_2_aarch64.whl", hash = "sha256:bfb75123dd4ff767baa37d7036da0de2dfb6781ff256eef69b11b88b9a0691d1"}, + {file = "Cython-3.0.12-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:f39640f8df0400cde6882e23c734f15bb8196de0a008ae5dc6c8d1ec5957d7c8"}, + {file = "Cython-3.0.12-cp36-cp36m-win32.whl", hash = "sha256:8c9efe9a0895abee3cadfdad4130b30f7b5e57f6e6a51ef2a44f9fc66a913880"}, + {file = "Cython-3.0.12-cp36-cp36m-win_amd64.whl", hash = "sha256:63d840f2975e44d74512f8f34f1f7cb8121c9428e26a3f6116ff273deb5e60a2"}, + {file = "Cython-3.0.12-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:75c5acd40b97cff16fadcf6901a91586cbca5dcdba81f738efaf1f4c6bc8dccb"}, + {file = "Cython-3.0.12-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e62564457851db1c40399bd95a5346b9bb99e17a819bf583b362f418d8f3457a"}, + {file = "Cython-3.0.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ccd1228cc203b1f1b8a3d403f5a20ad1c40e5879b3fbf5851ce09d948982f2c"}, + {file = "Cython-3.0.12-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25529ee948f44d9a165ff960c49d4903267c20b5edf2df79b45924802e4cca6e"}, + {file = "Cython-3.0.12-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:90cf599372c5a22120609f7d3a963f17814799335d56dd0dcf8fe615980a8ae1"}, + {file = "Cython-3.0.12-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:9f8c48748a9c94ea5d59c26ab49ad0fad514d36f894985879cf3c3ca0e600bf4"}, + {file = "Cython-3.0.12-cp37-cp37m-win32.whl", hash = "sha256:3e4fa855d98bc7bd6a2049e0c7dc0dcf595e2e7f571a26e808f3efd84d2db374"}, + {file = "Cython-3.0.12-cp37-cp37m-win_amd64.whl", hash = "sha256:120681093772bf3600caddb296a65b352a0d3556e962b9b147efcfb8e8c9801b"}, + {file = "Cython-3.0.12-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:731d719423e041242c9303c80cae4327467299b90ffe62d4cc407e11e9ea3160"}, + {file = "Cython-3.0.12-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3238a29f37999e27494d120983eca90d14896b2887a0bd858a381204549137a"}, + {file = "Cython-3.0.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b588c0a089a9f4dd316d2f9275230bad4a7271e5af04e1dc41d2707c816be44b"}, + {file = "Cython-3.0.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ab9f5198af74eb16502cc143cdde9ca1cbbf66ea2912e67440dd18a36e3b5fa"}, + {file = "Cython-3.0.12-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8ee841c0e114efa1e849c281ac9b8df8aa189af10b4a103b1c5fd71cbb799679"}, + {file = "Cython-3.0.12-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:43c48b5789398b228ea97499f5b864843ba9b1ab837562a9227c6f58d16ede8b"}, + {file = "Cython-3.0.12-cp38-cp38-win32.whl", hash = "sha256:5e5f17c48a4f41557fbcc7ee660ccfebe4536a34c557f553b6893c1b3c83df2d"}, + {file = "Cython-3.0.12-cp38-cp38-win_amd64.whl", hash = "sha256:309c081057930bb79dc9ea3061a1af5086c679c968206e9c9c2ec90ab7cb471a"}, + {file = "Cython-3.0.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54115fcc126840926ff3b53cfd2152eae17b3522ae7f74888f8a41413bd32f25"}, + {file = "Cython-3.0.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:629db614b9c364596d7c975fa3fb3978e8c5349524353dbe11429896a783fc1e"}, + {file = "Cython-3.0.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af081838b0f9e12a83ec4c3809a00a64c817f489f7c512b0e3ecaf5f90a2a816"}, + {file = "Cython-3.0.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:34ce459808f7d8d5d4007bc5486fe50532529096b43957af6cbffcb4d9cc5c8d"}, + {file = "Cython-3.0.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d6c6cd6a75c8393e6805d17f7126b96a894f310a1a9ea91c47d141fb9341bfa8"}, + {file = "Cython-3.0.12-cp39-cp39-win32.whl", hash = "sha256:a4032e48d4734d2df68235d21920c715c451ac9de15fa14c71b378e8986b83be"}, + {file = "Cython-3.0.12-cp39-cp39-win_amd64.whl", hash = "sha256:dcdc3e5d4ce0e7a4af6903ed580833015641e968d18d528d8371e2435a34132c"}, + {file = "Cython-3.0.12-py2.py3-none-any.whl", hash = "sha256:0038c9bae46c459669390e53a1ec115f8096b2e4647ae007ff1bf4e6dee92806"}, + {file = "cython-3.0.12.tar.gz", hash = "sha256:b988bb297ce76c671e28c97d017b95411010f7c77fa6623dd0bb47eed1aee1bc"}, +] + [[package]] name = "darkdetect" version = "0.8.0" @@ -821,7 +936,7 @@ description = "Detect OS Dark Mode from Python" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "darkdetect-0.8.0-py3-none-any.whl", hash = "sha256:a7509ccf517eaad92b31c214f593dbcf138ea8a43b2935406bbd565e15527a85"}, {file = "darkdetect-0.8.0.tar.gz", hash = "sha256:b5428e1170263eb5dea44c25dc3895edd75e6f52300986353cd63533fe7df8b1"}, @@ -837,7 +952,7 @@ description = "Easily serialize dataclasses to and from JSON." optional = false python-versions = ">=3.7,<4.0" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "dataclasses_json-0.6.4-py3-none-any.whl", hash = "sha256:f90578b8a3177f7552f4e1a6e535e84293cd5da421fcce0642d49c0d7bdf8df2"}, {file = "dataclasses_json-0.6.4.tar.gz", hash = "sha256:73696ebf24936560cca79a2430cbc4f3dd23ac7bf46ed17f38e5e5e7657a6377"}, @@ -849,12 +964,12 @@ typing-inspect = ">=0.4.0,<1" [[package]] name = "demucs" -version = "4.1.0a2" +version = "4.1.0a3" description = "Music source separation in the waveform domain." optional = false python-versions = ">=3.8.0" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [] develop = false @@ -865,18 +980,62 @@ julius = ">=0.2.3" lameenc = ">=1.2" openunmix = "*" pyyaml = "*" -torch = "2.2.1" -torchaudio = "2.2.1" +torch = ">=1.8.1" +torchaudio = ">=0.8,<2.3.1" tqdm = "*" [package.extras] -dev = ["diffq (>=0.2.1)", "dora-search (>=0.1.12)", "einops", "flake8", "hydra-colorlog (>=1.1)", "hydra-core (>=1.1)", "julius (>=0.2.3)", "lameenc (>=1.2)", "museval", "mypy", "openunmix", "pyyaml", "soundfile (>=0.10.3)", "submitit", "torch (==2.2.1)", "torchaudio (==2.2.1)", "tqdm", "treetable"] +dev = ["diffq (>=0.2.1)", "dora-search (>=0.1.12)", "einops", "flake8", "hydra-colorlog (>=1.1)", "hydra-core (>=1.1)", "julius (>=0.2.3)", "lameenc (>=1.2)", "museval", "mypy", "openunmix", "pyyaml", "soundfile (>=0.10.3)", "submitit", "torch (>=1.8.1)", "torchaudio (>=0.8,<2.3.1)", "tqdm", "treetable"] [package.source] -type = "git" -url = "https://github.com/raivisdejus/demucs" -reference = "27c6425" -resolved_reference = "27c642565e02a0381780bf3583b937581817a74a" +type = "directory" +url = "demucs" + +[[package]] +name = "diffq" +version = "0.2.4" +description = "Differentiable quantization framework for PyTorch." +optional = false +python-versions = ">=3.7.0" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "diffq-0.2.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d8e6d6b882dd93568b41a7da9ff9657845ec08c82e71460544d0d04ed112320"}, + {file = "diffq-0.2.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:15d5055ebfc629914689d66fcfa36f6d751fd45b4b2331ba0d3390604e2b40fa"}, + {file = "diffq-0.2.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf990911fc2c932e505df9958ce50417f182fe9178b2dbe329173b29e6521727"}, + {file = "diffq-0.2.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d62ffd89498611dbf32cde417f5fc8d222f450085b06afb4e8764307906ab2ca"}, + {file = "diffq-0.2.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:71a374573ec064227665208a5892d88032cb18736f68560d5522e0c48138ced1"}, + {file = "diffq-0.2.4-cp310-cp310-win32.whl", hash = "sha256:1480ea49785dfdcc793a3f20043aba430f510d51487063e3617020f5a2d2a753"}, + {file = "diffq-0.2.4-cp310-cp310-win_amd64.whl", hash = "sha256:3467622841b15ece3d953fa42ad65f41703afe30e777bb910b96c89125174c8e"}, + {file = "diffq-0.2.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3aef094383d39e12508ddf61c45a377986b2d4bac26ee553b6504fee10e2ff9d"}, + {file = "diffq-0.2.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0729231949ec74641709ad9b713ba127898735ba20ec8f44677d984d2ce1c3b9"}, + {file = "diffq-0.2.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d6779a81fcb8045d006a5f309c52a34e48fefb73db99232b4b1452a8829c083c"}, + {file = "diffq-0.2.4-cp37-cp37m-win32.whl", hash = "sha256:36f568bb1bbf75ac5601115e6253828c8c7b21a0501d7fcdc3b9545f80dc74f7"}, + {file = "diffq-0.2.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ee7f31d56f5131c2577dfa7bdb7d7284c5cce031fca0e30ac10d248b3e0e6841"}, + {file = "diffq-0.2.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:de84917882a3def0d71548e5366813f7e25a7b110d2085fe0b0fa4c9877f5098"}, + {file = "diffq-0.2.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8937f15e45464fd899e9b3a6b1b57700c977367caf50a626f872dbb7883e3c1c"}, + {file = "diffq-0.2.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8ff6ff92f3978770b0d2d355a5e553a554ea22732236cda9171c0683e5da5577"}, + {file = "diffq-0.2.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b0cf50749d1a80fb74ee9e5135e08f06b519ab57f5b725bb374b2866412b725"}, + {file = "diffq-0.2.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0381dedef3b88b4910eedfd894610ecac9affd689c2191c96694b70b3366dd27"}, + {file = "diffq-0.2.4-cp38-cp38-win32.whl", hash = "sha256:e793fed11642fdb4909efc0f87f2dbb52808dc5fa9865d7fcadb93ec5fd3aacd"}, + {file = "diffq-0.2.4-cp38-cp38-win_amd64.whl", hash = "sha256:7566f823bda2f3f786dfea1ca2cfaa9663b854ccafcb1b185a4370690b628cf5"}, + {file = "diffq-0.2.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:967a30e3a9da922d8705c3dbf44bb82d5b76a3ad49ecaa4c9450d97479fe8a31"}, + {file = "diffq-0.2.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:78124e86f1e208830bfebe744c2321d92c65ba5d7e125d260ed418b4a2fa93df"}, + {file = "diffq-0.2.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ce966eb21bbb983e5bf5957c5832cad57d0968b7c5602da4065c3d1603ef8a95"}, + {file = "diffq-0.2.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:02268472f1646cafe4fb3feaad9ac519f7e65d617871a58b56e71bc552fc8fb3"}, + {file = "diffq-0.2.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a5fc5cf4967d7cea065e75d2044824137ad08f1ccf7571d871cbf03bcf8809bd"}, + {file = "diffq-0.2.4-cp39-cp39-win32.whl", hash = "sha256:71575ca7202628ee1380a993aebee7e15c23ee12a96bc1a4dd1bff023aafdee2"}, + {file = "diffq-0.2.4-cp39-cp39-win_amd64.whl", hash = "sha256:9729121832c9abbbf4c443effe4e2c2952c48170d8c8255d79012d236c8dcd6d"}, + {file = "diffq-0.2.4.tar.gz", hash = "sha256:049064861e974ebf00d0badab8b324c775037371419eda3150985b9d477b5bd2"}, +] + +[package.dependencies] +Cython = "*" +numpy = "*" +torch = "*" + +[package.extras] +dev = ["coverage", "flake8", "pdoc3", "torchvision"] [[package]] name = "dill" @@ -885,7 +1044,7 @@ description = "serialize all of Python" optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, @@ -902,7 +1061,7 @@ description = "Distribution utilities" optional = false python-versions = "*" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, @@ -915,7 +1074,7 @@ description = "Distro - an OS platform information API" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, @@ -928,7 +1087,7 @@ description = "Easy grid searches for ML." optional = false python-versions = ">=3.7.0" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "dora_search-0.1.12.tar.gz", hash = "sha256:2956fd2c4c7e4b9a4830e83f0d4cf961be45cfba1a2f0570281e91d15ac516fb"}, ] @@ -945,15 +1104,15 @@ dev = ["coverage", "flake8", "hiplot", "hydra-core", "hydra_colorlog", "mypy", " [[package]] name = "einops" -version = "0.8.0" +version = "0.8.1" description = "A new flavour of deep learning operations" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ - {file = "einops-0.8.0-py3-none-any.whl", hash = "sha256:9572fb63046264a862693b0a87088af3bdc8c068fde03de63453cbbde245465f"}, - {file = "einops-0.8.0.tar.gz", hash = "sha256:63486517fed345712a8385c100cb279108d9d47e6ae59099b07657e983deae85"}, + {file = "einops-0.8.1-py3-none-any.whl", hash = "sha256:919387eb55330f5757c6bea9165c5ff5cfe63a642682ea788a6d472576d81737"}, + {file = "einops-0.8.1.tar.gz", hash = "sha256:de5d960a7a761225532e0f1959e5315ebeafc0cd43394732f103ca44b9837e84"}, ] [[package]] @@ -979,7 +1138,7 @@ description = "Faster Whisper transcription with CTranslate2" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "faster-whisper-1.1.0.tar.gz", hash = "sha256:cea4bba5d4527173fdbacafa56f2ffb17dd322688f6c3fdf5fd7b6b6c193ce17"}, {file = "faster_whisper-1.1.0-py3-none-any.whl", hash = "sha256:0f2d025676bbff1e46c4108b6f9a82578d6e33826c174af2990e45b33fab6182"}, @@ -997,6 +1156,25 @@ tqdm = "*" conversion = ["transformers[torch] (>=4.23)"] dev = ["black (==23.*)", "flake8 (==6.*)", "isort (==5.*)", "pytest (==7.*)"] +[[package]] +name = "ffmpeg-python" +version = "0.2.0" +description = "Python bindings for FFmpeg - with complex filtering support" +optional = false +python-versions = "*" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "ffmpeg-python-0.2.0.tar.gz", hash = "sha256:65225db34627c578ef0e11c8b1eb528bb35e024752f6f10b78c011f6f64c4127"}, + {file = "ffmpeg_python-0.2.0-py3-none-any.whl", hash = "sha256:ac441a0404e053f8b6a1113a77c0f452f1cfc62f6344a769475ffdc0f56c23c5"}, +] + +[package.dependencies] +future = "*" + +[package.extras] +dev = ["Sphinx (==2.1.0)", "future (==0.17.1)", "numpy (==1.16.4)", "pytest (==4.6.1)", "pytest-mock (==1.10.4)", "tox (==3.12.1)"] + [[package]] name = "filelock" version = "3.13.1" @@ -1004,7 +1182,7 @@ description = "A platform independent file lock." optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, @@ -1015,6 +1193,24 @@ docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1 testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] typing = ["typing-extensions (>=4.8)"] +[[package]] +name = "flake8" +version = "7.1.2" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.8.1" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "flake8-7.1.2-py2.py3-none-any.whl", hash = "sha256:1cbc62e65536f65e6d754dfe6f1bada7f5cf392d6f5db3c2b85892466c3e7c1a"}, + {file = "flake8-7.1.2.tar.gz", hash = "sha256:c586ffd0b41540951ae41af572e6790dbd49fc12b3aa2541685d253d9bd504bd"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.12.0,<2.13.0" +pyflakes = ">=3.2.0,<3.3.0" + [[package]] name = "flatbuffers" version = "24.3.7" @@ -1022,7 +1218,7 @@ description = "The FlatBuffers serialization format for Python" optional = false python-versions = "*" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "flatbuffers-24.3.7-py2.py3-none-any.whl", hash = "sha256:80c4f5dcad0ee76b7e349671a0d657f2fbba927a0244f88dd3f5ed6a3694e1fc"}, {file = "flatbuffers-24.3.7.tar.gz", hash = "sha256:0895c22b9a6019ff2f4de2e5e2f7cd15914043e6e7033a94c0c6369422690f22"}, @@ -1035,7 +1231,7 @@ description = "File-system specification" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "fsspec-2024.3.1-py3-none-any.whl", hash = "sha256:918d18d41bf73f0e2b261824baeb1b124bcf771767e3a26425cd7dec3332f512"}, {file = "fsspec-2024.3.1.tar.gz", hash = "sha256:f39780e282d7d117ffb42bb96992f8a90795e4d0fb0f661a70ca39fe9c43ded9"}, @@ -1065,6 +1261,19 @@ smb = ["smbprotocol"] ssh = ["paramiko"] tqdm = ["tqdm"] +[[package]] +name = "future" +version = "1.0.0" +description = "Clean single-source support for Python 3 and 2" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "future-1.0.0-py3-none-any.whl", hash = "sha256:929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216"}, + {file = "future-1.0.0.tar.gz", hash = "sha256:bd2968309307861edae1458a4f8a4f3598c03be43b97521076aebf5d94c07b05"}, +] + [[package]] name = "h11" version = "0.14.0" @@ -1072,7 +1281,7 @@ description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, @@ -1085,7 +1294,7 @@ description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "httpcore-1.0.4-py3-none-any.whl", hash = "sha256:ac418c1db41bade2ad53ae2f3834a3a0f5ae76b56cf5aa497d2d033384fc7d73"}, {file = "httpcore-1.0.4.tar.gz", hash = "sha256:cb2839ccfcba0d2d3c1131d3c3e26dfc327326fbe7a5dc0dbfe9f6c9151bb022"}, @@ -1108,7 +1317,7 @@ description = "The next generation HTTP client." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, @@ -1134,7 +1343,7 @@ description = "Client library to download and publish models, datasets and other optional = false python-versions = ">=3.8.0" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "huggingface_hub-0.26.2-py3-none-any.whl", hash = "sha256:98c2a5a8e786c7b2cb6fdeb2740893cba4d53e312572ed3d8afafda65b128c46"}, {file = "huggingface_hub-0.26.2.tar.gz", hash = "sha256:b100d853465d965733964d123939ba287da60a547087783ddff8a323f340332b"}, @@ -1170,7 +1379,7 @@ description = "Human friendly output for text interfaces using Python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, @@ -1186,7 +1395,7 @@ description = "Python humanize utilities" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "humanize-4.9.0-py3-none-any.whl", hash = "sha256:ce284a76d5b1377fd8836733b983bfb0b76f1aa1c090de2566fcf008d7f6ab16"}, {file = "humanize-4.9.0.tar.gz", hash = "sha256:582a265c931c683a7e9b8ed9559089dea7edcf6cc95be39a3cbc2c5d5ac2bcfa"}, @@ -1195,6 +1404,41 @@ files = [ [package.extras] tests = ["freezegun", "pytest", "pytest-cov"] +[[package]] +name = "hydra-colorlog" +version = "1.2.0" +description = "Enables colorlog for Hydra apps" +optional = false +python-versions = "*" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "hydra-colorlog-1.2.0.tar.gz", hash = "sha256:d44f85008fabd2448c7e3b496c31b44d7610560f6fff74f3673afaa949870899"}, + {file = "hydra_colorlog-1.2.0-py3-none-any.whl", hash = "sha256:33d05fc11ca9bc7a5d69cfb3c8fb395a1bc52fa1dfe7aca6a6f5ffb57f6e7c4b"}, +] + +[package.dependencies] +colorlog = "*" +hydra-core = ">=1.0.0" + +[[package]] +name = "hydra-core" +version = "1.3.2" +description = "A framework for elegantly configuring complex applications" +optional = false +python-versions = "*" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "hydra-core-1.3.2.tar.gz", hash = "sha256:8a878ed67216997c3e9d88a8e72e7b4767e81af37afb4ea3334b269a4390a824"}, + {file = "hydra_core-1.3.2-py3-none-any.whl", hash = "sha256:fa0238a9e31df3373b35b0bfb672c34cc92718d21f81311d8996a16de1141d8b"}, +] + +[package.dependencies] +antlr4-python3-runtime = "==4.9.*" +omegaconf = ">=2.2,<2.4" +packaging = "*" + [[package]] name = "identify" version = "2.5.35" @@ -1202,7 +1446,7 @@ description = "File identification library for Python" optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "identify-2.5.35-py2.py3-none-any.whl", hash = "sha256:c4de0081837b211594f8e877a6b4fad7ca32bbfc1a9307fdd61c28bfe923f13e"}, {file = "identify-2.5.35.tar.gz", hash = "sha256:10a7ca245cfcd756a554a7288159f72ff105ad233c7c4b9c6f0f4d108f5f6791"}, @@ -1218,7 +1462,7 @@ description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, @@ -1235,7 +1479,7 @@ files = [ {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"}, {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"}, ] -markers = {main = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and python_version < \"3.12\"", dev = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and python_version < \"3.10\""} +markers = {main = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and python_version <= \"3.11\"", dev = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and python_version < \"3.10\""} [package.dependencies] zipp = ">=0.5" @@ -1252,7 +1496,7 @@ description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, @@ -1265,7 +1509,7 @@ description = "A Python utility / library to sort Python imports." optional = false python-versions = ">=3.8.0" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, @@ -1281,7 +1525,7 @@ description = "Utility functions for Python class constructs" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "jaraco.classes-3.3.1-py3-none-any.whl", hash = "sha256:86b534de565381f6b3c1c830d13f931d7be1a75f0081c57dff615578676e2206"}, {file = "jaraco.classes-3.3.1.tar.gz", hash = "sha256:cb28a5ebda8bc47d8c8015307d93163464f9f2b91ab4006e09ff0ce07e8bfb30"}, @@ -1301,7 +1545,7 @@ description = "Context managers by jaraco" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "jaraco.context-4.3.0-py3-none-any.whl", hash = "sha256:5d9e95ca0faa78943ed66f6bc658dd637430f16125d86988e77844c741ff2f11"}, {file = "jaraco.context-4.3.0.tar.gz", hash = "sha256:4dad2404540b936a20acedec53355bdaea223acb88fd329fa6de9261c941566e"}, @@ -1318,7 +1562,7 @@ description = "Functools like those found in stdlib" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "jaraco.functools-4.0.0-py3-none-any.whl", hash = "sha256:daf276ddf234bea897ef14f43c4e1bf9eefeac7b7a82a4dd69228ac20acff68d"}, {file = "jaraco.functools-4.0.0.tar.gz", hash = "sha256:c279cb24c93d694ef7270f970d499cab4d3813f4e08273f95398651a634f0925"}, @@ -1338,7 +1582,7 @@ description = "Low-level, pure Python DBus protocol wrapper." optional = false python-versions = ">=3.7" groups = ["main"] -markers = "sys_platform == \"linux\"" +markers = "sys_platform == \"linux\" and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "jeepney-0.8.0-py3-none-any.whl", hash = "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755"}, {file = "jeepney-0.8.0.tar.gz", hash = "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806"}, @@ -1355,7 +1599,7 @@ description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, @@ -1367,6 +1611,45 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "jsonschema" +version = "4.23.0" +description = "An implementation of JSON Schema validation for Python" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, + {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +jsonschema-specifications = ">=2023.03.6" +referencing = ">=0.28.4" +rpds-py = ">=0.7.1" + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"] + +[[package]] +name = "jsonschema-specifications" +version = "2024.10.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, + {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, +] + +[package.dependencies] +referencing = ">=0.31.0" + [[package]] name = "julius" version = "0.2.7" @@ -1374,7 +1657,7 @@ description = "Nice DSP sweets: resampling, FFT Convolutions. All with PyTorch, optional = false python-versions = ">=3.6.0" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "julius-0.2.7.tar.gz", hash = "sha256:3c0f5f5306d7d6016fcc95196b274cae6f07e2c9596eed314e4e7641554fbb08"}, ] @@ -1392,7 +1675,7 @@ description = "Store and access your passwords safely." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "keyring-25.0.0-py3-none-any.whl", hash = "sha256:9a15cd280338920388e8c1787cb8792b9755dabb3e7c61af5ac1f8cd437cefde"}, {file = "keyring-25.0.0.tar.gz", hash = "sha256:fc024ed53c7ea090e30723e6bd82f58a39dc25d9a6797d866203ecd0ee6306cb"}, @@ -1414,82 +1697,74 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-ena [[package]] name = "lameenc" -version = "1.7.0" +version = "1.8.1" description = "LAME encoding bindings" optional = false python-versions = "*" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ - {file = "lameenc-1.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:666dae5544b82b7c7e2d45ee82b0b74a3b5d46c62f79df603a30f4b633c78556"}, - {file = "lameenc-1.7.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:73ba7b02685d9c17a3b083622b85c859f9db35254d4ea9ee8305d4a8d321876b"}, - {file = "lameenc-1.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:367c152dd1dc54c2d6c42837c1c149b0173eb4225e4782f88b1a391c95ff97af"}, - {file = "lameenc-1.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7b34c529d719bf303ace7ec169965c516b0b94922837cf67f60a73931f1f4580"}, - {file = "lameenc-1.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ed1f49416e9531a49f462923ca0d2ae14baf9ceea0384cba2c5f9f1090f0df31"}, - {file = "lameenc-1.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3274cade2d3f00cc49748b968660e1297eaca2d15911deb566cc378ffa4e7d8b"}, - {file = "lameenc-1.7.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:790c250086dd38b26860ccb5574ad0f2c625b52bb9f2a367e07e50ffbf3de832"}, - {file = "lameenc-1.7.0-cp310-cp310-win32.whl", hash = "sha256:8b712902e02ea03e9a5272ee008062b08d99129e7a00a369b90848a9bfab050f"}, - {file = "lameenc-1.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:c8fd147d1faa904cb0b8ba3b038ab795daebec46147b2b9e3891dbb427084f5c"}, - {file = "lameenc-1.7.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5a5b322d82dfdf6132c563e1fa352487c82a0bb1e93dff8ef634c867c94d82ad"}, - {file = "lameenc-1.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7a582a1f356c83be526ba97ce8465553cc55524992325ab1641b3ee0428e6453"}, - {file = "lameenc-1.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:e3399b72c8adb965405aeb8ccc614db9b94e5842426289166c4fbf2588cf1e74"}, - {file = "lameenc-1.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:93eedf217db3832ead5ea28ad89b2f4dd3d79e3a7d5641d09dbeeeffe6283768"}, - {file = "lameenc-1.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:63a2ce2d63706d766ad1686fbc5e12c807c027b7ccfc97de9b9a81f58216e770"}, - {file = "lameenc-1.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c2cb91af4b25b3d650781e681032c469fd38979b180eddfbf5a55322372d71b9"}, - {file = "lameenc-1.7.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:e67f5e985d940f9f8037823e6a629a18acbfe02d0fcd68a8fc113ed46a555aa5"}, - {file = "lameenc-1.7.0-cp311-cp311-win32.whl", hash = "sha256:c835438c0e8b8d680e871095cec143abf655d071b1bb60ccf7a8e08245acd877"}, - {file = "lameenc-1.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:93f426a565e666227303257db67287f33836872dee62d982d521d8972467df46"}, - {file = "lameenc-1.7.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ff9b6e1fed60a1e1f54861b51628a5c99a4ebc8be76462b8995c7cae99722ec5"}, - {file = "lameenc-1.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a14a5f449cc32158ac2fd557a21b6a35dd1cb077e0372ede69572740f9b67905"}, - {file = "lameenc-1.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b425fec9430a0aa55877d8787f82b47ff2c5d2a36663a4ca562103d7bbaeb23a"}, - {file = "lameenc-1.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:002742147c99e819be4feb8ab05da08ff57f0f76480746ddc83f6a2c09d2639d"}, - {file = "lameenc-1.7.0-cp312-cp312-win32.whl", hash = "sha256:bbabad75799e62638c0e55537e50ceba81456600ce04fb604c006c1b7399e8c1"}, - {file = "lameenc-1.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:0faf238be8044ee706d5f410e19ca1ae38fafa75dedcdc69ed764964d01c8d8b"}, - {file = "lameenc-1.7.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:c194dd436ed1894e325f3cb8baebf76cfa5ee867810c3fb8af2a76a62e219ac1"}, - {file = "lameenc-1.7.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eec093a6673c7eebeebc269d7735ea09ec9cfda696ff92959b33bc1117b26954"}, - {file = "lameenc-1.7.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:2bed2133410206f61780c412e49c218bf40179016de0284f61ed5bead3cce95a"}, - {file = "lameenc-1.7.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:96e54919790e2b4e3519f1696ac19a5efb864c0621e7a2baf89ecfa95908e044"}, - {file = "lameenc-1.7.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:26799cc2dac7d972f354489f33a5ab99d5ca4791edd1b0b3bd87e89bfa22f34f"}, - {file = "lameenc-1.7.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:62ec507686326a6baec8b997070e96328ba8ff03abdc688e36ab47114883a223"}, - {file = "lameenc-1.7.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e00c8771be3e002a539fd534f8df063a2dafc2d679803a7a4dfd7886ffa4304"}, - {file = "lameenc-1.7.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:be3cf0820f278996680a48d163f781e85431704c0551d90780b165798f2ea1c5"}, - {file = "lameenc-1.7.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8bc05b160603665e570f2d8dd6a70dc6e337cb59dbd5e9a72044afb92c629096"}, - {file = "lameenc-1.7.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:0d6c195df3f22e39dd2e2963858b0f6a73db8b993ca4f1996c5c147d386c6151"}, - {file = "lameenc-1.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2b18015e33d9530f47bdefc1a0dc91e4a8b94a3b0ff5fbdcac82b64b170388e8"}, - {file = "lameenc-1.7.0-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:d63cd0f1b52b7719b212d9fe8c1fdeb8aa8618b9f943e628001981c235ae8722"}, - {file = "lameenc-1.7.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:1ecd67a8270075885b5b6f3cdf0c4bb3fb0a4589a679e55298f2606ee2fcb5ce"}, - {file = "lameenc-1.7.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbbe822069bfadb4608c11a578f027f9c8ba01182332cd538a8ee55cf5d3bf23"}, - {file = "lameenc-1.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:110b781e7916849eb430411180ac8c3821ffc7e0d15a18b3f26129e1aff2ce8f"}, - {file = "lameenc-1.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f84bdcc3daa0b7635ba2a41d995b321b5d00b6637c89886f88e1d88e356c9baa"}, - {file = "lameenc-1.7.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:e6c6a934754ed32a7680aaaf15f7fd20e29575239b93a23ee86dafa9b0143608"}, - {file = "lameenc-1.7.0-cp38-cp38-win32.whl", hash = "sha256:4193472c4ec50397b234284551b52af23dd6f998634e0bd75e2caad5bb85ace7"}, - {file = "lameenc-1.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:ff836d4964cc2f7197a14dfc8e2d3787f5e37f1d809ed914995a95ea24abce8f"}, - {file = "lameenc-1.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c4dc7b13e871f9d4667be161823082f87c05252b36c1f1e3e0088765f0e81b5b"}, - {file = "lameenc-1.7.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:6667cfe1ab6c15960cfe5fdc6ffdc6c1818d1385da143fcb0692218500b60b1e"}, - {file = "lameenc-1.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d46fea0110812e89a4add722bc18e20e8146843395f9b4b9fad9f98a6ccf327e"}, - {file = "lameenc-1.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3f8e056d48f07bd17eecca11643c59aaf2804f6c1f822e4ab5b2bf5a313ef1a4"}, - {file = "lameenc-1.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:4926c2b50b384c7640c78757b89a7faaccc6a6fcde5fd9016b554f946522e157"}, - {file = "lameenc-1.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2d89e63c88e5a224299b310ac9430c2c2e16ca4f2b479e65baf4f17c92928e2a"}, - {file = "lameenc-1.7.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:6cec7e369067d54528b98023fb75c26cd539bbc9292e73fe58516b6964b35db5"}, - {file = "lameenc-1.7.0-cp39-cp39-win32.whl", hash = "sha256:53f1dc2574052354baecf07ba8d2da71dd9aab310c3efc8e029dae13be22a29f"}, - {file = "lameenc-1.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:c3589924788e26afd55a1faa3947ba70167d9ba9901d42ba2b372922999e0ea6"}, - {file = "lameenc-1.7.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f51808bd3f2da74ce586ef3e3bcae8b77a4a59e9c476a46681d7c052c1c2211"}, - {file = "lameenc-1.7.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c74611af25522db4bcca9221254151ed6133847aa355595152d343d430dd888b"}, - {file = "lameenc-1.7.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:5bf4632fed752eca67c93d8ce89098cec8a58706d995151f27eec493771c4856"}, - {file = "lameenc-1.7.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:29c9cc3c9012cf52640c071fc519f4b55c40e87b4e07f43ff80e939e6f6baae4"}, - {file = "lameenc-1.7.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a2d88a1e32246f6071ad18dc42c6a9a2af2d8a600de561a887d4dc3d335b2f3d"}, - {file = "lameenc-1.7.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9edec7fef66d0e1bd25690780ef697c3bea15f4f614e04de3fd930d558c43833"}, - {file = "lameenc-1.7.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:6b7e0d28c3982eabf9fd8c51f19593c4c1684bb0e261482284a3fd56134bc302"}, - {file = "lameenc-1.7.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:a84335effaa1f56202a359b9fb2524e4e486e3c37c72a66647626220b22e34bb"}, - {file = "lameenc-1.7.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d089d5c2ae6430531e2dad49d9d4bfa06ff5e6ee9a2b24f1e1ccb5c942be200b"}, - {file = "lameenc-1.7.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:02b7ab137f1fb624020210ae3c2f671a9006ec30d2bec704a55aaebb3850ab3d"}, - {file = "lameenc-1.7.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c76a21488ba35b1dd1d37d8b0671646cb52ca92f7d9b2bb8234bf106ba57db08"}, - {file = "lameenc-1.7.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:a46642b88d9461fd1377f2fcae387503d80753b954b2547ace91e5ba5fff11af"}, - {file = "lameenc-1.7.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:0d0aa76ab3642c1025d8a47f0df4986147ae03f10d83c4b5ff34e8ddd1b62c45"}, - {file = "lameenc-1.7.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c103b3a021a000de7822249d91008e1adfcb70e7bdffa3483c5794045dc051dc"}, - {file = "lameenc-1.7.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:74fafaa009697a39b4dfae0d6763ad666ccda75386d68befd943decf46610722"}, - {file = "lameenc-1.7.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3fe077c20dd521fd261ae5dfccab80d94eace7b7474035f1584a08eca1baa7f"}, - {file = "lameenc-1.7.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:0bbd88b127bafce6da8ac8b03d5a87791d32b928dc61533e4752a935808fc851"}, + {file = "lameenc-1.8.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:66d3a64f21ed73d23c9c50347173222a36da2397180e28b07b3a7b253f05a6e8"}, + {file = "lameenc-1.8.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ad79509328fa22bac66d92a85dbfa5afb88edb69cebb79f7fee8b77d6cdd1b67"}, + {file = "lameenc-1.8.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:9d8be69c3e5fd98ce4f16ed1d76705178bae2eac25749e1d825e9aa7193f05bb"}, + {file = "lameenc-1.8.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:495dda9848601492b7fb25ef41027bc3358b9b3f6d302346ebf9570f44188f63"}, + {file = "lameenc-1.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f199c12b84614bb1edf5dca4aee15920148fe6a9187045f8db66b97afd401157"}, + {file = "lameenc-1.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23ad864875269b0b7210f9cddcbfd0b2521108f0c1ca537a39a6697347713138"}, + {file = "lameenc-1.8.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:17476cc2df4a7cb4fe0ab849a9f40ff5f07565fa6701dbd464240b3f384b5a0e"}, + {file = "lameenc-1.8.1-cp310-cp310-win32.whl", hash = "sha256:a3a5b09f073ef0814e74a3de30b0b1056b4eeb92d8ec73cde822d32c5d7e1cf4"}, + {file = "lameenc-1.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:a875751e6b52db71ed248f34d4c447161519f4c463ab6b42a81b7eaecd5f37b1"}, + {file = "lameenc-1.8.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:40973c2195b8ff8d20c0bed0f491e39e491661849d003c918d19eea2234f7af7"}, + {file = "lameenc-1.8.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:83e8d1195074e36647082ae5b062b40a7433a7d840a543d70e2fd7c62e877d65"}, + {file = "lameenc-1.8.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8a3ebb5806bdaf0cdf8a6a3b7ef0a5fb8a0eb4113192d73edce034f430d86663"}, + {file = "lameenc-1.8.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a70c8199ad47016c466b6c784924f9a2b87a3379e194345b01158e8b320a76fc"}, + {file = "lameenc-1.8.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:12d6331c7b80c1e51a215f8d516ded90d79e3e95e7578b34268ac1b143ecf29d"}, + {file = "lameenc-1.8.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5b8464e4ce61126fffc4e15b08daea2f9dda4853bcb5e5ead9e59030cbce996b"}, + {file = "lameenc-1.8.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:510bcd1cb28fad751a8a85c41fc5af8c1babbe6c8bf58b1db31d4f82389ea79e"}, + {file = "lameenc-1.8.1-cp311-cp311-win32.whl", hash = "sha256:884b8c50cccd6ab8f853bb73c45c7d4196415990c77f5d65bcc78034e19dda67"}, + {file = "lameenc-1.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:e21ec614d758b29e042a484e44318725543c3fcd4e4afeb685295efd97aa9a1f"}, + {file = "lameenc-1.8.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ef7d7ccad32f5febd812fb078fe63e46b4ec411d2ef612a79fd0391ef9f65b35"}, + {file = "lameenc-1.8.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c980a676314d3c344f080be8ef05c98d60d201da6a492c3658c6bf5a733a1e11"}, + {file = "lameenc-1.8.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a86f51bc50421db8e122c627bc2d0e7526da4505ebb6699c20c8b7352cb8df19"}, + {file = "lameenc-1.8.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:693a6cb42494dde1ae78756f1323b07dea041a152a1f4805639490bfea0e9ba3"}, + {file = "lameenc-1.8.1-cp312-cp312-win32.whl", hash = "sha256:26720094ed7cb9f3364f79fdc7ad3459aabb71b94f30936dfe0ad7430078af07"}, + {file = "lameenc-1.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:715e0e72ed5429f00042379e48a7903e54ee5dc01069db34338536f3595059c3"}, + {file = "lameenc-1.8.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1ef8f8ad8de7a038aa0624efc6c585ad600c7e6d34acc2583631883027bd6752"}, + {file = "lameenc-1.8.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e4bf9c20e41a66964ff5c2f0ab3072cd39df9fc19ecc419ad8ef0c9bb1e80ac1"}, + {file = "lameenc-1.8.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b6b4f4318e43314da20caad14c0d884546e90abdd4c7fe884c6558db355c8efb"}, + {file = "lameenc-1.8.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0399f7dec7c8d626c913023a3c7cbd89314dab6f0e67ac4a335a4a4cb8c23de3"}, + {file = "lameenc-1.8.1-cp313-cp313-win32.whl", hash = "sha256:d765b3b20baedc87286e199554975074f9f9799a13b6bddb88baae0f3aeb8904"}, + {file = "lameenc-1.8.1-cp313-cp313-win_amd64.whl", hash = "sha256:c5fa96b300d27785c3110f566961bd97487c98023ee88d0822ca7c9af0fd9b89"}, + {file = "lameenc-1.8.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ca88a3ac5848b3ade75777288c309b2db18fa0788c140811b3852533d9dc291"}, + {file = "lameenc-1.8.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:68dbacf39fc049dae22b08614d363d3293822d7255908b1bfe50d51c1a0fd6a1"}, + {file = "lameenc-1.8.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:30a9d7aa41b685d7be0c9a39a5ecf734381be8c42c31cdc5aa3764755e11b0a8"}, + {file = "lameenc-1.8.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:8d2714678e5d9647d03aa40fb5f400409e3d017f48c4d88b65c5cc0a4664d914"}, + {file = "lameenc-1.8.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8f64e0486e2081029bbc1477a1c619519ca3ff89270cf6e2802d9a3466c367a7"}, + {file = "lameenc-1.8.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c2b28e135a056b5ac37ed9acb8dbfcbf71cc4f0d192f5a794ad5101522a5320f"}, + {file = "lameenc-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:b7f24f1a40196a4b3e9b675f2bf047566e1b60649754b28e8fb0b48b1011b1c9"}, + {file = "lameenc-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9787640264f05a58d1f6f876604cdf8d0f1bb7a7dc267a0c97b575149a1b95c"}, + {file = "lameenc-1.8.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:ed71b804c113a80030dca87e24d7ecb2f9299cc8e62721a5ce56955b59436c90"}, + {file = "lameenc-1.8.1-cp38-cp38-win32.whl", hash = "sha256:fb2b225deb124888a1b64a8be8f016347292cde91339d3c20aa79650542a353e"}, + {file = "lameenc-1.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:566d51e2a30b61744341d62200a8fb92aa7c5c4dc358a0d9f367f87b2485c949"}, + {file = "lameenc-1.8.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:70fdbc3e5bc39185c4a893f4e856bdfc20f8713f8f34450107dec9411c8d9863"}, + {file = "lameenc-1.8.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:be24fb87390cd9464d30eef2c8a6251fec766d00922fd30bd76e531b6ecfdf12"}, + {file = "lameenc-1.8.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:431b3db73e0b3b182398526fd7d8491fda5798638bb9e5978e54781a544042ad"}, + {file = "lameenc-1.8.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a76e524abc648e10f6793dc101dd2d58665fe4608f7c612ea1548b7e2b9bae3c"}, + {file = "lameenc-1.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9614c0624311cc61c26d86be385c96127a5c86e7a616b020975d672f3bbd766e"}, + {file = "lameenc-1.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c939957a0537cc3a131dd2c2bbdd6f5c818c6b99f446367a9d4f6eb0061e637a"}, + {file = "lameenc-1.8.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:f44482d6ea834358f381d904ba8cac7b2af060c1fcc7227ec46d38a16f6741fa"}, + {file = "lameenc-1.8.1-cp39-cp39-win32.whl", hash = "sha256:7972e7b1373fcbbf601efc3916f79b9da2bbe56835de86bc67a4fdb62e7a481c"}, + {file = "lameenc-1.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:5bdf253e50a853e7f2df31e174b669ee861ed045b1de99cf07adf650ea2610f8"}, + {file = "lameenc-1.8.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:911feec52f7af6aee6d93fb2741bb745987df88b14e82383c6f801bb6fa2833f"}, + {file = "lameenc-1.8.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:479a391885921549b80fd25144fd2651abb6a22b18654bc2ba7cc302e53a9ce4"}, + {file = "lameenc-1.8.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d974f1a9abb80c289fed02bc965833a07b5f9c9973d696b247e35951357ac7a"}, + {file = "lameenc-1.8.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9a5ef0cc37481fce4c9178155ce6c33f70f5bae81a33677805f5e5a4ab69de71"}, + {file = "lameenc-1.8.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:60a3b4713f382e84b095fa525c59af2c456efb0bea54f2cd920c12174ba9b3f2"}, + {file = "lameenc-1.8.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:abdf7e03b16a34c7fe7c1ab0cc1f9ea78a088b0cd5e8628273bf110de2a8ea49"}, + {file = "lameenc-1.8.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:693811c7e73309f052a665910f9eceb667d4486315c3f5827a0eb59205373466"}, + {file = "lameenc-1.8.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:01899b612e4c8638cab3285b37c3e512f672333342a94d4ff71577b2f707dc48"}, + {file = "lameenc-1.8.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8f3d5cf40bf14feae0342d914b8e234ed6adde43c7c867c28a61dce5961fb8d3"}, + {file = "lameenc-1.8.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9dd0b6bb05cea672abb942e159b2afebc1dfee1f2b0e5150164a970dd0904bc4"}, + {file = "lameenc-1.8.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:9cd6a545652d5bdc9a55483f50d153844d0ee790f9b45997717a0be578ad4db1"}, ] [[package]] @@ -1499,7 +1774,7 @@ description = "A fast and thorough lazy object proxy." optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "lazy-object-proxy-1.10.0.tar.gz", hash = "sha256:78247b6d45f43a52ef35c25b5581459e85117225408a4128a3daf8bf9648ac69"}, {file = "lazy_object_proxy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:855e068b0358ab916454464a884779c7ffa312b8925c6f7401e952dcf3b89977"}, @@ -1547,7 +1822,7 @@ description = "lightweight wrapper around basic LLVM functionality" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "llvmlite-0.42.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3366938e1bf63d26c34fbfb4c8e8d2ded57d11e0567d5bb243d89aab1eb56098"}, {file = "llvmlite-0.42.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c35da49666a21185d21b551fc3caf46a935d54d66969d32d72af109b5e7d2b6f"}, @@ -1579,7 +1854,7 @@ description = "Mach-O header analysis and editing" optional = false python-versions = "*" groups = ["dev"] -markers = "sys_platform == \"darwin\"" +markers = "sys_platform == \"darwin\" and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "macholib-1.16.3-py2.py3-none-any.whl", hash = "sha256:0e315d7583d38b8c77e815b1ecbdbf504a8258d8b3e17b61165c6feb60d18f2c"}, {file = "macholib-1.16.3.tar.gz", hash = "sha256:07ae9e15e8e4cd9a788013d81f5908b3609aa76f9b1421bae9c4d7606ec86a30"}, @@ -1595,7 +1870,7 @@ description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.7" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, @@ -1666,7 +1941,7 @@ description = "A lightweight library for converting complex datatypes to and fro optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "marshmallow-3.21.1-py3-none-any.whl", hash = "sha256:f085493f79efb0644f270a9bf2892843142d80d7174bbbd2f3713f2a589dc633"}, {file = "marshmallow-3.21.1.tar.gz", hash = "sha256:4e65e9e0d80fc9e609574b9983cf32579f305c718afb30d7233ab818571768c3"}, @@ -1686,8 +1961,8 @@ version = "0.7.0" description = "McCabe checker, plugin for flake8" optional = false python-versions = ">=3.6" -groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +groups = ["main", "dev"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, @@ -1700,7 +1975,7 @@ description = "More routines for operating on iterables, beyond itertools" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "more-itertools-10.2.0.tar.gz", hash = "sha256:8fccb480c43d3e99a00087634c06dd02b0d50fbf088b380de5a41a015ec239e1"}, {file = "more_itertools-10.2.0-py3-none-any.whl", hash = "sha256:686b06abe565edfab151cb8fd385a05651e1fdf8f0a14191e4439283421f8684"}, @@ -1713,7 +1988,7 @@ description = "Python library for arbitrary-precision floating-point arithmetic" optional = false python-versions = "*" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, @@ -1725,6 +2000,57 @@ docs = ["sphinx"] gmpy = ["gmpy2 (>=2.1.0a4)"] tests = ["pytest (>=4.6)"] +[[package]] +name = "musdb" +version = "0.4.2" +description = "Python parser for the SIGSEP MUSDB18 dataset" +optional = false +python-versions = "*" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "musdb-0.4.2-py2.py3-none-any.whl", hash = "sha256:e26e5dcce87f90e2348a18c38b73c3fbf5b20ac2c6050111ae0a5f029c642037"}, + {file = "musdb-0.4.2.tar.gz", hash = "sha256:f835246ee7b3bc54599fd146e8e18e64ff7ee617e2265bf17ba62afb3daf2ec4"}, +] + +[package.dependencies] +numpy = ">=1.7" +pyaml = "*" +stempeg = ">=0.2.3" +tqdm = "*" + +[package.extras] +dev = ["check-manifest"] +docs = ["recommonmark", "sphinx", "sphinx-rtd-theme"] +tests = ["pytest"] + +[[package]] +name = "museval" +version = "0.4.1" +description = "Evaluation tools for the SIGSEP MUS database" +optional = false +python-versions = "*" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "museval-0.4.1-py2.py3-none-any.whl", hash = "sha256:4b5320bc8aff68b218ea0571959da0c1e2f11aaf78a0264b659e8ac55d98d0f8"}, + {file = "museval-0.4.1.tar.gz", hash = "sha256:24d2140c8595fd171674a5aed40f837c9880a0443d82e1a6dbaa99f26bf6086e"}, +] + +[package.dependencies] +jsonschema = "*" +musdb = ">=0.4.0" +numpy = "*" +pandas = ">=1.0.1" +scipy = "*" +simplejson = ">=3.19.0" +soundfile = "*" + +[package.extras] +dev = ["check-manifest"] +docs = ["numpydoc", "recommonmark", "sphinx", "sphinx-rtd-theme"] +tests = ["pytest"] + [[package]] name = "mutagen" version = "1.47.0" @@ -1732,12 +2058,67 @@ description = "read and write audio tags for many formats" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "mutagen-1.47.0-py3-none-any.whl", hash = "sha256:edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719"}, {file = "mutagen-1.47.0.tar.gz", hash = "sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99"}, ] +[[package]] +name = "mypy" +version = "1.15.0" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "mypy-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:979e4e1a006511dacf628e36fadfecbcc0160a8af6ca7dad2f5025529e082c13"}, + {file = "mypy-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c4bb0e1bd29f7d34efcccd71cf733580191e9a264a2202b0239da95984c5b559"}, + {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be68172e9fd9ad8fb876c6389f16d1c1b5f100ffa779f77b1fb2176fcc9ab95b"}, + {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7be1e46525adfa0d97681432ee9fcd61a3964c2446795714699a998d193f1a3"}, + {file = "mypy-1.15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2e2c2e6d3593f6451b18588848e66260ff62ccca522dd231cd4dd59b0160668b"}, + {file = "mypy-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:6983aae8b2f653e098edb77f893f7b6aca69f6cffb19b2cc7443f23cce5f4828"}, + {file = "mypy-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2922d42e16d6de288022e5ca321cd0618b238cfc5570e0263e5ba0a77dbef56f"}, + {file = "mypy-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2ee2d57e01a7c35de00f4634ba1bbf015185b219e4dc5909e281016df43f5ee5"}, + {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:973500e0774b85d9689715feeffcc980193086551110fd678ebe1f4342fb7c5e"}, + {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a95fb17c13e29d2d5195869262f8125dfdb5c134dc8d9a9d0aecf7525b10c2c"}, + {file = "mypy-1.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1905f494bfd7d85a23a88c5d97840888a7bd516545fc5aaedff0267e0bb54e2f"}, + {file = "mypy-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:c9817fa23833ff189db061e6d2eff49b2f3b6ed9856b4a0a73046e41932d744f"}, + {file = "mypy-1.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:aea39e0583d05124836ea645f412e88a5c7d0fd77a6d694b60d9b6b2d9f184fd"}, + {file = "mypy-1.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f2147ab812b75e5b5499b01ade1f4a81489a147c01585cda36019102538615f"}, + {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce436f4c6d218a070048ed6a44c0bbb10cd2cc5e272b29e7845f6a2f57ee4464"}, + {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8023ff13985661b50a5928fc7a5ca15f3d1affb41e5f0a9952cb68ef090b31ee"}, + {file = "mypy-1.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1124a18bc11a6a62887e3e137f37f53fbae476dc36c185d549d4f837a2a6a14e"}, + {file = "mypy-1.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22"}, + {file = "mypy-1.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93faf3fdb04768d44bf28693293f3904bbb555d076b781ad2530214ee53e3445"}, + {file = "mypy-1.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:811aeccadfb730024c5d3e326b2fbe9249bb7413553f15499a4050f7c30e801d"}, + {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98b7b9b9aedb65fe628c62a6dc57f6d5088ef2dfca37903a7d9ee374d03acca5"}, + {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036"}, + {file = "mypy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357"}, + {file = "mypy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf"}, + {file = "mypy-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e601a7fa172c2131bff456bb3ee08a88360760d0d2f8cbd7a75a65497e2df078"}, + {file = "mypy-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:712e962a6357634fef20412699a3655c610110e01cdaa6180acec7fc9f8513ba"}, + {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95579473af29ab73a10bada2f9722856792a36ec5af5399b653aa28360290a5"}, + {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f8722560a14cde92fdb1e31597760dc35f9f5524cce17836c0d22841830fd5b"}, + {file = "mypy-1.15.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fbb8da62dc352133d7d7ca90ed2fb0e9d42bb1a32724c287d3c76c58cbaa9c2"}, + {file = "mypy-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:d10d994b41fb3497719bbf866f227b3489048ea4bbbb5015357db306249f7980"}, + {file = "mypy-1.15.0-py3-none-any.whl", hash = "sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e"}, + {file = "mypy-1.15.0.tar.gz", hash = "sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43"}, +] + +[package.dependencies] +mypy_extensions = ">=1.0.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing_extensions = ">=4.6.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +faster-cache = ["orjson"] +install-types = ["pip"] +mypyc = ["setuptools (>=50)"] +reports = ["lxml"] + [[package]] name = "mypy-extensions" version = "1.0.0" @@ -1745,7 +2126,7 @@ description = "Type system extensions for programs checked with the mypy type ch optional = false python-versions = ">=3.5" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, @@ -1758,7 +2139,7 @@ description = "Python package for creating and manipulating graphs and networks" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, @@ -1778,7 +2159,7 @@ description = "Node.js virtual environment builder" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, @@ -1794,7 +2175,7 @@ description = "compiling Python code using LLVM" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "numba-0.59.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:97385a7f12212c4f4bc28f648720a92514bee79d7063e40ef66c2d30600fd18e"}, {file = "numba-0.59.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0b77aecf52040de2a1eb1d7e314497b9e56fba17466c80b457b971a25bb1576d"}, @@ -1830,7 +2211,7 @@ description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, @@ -1877,7 +2258,7 @@ description = "CUBLAS native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:ee53ccca76a6fc08fb9701aa95b6ceb242cdaab118c3bb152af4e579af792728"}, {file = "nvidia_cublas_cu12-12.1.3.1-py3-none-win_amd64.whl", hash = "sha256:2b964d60e8cf11b5e1073d179d85fa340c120e99b3067558f3cf98dd69d02906"}, @@ -1890,7 +2271,7 @@ description = "CUDA profiling tools runtime libs." optional = false python-versions = ">=3" groups = ["main"] -markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:e54fde3983165c624cb79254ae9818a456eb6e87a7fd4d56a2352c24ee542d7e"}, {file = "nvidia_cuda_cupti_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:bea8236d13a0ac7190bd2919c3e8e6ce1e402104276e6f9694479e48bb0eb2a4"}, @@ -1903,7 +2284,7 @@ description = "NVRTC native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:339b385f50c309763ca65456ec75e17bbefcbbf2893f462cb8b90584cd27a1c2"}, {file = "nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:0a98a522d9ff138b96c010a65e145dc1b4850e9ecb75a0172371793752fd46ed"}, @@ -1916,7 +2297,7 @@ description = "CUDA Runtime native Libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:6e258468ddf5796e25f1dc591a31029fa317d97a0a94ed93468fc86301d61e40"}, {file = "nvidia_cuda_runtime_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:dfb46ef84d73fababab44cf03e3b83f80700d27ca300e537f85f636fac474344"}, @@ -1929,7 +2310,7 @@ description = "cuDNN runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl", hash = "sha256:5ccb288774fdfb07a7e7025ffec286971c06d8d7b4fb162525334616d7629ff9"}, ] @@ -1944,7 +2325,7 @@ description = "CUFFT native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl", hash = "sha256:794e3948a1aa71fd817c3775866943936774d1c14e7628c74f6f7417224cdf56"}, {file = "nvidia_cufft_cu12-11.0.2.54-py3-none-win_amd64.whl", hash = "sha256:d9ac353f78ff89951da4af698f80870b1534ed69993f10a4cf1d96f21357e253"}, @@ -1957,7 +2338,7 @@ description = "CURAND native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:9d264c5036dde4e64f1de8c50ae753237c12e0b1348738169cd0f8a536c0e1e0"}, {file = "nvidia_curand_cu12-10.3.2.106-py3-none-win_amd64.whl", hash = "sha256:75b6b0c574c0037839121317e17fd01f8a69fd2ef8e25853d826fec30bdba74a"}, @@ -1970,7 +2351,7 @@ description = "CUDA solver native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl", hash = "sha256:8a7ec542f0412294b15072fa7dab71d31334014a69f953004ea7a118206fe0dd"}, {file = "nvidia_cusolver_cu12-11.4.5.107-py3-none-win_amd64.whl", hash = "sha256:74e0c3a24c78612192a74fcd90dd117f1cf21dea4822e66d89e8ea80e3cd2da5"}, @@ -1988,7 +2369,7 @@ description = "CUSPARSE native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:f3b50f42cf363f86ab21f720998517a659a48131e8d538dc02f8768237bd884c"}, {file = "nvidia_cusparse_cu12-12.1.0.106-py3-none-win_amd64.whl", hash = "sha256:b798237e81b9719373e8fae8d4f091b70a0cf09d9d85c95a557e11df2d8e9a5a"}, @@ -2004,7 +2385,7 @@ description = "NVIDIA Collective Communication Library (NCCL) Runtime" optional = false python-versions = ">=3" groups = ["main"] -markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_nccl_cu12-2.19.3-py3-none-manylinux1_x86_64.whl", hash = "sha256:a9734707a2c96443331c1e48c717024aa6678a0e2a4cb66b2c364d18cee6b48d"}, ] @@ -2016,7 +2397,7 @@ description = "Nvidia JIT LTO Library" optional = false python-versions = ">=3" groups = ["main"] -markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_nvjitlink_cu12-12.4.99-py3-none-manylinux2014_aarch64.whl", hash = "sha256:75d6498c96d9adb9435f2bbdbddb479805ddfb97b5c1b32395c694185c20ca57"}, {file = "nvidia_nvjitlink_cu12-12.4.99-py3-none-manylinux2014_x86_64.whl", hash = "sha256:c6428836d20fe7e327191c175791d38570e10762edc588fb46749217cd444c74"}, @@ -2030,7 +2411,7 @@ description = "NVIDIA Tools Extension" optional = false python-versions = ">=3" groups = ["main"] -markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:dc21cf308ca5691e7c04d962e213f8a4aa9bbfa23d95412f452254c2caeb09e5"}, {file = "nvidia_nvtx_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:65f4d98982b31b60026e0e6de73fbdfc09d08a96f4656dd3665ca616a11e1e82"}, @@ -2043,7 +2424,7 @@ description = "A flexible configuration library" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "omegaconf-2.3.0-py3-none-any.whl", hash = "sha256:7b4df175cdb08ba400f45cae3bdcae7ba8365db4d165fc65fd04b050ab63b46b"}, {file = "omegaconf-2.3.0.tar.gz", hash = "sha256:d5d4b6d29955cc50ad50c46dc269bcd92c6e00f5f90d23ab5fee7bfca4ba4cc7"}, @@ -2060,7 +2441,7 @@ description = "ONNX Runtime is a runtime accelerator for Machine Learning models optional = false python-versions = "*" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "onnxruntime-1.17.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:d43ac17ac4fa3c9096ad3c0e5255bb41fd134560212dc124e7f52c3159af5d21"}, {file = "onnxruntime-1.17.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55b5e92a4c76a23981c998078b9bf6145e4fb0b016321a8274b1607bd3c6bd35"}, @@ -2104,7 +2485,7 @@ description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "openai-1.14.2-py3-none-any.whl", hash = "sha256:a48b3c4d635b603952189ac5a0c0c9b06c025b80eb2900396939f02bb2104ac3"}, {file = "openai-1.14.2.tar.gz", hash = "sha256:e5642f7c02cf21994b08477d7bb2c1e46d8f335d72c26f0396c5f89b15b5b153"}, @@ -2129,7 +2510,7 @@ description = "Robust Speech Recognition via Large-Scale Weak Supervision" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "openai-whisper-20240930.tar.gz", hash = "sha256:b7178e9c1615576807a300024f4daa6353f7e1a815dac5e38c33f1ef055dd2d2"}, ] @@ -2153,7 +2534,7 @@ description = "PyTorch-based music source separation toolkit" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "openunmix-1.3.0-py3-none-any.whl", hash = "sha256:e893ae22c5b8001a6107022499c2587b70d5c2e4777cc7c9ed6272b68a69534e"}, {file = "openunmix-1.3.0.tar.gz", hash = "sha256:cc9245ce728700f5d0b72c67f01be4162777e617cdc47f9b035963afac180fc8"}, @@ -2178,12 +2559,100 @@ description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" groups = ["main", "dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, ] +[[package]] +name = "pandas" +version = "2.2.3" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, + {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f"}, + {file = "pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645"}, + {file = "pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039"}, + {file = "pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd"}, + {file = "pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698"}, + {file = "pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc"}, + {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3"}, + {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32"}, + {file = "pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5"}, + {file = "pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9"}, + {file = "pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4"}, + {file = "pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3"}, + {file = "pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319"}, + {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8"}, + {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a"}, + {file = "pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13"}, + {file = "pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015"}, + {file = "pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28"}, + {file = "pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0"}, + {file = "pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24"}, + {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659"}, + {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb"}, + {file = "pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d"}, + {file = "pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468"}, + {file = "pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18"}, + {file = "pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2"}, + {file = "pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4"}, + {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d"}, + {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a"}, + {file = "pandas-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39"}, + {file = "pandas-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30"}, + {file = "pandas-2.2.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c"}, + {file = "pandas-2.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c"}, + {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea"}, + {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761"}, + {file = "pandas-2.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e"}, + {file = "pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.7" + +[package.extras] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] + [[package]] name = "pefile" version = "2023.2.7" @@ -2191,7 +2660,7 @@ description = "Python PE parsing module" optional = false python-versions = ">=3.6.0" groups = ["dev"] -markers = "sys_platform == \"win32\"" +markers = "sys_platform == \"win32\" and python_version <= \"3.11\" or sys_platform == \"win32\" and python_version >= \"3.12\"" files = [ {file = "pefile-2023.2.7-py3-none-any.whl", hash = "sha256:da185cd2af68c08a6cd4481f7325ed600a88f6a813bad9dea07ab3ef73d8d8d6"}, {file = "pefile-2023.2.7.tar.gz", hash = "sha256:82e6114004b3d6911c77c3953e3838654b04511b8b66e8583db70c65998017dc"}, @@ -2204,7 +2673,7 @@ description = "A small Python package for determining appropriate platform-speci optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, @@ -2221,7 +2690,7 @@ description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, @@ -2238,7 +2707,7 @@ description = "A library to manipulate gettext files (po and mo files)." optional = false python-versions = "*" groups = ["main", "build"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "polib-1.2.0-py2.py3-none-any.whl", hash = "sha256:1c77ee1b81feb31df9bca258cbc58db1bbb32d10214b173882452c73af06d62d"}, {file = "polib-1.2.0.tar.gz", hash = "sha256:f3ef94aefed6e183e342a8a269ae1fc4742ba193186ad76f175938621dbfc26b"}, @@ -2251,7 +2720,7 @@ description = "A framework for managing and maintaining multi-language pre-commi optional = false python-versions = ">=3.7" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"}, {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"}, @@ -2271,7 +2740,7 @@ description = "" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "protobuf-5.26.0-cp310-abi3-win32.whl", hash = "sha256:f9ecc8eb6f18037e0cbf43256db0325d4723f429bca7ef5cd358b7c29d65f628"}, {file = "protobuf-5.26.0-cp310-abi3-win_amd64.whl", hash = "sha256:dfd29f6eb34107dccf289a93d44fb6b131e68888d090b784b691775ac84e8213"}, @@ -2293,7 +2762,7 @@ description = "Cross-platform lib for process and system monitoring in Python." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "psutil-6.1.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ff34df86226c0227c52f38b919213157588a678d049688eded74c76c8ba4a5d0"}, {file = "psutil-6.1.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:c0e0c00aa18ca2d3b2b991643b799a15fc8f0563d2ebb6040f64ce8dc027b942"}, @@ -2325,23 +2794,42 @@ description = "Get CPU info with pure Python" optional = false python-versions = "*" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "py-cpuinfo-9.0.0.tar.gz", hash = "sha256:3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690"}, {file = "py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5"}, ] +[[package]] +name = "pyaml" +version = "25.1.0" +description = "PyYAML-based module to produce a bit more pretty and readable YAML-serialized data" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "pyaml-25.1.0-py3-none-any.whl", hash = "sha256:f7b40629d2dae88035657c860f539db3525ddd0120a11e0bcb44d47d5968b3bc"}, + {file = "pyaml-25.1.0.tar.gz", hash = "sha256:33a93ac49218f57e020b81e280d2706cea554ac5a76445ac79add760d019c709"}, +] + +[package.dependencies] +PyYAML = "*" + +[package.extras] +anchors = ["unidecode"] + [[package]] name = "pycodestyle" -version = "2.11.1" +version = "2.12.1" description = "Python style guide checker" optional = false python-versions = ">=3.8" -groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +groups = ["main", "dev"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ - {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, - {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, + {file = "pycodestyle-2.12.1-py2.py3-none-any.whl", hash = "sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3"}, + {file = "pycodestyle-2.12.1.tar.gz", hash = "sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521"}, ] [[package]] @@ -2351,7 +2839,7 @@ description = "C parser in Python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, @@ -2364,7 +2852,7 @@ description = "Cryptographic library for Python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "pycryptodomex-3.20.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:645bd4ca6f543685d643dadf6a856cc382b654cc923460e3a10a49c1b3832aeb"}, {file = "pycryptodomex-3.20.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ff5c9a67f8a4fba4aed887216e32cbc48f2a6fb2673bb10a99e43be463e15913"}, @@ -2407,7 +2895,7 @@ description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "pydantic-2.6.4-py3-none-any.whl", hash = "sha256:cc46fce86607580867bdc3361ad462bab9c222ef042d3da86f2fb333e1d916c5"}, {file = "pydantic-2.6.4.tar.gz", hash = "sha256:b1704e0847db01817624a6b86766967f552dd9dbf3afba4004409f908dcc84e6"}, @@ -2428,7 +2916,7 @@ description = "" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "pydantic_core-2.16.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:75b81e678d1c1ede0785c7f46690621e4c6e63ccd9192af1f0bd9d504bbb6bf4"}, {file = "pydantic_core-2.16.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9c865a7ee6f93783bd5d781af5a4c43dadc37053a5b42f7d18dc019f8c9d2bd1"}, @@ -2514,6 +3002,19 @@ files = [ [package.dependencies] typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" +[[package]] +name = "pyflakes" +version = "3.2.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"}, + {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, +] + [[package]] name = "pyinstaller" version = "6.5.0" @@ -2521,7 +3022,7 @@ description = "PyInstaller bundles a Python application and all its dependencies optional = false python-versions = "<3.13,>=3.8" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "pyinstaller-6.5.0-py3-none-macosx_10_13_universal2.whl", hash = "sha256:81ec15c0deb8c7a0f95bea85b49eecc2df1bdeaf5fe487a41d97de6b0ad29dff"}, {file = "pyinstaller-6.5.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:5f432f3fdef053989e0a44134e483131c533dab7637e6afd80c3f7c26e6dbcc9"}, @@ -2558,7 +3059,7 @@ description = "Community maintained hooks for PyInstaller" optional = false python-versions = ">=3.7" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "pyinstaller-hooks-contrib-2024.3.tar.gz", hash = "sha256:d18657c29267c63563a96b8fc78db6ba9ae40af6702acb2f8c871df12c75b60b"}, {file = "pyinstaller_hooks_contrib-2024.3-py2.py3-none-any.whl", hash = "sha256:6701752d525e1f4eda1eaec2c2affc206171e15c7a4e188a152fcf3ed3308024"}, @@ -2576,7 +3077,7 @@ description = "python code static checker" optional = false python-versions = ">=3.7.2" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "pylint-2.17.7-py3-none-any.whl", hash = "sha256:27a8d4c7ddc8c2f8c18aa0050148f89ffc09838142193fdbe98f172781a3ff87"}, {file = "pylint-2.17.7.tar.gz", hash = "sha256:f4fcac7ae74cfe36bc8451e931d8438e4a476c20314b1101c458ad0f05191fad"}, @@ -2607,7 +3108,7 @@ description = "Python bindings for the Qt cross platform application toolkit" optional = false python-versions = ">=3.6.1" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "PyQt6-6.6.1-cp38-abi3-macosx_10_14_universal2.whl", hash = "sha256:6b43878d0bbbcf8b7de165d305ec0cb87113c8930c92de748a11c473a6db5085"}, {file = "PyQt6-6.6.1-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:5aa0e833cb5a79b93813f8181d9f145517dd5a46f4374544bcd1e93a8beec537"}, @@ -2626,7 +3127,7 @@ description = "The subset of a Qt installation needed by PyQt6." optional = false python-versions = "*" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "PyQt6_Qt6-6.6.2-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:7ef446d3ffc678a8586ff6dc9f0d27caf4dff05dea02c353540d2f614386faf9"}, {file = "PyQt6_Qt6-6.6.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b8363d88623342a72ac17da9127dc12f259bb3148796ea029762aa2d499778d9"}, @@ -2641,7 +3142,7 @@ description = "The sip module support for PyQt6" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "PyQt6_sip-13.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d6b5f699aaed0ac1fcd23e8fbca70d8a77965831b7c1ce474b81b1678817a49d"}, {file = "PyQt6_sip-13.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8c282062125eea5baf830c6998587d98c50be7c3a817a057fb95fef647184012"}, @@ -2673,7 +3174,7 @@ description = "A python implementation of GNU readline." optional = false python-versions = "*" groups = ["main"] -markers = "sys_platform == \"win32\"" +markers = "sys_platform == \"win32\" and python_version <= \"3.11\" or sys_platform == \"win32\" and python_version >= \"3.12\"" files = [ {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, @@ -2686,7 +3187,7 @@ description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, @@ -2710,7 +3211,7 @@ description = "A ``pytest`` fixture for benchmarking code. It will group the tes optional = false python-versions = ">=3.7" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "pytest-benchmark-4.0.0.tar.gz", hash = "sha256:fb0785b83efe599a6a956361c0691ae1dbb5318018561af10f3e915caa0048d1"}, {file = "pytest_benchmark-4.0.0-py3-none-any.whl", hash = "sha256:fdb7db64e31c8b277dff9850d2a2556d8b60bcb0ea6524e36e28ffd7c87f71d6"}, @@ -2732,7 +3233,7 @@ description = "Pytest plugin for measuring coverage." optional = false python-versions = ">=3.7" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, @@ -2752,7 +3253,7 @@ description = "Thin-wrapper around the mock package for easier use with pytest" optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, @@ -2771,7 +3272,7 @@ description = "pytest support for PyQt and PySide applications" optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "pytest-qt-4.4.0.tar.gz", hash = "sha256:76896142a940a4285339008d6928a36d4be74afec7e634577e842c9cc5c56844"}, {file = "pytest_qt-4.4.0-py3-none-any.whl", hash = "sha256:001ed2f8641764b394cf286dc8a4203e40eaf9fff75bf0bfe5103f7f8d0c591d"}, @@ -2792,7 +3293,7 @@ description = "A pytest plugin to run Xvfb for tests." optional = false python-versions = ">=3.5" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "pytest-xvfb-2.0.0.tar.gz", hash = "sha256:c4ba642de05499940db7f65ee111621939be513e3e75c3da9156b7235e2ed8cf"}, {file = "pytest_xvfb-2.0.0-py3-none-any.whl", hash = "sha256:6d21b46f099c06d6b8b200e73341da3adb73d67e9139c55d617930881779360b"}, @@ -2802,6 +3303,35 @@ files = [ pytest = ">=2.8.1" pyvirtualdisplay = ">=1.3" +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "pytz" +version = "2025.1" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "pytz-2025.1-py2.py3-none-any.whl", hash = "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57"}, + {file = "pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e"}, +] + [[package]] name = "pyvirtualdisplay" version = "3.0" @@ -2809,7 +3339,7 @@ description = "python wrapper for Xvfb, Xephyr and Xvnc" optional = false python-versions = "*" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "PyVirtualDisplay-3.0-py3-none-any.whl", hash = "sha256:40d4b8dfe4b8de8552e28eb367647f311f88a130bf837fe910e7f180d5477f0e"}, {file = "PyVirtualDisplay-3.0.tar.gz", hash = "sha256:09755bc3ceb6eb725fb07eca5425f43f2358d3bf08e00d2a9b792a1aedd16159"}, @@ -2822,7 +3352,7 @@ description = "A (partial) reimplementation of pywin32 using ctypes/cffi" optional = false python-versions = ">=3.6" groups = ["main", "dev"] -markers = "sys_platform == \"win32\"" +markers = "sys_platform == \"win32\" and python_version <= \"3.11\" or sys_platform == \"win32\" and python_version >= \"3.12\"" files = [ {file = "pywin32-ctypes-0.2.2.tar.gz", hash = "sha256:3426e063bdd5fd4df74a14fa3cf80a0b42845a87e1d1e81f6549f9daec593a60"}, {file = "pywin32_ctypes-0.2.2-py3-none-any.whl", hash = "sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7"}, @@ -2830,66 +3360,86 @@ files = [ [[package]] name = "pyyaml" -version = "6.0.1" +version = "6.0.2" description = "YAML parser and emitter for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" groups = ["main", "dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] +[[package]] +name = "referencing" +version = "0.36.2" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0"}, + {file = "referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" +typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""} + [[package]] name = "regex" version = "2023.12.25" @@ -2897,7 +3447,7 @@ description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.7" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0694219a1d54336fd0445ea382d49d36882415c0134ee1e8332afd1529f0baa5"}, {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b014333bd0217ad3d54c143de9d4b9a3ca1c5a29a6d0d554952ea071cff0f1f8"}, @@ -3001,7 +3551,7 @@ description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, @@ -3024,7 +3574,7 @@ description = "Retrying" optional = false python-versions = "*" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "retrying-1.3.4-py3-none-any.whl", hash = "sha256:8cc4d43cb8e1125e0ff3344e9de678fefd85db3b750b81b2240dc0183af37b35"}, {file = "retrying-1.3.4.tar.gz", hash = "sha256:345da8c5765bd982b1d1915deb9102fd3d1f7ad16bd84a9700b85f64d24e8f3e"}, @@ -3033,6 +3583,120 @@ files = [ [package.dependencies] six = ">=1.7.0" +[[package]] +name = "rpds-py" +version = "0.23.1" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "rpds_py-0.23.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2a54027554ce9b129fc3d633c92fa33b30de9f08bc61b32c053dc9b537266fed"}, + {file = "rpds_py-0.23.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b5ef909a37e9738d146519657a1aab4584018746a18f71c692f2f22168ece40c"}, + {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ee9d6f0b38efb22ad94c3b68ffebe4c47865cdf4b17f6806d6c674e1feb4246"}, + {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f7356a6da0562190558c4fcc14f0281db191cdf4cb96e7604c06acfcee96df15"}, + {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9441af1d25aed96901f97ad83d5c3e35e6cd21a25ca5e4916c82d7dd0490a4fa"}, + {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d8abf7896a91fb97e7977d1aadfcc2c80415d6dc2f1d0fca5b8d0df247248f3"}, + {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b08027489ba8fedde72ddd233a5ea411b85a6ed78175f40285bd401bde7466d"}, + {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fee513135b5a58f3bb6d89e48326cd5aa308e4bcdf2f7d59f67c861ada482bf8"}, + {file = "rpds_py-0.23.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:35d5631ce0af26318dba0ae0ac941c534453e42f569011585cb323b7774502a5"}, + {file = "rpds_py-0.23.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a20cb698c4a59c534c6701b1c24a968ff2768b18ea2991f886bd8985ce17a89f"}, + {file = "rpds_py-0.23.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e9c206a1abc27e0588cf8b7c8246e51f1a16a103734f7750830a1ccb63f557a"}, + {file = "rpds_py-0.23.1-cp310-cp310-win32.whl", hash = "sha256:d9f75a06ecc68f159d5d7603b734e1ff6daa9497a929150f794013aa9f6e3f12"}, + {file = "rpds_py-0.23.1-cp310-cp310-win_amd64.whl", hash = "sha256:f35eff113ad430b5272bbfc18ba111c66ff525828f24898b4e146eb479a2cdda"}, + {file = "rpds_py-0.23.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b79f5ced71efd70414a9a80bbbfaa7160da307723166f09b69773153bf17c590"}, + {file = "rpds_py-0.23.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c9e799dac1ffbe7b10c1fd42fe4cd51371a549c6e108249bde9cd1200e8f59b4"}, + {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721f9c4011b443b6e84505fc00cc7aadc9d1743f1c988e4c89353e19c4a968ee"}, + {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f88626e3f5e57432e6191cd0c5d6d6b319b635e70b40be2ffba713053e5147dd"}, + {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:285019078537949cecd0190f3690a0b0125ff743d6a53dfeb7a4e6787af154f5"}, + {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b92f5654157de1379c509b15acec9d12ecf6e3bc1996571b6cb82a4302060447"}, + {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e768267cbe051dd8d1c5305ba690bb153204a09bf2e3de3ae530de955f5b5580"}, + {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c5334a71f7dc1160382d45997e29f2637c02f8a26af41073189d79b95d3321f1"}, + {file = "rpds_py-0.23.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d6adb81564af0cd428910f83fa7da46ce9ad47c56c0b22b50872bc4515d91966"}, + {file = "rpds_py-0.23.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:cafa48f2133d4daa028473ede7d81cd1b9f9e6925e9e4003ebdf77010ee02f35"}, + {file = "rpds_py-0.23.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0fced9fd4a07a1ded1bac7e961ddd9753dd5d8b755ba8e05acba54a21f5f1522"}, + {file = "rpds_py-0.23.1-cp311-cp311-win32.whl", hash = "sha256:243241c95174b5fb7204c04595852fe3943cc41f47aa14c3828bc18cd9d3b2d6"}, + {file = "rpds_py-0.23.1-cp311-cp311-win_amd64.whl", hash = "sha256:11dd60b2ffddba85715d8a66bb39b95ddbe389ad2cfcf42c833f1bcde0878eaf"}, + {file = "rpds_py-0.23.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3902df19540e9af4cc0c3ae75974c65d2c156b9257e91f5101a51f99136d834c"}, + {file = "rpds_py-0.23.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:66f8d2a17e5838dd6fb9be6baaba8e75ae2f5fa6b6b755d597184bfcd3cb0eba"}, + {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:112b8774b0b4ee22368fec42749b94366bd9b536f8f74c3d4175d4395f5cbd31"}, + {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e0df046f2266e8586cf09d00588302a32923eb6386ced0ca5c9deade6af9a149"}, + {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3288930b947cbebe767f84cf618d2cbe0b13be476e749da0e6a009f986248c"}, + {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce473a2351c018b06dd8d30d5da8ab5a0831056cc53b2006e2a8028172c37ce5"}, + {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d550d7e9e7d8676b183b37d65b5cd8de13676a738973d330b59dc8312df9c5dc"}, + {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e14f86b871ea74c3fddc9a40e947d6a5d09def5adc2076ee61fb910a9014fb35"}, + {file = "rpds_py-0.23.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf5be5ba34e19be579ae873da515a2836a2166d8d7ee43be6ff909eda42b72b"}, + {file = "rpds_py-0.23.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d7031d493c4465dbc8d40bd6cafefef4bd472b17db0ab94c53e7909ee781b9ef"}, + {file = "rpds_py-0.23.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:55ff4151cfd4bc635e51cfb1c59ac9f7196b256b12e3a57deb9e5742e65941ad"}, + {file = "rpds_py-0.23.1-cp312-cp312-win32.whl", hash = "sha256:a9d3b728f5a5873d84cba997b9d617c6090ca5721caaa691f3b1a78c60adc057"}, + {file = "rpds_py-0.23.1-cp312-cp312-win_amd64.whl", hash = "sha256:b03a8d50b137ee758e4c73638b10747b7c39988eb8e6cd11abb7084266455165"}, + {file = "rpds_py-0.23.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:4caafd1a22e5eaa3732acb7672a497123354bef79a9d7ceed43387d25025e935"}, + {file = "rpds_py-0.23.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:178f8a60fc24511c0eb756af741c476b87b610dba83270fce1e5a430204566a4"}, + {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c632419c3870507ca20a37c8f8f5352317aca097639e524ad129f58c125c61c6"}, + {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:698a79d295626ee292d1730bc2ef6e70a3ab135b1d79ada8fde3ed0047b65a10"}, + {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:271fa2184cf28bdded86bb6217c8e08d3a169fe0bbe9be5e8d96e8476b707122"}, + {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b91cceb5add79ee563bd1f70b30896bd63bc5f78a11c1f00a1e931729ca4f1f4"}, + {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a6cb95074777f1ecda2ca4fa7717caa9ee6e534f42b7575a8f0d4cb0c24013"}, + {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:50fb62f8d8364978478b12d5f03bf028c6bc2af04082479299139dc26edf4c64"}, + {file = "rpds_py-0.23.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c8f7e90b948dc9dcfff8003f1ea3af08b29c062f681c05fd798e36daa3f7e3e8"}, + {file = "rpds_py-0.23.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5b98b6c953e5c2bda51ab4d5b4f172617d462eebc7f4bfdc7c7e6b423f6da957"}, + {file = "rpds_py-0.23.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2893d778d4671ee627bac4037a075168b2673c57186fb1a57e993465dbd79a93"}, + {file = "rpds_py-0.23.1-cp313-cp313-win32.whl", hash = "sha256:2cfa07c346a7ad07019c33fb9a63cf3acb1f5363c33bc73014e20d9fe8b01cdd"}, + {file = "rpds_py-0.23.1-cp313-cp313-win_amd64.whl", hash = "sha256:3aaf141d39f45322e44fc2c742e4b8b4098ead5317e5f884770c8df0c332da70"}, + {file = "rpds_py-0.23.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:759462b2d0aa5a04be5b3e37fb8183615f47014ae6b116e17036b131985cb731"}, + {file = "rpds_py-0.23.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3e9212f52074fc9d72cf242a84063787ab8e21e0950d4d6709886fb62bcb91d5"}, + {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e9f3a3ac919406bc0414bbbd76c6af99253c507150191ea79fab42fdb35982a"}, + {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c04ca91dda8a61584165825907f5c967ca09e9c65fe8966ee753a3f2b019fe1e"}, + {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ab923167cfd945abb9b51a407407cf19f5bee35001221f2911dc85ffd35ff4f"}, + {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed6f011bedca8585787e5082cce081bac3d30f54520097b2411351b3574e1219"}, + {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6959bb9928c5c999aba4a3f5a6799d571ddc2c59ff49917ecf55be2bbb4e3722"}, + {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1ed7de3c86721b4e83ac440751329ec6a1102229aa18163f84c75b06b525ad7e"}, + {file = "rpds_py-0.23.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5fb89edee2fa237584e532fbf78f0ddd1e49a47c7c8cfa153ab4849dc72a35e6"}, + {file = "rpds_py-0.23.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7e5413d2e2d86025e73f05510ad23dad5950ab8417b7fc6beaad99be8077138b"}, + {file = "rpds_py-0.23.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d31ed4987d72aabdf521eddfb6a72988703c091cfc0064330b9e5f8d6a042ff5"}, + {file = "rpds_py-0.23.1-cp313-cp313t-win32.whl", hash = "sha256:f3429fb8e15b20961efca8c8b21432623d85db2228cc73fe22756c6637aa39e7"}, + {file = "rpds_py-0.23.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d6f6512a90bd5cd9030a6237f5346f046c6f0e40af98657568fa45695d4de59d"}, + {file = "rpds_py-0.23.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:09cd7dbcb673eb60518231e02874df66ec1296c01a4fcd733875755c02014b19"}, + {file = "rpds_py-0.23.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c6760211eee3a76316cf328f5a8bd695b47b1626d21c8a27fb3b2473a884d597"}, + {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72e680c1518733b73c994361e4b06441b92e973ef7d9449feec72e8ee4f713da"}, + {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae28144c1daa61366205d32abd8c90372790ff79fc60c1a8ad7fd3c8553a600e"}, + {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c698d123ce5d8f2d0cd17f73336615f6a2e3bdcedac07a1291bb4d8e7d82a05a"}, + {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98b257ae1e83f81fb947a363a274c4eb66640212516becaff7bef09a5dceacaa"}, + {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c9ff044eb07c8468594d12602291c635da292308c8c619244e30698e7fc455a"}, + {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7938c7b0599a05246d704b3f5e01be91a93b411d0d6cc62275f025293b8a11ce"}, + {file = "rpds_py-0.23.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e9cb79ecedfc156c0692257ac7ed415243b6c35dd969baa461a6888fc79f2f07"}, + {file = "rpds_py-0.23.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:7b77e07233925bd33fc0022b8537774423e4c6680b6436316c5075e79b6384f4"}, + {file = "rpds_py-0.23.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a970bfaf130c29a679b1d0a6e0f867483cea455ab1535fb427566a475078f27f"}, + {file = "rpds_py-0.23.1-cp39-cp39-win32.whl", hash = "sha256:4233df01a250b3984465faed12ad472f035b7cd5240ea3f7c76b7a7016084495"}, + {file = "rpds_py-0.23.1-cp39-cp39-win_amd64.whl", hash = "sha256:c617d7453a80e29d9973b926983b1e700a9377dbe021faa36041c78537d7b08c"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c1f8afa346ccd59e4e5630d5abb67aba6a9812fddf764fd7eb11f382a345f8cc"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fad784a31869747df4ac968a351e070c06ca377549e4ace94775aaa3ab33ee06"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5a96fcac2f18e5a0a23a75cd27ce2656c66c11c127b0318e508aab436b77428"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3e77febf227a1dc3220159355dba68faa13f8dca9335d97504abf428469fb18b"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26bb3e8de93443d55e2e748e9fd87deb5f8075ca7bc0502cfc8be8687d69a2ec"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db7707dde9143a67b8812c7e66aeb2d843fe33cc8e374170f4d2c50bd8f2472d"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eedaaccc9bb66581d4ae7c50e15856e335e57ef2734dbc5fd8ba3e2a4ab3cb6"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28358c54fffadf0ae893f6c1050e8f8853e45df22483b7fff2f6ab6152f5d8bf"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:633462ef7e61d839171bf206551d5ab42b30b71cac8f10a64a662536e057fdef"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:a98f510d86f689fcb486dc59e6e363af04151e5260ad1bdddb5625c10f1e95f8"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e0397dd0b3955c61ef9b22838144aa4bef6f0796ba5cc8edfc64d468b93798b4"}, + {file = "rpds_py-0.23.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:75307599f0d25bf6937248e5ac4e3bde5ea72ae6618623b86146ccc7845ed00b"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3614d280bf7aab0d3721b5ce0e73434acb90a2c993121b6e81a1c15c665298ac"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e5963ea87f88bddf7edd59644a35a0feecf75f8985430124c253612d4f7d27ae"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad76f44f70aac3a54ceb1813ca630c53415da3a24fd93c570b2dfb4856591017"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2c6ae11e6e93728d86aafc51ced98b1658a0080a7dd9417d24bfb955bb09c3c2"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc869af5cba24d45fb0399b0cfdbcefcf6910bf4dee5d74036a57cf5264b3ff4"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c76b32eb2ab650a29e423525e84eb197c45504b1c1e6e17b6cc91fcfeb1a4b1d"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4263320ed887ed843f85beba67f8b2d1483b5947f2dc73a8b068924558bfeace"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7f9682a8f71acdf59fd554b82b1c12f517118ee72c0f3944eda461606dfe7eb9"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:754fba3084b70162a6b91efceee8a3f06b19e43dac3f71841662053c0584209a"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:a1c66e71ecfd2a4acf0e4bd75e7a3605afa8f9b28a3b497e4ba962719df2be57"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8d67beb6002441faef8251c45e24994de32c4c8686f7356a1f601ad7c466f7c3"}, + {file = "rpds_py-0.23.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a1e17d8dc8e57d8e0fd21f8f0f0a5211b3fa258b2e444c2053471ef93fe25a00"}, + {file = "rpds_py-0.23.1.tar.gz", hash = "sha256:7f3240dcfa14d198dba24b8b9cb3b108c06b68d45b7babd9eefc1038fdf7e707"}, +] + [[package]] name = "ruff" version = "0.1.15" @@ -3040,7 +3704,7 @@ description = "An extremely fast Python linter and code formatter, written in Ru optional = false python-versions = ">=3.7" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "ruff-0.1.15-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:5fe8d54df166ecc24106db7dd6a68d44852d14eb0729ea4672bb4d96c320b7df"}, {file = "ruff-0.1.15-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6f0bfbb53c4b4de117ac4d6ddfd33aa5fc31beeaa21d23c45c6dd249faf9126f"}, @@ -3068,7 +3732,7 @@ description = "" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "safetensors-0.4.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a63eaccd22243c67e4f2b1c3e258b257effc4acd78f3b9d397edc8cf8f1298a7"}, {file = "safetensors-0.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:23fc9b4ec7b602915cbb4ec1a7c1ad96d2743c322f20ab709e2c35d1b66dad27"}, @@ -3195,6 +3859,50 @@ tensorflow = ["safetensors[numpy]", "tensorflow (>=2.11.0)"] testing = ["h5py (>=3.7.0)", "huggingface-hub (>=0.12.1)", "hypothesis (>=6.70.2)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "safetensors[numpy]", "setuptools-rust (>=1.5.2)"] torch = ["safetensors[numpy]", "torch (>=1.10)"] +[[package]] +name = "scipy" +version = "1.13.1" +description = "Fundamental algorithms for scientific computing in Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"}, + {file = "scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f"}, + {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989"}, + {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f"}, + {file = "scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94"}, + {file = "scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54"}, + {file = "scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9"}, + {file = "scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326"}, + {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299"}, + {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa"}, + {file = "scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59"}, + {file = "scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b"}, + {file = "scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1"}, + {file = "scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d"}, + {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627"}, + {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884"}, + {file = "scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16"}, + {file = "scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949"}, + {file = "scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5"}, + {file = "scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24"}, + {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004"}, + {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d"}, + {file = "scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c"}, + {file = "scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2"}, + {file = "scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c"}, +] + +[package.dependencies] +numpy = ">=1.22.4,<2.3" + +[package.extras] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] +test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + [[package]] name = "secretstorage" version = "3.3.3" @@ -3202,7 +3910,7 @@ description = "Python bindings to FreeDesktop.org Secret Service API" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "sys_platform == \"linux\"" +markers = "sys_platform == \"linux\" and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "SecretStorage-3.3.3-py3-none-any.whl", hash = "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99"}, {file = "SecretStorage-3.3.3.tar.gz", hash = "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77"}, @@ -3219,7 +3927,7 @@ description = "Easily download, build, install, upgrade, and uninstall Python pa optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "setuptools-69.2.0-py3-none-any.whl", hash = "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c"}, {file = "setuptools-69.2.0.tar.gz", hash = "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e"}, @@ -3230,6 +3938,127 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +[[package]] +name = "simplejson" +version = "3.20.1" +description = "Simple, fast, extensible JSON encoder/decoder for Python" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.5" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "simplejson-3.20.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f5272b5866b259fe6c33c4a8c5073bf8b359c3c97b70c298a2f09a69b52c7c41"}, + {file = "simplejson-3.20.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5c0de368f3052a59a1acf21f8b2dd28686a9e4eba2da7efae7ed9554cb31e7bc"}, + {file = "simplejson-3.20.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:0821871404a537fd0e22eba240c74c0467c28af6cc435903eca394cfc74a0497"}, + {file = "simplejson-3.20.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:c939a1e576bded47d7d03aa2afc2ae90b928b2cf1d9dc2070ceec51fd463f430"}, + {file = "simplejson-3.20.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:3c4f0a61cdc05550782ca4a2cdb311ea196c2e6be6b24a09bf71360ca8c3ca9b"}, + {file = "simplejson-3.20.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:6c21f5c026ca633cfffcb6bc1fac2e99f65cb2b24657d3bef21aed9916cc3bbf"}, + {file = "simplejson-3.20.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:8d23b7f8d6b72319d6d55a0261089ff621ce87e54731c2d3de6a9bf7be5c028c"}, + {file = "simplejson-3.20.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:cda5c32a98f392909088111ecec23f2b0d39346ceae1a0fea23ab2d1f84ec21d"}, + {file = "simplejson-3.20.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e580aa65d5f6c3bf41b9b4afe74be5d5ddba9576701c107c772d936ea2b5043a"}, + {file = "simplejson-3.20.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4a586ce4f78cec11f22fe55c5bee0f067e803aab9bad3441afe2181693b5ebb5"}, + {file = "simplejson-3.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74a1608f9e6e8c27a4008d70a54270868306d80ed48c9df7872f9f4b8ac87808"}, + {file = "simplejson-3.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03db8cb64154189a92a7786209f24e391644f3a3fa335658be2df2af1960b8d8"}, + {file = "simplejson-3.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eea7e2b7d858f6fdfbf0fe3cb846d6bd8a45446865bc09960e51f3d473c2271b"}, + {file = "simplejson-3.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e66712b17d8425bb7ff8968d4c7c7fd5a2dd7bd63728b28356223c000dd2f91f"}, + {file = "simplejson-3.20.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2cc4f6486f9f515b62f5831ff1888886619b84fc837de68f26d919ba7bbdcbc"}, + {file = "simplejson-3.20.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a3c2df555ee4016148fa192e2b9cd9e60bc1d40769366134882685e90aee2a1e"}, + {file = "simplejson-3.20.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:78520f04b7548a5e476b5396c0847e066f1e0a4c0c5e920da1ad65e95f410b11"}, + {file = "simplejson-3.20.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f4bd49ecde87b0fe9f55cc971449a32832bca9910821f7072bbfae1155eaa007"}, + {file = "simplejson-3.20.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7eaae2b88eb5da53caaffdfa50e2e12022553949b88c0df4f9a9663609373f72"}, + {file = "simplejson-3.20.1-cp310-cp310-win32.whl", hash = "sha256:e836fb88902799eac8debc2b642300748f4860a197fa3d9ea502112b6bb8e142"}, + {file = "simplejson-3.20.1-cp310-cp310-win_amd64.whl", hash = "sha256:b122a19b552b212fc3b5b96fc5ce92333d4a9ac0a800803e1f17ebb16dac4be5"}, + {file = "simplejson-3.20.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:325b8c107253d3217e89d7b50c71015b5b31e2433e6c5bf38967b2f80630a8ca"}, + {file = "simplejson-3.20.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88a7baa8211089b9e58d78fbc1b0b322103f3f3d459ff16f03a36cece0d0fcf0"}, + {file = "simplejson-3.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:299b1007b8101d50d95bc0db1bf5c38dc372e85b504cf77f596462083ee77e3f"}, + {file = "simplejson-3.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ec618ed65caab48e81e3ed29586236a8e57daef792f1f3bb59504a7e98cd10"}, + {file = "simplejson-3.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2cdead1d3197f0ff43373cf4730213420523ba48697743e135e26f3d179f38"}, + {file = "simplejson-3.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3466d2839fdc83e1af42e07b90bc8ff361c4e8796cd66722a40ba14e458faddd"}, + {file = "simplejson-3.20.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d492ed8e92f3a9f9be829205f44b1d0a89af6582f0cf43e0d129fa477b93fe0c"}, + {file = "simplejson-3.20.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f924b485537b640dc69434565463fd6fc0c68c65a8c6e01a823dd26c9983cf79"}, + {file = "simplejson-3.20.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9e8eacf6a3491bf76ea91a8d46726368a6be0eb94993f60b8583550baae9439e"}, + {file = "simplejson-3.20.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d34d04bf90b4cea7c22d8b19091633908f14a096caa301b24c2f3d85b5068fb8"}, + {file = "simplejson-3.20.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:69dd28d4ce38390ea4aaf212902712c0fd1093dc4c1ff67e09687c3c3e15a749"}, + {file = "simplejson-3.20.1-cp311-cp311-win32.whl", hash = "sha256:dfe7a9da5fd2a3499436cd350f31539e0a6ded5da6b5b3d422df016444d65e43"}, + {file = "simplejson-3.20.1-cp311-cp311-win_amd64.whl", hash = "sha256:896a6c04d7861d507d800da7642479c3547060bf97419d9ef73d98ced8258766"}, + {file = "simplejson-3.20.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f31c4a3a7ab18467ee73a27f3e59158255d1520f3aad74315edde7a940f1be23"}, + {file = "simplejson-3.20.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:884e6183d16b725e113b83a6fc0230152ab6627d4d36cb05c89c2c5bccfa7bc6"}, + {file = "simplejson-3.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03d7a426e416fe0d3337115f04164cd9427eb4256e843a6b8751cacf70abc832"}, + {file = "simplejson-3.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:000602141d0bddfcff60ea6a6e97d5e10c9db6b17fd2d6c66199fa481b6214bb"}, + {file = "simplejson-3.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:af8377a8af78226e82e3a4349efdde59ffa421ae88be67e18cef915e4023a595"}, + {file = "simplejson-3.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15c7de4c88ab2fbcb8781a3b982ef883696736134e20b1210bca43fb42ff1acf"}, + {file = "simplejson-3.20.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:455a882ff3f97d810709f7b620007d4e0aca8da71d06fc5c18ba11daf1c4df49"}, + {file = "simplejson-3.20.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:fc0f523ce923e7f38eb67804bc80e0a028c76d7868500aa3f59225574b5d0453"}, + {file = "simplejson-3.20.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76461ec929282dde4a08061071a47281ad939d0202dc4e63cdd135844e162fbc"}, + {file = "simplejson-3.20.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ab19c2da8c043607bde4d4ef3a6b633e668a7d2e3d56f40a476a74c5ea71949f"}, + {file = "simplejson-3.20.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b2578bedaedf6294415197b267d4ef678fea336dd78ee2a6d2f4b028e9d07be3"}, + {file = "simplejson-3.20.1-cp312-cp312-win32.whl", hash = "sha256:339f407373325a36b7fd744b688ba5bae0666b5d340ec6d98aebc3014bf3d8ea"}, + {file = "simplejson-3.20.1-cp312-cp312-win_amd64.whl", hash = "sha256:627d4486a1ea7edf1f66bb044ace1ce6b4c1698acd1b05353c97ba4864ea2e17"}, + {file = "simplejson-3.20.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:71e849e7ceb2178344998cbe5ade101f1b329460243c79c27fbfc51c0447a7c3"}, + {file = "simplejson-3.20.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b63fdbab29dc3868d6f009a59797cefaba315fd43cd32ddd998ee1da28e50e29"}, + {file = "simplejson-3.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1190f9a3ce644fd50ec277ac4a98c0517f532cfebdcc4bd975c0979a9f05e1fb"}, + {file = "simplejson-3.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1336ba7bcb722ad487cd265701ff0583c0bb6de638364ca947bb84ecc0015d1"}, + {file = "simplejson-3.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e975aac6a5acd8b510eba58d5591e10a03e3d16c1cf8a8624ca177491f7230f0"}, + {file = "simplejson-3.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6a6dd11ee282937ad749da6f3b8d87952ad585b26e5edfa10da3ae2536c73078"}, + {file = "simplejson-3.20.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab980fcc446ab87ea0879edad41a5c28f2d86020014eb035cf5161e8de4474c6"}, + {file = "simplejson-3.20.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f5aee2a4cb6b146bd17333ac623610f069f34e8f31d2f4f0c1a2186e50c594f0"}, + {file = "simplejson-3.20.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:652d8eecbb9a3b6461b21ec7cf11fd0acbab144e45e600c817ecf18e4580b99e"}, + {file = "simplejson-3.20.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:8c09948f1a486a89251ee3a67c9f8c969b379f6ffff1a6064b41fea3bce0a112"}, + {file = "simplejson-3.20.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cbbd7b215ad4fc6f058b5dd4c26ee5c59f72e031dfda3ac183d7968a99e4ca3a"}, + {file = "simplejson-3.20.1-cp313-cp313-win32.whl", hash = "sha256:ae81e482476eaa088ef9d0120ae5345de924f23962c0c1e20abbdff597631f87"}, + {file = "simplejson-3.20.1-cp313-cp313-win_amd64.whl", hash = "sha256:1b9fd15853b90aec3b1739f4471efbf1ac05066a2c7041bf8db821bb73cd2ddc"}, + {file = "simplejson-3.20.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c7edf279c1376f28bf41e916c015a2a08896597869d57d621f55b6a30c7e1e6d"}, + {file = "simplejson-3.20.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9202b9de38f12e99a40addd1a8d508a13c77f46d87ab1f9095f154667f4fe81"}, + {file = "simplejson-3.20.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:391345b4157cc4e120027e013bd35c45e2c191e2bf48b8913af488cdc3b9243c"}, + {file = "simplejson-3.20.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c6fdcc9debb711ddd2ad6d69f9386a3d9e8e253234bbb30513e0a7caa9510c51"}, + {file = "simplejson-3.20.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9daf8cdc7ee8a9e9f7a3b313ba0a003391857e90d0e82fbcd4d614aa05cb7c3b"}, + {file = "simplejson-3.20.1-cp36-cp36m-musllinux_1_2_aarch64.whl", hash = "sha256:c02f4868a3a46ffe284a51a88d134dc96feff6079a7115164885331a1ba8ed9f"}, + {file = "simplejson-3.20.1-cp36-cp36m-musllinux_1_2_i686.whl", hash = "sha256:3d7310172d5340febd258cb147f46aae30ad57c445f4d7e1ae8461c10aaf43b0"}, + {file = "simplejson-3.20.1-cp36-cp36m-musllinux_1_2_ppc64le.whl", hash = "sha256:4762e05577955312a4c6802f58dd02e040cc79ae59cda510aa1564d84449c102"}, + {file = "simplejson-3.20.1-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:8bb98fdf318c05aefd08a92583bd6ee148e93c6756fb1befb7b2d5f27824be78"}, + {file = "simplejson-3.20.1-cp36-cp36m-win32.whl", hash = "sha256:9a74e70818818981294b8e6956ce3496c5e1bd4726ac864fae473197671f7b85"}, + {file = "simplejson-3.20.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e041add470e8f8535cc05509485eb7205729a84441f03b25cde80ad48823792e"}, + {file = "simplejson-3.20.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7e9d73f46119240e4f4f07868241749d67d09873f40cb968d639aa9ccc488b86"}, + {file = "simplejson-3.20.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae6e637dc24f8fee332ed23dd070e81394138e42cd4fd9d0923e5045ba122e27"}, + {file = "simplejson-3.20.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:efd3bc6c6b17e3d4620eb6be5196f0d1c08b6ce7c3101fa8e292b79e0908944b"}, + {file = "simplejson-3.20.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87fc623d457173a0213bc9ca4e346b83c9d443f63ed5cca847fb0cacea3cfc95"}, + {file = "simplejson-3.20.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec6a1e0a7aff76f0e008bebfa950188b9c50b58c1885d898145f48fc8e189a56"}, + {file = "simplejson-3.20.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:9c079606f461a6e950099167e21e13985147c8a24be8eea66c9ad68f73fad744"}, + {file = "simplejson-3.20.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:9faceb68fba27ef17eda306e4cd97a7b4b14fdadca5fbb15790ba8b26ebeec0c"}, + {file = "simplejson-3.20.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:7ceed598e4bacbf5133fe7a418f7991bb2df0683f3ac11fbf9e36a2bc7aa4b85"}, + {file = "simplejson-3.20.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:ede69c765e9901861ad7c6139023b7b7d5807c48a2539d817b4ab40018002d5f"}, + {file = "simplejson-3.20.1-cp37-cp37m-win32.whl", hash = "sha256:d8853c269a4c5146ddca4aa7c70e631795e9d11239d5fedb1c6bbc91ffdebcac"}, + {file = "simplejson-3.20.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ed6a17fd397f0e2b3ad668fc9e19253ed2e3875ad9086bd7f795c29a3223f4a1"}, + {file = "simplejson-3.20.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:7551682b60bba3a9e2780742e101cf0a64250e76de7d09b1c4b0c8a7c7cc6834"}, + {file = "simplejson-3.20.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bd9577ec1c8c3a43040e3787711e4c257c70035b7551a21854b5dec88dad09e1"}, + {file = "simplejson-3.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a8e197e4cf6d42c2c57e7c52cd7c1e7b3e37c5911df1314fb393320131e2101"}, + {file = "simplejson-3.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bd09c8c75666e7f62a33d2f1fb57f81da1fcbb19a9fe7d7910b5756e1dd6048"}, + {file = "simplejson-3.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1bd6bfe5678d73fbd5328eea6a35216503796428fc47f1237432522febaf3a0c"}, + {file = "simplejson-3.20.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:71b75d448fd0ceb2e7c90e72bb82c41f8462550d48529980bc0bab1d2495bfbb"}, + {file = "simplejson-3.20.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7e15b716d09f318c8cda3e20f82fae81684ce3d3acd1d7770fa3007df1769de"}, + {file = "simplejson-3.20.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:3e7963197d958fcf9e98b212b80977d56c022384621ff463d98afc3b6b1ce7e8"}, + {file = "simplejson-3.20.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:2e671dd62051129185d3a9a92c60101f56cbc174854a1a3dfb69114ebd9e1699"}, + {file = "simplejson-3.20.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e25b2a0c396f3b84fb89573d07b0e1846ed563eb364f2ea8230ca92b8a8cb786"}, + {file = "simplejson-3.20.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:489c3a43116082bad56795215786313832ba3991cca1f55838e52a553f451ab6"}, + {file = "simplejson-3.20.1-cp38-cp38-win32.whl", hash = "sha256:4a92e948bad8df7fa900ba2ba0667a98303f3db206cbaac574935c332838208e"}, + {file = "simplejson-3.20.1-cp38-cp38-win_amd64.whl", hash = "sha256:49d059b8363327eee3c94799dd96782314b2dbd7bcc293b4ad48db69d6f4d362"}, + {file = "simplejson-3.20.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a8011f1dd1d676befcd4d675ebdbfdbbefd3bf350052b956ba8c699fca7d8cef"}, + {file = "simplejson-3.20.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e91703a4c5fec53e36875ae426ad785f4120bd1d93b65bed4752eeccd1789e0c"}, + {file = "simplejson-3.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e39eaa57c7757daa25bcd21f976c46be443b73dd6c3da47fe5ce7b7048ccefe2"}, + {file = "simplejson-3.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceab2ce2acdc7fbaa433a93006758db6ba9a659e80c4faa13b80b9d2318e9b17"}, + {file = "simplejson-3.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d4f320c33277a5b715db5bf5b10dae10c19076bd6d66c2843e04bd12d1f1ea5"}, + {file = "simplejson-3.20.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b6436c48e64378fa844d8c9e58a5ed0352bbcfd4028369a9b46679b7ab79d2d"}, + {file = "simplejson-3.20.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e18345c8dda5d699be8166b61f9d80aaee4545b709f1363f60813dc032dac53"}, + {file = "simplejson-3.20.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:90b573693d1526bed576f6817e2a492eaaef68f088b57d7a9e83d122bbb49e51"}, + {file = "simplejson-3.20.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:272cc767826e924a6bd369ea3dbf18e166ded29059c7a4d64d21a9a22424b5b5"}, + {file = "simplejson-3.20.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:51b41f284d603c4380732d7d619f8b34bd04bc4aa0ed0ed5f4ffd0539b14da44"}, + {file = "simplejson-3.20.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6e6697a3067d281f01de0fe96fc7cba4ea870d96d7deb7bfcf85186d74456503"}, + {file = "simplejson-3.20.1-cp39-cp39-win32.whl", hash = "sha256:6dd3a1d5aca87bf947f3339b0f8e8e329f1badf548bdbff37fac63c17936da8e"}, + {file = "simplejson-3.20.1-cp39-cp39-win_amd64.whl", hash = "sha256:463f1fca8fbf23d088e5850fdd0dd4d5faea8900a9f9680270bd98fd649814ca"}, + {file = "simplejson-3.20.1-py3-none-any.whl", hash = "sha256:8a6c1bbac39fa4a79f83cbf1df6ccd8ff7069582a9fd8db1e52cea073bc2c697"}, + {file = "simplejson-3.20.1.tar.gz", hash = "sha256:e64139b4ec4f1f24c142ff7dcafe55a22b811a74d86d66560c8815687143037d"}, +] + [[package]] name = "six" version = "1.16.0" @@ -3237,7 +4066,7 @@ description = "Python 2 and 3 compatibility utilities" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" groups = ["main", "dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -3250,7 +4079,7 @@ description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, @@ -3263,7 +4092,7 @@ description = "Play and Record Sound with Python" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "sounddevice-0.4.6-py3-none-any.whl", hash = "sha256:5de768ba6fe56ad2b5aaa2eea794b76b73e427961c95acad2ee2ed7f866a4b20"}, {file = "sounddevice-0.4.6-py3-none-macosx_10_6_x86_64.macosx_10_6_universal2.whl", hash = "sha256:8b0b806c205dd3e3cd5a97262b2482624fd21db7d47083b887090148a08051c8"}, @@ -3278,6 +4107,29 @@ CFFI = ">=1.0" [package.extras] numpy = ["NumPy"] +[[package]] +name = "soundfile" +version = "0.13.1" +description = "An audio library based on libsndfile, CFFI and NumPy" +optional = false +python-versions = "*" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "soundfile-0.13.1-py2.py3-none-any.whl", hash = "sha256:a23c717560da2cf4c7b5ae1142514e0fd82d6bbd9dfc93a50423447142f2c445"}, + {file = "soundfile-0.13.1-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:82dc664d19831933fe59adad199bf3945ad06d84bc111a5b4c0d3089a5b9ec33"}, + {file = "soundfile-0.13.1-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:743f12c12c4054921e15736c6be09ac26b3b3d603aef6fd69f9dde68748f2593"}, + {file = "soundfile-0.13.1-py2.py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:9c9e855f5a4d06ce4213f31918653ab7de0c5a8d8107cd2427e44b42df547deb"}, + {file = "soundfile-0.13.1-py2.py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:03267c4e493315294834a0870f31dbb3b28a95561b80b134f0bd3cf2d5f0e618"}, + {file = "soundfile-0.13.1-py2.py3-none-win32.whl", hash = "sha256:c734564fab7c5ddf8e9be5bf70bab68042cd17e9c214c06e365e20d64f9a69d5"}, + {file = "soundfile-0.13.1-py2.py3-none-win_amd64.whl", hash = "sha256:1e70a05a0626524a69e9f0f4dd2ec174b4e9567f4d8b6c11d38b5c289be36ee9"}, + {file = "soundfile-0.13.1.tar.gz", hash = "sha256:b2c68dab1e30297317080a5b43df57e302584c49e2942defdde0acccc53f0e5b"}, +] + +[package.dependencies] +cffi = ">=1.0" +numpy = "*" + [[package]] name = "srt" version = "3.5.3" @@ -3285,7 +4137,7 @@ description = "A tiny library for parsing, modifying, and composing SRT files." optional = false python-versions = ">=2.7" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "srt-3.5.3.tar.gz", hash = "sha256:4884315043a4f0740fd1f878ed6caa376ac06d70e135f306a6dc44632eed0cc0"}, ] @@ -3297,7 +4149,7 @@ description = "Transform subtitle line lengths, splitting into multiple subtitle optional = false python-versions = "<4.0,>=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "srt_equalizer-0.1.10-py3-none-any.whl", hash = "sha256:7b0cca73374ff7351badf2dc5266cabefdfd36b91ff736a535445562036cf8ed"}, {file = "srt_equalizer-0.1.10.tar.gz", hash = "sha256:5f6b1b2c48b12bb1caab13822d7ddd0a54a87772b824a0aa2ba64c033d379353"}, @@ -3313,7 +4165,7 @@ description = "Modifies OpenAI's Whisper to produce more reliable timestamps." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "stable-ts-2.17.5.tar.gz", hash = "sha256:6b41af9753bf8678248c70f030d281b972529d52f9b42cd4c0016826df379e89"}, ] @@ -3329,6 +4181,26 @@ tqdm = "*" fw = ["faster-whisper"] hf = ["accelerate", "optimum", "transformers (>=4.23.0)"] +[[package]] +name = "stempeg" +version = "0.2.3" +description = "Read and write stem/multistream audio files" +optional = false +python-versions = "*" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "stempeg-0.2.3-py3-none-any.whl", hash = "sha256:130f384aafeb4429718421c7437bb1c9e24c851ae55f8b1de4d26c0d59ddb6a4"}, + {file = "stempeg-0.2.3.tar.gz", hash = "sha256:840bb824504d713336da6a89d62790f7ba172a099dc96f8a2bb5d32148d1a96a"}, +] + +[package.dependencies] +ffmpeg-python = ">=0.2.0" +numpy = ">=1.6" + +[package.extras] +tests = ["pytest"] + [[package]] name = "submitit" version = "1.5.2" @@ -3336,7 +4208,7 @@ description = "\"Python 3.8+ toolbox for submitting jobs to Slurm" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "submitit-1.5.2-py3-none-any.whl", hash = "sha256:c6d5867fbcc78588d0ded3338436903f8db9fdb759f80e9639e6025a9ea32ade"}, {file = "submitit-1.5.2.tar.gz", hash = "sha256:36a8a54ad4e10171111e7618eefe28fe819f931a89c9cd1f6d2770900c013f12"}, @@ -3356,7 +4228,7 @@ description = "Computer algebra system (CAS) in Python" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "sympy-1.12-py3-none-any.whl", hash = "sha256:c3588cd4295d0c0f603d0f2ae780587e64e2efeedb3521e46b9bb1d08d184fa5"}, {file = "sympy-1.12.tar.gz", hash = "sha256:ebf595c8dac3e0fdc4152c51878b498396ec7f30e7a914d6071e674d49420fb8"}, @@ -3372,7 +4244,7 @@ description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "tiktoken-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:277de84ccd8fa12730a6b4067456e5cf72fef6300bea61d506c09e45658d41ac"}, {file = "tiktoken-0.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9c44433f658064463650d61387623735641dcc4b6c999ca30bc0f8ba3fccaf5c"}, @@ -3426,7 +4298,7 @@ description = "" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "tokenizers-0.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:439261da7c0a5c88bda97acb284d49fbdaf67e9d3b623c0bfd107512d22787a9"}, {file = "tokenizers-0.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:03dae629d99068b1ea5416d50de0fea13008f04129cc79af77a2a6392792d93c"}, @@ -3545,7 +4417,7 @@ description = "Python Library for Tom's Obvious, Minimal Language" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, @@ -3557,7 +4429,7 @@ version = "2.0.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.7" -groups = ["dev"] +groups = ["main", "dev"] markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and python_version < \"3.11\"" files = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, @@ -3571,7 +4443,7 @@ description = "Style preserving TOML library" optional = false python-versions = ">=3.7" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "tomlkit-0.12.4-py3-none-any.whl", hash = "sha256:5cd82d48a3dd89dee1f9d64420aa20ae65cfbd00668d6f094d7578a78efbb77b"}, {file = "tomlkit-0.12.4.tar.gz", hash = "sha256:7ca1cfc12232806517a8515047ba66a19369e71edf2439d0f5824f91032b6cc3"}, @@ -3584,7 +4456,7 @@ description = "Tensors and Dynamic neural networks in Python with strong GPU acc optional = false python-versions = ">=3.8.0" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\") and python_version <= \"3.11\" or (sys_platform != \"win32\" and sys_platform != \"msys\") and python_version >= \"3.12\"" files = [ {file = "torch-2.2.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:8d3bad336dd2c93c6bcb3268e8e9876185bda50ebde325ef211fb565c7d15273"}, {file = "torch-2.2.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:5297f13370fdaca05959134b26a06a7f232ae254bf2e11a50eddec62525c9006"}, @@ -3644,7 +4516,7 @@ description = "Tensors and Dynamic neural networks in Python with strong GPU acc optional = false python-versions = ">=3.8.0" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"msys\") and python_version <= \"3.11\" or (sys_platform == \"win32\" or sys_platform == \"msys\") and python_version >= \"3.12\"" files = [ {file = "torch-2.2.1+cu121-cp310-cp310-linux_x86_64.whl", hash = "sha256:1adf430f01ff649c848ac021785e18007b0714fdde68e4e65bd0c640bf3fb8e1"}, {file = "torch-2.2.1+cu121-cp310-cp310-win_amd64.whl", hash = "sha256:d4491bea61043ad053d0a0d6423008f6333dfb68f366160bf1aa7dfb2c0f2e9c"}, @@ -3694,7 +4566,7 @@ description = "An audio package for PyTorch" optional = false python-versions = "*" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\") and python_version <= \"3.11\" or (sys_platform != \"win32\" and sys_platform != \"msys\") and python_version >= \"3.12\"" files = [ {file = "torchaudio-2.2.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:580eefd764a01a64d5b6aa260c0c47974be6a6964892d54029a73b17f4611fcd"}, {file = "torchaudio-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8ad55c2069b27bbe18e14783a202e3f3f8082fe9e59281436ba797edb0fc94d5"}, @@ -3733,7 +4605,7 @@ description = "An audio package for PyTorch" optional = false python-versions = "*" groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"msys\") and python_version <= \"3.11\" or (sys_platform == \"win32\" or sys_platform == \"msys\") and python_version >= \"3.12\"" files = [ {file = "torchaudio-2.2.1+cu121-cp310-cp310-linux_x86_64.whl", hash = "sha256:23f6236429e2bf676b820e8e7221a1d58aaf908bff2ba2665aa852df71a97961"}, {file = "torchaudio-2.2.1+cu121-cp310-cp310-win_amd64.whl", hash = "sha256:cd8495e5dfdd21bf28c95c731768fdea62b24977388b95805739cda538b75a44"}, @@ -3757,22 +4629,23 @@ reference = "torch" [[package]] name = "tqdm" -version = "4.66.2" +version = "4.67.1" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ - {file = "tqdm-4.66.2-py3-none-any.whl", hash = "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9"}, - {file = "tqdm-4.66.2.tar.gz", hash = "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531"}, + {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, + {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, ] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] -dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +dev = ["nbval", "pytest (>=6)", "pytest-asyncio (>=0.24)", "pytest-cov", "pytest-timeout"] +discord = ["requests"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] @@ -3784,7 +4657,7 @@ description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow optional = false python-versions = ">=3.8.0" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "transformers-4.46.1-py3-none-any.whl", hash = "sha256:f77b251a648fd32e3d14b5e7e27c913b7c29154940f519e4c8c3aa6061df0f05"}, {file = "transformers-4.46.1.tar.gz", hash = "sha256:16d79927d772edaf218820a96f9254e2211f9cd7fb3c308562d2d636c964a68c"}, @@ -3855,7 +4728,7 @@ description = "Helper to pretty print an ascii table with atree-like structure" optional = false python-versions = ">=3.6.0" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "treetable-0.2.5.tar.gz", hash = "sha256:29c95b797a8ecff4bb894cb7b103e39a78c905ab78a88a9a247de30c87743a2f"}, ] @@ -3867,7 +4740,7 @@ description = "A language and compiler for custom Deep Learning operations" optional = false python-versions = "*" groups = ["main"] -markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"linux\" or sys_platform == \"linux2\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (platform_system == \"Linux\" or sys_platform == \"linux\" or sys_platform == \"linux2\") and (platform_machine == \"x86_64\" or sys_platform == \"linux2\") and (python_version < \"3.12\" or sys_platform == \"linux\" or sys_platform == \"linux2\")" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"linux\" or sys_platform == \"linux2\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or sys_platform == \"linux\" or sys_platform == \"linux2\") and (platform_system == \"Linux\" or sys_platform == \"linux\" or sys_platform == \"linux2\") and (platform_machine == \"x86_64\" or sys_platform == \"linux2\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "triton-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2294514340cfe4e8f4f9e5c66c702744c4a117d25e618bd08469d0bfed1e2e5"}, {file = "triton-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da58a152bddb62cafa9a857dd2bc1f886dbf9f9c90a2b5da82157cd2b34392b0"}, @@ -3896,7 +4769,7 @@ files = [ {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, ] -markers = {main = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"", dev = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and python_version < \"3.11\""} +markers = {main = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")", dev = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and python_version < \"3.11\""} [[package]] name = "typing-inspect" @@ -3905,7 +4778,7 @@ description = "Runtime inspection utilities for typing module." optional = false python-versions = "*" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, @@ -3915,6 +4788,19 @@ files = [ mypy-extensions = ">=0.3.0" typing-extensions = ">=3.7.4" +[[package]] +name = "tzdata" +version = "2025.1" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" +files = [ + {file = "tzdata-2025.1-py2.py3-none-any.whl", hash = "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639"}, + {file = "tzdata-2025.1.tar.gz", hash = "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694"}, +] + [[package]] name = "urllib3" version = "2.2.1" @@ -3922,7 +4808,7 @@ description = "HTTP library with thread-safe connection pooling, file post, and optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, @@ -3941,7 +4827,7 @@ description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "virtualenv-20.25.1-py3-none-any.whl", hash = "sha256:961c026ac520bac5f69acb8ea063e8a4f071bcc9457b9c1f28f6b085c511583a"}, {file = "virtualenv-20.25.1.tar.gz", hash = "sha256:e08e13ecdca7a0bd53798f356d5831434afa5b07b93f0abdf0797b7a06ffe197"}, @@ -3963,7 +4849,7 @@ description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "websockets-13.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f48c749857f8fb598fb890a75f540e3221d0976ed0bf879cf3c7eef34151acee"}, {file = "websockets-13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7e72ce6bda6fb9409cc1e8164dd41d7c91466fb599eb047cfda72fe758a34a7"}, @@ -4060,7 +4946,7 @@ description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = ">=3.6" groups = ["dev"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, @@ -4141,7 +5027,7 @@ description = "A feature-rich command-line audio/video downloader" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\"" +markers = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "yt_dlp-2024.9.27-py3-none-any.whl", hash = "sha256:2717468dd697fcfcf9a89f493ba30a3830cdfb276c09750e5b561b08b9ef5f69"}, {file = "yt_dlp-2024.9.27.tar.gz", hash = "sha256:86605542e17e2e23ad23145b637ec308133762a15a5dedac4ae50b7973237026"}, @@ -4178,7 +5064,7 @@ files = [ {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, ] -markers = {main = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and python_version < \"3.12\"", dev = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and python_version < \"3.10\""} +markers = {main = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and python_version <= \"3.11\"", dev = "(sys_platform != \"win32\" and sys_platform != \"msys\" or sys_platform == \"win32\" or sys_platform == \"msys\") and python_version < \"3.10\""} [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] @@ -4187,4 +5073,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.1" python-versions = ">=3.9,<3.13" -content-hash = "09d83f1e4f6030e1ef5f4ba043e45baec4f749b578473f76135d392d52f3e091" +content-hash = "9dda865e501977f181c2e4926e9cfbacfe007fd4443000c2b8cd1b3c07d32b96" diff --git a/pyproject.toml b/pyproject.toml index 0770edfc..65720179 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -67,7 +67,24 @@ torchaudio = [ {version = "2.2.1+cu121", source = "torch", markers = "sys_platform == 'win32' or sys_platform == 'msys'"}, ] darkdetect = "^0.8.0" -demucs = {git = "https://github.com/raivisdejus/demucs", rev = "27c6425"} +# requirements for demucs +dora-search = "^0.1.12" +diffq = "^0.2.4" +einops = "^0.8.1" +flake8 = "^7.1.2" +hydra-colorlog = "^1.2.0" +hydra-core = "^1.3.2" +julius = "^0.2.7" +lameenc = "^1.8.1" +museval = "^0.4.1" +mypy = "^1.15.0" +openunmix = "^1.3.0" +pyyaml = "^6.0.2" +submitit = "^1.5.2" +tqdm = "^4.67.1" +treetable = "^0.2.5" +soundfile = "^0.13.1" +demucs = {path = "demucs"} [tool.poetry.group.dev.dependencies] autopep8 = "^1.7.0"