pyannote.database 6.1.0__tar.gz → 6.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pyannote_database-6.2.0/.github/social-preview.png +0 -0
- pyannote_database-6.2.0/.github/workflows/build-wheels.yml +35 -0
- pyannote_database-6.2.0/.github/workflows/ci.yml +87 -0
- pyannote_database-6.2.0/.github/workflows/doc.yml +55 -0
- pyannote_database-6.2.0/.github/workflows/lint.yml +30 -0
- pyannote_database-6.2.0/.github/workflows/test.yml +59 -0
- pyannote_database-6.2.0/.github/workflows/version-guard.yml +70 -0
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/.gitignore +7 -0
- pyannote_database-6.2.0/.pre-commit-config.yaml +7 -0
- pyannote_database-6.2.0/CHANGELOG.md +297 -0
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/PKG-INFO +158 -71
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/README.md +155 -68
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/doc/source/conf.py +42 -38
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/doc/source/index.rst +2 -2
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/pyproject.toml +8 -2
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/src/pyannote/database/__init__.py +8 -20
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/src/pyannote/database/cli.py +15 -17
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/src/pyannote/database/custom.py +73 -66
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/src/pyannote/database/database.py +4 -9
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/src/pyannote/database/file_finder.py +59 -45
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/src/pyannote/database/loader.py +10 -12
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/src/pyannote/database/protocol/__init__.py +3 -8
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/src/pyannote/database/protocol/collection.py +4 -6
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/src/pyannote/database/protocol/protocol.py +14 -32
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/src/pyannote/database/protocol/segmentation.py +9 -18
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/src/pyannote/database/protocol/speaker_diarization.py +2 -4
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/src/pyannote/database/protocol/speaker_identification.py +0 -3
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/src/pyannote/database/protocol/speaker_recognition.py +113 -116
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/src/pyannote/database/protocol/speaker_spotting.py +0 -3
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/src/pyannote/database/protocol/speaker_verification.py +10 -13
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/src/pyannote/database/registry.py +209 -44
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/src/pyannote/database/util.py +12 -22
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/tests/data/database.yml +1 -1
- pyannote_database-6.2.0/tests/data/stms/filename1.stm +2 -0
- pyannote_database-6.2.0/tests/data/stms/filename2.stm +3 -0
- pyannote_database-6.2.0/tests/test_file_finder.py +105 -0
- pyannote_database-6.2.0/tests/test_optional_features.py +59 -0
- pyannote_database-6.2.0/tests/test_protocols.py +91 -0
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/tests/test_registry.py +16 -9
- pyannote_database-6.1.0/tests/trial.py → pyannote_database-6.2.0/tests/test_trials.py +22 -10
- pyannote_database-6.2.0/tests/test_versions.py +224 -0
- pyannote_database-6.1.0/.github/workflows/doc.yml +0 -33
- pyannote_database-6.1.0/.github/workflows/release.yml +0 -125
- pyannote_database-6.1.0/.github/workflows/test.yml +0 -36
- pyannote_database-6.1.0/doc/source/changelog.rst +0 -340
- pyannote_database-6.1.0/setup.py +0 -84
- pyannote_database-6.1.0/tests/test.py +0 -86
- pyannote_database-6.1.0/uv.lock +0 -1397
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/.gitattributes +0 -0
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/.github/FUNDING.yml +0 -0
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/LICENSE +0 -0
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/doc/Makefile +0 -0
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/doc/make.bat +0 -0
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/setup.cfg +0 -0
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/src/pyannote/database/py.typed +0 -0
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/tests/data/audio/filename1.wav +0 -0
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/tests/data/audio/filename2.wav +0 -0
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/tests/data/ctms/filename1.ctm +0 -0
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/tests/data/ctms/filename2.ctm +0 -0
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/tests/data/lists/train.lst +0 -0
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/tests/data/mapping/domain.map +0 -0
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/tests/data/mapping/duration.map +0 -0
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/tests/data/rttms/train.rttm +0 -0
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/tests/data/trial/train.trial +0 -0
- {pyannote_database-6.1.0 → pyannote_database-6.2.0}/tests/data/uems/train.uem +0 -0
|
Binary file
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
name: Build Wheels
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_call:
|
|
5
|
+
inputs:
|
|
6
|
+
release-tag:
|
|
7
|
+
description: Release tag; empty on pull requests
|
|
8
|
+
required: false
|
|
9
|
+
type: string
|
|
10
|
+
default: ""
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
build:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
20
|
+
with:
|
|
21
|
+
persist-credentials: false
|
|
22
|
+
# hatch-vcs needs Git history and tags to derive the package version.
|
|
23
|
+
fetch-depth: 0
|
|
24
|
+
- uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
|
|
25
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
26
|
+
with:
|
|
27
|
+
python-version-file: .python-version
|
|
28
|
+
- name: Build wheel and source distribution
|
|
29
|
+
run: uv build
|
|
30
|
+
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
31
|
+
with:
|
|
32
|
+
name: python-package-distributions
|
|
33
|
+
path: dist/
|
|
34
|
+
if-no-files-found: error
|
|
35
|
+
retention-days: ${{ inputs.release-tag != '' && 90 || 3 }}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
release:
|
|
6
|
+
types: [published]
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
concurrency:
|
|
12
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
13
|
+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
14
|
+
|
|
15
|
+
# lint (PR only)
|
|
16
|
+
# build ──┬──► test ──────────┬──► publish (release only)
|
|
17
|
+
# └──► version-guard ─┘
|
|
18
|
+
# ci-complete collects all required results.
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
lint:
|
|
22
|
+
if: github.event_name == 'pull_request'
|
|
23
|
+
uses: ./.github/workflows/lint.yml
|
|
24
|
+
|
|
25
|
+
build:
|
|
26
|
+
uses: ./.github/workflows/build-wheels.yml
|
|
27
|
+
with:
|
|
28
|
+
release-tag: ${{ github.event.release.tag_name || '' }}
|
|
29
|
+
|
|
30
|
+
test:
|
|
31
|
+
needs: build
|
|
32
|
+
uses: ./.github/workflows/test.yml
|
|
33
|
+
|
|
34
|
+
version-guard:
|
|
35
|
+
name: versions
|
|
36
|
+
if: github.event_name == 'release'
|
|
37
|
+
needs: build
|
|
38
|
+
uses: ./.github/workflows/version-guard.yml
|
|
39
|
+
with:
|
|
40
|
+
release-tag: ${{ github.event.release.tag_name }}
|
|
41
|
+
|
|
42
|
+
# PyPI trusted publishing must run in a top-level workflow.
|
|
43
|
+
publish:
|
|
44
|
+
if: github.event_name == 'release'
|
|
45
|
+
needs: [build, test, version-guard]
|
|
46
|
+
runs-on: ubuntu-latest
|
|
47
|
+
environment:
|
|
48
|
+
name: pypi
|
|
49
|
+
url: https://pypi.org/project/pyannote-database/
|
|
50
|
+
permissions:
|
|
51
|
+
contents: write
|
|
52
|
+
id-token: write
|
|
53
|
+
steps:
|
|
54
|
+
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
55
|
+
with:
|
|
56
|
+
name: python-package-distributions
|
|
57
|
+
path: dist/
|
|
58
|
+
- name: Upload distributions to GitHub Release
|
|
59
|
+
uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2
|
|
60
|
+
with:
|
|
61
|
+
tag_name: ${{ github.event.release.tag_name }}
|
|
62
|
+
files: |
|
|
63
|
+
dist/*.whl
|
|
64
|
+
dist/*.tar.gz
|
|
65
|
+
fail_on_unmatched_files: true
|
|
66
|
+
- uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
|
|
67
|
+
- name: Upload to PyPI
|
|
68
|
+
run: >-
|
|
69
|
+
uv publish --trusted-publishing always
|
|
70
|
+
--publish-url https://upload.pypi.org/legacy/
|
|
71
|
+
--check-url https://pypi.org/simple/
|
|
72
|
+
|
|
73
|
+
ci-complete:
|
|
74
|
+
if: always()
|
|
75
|
+
needs: [lint, build, test, version-guard, publish]
|
|
76
|
+
runs-on: ubuntu-latest
|
|
77
|
+
env:
|
|
78
|
+
RESULTS: ${{ join(needs.*.result, ' ') }}
|
|
79
|
+
steps:
|
|
80
|
+
- name: Check results
|
|
81
|
+
run: |
|
|
82
|
+
for result in $RESULTS; do
|
|
83
|
+
if [[ "$result" == failure || "$result" == cancelled ]]; then
|
|
84
|
+
echo "::error::Required job finished with result: $result"
|
|
85
|
+
exit 1
|
|
86
|
+
fi
|
|
87
|
+
done
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
name: Documentation
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
concurrency:
|
|
12
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
13
|
+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
build:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
20
|
+
with:
|
|
21
|
+
persist-credentials: false
|
|
22
|
+
# hatch-vcs needs Git history and tags to derive the package version.
|
|
23
|
+
fetch-depth: 0
|
|
24
|
+
- uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
|
|
25
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
26
|
+
with:
|
|
27
|
+
python-version-file: .python-version
|
|
28
|
+
- name: Install documentation dependencies
|
|
29
|
+
run: |
|
|
30
|
+
uv venv
|
|
31
|
+
uv pip install '.[doc,cli]'
|
|
32
|
+
- name: Build documentation
|
|
33
|
+
run: uv run --no-project --python .venv/bin/python sphinx-build -W --keep-going -b html doc/source doc/build/html
|
|
34
|
+
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
35
|
+
with:
|
|
36
|
+
name: documentation
|
|
37
|
+
path: doc/build/html
|
|
38
|
+
include-hidden-files: true
|
|
39
|
+
retention-days: 3
|
|
40
|
+
|
|
41
|
+
deploy:
|
|
42
|
+
if: github.event_name == 'push'
|
|
43
|
+
needs: build
|
|
44
|
+
runs-on: ubuntu-latest
|
|
45
|
+
permissions:
|
|
46
|
+
contents: write
|
|
47
|
+
steps:
|
|
48
|
+
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
49
|
+
with:
|
|
50
|
+
name: documentation
|
|
51
|
+
path: doc/build/html
|
|
52
|
+
- uses: peaceiris/actions-gh-pages@373f7f263a76c20808c831209c920827a82a2847 # v3
|
|
53
|
+
with:
|
|
54
|
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
55
|
+
publish_dir: doc/build/html
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
name: Lint
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_call:
|
|
5
|
+
|
|
6
|
+
permissions:
|
|
7
|
+
contents: read
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
ruff:
|
|
11
|
+
name: python
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
15
|
+
with:
|
|
16
|
+
persist-credentials: false
|
|
17
|
+
# Report lint/format issues without blocking PRs.
|
|
18
|
+
# Remove continue-on-error once the codebase is clean.
|
|
19
|
+
- name: Run ruff check
|
|
20
|
+
uses: astral-sh/ruff-action@0ce1b0bf8b818ef400413f810f8a11cdbda0034b # v4.0.0
|
|
21
|
+
continue-on-error: true
|
|
22
|
+
with:
|
|
23
|
+
version: "0.17.1"
|
|
24
|
+
args: "check ."
|
|
25
|
+
- name: Run ruff format
|
|
26
|
+
uses: astral-sh/ruff-action@0ce1b0bf8b818ef400413f810f8a11cdbda0034b # v4.0.0
|
|
27
|
+
continue-on-error: true
|
|
28
|
+
with:
|
|
29
|
+
version: "0.17.1"
|
|
30
|
+
args: "format --check ."
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
name: Test
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_call:
|
|
5
|
+
|
|
6
|
+
permissions:
|
|
7
|
+
contents: read
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
name: Test Python ${{ matrix.python-version }}
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
strategy:
|
|
14
|
+
fail-fast: false
|
|
15
|
+
matrix:
|
|
16
|
+
python-version: ["3.11", "3.12", "3.13", "3.14", "3.15", "3.x"]
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
19
|
+
with:
|
|
20
|
+
persist-credentials: false
|
|
21
|
+
- uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
|
|
22
|
+
- id: python
|
|
23
|
+
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
24
|
+
with:
|
|
25
|
+
python-version: ${{ matrix.python-version }}
|
|
26
|
+
check-latest: ${{ matrix.python-version == '3.x' }}
|
|
27
|
+
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
28
|
+
with:
|
|
29
|
+
name: python-package-distributions
|
|
30
|
+
path: dist/
|
|
31
|
+
- name: Install the built wheel with test dependencies
|
|
32
|
+
run: |
|
|
33
|
+
uv venv --python "${{ steps.python.outputs.python-path }}"
|
|
34
|
+
uv pip install "$(echo dist/*.whl)[test]"
|
|
35
|
+
- name: Run tests against the installed wheel
|
|
36
|
+
run: uv run --no-project --python .venv/bin/python python -m pytest tests
|
|
37
|
+
|
|
38
|
+
optional-features:
|
|
39
|
+
name: Optional features (Python 3.11)
|
|
40
|
+
runs-on: ubuntu-latest
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
43
|
+
with:
|
|
44
|
+
persist-credentials: false
|
|
45
|
+
- uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
|
|
46
|
+
- id: python
|
|
47
|
+
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
48
|
+
with:
|
|
49
|
+
python-version: "3.11"
|
|
50
|
+
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
51
|
+
with:
|
|
52
|
+
name: python-package-distributions
|
|
53
|
+
path: dist/
|
|
54
|
+
- name: Install the built wheel with test dependencies
|
|
55
|
+
run: |
|
|
56
|
+
uv venv --python "${{ steps.python.outputs.python-path }}"
|
|
57
|
+
uv pip install "$(echo dist/*.whl)[test,cli,transcription]"
|
|
58
|
+
- name: Run tests against the installed wheel
|
|
59
|
+
run: uv run --no-project --python .venv/bin/python python -m pytest tests/test_optional_features.py
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
name: Version Guard
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_call:
|
|
5
|
+
inputs:
|
|
6
|
+
release-tag:
|
|
7
|
+
description: Release tag expected to match the package version
|
|
8
|
+
required: true
|
|
9
|
+
type: string
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
not-already-published:
|
|
16
|
+
name: pyannote-database
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
20
|
+
with:
|
|
21
|
+
persist-credentials: false
|
|
22
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
23
|
+
with:
|
|
24
|
+
python-version-file: .python-version
|
|
25
|
+
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
26
|
+
with:
|
|
27
|
+
name: python-package-distributions
|
|
28
|
+
path: dist/
|
|
29
|
+
- name: Compare distributions with PyPI
|
|
30
|
+
env:
|
|
31
|
+
RELEASE_TAG: ${{ inputs.release-tag }}
|
|
32
|
+
shell: python
|
|
33
|
+
run: |
|
|
34
|
+
import hashlib
|
|
35
|
+
import json
|
|
36
|
+
import os
|
|
37
|
+
from pathlib import Path
|
|
38
|
+
from urllib.error import HTTPError
|
|
39
|
+
from urllib.request import urlopen
|
|
40
|
+
from zipfile import ZipFile
|
|
41
|
+
from email.parser import BytesParser
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
directory = Path("dist")
|
|
45
|
+
tag = os.environ["RELEASE_TAG"]
|
|
46
|
+
wheels = list(directory.glob("*.whl"))
|
|
47
|
+
sources = list(directory.glob("*.tar.gz"))
|
|
48
|
+
if len(wheels) != 1 or len(sources) != 1:
|
|
49
|
+
raise ValueError("Expected exactly one wheel and one source distribution")
|
|
50
|
+
with ZipFile(wheels[0]) as wheel:
|
|
51
|
+
metadata_path, = [n for n in wheel.namelist() if n.endswith(".dist-info/METADATA")]
|
|
52
|
+
metadata = BytesParser().parsebytes(wheel.read(metadata_path))
|
|
53
|
+
version = metadata["Version"]
|
|
54
|
+
if metadata["Name"] != "pyannote-database" or version != tag.removeprefix("v"):
|
|
55
|
+
raise ValueError(f"Release tag {tag!r} does not match pyannote-database {version}")
|
|
56
|
+
try:
|
|
57
|
+
with urlopen(f"https://pypi.org/pypi/pyannote-database/{version}/json", timeout=30) as response:
|
|
58
|
+
published = json.load(response)["urls"]
|
|
59
|
+
except HTTPError as error:
|
|
60
|
+
if error.code != 404:
|
|
61
|
+
raise
|
|
62
|
+
published = []
|
|
63
|
+
hashes = {item["filename"]: item["digests"]["sha256"] for item in published}
|
|
64
|
+
for artifact in wheels + sources:
|
|
65
|
+
if artifact.name not in hashes:
|
|
66
|
+
print(f"{artifact.name}: not published yet")
|
|
67
|
+
elif hashlib.sha256(artifact.read_bytes()).hexdigest() == hashes[artifact.name]:
|
|
68
|
+
print(f"{artifact.name}: already published with identical contents")
|
|
69
|
+
else:
|
|
70
|
+
raise ValueError(f"{artifact.name} already exists with different contents. Use a new version.")
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## Version 6.2.0 (2026-11-02)
|
|
4
|
+
|
|
5
|
+
- BREAKING: require Python 3.11 or newer; Python 3.10 is no longer supported
|
|
6
|
+
- BREAKING: forbid `@` in protocol names (now used to select a version)
|
|
7
|
+
- BREAKING: reserve `version` key in subsets (now used to store the annotation version)
|
|
8
|
+
- feat: add annotation versions with optional metadata (selected with `Database.Task.Protocol@version`)
|
|
9
|
+
- feat: add `PYANNOTE_DATABASE_DATA_DIRS` environment variable to set root directories of relative `Databases:` paths
|
|
10
|
+
- fix: resolve meta-protocol members using the registry that loaded them
|
|
11
|
+
- fix: support `X` meta-protocols with Python 3.14
|
|
12
|
+
- fix: `FileFinder` patterns only match files (not directories nor hidden files)
|
|
13
|
+
|
|
14
|
+
## Version 6.1.1 (2025-12-07)
|
|
15
|
+
|
|
16
|
+
- fix: fix warning about invalid espace sequence
|
|
17
|
+
|
|
18
|
+
## Version 6.1.0 (2025-09-19)
|
|
19
|
+
|
|
20
|
+
- BREAKING: update `STMLoader` to return `meeteval.io.SegLST` instances
|
|
21
|
+
|
|
22
|
+
## Version 6.0.0 (2025-09-09)
|
|
23
|
+
|
|
24
|
+
- BREAKING: drop support to `Python` < 3.10
|
|
25
|
+
- BREAKING: switch to native namespace package
|
|
26
|
+
- setup: switch to `uv`
|
|
27
|
+
|
|
28
|
+
## Version 5.1.3 (2025-01-15)
|
|
29
|
+
|
|
30
|
+
- chore: remove deprecated use of `delim_whitespace`
|
|
31
|
+
- chore: use `importlib.metadata` instead of `pkg_resources`
|
|
32
|
+
|
|
33
|
+
## Version 5.1.0 (2024-04-05)
|
|
34
|
+
|
|
35
|
+
- BREAKING: switch to python 3.9+ (no support for 3.12 yet)
|
|
36
|
+
- feat(registry): make registry iterable (yields protocol names)
|
|
37
|
+
- fix(setup): fix `typer`` dependency
|
|
38
|
+
|
|
39
|
+
## Version 5.0.1 (2023-04-21)
|
|
40
|
+
|
|
41
|
+
- fix: fix support for numeric values in custom protocols (e.g. `channel: 0`)
|
|
42
|
+
- improve: do not complain about missing scope for meta protocols
|
|
43
|
+
|
|
44
|
+
## Version 5.0.0 (2023-03-27)
|
|
45
|
+
|
|
46
|
+
- feat(registry): add pyannote.database.registry to load multiple YAML configuration file
|
|
47
|
+
- BREAKING: turn pyannote.database.get_{database|protocol|protocols} function into registry methods
|
|
48
|
+
- BREAKING: remove support for database plugins (via "pyannote.database.database" entrypoint)
|
|
49
|
+
- feat(protocol): add generic segmentation protocol with "classes" metadata
|
|
50
|
+
- feat(protocol): add support for label "scope" in speaker diarization protocols
|
|
51
|
+
- improve(protocol): make ProtocolFile pickable
|
|
52
|
+
- feat(loader): add support for LAB and STM files
|
|
53
|
+
- feat(loader): add option to filter RTTM lines by "type"
|
|
54
|
+
- fix(cli): fix corner case when annotation key is missing
|
|
55
|
+
|
|
56
|
+
## Version 4.1.3 (2022-02-11)
|
|
57
|
+
|
|
58
|
+
- fix: fix corner case with missing uris in RTTM and UEM files
|
|
59
|
+
- fix(CI): fix documentation deployment
|
|
60
|
+
|
|
61
|
+
## Version 4.1.1 (2021-08-4)
|
|
62
|
+
|
|
63
|
+
- fix: fix support for meta verification protocol
|
|
64
|
+
|
|
65
|
+
## Version 4.1 (2021-04-07)
|
|
66
|
+
|
|
67
|
+
- feat: make {RTTM|UEM}Loader usable as preprocessors
|
|
68
|
+
- improve: remove the need for underscore prefix in database.yml
|
|
69
|
+
- fix: fix ProtocolFile.__iter__ (dictionary changed size during iteration)
|
|
70
|
+
|
|
71
|
+
## Version 4.0.4 (2020-12-14)
|
|
72
|
+
|
|
73
|
+
- fix: fix ProtocolFile.__iter__ (dictionary changed size during iteration)
|
|
74
|
+
|
|
75
|
+
## Version 4.0.3 (2020-10-11)
|
|
76
|
+
|
|
77
|
+
- fix: make custom protocols pickable
|
|
78
|
+
|
|
79
|
+
## Version 4.0.2 (2020-10-02)
|
|
80
|
+
|
|
81
|
+
- feat: automagically crop "annotated" to file "duration" when available
|
|
82
|
+
- fix: fix a bug in SpeakerDiarizationProtocols
|
|
83
|
+
- improve: avoid loading ProtocolFile (lazy) keys in "get_unique_identifier"
|
|
84
|
+
|
|
85
|
+
## Version 4.0.1 (2020-06-26)
|
|
86
|
+
|
|
87
|
+
- feat: set "name" attribute in get_protocol
|
|
88
|
+
- fix: display warning only when precomputed value is modified
|
|
89
|
+
|
|
90
|
+
## Version 4.0 (2020-06-15)
|
|
91
|
+
|
|
92
|
+
- feat: add support for custom speaker verification protocols
|
|
93
|
+
- feat: add pyannote.database.loader entrypoint
|
|
94
|
+
- feat: add pyannote-database CLI
|
|
95
|
+
- feat: add a few dataloaders (RTTM, UEM, CTM, MAP)
|
|
96
|
+
- feat: add support for nested ProtocolFile
|
|
97
|
+
- doc: major documentation update (README and docstrings)
|
|
98
|
+
- BREAKING: custom protocols must define a "uri" section
|
|
99
|
+
- BREAKING: remove support for "preprocessors" in Database constructor
|
|
100
|
+
- BREAKING: remove support for progress bars
|
|
101
|
+
|
|
102
|
+
## Version 3.0.1 (2020-03-31)
|
|
103
|
+
|
|
104
|
+
- BREAKING (feat): if a "database.yml" file exists in current working directory, it will be used even if PYANNOTE_DATABASE_CONFIG is set to another value.
|
|
105
|
+
- feat: add support in FileFinder for paths relative to "database.yml"
|
|
106
|
+
- BREAKING: rename "config_yml" option to "database_yml" in FileFinder
|
|
107
|
+
- feat: add support in custom protocols for paths relative to "database.yml" (@PaulLerner)
|
|
108
|
+
- BREAKING (feat): use "annotated" to crop "annotation" in custom protocols (@PaulLerner)
|
|
109
|
+
- fix: add support for int-like protocol name in custom protocols (@PaulLerner)
|
|
110
|
+
|
|
111
|
+
## Version 2.5 (2020-02-04)
|
|
112
|
+
|
|
113
|
+
- BREAKING: refactor {current | protocol}_file_iter
|
|
114
|
+
- BREAKING: only rely on "uri" to decide if a ProtocolFile contains multiple files
|
|
115
|
+
- BREAKING: deprecate FileFinder.current_file_iter in favor of ProtocolFile.files
|
|
116
|
+
- BREAKING: deprecate FileFinder.protocol_file_iter in favor of Protocol.files
|
|
117
|
+
- fix: fix support for lazy preprocessors in {Protocol | ProtocolFile}.files
|
|
118
|
+
|
|
119
|
+
## Version 2.4.3 (2020-01-24)
|
|
120
|
+
|
|
121
|
+
- fix: fix infinite recursion in "ProtocolFile" lazy evaluation
|
|
122
|
+
|
|
123
|
+
## Version 2.4.2 (2020-01-06)
|
|
124
|
+
|
|
125
|
+
- fix: add support for int-like database name in custom protocol
|
|
126
|
+
|
|
127
|
+
## Version 2.4.1 (2019-12-20)
|
|
128
|
+
|
|
129
|
+
- fix: make ProtocolFile thread-safe
|
|
130
|
+
|
|
131
|
+
## Version 2.4 (2019-12-17)
|
|
132
|
+
|
|
133
|
+
- feat: make preprocessors lazy
|
|
134
|
+
- fix: pandas would convert a label to NaN ([@PaulLerner](https://github.com/PaulLerner))
|
|
135
|
+
- feat: setup continuous integration
|
|
136
|
+
- setup: switch to pyannote.core 3.2
|
|
137
|
+
|
|
138
|
+
## Version 2.3.1 (2019-09-04)
|
|
139
|
+
|
|
140
|
+
- fix: fix support for MDTM files in `pyannote.database.custom.subset_iter` ([#23](https://github.com/pyannote/pyannote-database/issues/23))
|
|
141
|
+
|
|
142
|
+
## Version 2.3 (2019-07-19)
|
|
143
|
+
|
|
144
|
+
- feat: add LabelMapper preprocessor ([@MarvinLvn](https://github.com/MarvinLvn))
|
|
145
|
+
- chore: replace (deprecated) pandas.read_table with pandas.read_csv ([@V-assim](https://github.com/V-assim))
|
|
146
|
+
- chore: use YAML safe loader ([@V-assim](https://github.com/V-assim))
|
|
147
|
+
|
|
148
|
+
## Version 2.2 (2019-06-26)
|
|
149
|
+
|
|
150
|
+
- setup: switch to pyannote.core 3.0
|
|
151
|
+
- feat: add RTTMLoader preprocessor
|
|
152
|
+
|
|
153
|
+
## Version 2.1 (2019-04-04)
|
|
154
|
+
|
|
155
|
+
- feat: add support for "domain" key in generic protocol
|
|
156
|
+
|
|
157
|
+
## Version 2.0 (2019-03-20)
|
|
158
|
+
|
|
159
|
+
- BREAKING: change location and format of pyannote.database configuration file
|
|
160
|
+
- feat: add support for PYANNOTE_DATABASE_CONFIG environment variable
|
|
161
|
+
|
|
162
|
+
## Version 1.6 (2019-03-12)
|
|
163
|
+
|
|
164
|
+
- feat: add support for [file-based speaker diarization protocols](https://github.com/pyannote/pyannote-database/tree/develop#generic-speaker-diarization-protocols)
|
|
165
|
+
- setup: switch to pyannote.core 2.1
|
|
166
|
+
|
|
167
|
+
## Version 1.5.5 (2018-11-30)
|
|
168
|
+
|
|
169
|
+
- fix: fix Collection.files when progress=True
|
|
170
|
+
|
|
171
|
+
## Version 1.5.4 (2018-11-14)
|
|
172
|
+
|
|
173
|
+
- fix: skip files with no "uri" entry in FileFinder.protocol_file_iter
|
|
174
|
+
|
|
175
|
+
## Version 1.5.3 (2018-11-08)
|
|
176
|
+
|
|
177
|
+
- fix: fix broken SpeakerVerificationProtocol
|
|
178
|
+
|
|
179
|
+
## Version 1.5.1 (2018-10-16)
|
|
180
|
+
|
|
181
|
+
- fix: fix support for string preprocessors
|
|
182
|
+
|
|
183
|
+
## Version 1.5 (2018-09-25)
|
|
184
|
+
|
|
185
|
+
- BREAKING: simplify SpeakerVerificationProtocol with {subset}_trial methods
|
|
186
|
+
|
|
187
|
+
## Version 1.4 (2018-07-13)
|
|
188
|
+
|
|
189
|
+
- feat: add raw collection protocol
|
|
190
|
+
|
|
191
|
+
## Version 1.3.2 (2018-05-16)
|
|
192
|
+
|
|
193
|
+
- fix: fix regression introduced in 1.3.1
|
|
194
|
+
|
|
195
|
+
## Version 1.3.1 (2018-05-11)
|
|
196
|
+
|
|
197
|
+
- fix: fix bug in `FileFinder.protocol_file_iter` with empty iterators
|
|
198
|
+
|
|
199
|
+
## Version 1.3 (2018-02-04)
|
|
200
|
+
|
|
201
|
+
- feat: add `extra_keys` parameter to `{protocol | current}_file_iter`
|
|
202
|
+
|
|
203
|
+
## Version 1.2.1 (2018-02-03)
|
|
204
|
+
|
|
205
|
+
- setup: drop support for Python 2
|
|
206
|
+
- feat: add `protocol_file_iter` and `current_file_iter` to FileFinder
|
|
207
|
+
- feat: add `get_label_identifier` utility function
|
|
208
|
+
- fix: fix "get_unique_identifier" when "database" or "channel" is None
|
|
209
|
+
|
|
210
|
+
## Version 1.1 (2017-10-13)
|
|
211
|
+
|
|
212
|
+
- feat: add speaker identification protocol
|
|
213
|
+
- feat: add speaker verification protocols
|
|
214
|
+
- feat: add support for list of uris in FileFinder
|
|
215
|
+
|
|
216
|
+
## Version 1.0 (2017-10-02)
|
|
217
|
+
|
|
218
|
+
- feat: add support for "meta" protocols
|
|
219
|
+
- feat: add speaker spotting protocol
|
|
220
|
+
- setup: switch to pyannote.core 1.1
|
|
221
|
+
|
|
222
|
+
## Version 0.12 (2017-06-28)
|
|
223
|
+
|
|
224
|
+
- feat: add utility functions at package root
|
|
225
|
+
- doc: improve documentation
|
|
226
|
+
- doc: add link to pyannote-db-template repository
|
|
227
|
+
|
|
228
|
+
## Version 0.11.2 (2017-03-15)
|
|
229
|
+
|
|
230
|
+
- fix: fix a bug with string template preprocessors
|
|
231
|
+
- doc: improve documentation
|
|
232
|
+
|
|
233
|
+
## Version 0.11.1 (2017-01_16)
|
|
234
|
+
|
|
235
|
+
- feat: add 'get_protocol' helper function
|
|
236
|
+
|
|
237
|
+
## Version 0.11 (2017-01-11)
|
|
238
|
+
|
|
239
|
+
- feat: add support for validation on training set to speaker recognition protocols
|
|
240
|
+
- feat: add 'get_annotated' helper function
|
|
241
|
+
|
|
242
|
+
## Version 0.10.2 (2017-01-04)
|
|
243
|
+
|
|
244
|
+
- fix: fix bug in FileFinder
|
|
245
|
+
|
|
246
|
+
## Version 0.10.1 (2016-12-17)
|
|
247
|
+
|
|
248
|
+
- improve: change signature of preprocessor.__call__
|
|
249
|
+
|
|
250
|
+
## Version 0.9 (2016-12-14)
|
|
251
|
+
|
|
252
|
+
- feat: add "get_unique_identifier" utility function
|
|
253
|
+
|
|
254
|
+
## Version 0.8.1 (2016-12-12)
|
|
255
|
+
|
|
256
|
+
- fix: fix progress bar support
|
|
257
|
+
|
|
258
|
+
## Version 0.8 (2016-12-06)
|
|
259
|
+
|
|
260
|
+
- feat: add progress bar support
|
|
261
|
+
|
|
262
|
+
## Version 0.7.1 (2016-12-03)
|
|
263
|
+
|
|
264
|
+
- fix: add 'yield_name' parameter to speaker recognition generators
|
|
265
|
+
|
|
266
|
+
## Version 0.7 (2016-12-02)
|
|
267
|
+
|
|
268
|
+
- feat: add speaker recognition protocol
|
|
269
|
+
|
|
270
|
+
## Version 0.6.1 (2016-12-02)
|
|
271
|
+
|
|
272
|
+
- feat: add FileFinder utility class
|
|
273
|
+
- fix: fix SpeakerDiarizationProtocol.stats()
|
|
274
|
+
|
|
275
|
+
## Version 0.5 (2016-12-01)
|
|
276
|
+
|
|
277
|
+
- BREAKING: replace 'medium_template' by (more generic) 'preprocessors'
|
|
278
|
+
|
|
279
|
+
## Version 0.4.1 (2016-11-17)
|
|
280
|
+
|
|
281
|
+
- fix: rename 'speakers' to 'labels' in statistics dictionary
|
|
282
|
+
|
|
283
|
+
## Version 0.4 (2016-10-27)
|
|
284
|
+
|
|
285
|
+
- feat: add a method providing global statistics about a subset
|
|
286
|
+
|
|
287
|
+
## Version 0.3 (2016-09-22)
|
|
288
|
+
|
|
289
|
+
- feat: add support for multiple media
|
|
290
|
+
|
|
291
|
+
## Version 0.2 (2016-09-21)
|
|
292
|
+
|
|
293
|
+
- feat: add support for 'medium_template' attribute
|
|
294
|
+
|
|
295
|
+
## Version 0.1 (2016-09-20)
|
|
296
|
+
|
|
297
|
+
- first public version
|