mmif-python 1.4.0__tar.gz → 1.5.1__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.
- mmif_python-1.5.1/.github/workflows/release-check.yml +11 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/CHANGELOG.md +87 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/CONTRIBUTING.md +8 -1
- {mmif_python-1.4.0/mmif_python.egg-info → mmif_python-1.5.1}/PKG-INFO +2 -2
- {mmif_python-1.4.0 → mmif_python-1.5.1}/build-tools/docs.py +12 -10
- mmif_python-1.5.1/build-tools/prep_release.py +91 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/documentation/conf.py +0 -38
- mmif_python-1.5.1/documentation/target-versions.csv +52 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/res/mmif.json +17 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/serialize/annotation.py +50 -28
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/utils/video_document_helper.py +467 -302
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/utils/workflow_helper.py +9 -1
- {mmif_python-1.4.0 → mmif_python-1.5.1/mmif_python.egg-info}/PKG-INFO +2 -2
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif_python.egg-info/SOURCES.txt +3 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/pyproject.toml +1 -1
- mmif_python-1.5.1/tests/black-2997fps.webm +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/test_serialize.py +30 -1
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/test_utils.py +153 -27
- mmif_python-1.4.0/documentation/target-versions.csv +0 -47
- {mmif_python-1.4.0 → mmif_python-1.5.1}/.github/workflows/codecov.yml +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/.github/workflows/issue-assign.yml +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/.github/workflows/issue-close.yml +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/.github/workflows/issue-infra-project.yml +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/.github/workflows/publish.yml +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/.gitignore +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/LICENSE +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/README.md +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/build-tools/build.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/build-tools/clean.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/build-tools/publish.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/build-tools/test.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/documentation/_mmif_example_builder/__init__.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/documentation/_templates/versions.html +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/documentation/cli.rst +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/documentation/consumer-tutorial.rst +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/documentation/index.rst +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/documentation/introduction.rst +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/documentation/plugins.rst +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/documentation/summarizer.rst +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/documentation/target-versions.rst +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/__init__.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/res/__init__.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/serialize/__init__.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/serialize/mmif.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/serialize/model.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/serialize/view.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/utils/__init__.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/utils/cli/__init__.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/utils/cli/describe.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/utils/cli/rewind.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/utils/cli/source.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/utils/cli/summarize.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/utils/sequence_helper.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/utils/summarizer/__init__.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/utils/summarizer/config.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/utils/summarizer/graph.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/utils/summarizer/nodes.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/utils/summarizer/summary.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/utils/summarizer/utils.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/utils/text_document_helper.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/utils/timeunit_helper.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/ver/__init__.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/vocabulary/__init__.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/vocabulary/annotation_types.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/vocabulary/base_types.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif/vocabulary/document_types.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif_docloc_http/__init__.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif_python.egg-info/dependency_links.txt +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif_python.egg-info/entry_points.txt +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif_python.egg-info/requires.txt +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/mmif_python.egg-info/top_level.txt +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/setup.cfg +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/black-2997fps.mp4 +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/1.0.5-old-shortid.json +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/README.md +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/bars-tones-slates/raw.json +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/east-tesseract-typing/raw.json +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/everything/raw.json +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/examples.json +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/others/README.md +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/others/image-box-ocr-timex.json +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/others/image-box-ocr.json +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/others/image-box.json +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/others/image.json +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/others/slate-detect.json +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/others/slate-reco.json +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/others/video-demux.json +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/others/video-transcript-demux-fa.json +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/others/video-transcript-demux-fa.short.json +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/others/video-transcript-demux.json +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/others/video-transcript-sentencesplit.json +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/others/video-transcript.json +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/others/video.json +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/segmenter-kaldi-ner/raw.json +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif-examples/swt-1.0.mmif +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/mmif_examples.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/test_specver.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/test_utils_cli.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/test_vocab.py +0 -0
- {mmif_python-1.4.0 → mmif_python-1.5.1}/tests/testsrc-2997fps-ptsoffset.mp4 +0 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
name: "🔖 Release PR check"
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches: [main]
|
|
6
|
+
types: [opened, synchronize, reopened, edited]
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
release-check:
|
|
10
|
+
name: "🤙 Call SDK release-check workflow"
|
|
11
|
+
uses: clamsproject/.github/.github/workflows/sdk-release-check.yml@main
|
|
@@ -1,4 +1,47 @@
|
|
|
1
1
|
|
|
2
|
+
## releasing 1.5.0 (2026-05-27)
|
|
3
|
+
### Overview
|
|
4
|
+
|
|
5
|
+
Improves image-extraction API in `video_document_helper` for TP source tracking, restores the source-composition prefix in workflow identifiers, and fixes the versioned-docs publishing pipeline.
|
|
6
|
+
|
|
7
|
+
### Additions
|
|
8
|
+
|
|
9
|
+
* `extract_images_by_count_with_sources` and `extract_images_by_mode_with_sources`: new public functions in `mmif.utils.video_document_helper` that return per-image source IDs (or sampled timepoints in ms when a fallback path is used), so downstream apps can anchor each extracted image to a specific point in the source media (https://github.com/clamsproject/mmif-python/pull/385, https://github.com/clamsproject/mmif-python/issues/384).
|
|
10
|
+
|
|
11
|
+
### Changes
|
|
12
|
+
|
|
13
|
+
* `mmif.utils.video_document_helper`: renamed
|
|
14
|
+
* `extract_timepoints_as_images` --> `extract_images_from_timepoints`,
|
|
15
|
+
* `extract_target_frames` --> `extract_images_by_count_with_sources` (alongside new bare `extract_images_by_count`), and
|
|
16
|
+
* `extract_frames_by_mode` --> `extract_images_by_mode`.
|
|
17
|
+
* The three pre-rename names remain importable as soft-deprecated aliases through 2.0.0 (https://github.com/clamsproject/mmif-python/pull/385).
|
|
18
|
+
* `mmif.utils.workflow_helper.generate_workflow_identifier`: now prefixes a `source_composition` segment (`TextDocument-1-VideoDocument-1/...`) describing the top-level document mix in the input MMIF (https://github.com/clamsproject/mmif-python/pull/386).
|
|
19
|
+
* `build-tools/docs.py`: versioned-docs build now works against pyproject-only tags, restoring docs publishing in the release workflow (https://github.com/clamsproject/mmif-python/pull/388, https://github.com/clamsproject/mmif-python/issues/387).
|
|
20
|
+
|
|
21
|
+
> [!NOTE]
|
|
22
|
+
> - `mmif describe` (and the underlying `mmif.utils.workflow_helper`) is still experimental and subject to change in future releases without notice. Backward compatibility is not guaranteed.
|
|
23
|
+
> - The new `source_composition` prefix in `generate_workflow_identifier()` changes the format of returned identifiers. Downstream tools parsing the identifier path (e.g. for storage-directory routing) may need to account for the extra leading segment.
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
## releasing 1.4.0 (2026-04-22)
|
|
28
|
+
### Overview
|
|
29
|
+
* This is minor level release that 1) replacing simple string enums in `mmif.vocabulary` with fully-fledged pydantic classes in `clams-vocabulary` package 2) deprecating framenum-based image extraction functions in VDH (frame numbers are no longer considered as proper timestamps)
|
|
30
|
+
|
|
31
|
+
### Additions
|
|
32
|
+
* presentation timestamp-based image extraction functions added to VDH (https://github.com/clamsproject/mmif-python/pull/382 )
|
|
33
|
+
* `pyav` and `clams-vocabulary` as new dependencies
|
|
34
|
+
|
|
35
|
+
### Changes
|
|
36
|
+
* opencv-based video operations are now based on pyav (ffmpeg backend)
|
|
37
|
+
* all framenum-based functions in VDH are now marked as deprecated, scheduled for removal at 2.0.0
|
|
38
|
+
* `mmif.vocabulary` package is now a thin wrapper around `clams-vocabulary` package (https://github.com/clamsproject/mmif-python/pull/381 )
|
|
39
|
+
* `AnnotationTypes` and `DocumentTypes` classes are no longer simple string enums, but pydantic-based validation-supported python classes
|
|
40
|
+
|
|
41
|
+
### Removal
|
|
42
|
+
* `durationTimeUnit` is no longer written to video documents' `Annotation` property. This is non-API change hence not triggering major version bump. (based on https://github.com/clamsproject/mmif/pull/240/changes/a74dc46245c21dc7a279b3f271cf3e3a2a126f3a, all time notations without explicit unit specification are considered as milliseconds)
|
|
43
|
+
|
|
44
|
+
|
|
2
45
|
## releasing 1.3.1 (2026-03-11)
|
|
3
46
|
### Overview
|
|
4
47
|
|
|
@@ -8,6 +51,7 @@ Bug-fix release to address broken `as_PIL=True` option in `extract_frames_as_ima
|
|
|
8
51
|
|
|
9
52
|
* Fix `PIL.Image` import failure in `_check_cv_dep` by switching from `importlib.__import__` to `importlib.import_module` (https://github.com/clamsproject/mmif-python/pull/377)
|
|
10
53
|
|
|
54
|
+
|
|
11
55
|
## releasing 1.3.0 (2026-03-10)
|
|
12
56
|
### Overview
|
|
13
57
|
Minor release adding a new `summarize` CLI, pydantic-based workflow descriptors, and various fixes for video document helpers and timestamp handling.
|
|
@@ -26,6 +70,7 @@ Minor release adding a new `summarize` CLI, pydantic-based workflow descriptors,
|
|
|
26
70
|
* Documentation build migrated to "build-once, stay-forever" model via documentation hub (https://github.com/clamsproject/mmif-python/pull/344)
|
|
27
71
|
|
|
28
72
|
|
|
73
|
+
|
|
29
74
|
## releasing 1.2.1 (2025-11-28)
|
|
30
75
|
### Overview
|
|
31
76
|
Updated output formats of the experimental `mmif describe` command
|
|
@@ -38,6 +83,7 @@ Updated output formats of the experimental `mmif describe` command
|
|
|
38
83
|
> [!NOTE]
|
|
39
84
|
> `mmif describe` (and the underlying `mmif.utils.workflow_helper`) is still experimental and subject to change in future releases without notice. Backward compatibility is not guaranteed.
|
|
40
85
|
|
|
86
|
+
|
|
41
87
|
## releasing 1.2.0 (2025-11-20)
|
|
42
88
|
### Overview
|
|
43
89
|
This version is minor release with addition of a new cli (`describe`), lots of in-line documentation updates, and deprecation of some "getter" methods
|
|
@@ -57,6 +103,7 @@ mmif.get(some_view_id)
|
|
|
57
103
|
* many outdated documentation updates
|
|
58
104
|
|
|
59
105
|
|
|
106
|
+
|
|
60
107
|
## releasing 1.1.2 (2025-07-28)
|
|
61
108
|
### Overview
|
|
62
109
|
Patch release with a hotfix of a bug.
|
|
@@ -64,6 +111,7 @@ Patch release with a hotfix of a bug.
|
|
|
64
111
|
### Changes
|
|
65
112
|
* Fixed bug with handling "list of ID" props in 1.0.x MMIF.
|
|
66
113
|
|
|
114
|
+
|
|
67
115
|
## releasing 1.1.1 (2025-07-26)
|
|
68
116
|
### Overview
|
|
69
117
|
Patch release to support installation on python 3.12 and newer (fixes https://github.com/clamsproject/mmif-python/issues/314).
|
|
@@ -72,6 +120,7 @@ Patch release to support installation on python 3.12 and newer (fixes https://gi
|
|
|
72
120
|
- `setup.py` is now compatible with the latest setuptools (80) .
|
|
73
121
|
- [Since python 3.12 no longer ship `setuptools` as a part of standard installation](https://docs.python.org/3/whatsnew/3.12.html#ensurepip), added setuptools as a `dev` dependency.
|
|
74
122
|
|
|
123
|
+
|
|
75
124
|
## releasing 1.1.0 (2025-07-23)
|
|
76
125
|
### Overview
|
|
77
126
|
This is a minor version release, but it includes several significant changes and improvements across the codebase.
|
|
@@ -88,6 +137,7 @@ This is a minor version release, but it includes several significant changes and
|
|
|
88
137
|
* Miscellaneous cleanup and improvements on documentation and unused code.
|
|
89
138
|
|
|
90
139
|
|
|
140
|
+
|
|
91
141
|
## releasing 1.0.19 (2024-07-29)
|
|
92
142
|
### Overview
|
|
93
143
|
Patch to fix a critical bug.
|
|
@@ -95,6 +145,7 @@ Patch to fix a critical bug.
|
|
|
95
145
|
### Changes
|
|
96
146
|
- bugfix when `Annotation` instance and "warnings" view both are involved, MMIF is not properly returned (#299)
|
|
97
147
|
|
|
148
|
+
|
|
98
149
|
## releasing 1.0.18 (2024-07-15)
|
|
99
150
|
### Overview
|
|
100
151
|
Patch release with a bugfix.
|
|
@@ -104,6 +155,7 @@ Patch release with a bugfix.
|
|
|
104
155
|
### Changes
|
|
105
156
|
- fixed bug when adding custom properties to a newly generated `TextDocument` object (https://github.com/clamsproject/mmif-python/issues/290)
|
|
106
157
|
|
|
158
|
+
|
|
107
159
|
## releasing 1.0.17 (2024-06-26)
|
|
108
160
|
### Overview
|
|
109
161
|
This release adds caching mechanism for annotation alignments (via `Alignment` annotation, the alignment via `targets` property is not yet supported).
|
|
@@ -117,6 +169,7 @@ This release adds caching mechanism for annotation alignments (via `Alignment` a
|
|
|
117
169
|
- `mmif.utils.text_document_helper.slice_text` received a major speed boost from the alignment caching.
|
|
118
170
|
|
|
119
171
|
|
|
172
|
+
|
|
120
173
|
## releasing 1.0.16 (2024-06-14)
|
|
121
174
|
### Overview
|
|
122
175
|
This release includes an _experimental_ implementation for helpers to slice `text_value` from text documents.
|
|
@@ -125,6 +178,7 @@ This release includes an _experimental_ implementation for helpers to slice `tex
|
|
|
125
178
|
* `mmif.utils.text_document_helper` module to address https://github.com/clamsproject/mmif-python/issues/280
|
|
126
179
|
|
|
127
180
|
|
|
181
|
+
|
|
128
182
|
## releasing 1.0.15 (2024-06-07)
|
|
129
183
|
### Overview
|
|
130
184
|
Minor release to add/improve helper methods.
|
|
@@ -136,6 +190,7 @@ Minor release to add/improve helper methods.
|
|
|
136
190
|
- `Mmif.__getitem__()` now works with short annotation IDs (https://github.com/clamsproject/mmif-python/issues/279)
|
|
137
191
|
|
|
138
192
|
|
|
193
|
+
|
|
139
194
|
## releasing 1.0.14 (2024-04-10)
|
|
140
195
|
### Overview
|
|
141
196
|
This release contains small fixes and improvements.
|
|
@@ -151,6 +206,7 @@ This release contains small fixes and improvements.
|
|
|
151
206
|
### Changes
|
|
152
207
|
- "empty" annotation property values are correctly retrievable
|
|
153
208
|
|
|
209
|
+
|
|
154
210
|
## releasing 1.0.13 (2024-04-02)
|
|
155
211
|
### Overview
|
|
156
212
|
This version includes small, but helpful improvements.
|
|
@@ -161,6 +217,7 @@ This version includes small, but helpful improvements.
|
|
|
161
217
|
* video frame sampling can now use fractional sampling rate (in terms of frame numbers)
|
|
162
218
|
|
|
163
219
|
|
|
220
|
+
|
|
164
221
|
## releasing 1.0.12 (2024-04-01)
|
|
165
222
|
### Overview
|
|
166
223
|
Hot-fixing a wrong field name.
|
|
@@ -169,6 +226,7 @@ Hot-fixing a wrong field name.
|
|
|
169
226
|
- `views[].metadata.app_configuration` is renamed to `appConfiguration`, correctly following the MMIF json schema.
|
|
170
227
|
|
|
171
228
|
|
|
229
|
+
|
|
172
230
|
## releasing 1.0.11 (2024-03-31)
|
|
173
231
|
### Overview
|
|
174
232
|
This release includes changes from MMIF spec 1.0.3 and 1.0.4, and a new helper module to handle sequence annotations
|
|
@@ -186,6 +244,7 @@ This release includes changes from MMIF spec 1.0.3 and 1.0.4, and a new helper m
|
|
|
186
244
|
- getting start or end anchor points on annotations objects only with `targets` are no longer require the targets list is already sorted
|
|
187
245
|
- sphinx-based public API documentation for old versions is back
|
|
188
246
|
|
|
247
|
+
|
|
189
248
|
## releasing 1.0.10 (2024-03-01)
|
|
190
249
|
### Overview
|
|
191
250
|
This version includes minor bug fixes and support for MMIF spec 1.0.2.
|
|
@@ -198,6 +257,7 @@ This version includes minor bug fixes and support for MMIF spec 1.0.2.
|
|
|
198
257
|
* ISO-like time unit conversion now consistently returns only to third decimal place.
|
|
199
258
|
|
|
200
259
|
|
|
260
|
+
|
|
201
261
|
## releasing 1.0.9 (2024-02-10)
|
|
202
262
|
### Overview
|
|
203
263
|
This is a feature-packed release.
|
|
@@ -213,6 +273,7 @@ This is a feature-packed release.
|
|
|
213
273
|
* `Annotation` objects' `properties` attribute is no longer limited to primitives and list of primitives (https://github.com/clamsproject/mmif/issues/215)
|
|
214
274
|
* Fixed annotation URI equivalence checker wasn't working in set-like collections (https://github.com/clamsproject/mmif-python/issues/257)
|
|
215
275
|
|
|
276
|
+
|
|
216
277
|
## releasing 1.0.8 (2023-07-24)
|
|
217
278
|
### Overview
|
|
218
279
|
This release includes polishing and bug fixes around the `mmif.utils.video_document_helper` module.
|
|
@@ -224,6 +285,7 @@ This release includes polishing and bug fixes around the `mmif.utils.video_docum
|
|
|
224
285
|
* `Annotation.get_property` now provide more intuitive access to "view-level" annotation properties found in `view.metadata.contains.some_at_type` dict
|
|
225
286
|
|
|
226
287
|
|
|
288
|
+
|
|
227
289
|
## releasing 1.0.7 (2023-07-20)
|
|
228
290
|
### Overview
|
|
229
291
|
Minor updates in VideoDucment helper module
|
|
@@ -233,6 +295,7 @@ Minor updates in VideoDucment helper module
|
|
|
233
295
|
|
|
234
296
|
|
|
235
297
|
|
|
298
|
+
|
|
236
299
|
## releasing 1.0.6 (2023-07-19)
|
|
237
300
|
### Overview
|
|
238
301
|
This release relaxes checks for optional CV dependencies in video utils module, so that users don't have install all of `[cv]` dependencies when they don't use them all.
|
|
@@ -241,6 +304,7 @@ This release relaxes checks for optional CV dependencies in video utils module,
|
|
|
241
304
|
* when any of `[cv]` dependencies is not found during `mmif.utils.video_document_helper` module is being loaded, instead of raising and an error, a warning is issued.
|
|
242
305
|
|
|
243
306
|
|
|
307
|
+
|
|
244
308
|
## releasing 1.0.5 (2023-07-19)
|
|
245
309
|
### Overview
|
|
246
310
|
This release contains a minor fix in video_document_helper module
|
|
@@ -249,11 +313,13 @@ This release contains a minor fix in video_document_helper module
|
|
|
249
313
|
* fixed time unit normalization was missing some important string
|
|
250
314
|
|
|
251
315
|
|
|
316
|
+
|
|
252
317
|
## releasing 1.0.4 (2023-07-19)
|
|
253
318
|
### Overview
|
|
254
319
|
This release fixes installation error in the previous version.
|
|
255
320
|
|
|
256
321
|
|
|
322
|
+
|
|
257
323
|
## releasing 1.0.3 (2023-07-19)
|
|
258
324
|
### Overview
|
|
259
325
|
This release is primarily about adding `mmif.utils` package and `mmif.utils.video_document_helper` module. The module provides many helper functions to handle frame-based and time-based documents and annotations.
|
|
@@ -266,6 +332,7 @@ This release is primarily about adding `mmif.utils` package and `mmif.utils.vide
|
|
|
266
332
|
* fixed bug in `Annotation.get_property` (#232)
|
|
267
333
|
|
|
268
334
|
|
|
335
|
+
|
|
269
336
|
## releasing 1.0.2 (2023-07-11)
|
|
270
337
|
### Overview
|
|
271
338
|
This release includes support for plugins, and a "magic" helper for using `Annotation` annotations for documents in MMIF.
|
|
@@ -277,6 +344,7 @@ This release includes support for plugins, and a "magic" helper for using `Annot
|
|
|
277
344
|
|
|
278
345
|
|
|
279
346
|
|
|
347
|
+
|
|
280
348
|
## releasing 1.0.1 (2023-05-26)
|
|
281
349
|
### Overview
|
|
282
350
|
`mmif-python` 1.0.0 included MMIF 0.5.0 instead of MMIF 1.0.0. This release fixes it
|
|
@@ -284,11 +352,13 @@ This release includes support for plugins, and a "magic" helper for using `Annot
|
|
|
284
352
|
### Changes
|
|
285
353
|
* now based on MMIF specification 1.0.0
|
|
286
354
|
|
|
355
|
+
|
|
287
356
|
## releasing 1.0.0 (2023-05-25)
|
|
288
357
|
### Overview
|
|
289
358
|
This release will be numbered as 1.0.0, but actually is re-numbering of 0.5.2, hence no technical changes are included in 1.0.0.
|
|
290
359
|
|
|
291
360
|
|
|
361
|
+
|
|
292
362
|
## releasing 0.5.2 (2023-05-19)
|
|
293
363
|
### Overview
|
|
294
364
|
This release fixes an oversight bug in `__eq__` in `MmifObject`s. Also includes updates of the sphinx documentation.
|
|
@@ -298,6 +368,7 @@ This release fixes an oversight bug in `__eq__` in `MmifObject`s. Also includes
|
|
|
298
368
|
* Updated sphinx documentation (#215 )
|
|
299
369
|
|
|
300
370
|
|
|
371
|
+
|
|
301
372
|
## releasing 0.5.1 (2023-05-02)
|
|
302
373
|
### Overview
|
|
303
374
|
This release includes "fuzzy" matching of at_types and sanitized `serialize` of `Mmif` objects.
|
|
@@ -313,6 +384,7 @@ This release includes "fuzzy" matching of at_types and sanitized `serialize` of
|
|
|
313
384
|
* fixed a small bug in `Mmif.get_alignments`
|
|
314
385
|
* fixed `view.metadata` serialized into an invalid MMIF due to a *oneOf* condition in jsonschema
|
|
315
386
|
|
|
387
|
+
|
|
316
388
|
## releasing 0.5.0 (2023-04-30)
|
|
317
389
|
### Overview
|
|
318
390
|
This release is a synchronization of `mmif-python` with the latest [MMIF 0.5.0 release](https://github.com/clamsproject/mmif/pull/199).
|
|
@@ -321,9 +393,11 @@ This release is a synchronization of `mmif-python` with the latest [MMIF 0.5.0 r
|
|
|
321
393
|
* Enum-like subclasses for annotation `@type`s in the `mmif.vocabulary` package are updated to accommodate the new way of checking I/O compatibility (as `__eq__()` in the SDK).
|
|
322
394
|
|
|
323
395
|
|
|
396
|
+
|
|
324
397
|
## releasing 0.4.8 (2023-02-10)
|
|
325
398
|
This is a small PR that doesn't include any code in the SDK, but the target MMIF version is bumped up to [0.4.2](https://github.com/clamsproject/mmif/blob/master/CHANGELOG.md#version-042---2023-02-09).
|
|
326
399
|
|
|
400
|
+
|
|
327
401
|
## releasing 0.4.7 (2023-02-09)
|
|
328
402
|
This release includes
|
|
329
403
|
|
|
@@ -331,12 +405,14 @@ This release includes
|
|
|
331
405
|
* made `properties` map to behave like a map (#194)
|
|
332
406
|
* updated python dependencies (#196, #198)
|
|
333
407
|
|
|
408
|
+
|
|
334
409
|
## releasing 0.4.6 (2022-03-25)
|
|
335
410
|
This release includes
|
|
336
411
|
|
|
337
412
|
* fixes in the development & release pipelines. (#189 #187)
|
|
338
413
|
* upgrade in the text retrieval from TextDocument (#185)
|
|
339
414
|
|
|
415
|
+
|
|
340
416
|
## releasing 0.4.5 (2021-07-11)
|
|
341
417
|
This release contains minor bug fixes
|
|
342
418
|
|
|
@@ -344,23 +420,29 @@ This release contains minor bug fixes
|
|
|
344
420
|
* fixed how `develop` version of vocab URIs were handled
|
|
345
421
|
* colon (`:`) is now a class constant for gluing view_id and annotation_id
|
|
346
422
|
|
|
423
|
+
|
|
347
424
|
## releasing 0.4.4 (2021-06-19)
|
|
348
425
|
This release contains small but breaking changes. See d5198cb2304ad488975644a87fba51906abc5299 for details.
|
|
349
426
|
|
|
350
427
|
|
|
428
|
+
|
|
351
429
|
## releasing 0.4.3 (2021-06-18)
|
|
352
430
|
This release fixes minor bugs from the previous version.
|
|
353
431
|
|
|
354
432
|
|
|
433
|
+
|
|
355
434
|
## releasing 0.4.2 (2021-06-17)
|
|
356
435
|
This release adds `new_textdocument` helper method to `View` class.
|
|
357
436
|
|
|
437
|
+
|
|
358
438
|
## releasing 0.4.1 (2021-06-14)
|
|
359
439
|
The release contains a small bug fix in deserialization of `Mmif` object.
|
|
360
440
|
|
|
441
|
+
|
|
361
442
|
## releasing 0.4.0 (2021-06-10)
|
|
362
443
|
New release to correspond to the MMIF specification 0.4.0.
|
|
363
444
|
|
|
445
|
+
|
|
364
446
|
## releasing 0.3.5 (2021-06-05)
|
|
365
447
|
The release includes ...
|
|
366
448
|
|
|
@@ -370,19 +452,24 @@ The release includes ...
|
|
|
370
452
|
* various bug fixes and clean-up
|
|
371
453
|
|
|
372
454
|
|
|
455
|
+
|
|
373
456
|
## releasing 0.3.4 (2021-05-24)
|
|
374
457
|
This release includes major bug fixes (#131, #164) and a new documentation generation pipeline (#167).
|
|
375
458
|
|
|
459
|
+
|
|
376
460
|
## releasing 0.3.3 (2021-05-12)
|
|
377
461
|
This release contains various bug fixes.
|
|
378
462
|
|
|
463
|
+
|
|
379
464
|
## releasing 0.3.2 (2021-05-12)
|
|
380
465
|
A version to match changes in the specification 0.3.1.
|
|
381
466
|
|
|
467
|
+
|
|
382
468
|
## releasing 0.3.1 (2021-03-30)
|
|
383
469
|
0.3.1 contains mostly small bugfixes.
|
|
384
470
|
|
|
385
471
|
|
|
472
|
+
|
|
386
473
|
## release candidate for 0.3.0 (2021-03-14)
|
|
387
474
|
release note for mmif-python 0.3.0
|
|
388
475
|
|
|
@@ -13,10 +13,17 @@ We follow a Gitflow-inspired branching model to maintain a stable `main` branch
|
|
|
13
13
|
- Once work is complete, open a PR targeting the `develop` branch.
|
|
14
14
|
- **Communication**: High-level discussion and planning should occur in the issue thread. The PR conversation is strictly for code review and implementation-specific feedback.
|
|
15
15
|
5. **Releases**:
|
|
16
|
-
- When `develop` is ready for a new release, open a PR from `develop` to `main` using the "release" PR template.
|
|
16
|
+
- When `develop` is ready for a new release, open a PR from `develop` to `main` using the "release" PR template. See the **Releases** section below for the required title format and preparation steps.
|
|
17
17
|
- After merging the release candidate into `main`, manually tag the commit with the version number. This tag triggers the automated CI/CD pipeline for publishing.
|
|
18
18
|
6. **Branch Protection**: Both `main` and `develop` are protected branches. Direct pushes are disabled; all changes must be introduced via Pull Requests.
|
|
19
19
|
|
|
20
|
+
## Releases
|
|
21
|
+
|
|
22
|
+
Release PRs (from `develop` to `main`) are gated by the `release-check` CI workflow. Before opening one:
|
|
23
|
+
|
|
24
|
+
1. Title the PR exactly `releasing X.Y.Z` (strict semver); `release-check` reads the version from the title.
|
|
25
|
+
2. Run `python build-tools/prep_release.py X.Y.Z` and commit its changes. See inside the prep script to see what's actually prepared.
|
|
26
|
+
|
|
20
27
|
## CLI Scripts
|
|
21
28
|
|
|
22
29
|
The `mmif` command-line interface supports subcommands (e.g., `mmif source`, `mmif describe`). These are implemented as Python modules in `mmif/utils/cli/`.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mmif-python
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.5.1
|
|
4
4
|
Summary: Python implementation of MultiMedia Interchange Format specification. (https://mmif.clams.ai)
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Project-URL: homepage, https://mmif.clams.ai
|
|
7
7
|
Project-URL: source, https://github.com/clamsproject/mmif-python
|
|
8
|
-
Project-URL: mmif-spec, https://mmif.clams.ai/1.
|
|
8
|
+
Project-URL: mmif-spec, https://mmif.clams.ai/1.2.0
|
|
9
9
|
Classifier: Development Status :: 5 - Production/Stable
|
|
10
10
|
Classifier: Intended Audience :: Developers
|
|
11
11
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
@@ -109,10 +109,6 @@ def build_versioned_docs(env: Venv, source_path: Path, version: str):
|
|
|
109
109
|
print("\n--- Installing sphinx and furo theme ---")
|
|
110
110
|
env.run_pip("install", "sphinx>=7.0,<8.0", "furo", "m2r2", cwd=source_path)
|
|
111
111
|
|
|
112
|
-
# Write VERSION file (needed for setup.py and sphinx)
|
|
113
|
-
version_file = source_path / "VERSION"
|
|
114
|
-
version_file.write_text(version)
|
|
115
|
-
|
|
116
112
|
# Inject linkcode_resolve function into conf.py for GitHub source links
|
|
117
113
|
# because some old version of conf.py may not have it
|
|
118
114
|
print("\n--- Injecting linkcode_resolve into conf.py ---")
|
|
@@ -148,10 +144,16 @@ def linkcode_resolve(domain, info):
|
|
|
148
144
|
with open(conf_py, "a") as f:
|
|
149
145
|
f.write(linkcode_snippet)
|
|
150
146
|
|
|
151
|
-
# Install package in
|
|
152
|
-
#
|
|
153
|
-
|
|
154
|
-
|
|
147
|
+
# Install package in editable mode so sphinx-autodoc can import it.
|
|
148
|
+
# Pre-1.4.0 releases ship setup.py with build-time code generation that
|
|
149
|
+
# needs a VERSION file; 1.4.0+ releases are pyproject-only and version
|
|
150
|
+
# themselves from git tags via setuptools-scm.
|
|
151
|
+
print("\n--- Installing package in editable mode ---")
|
|
152
|
+
if (source_path / "setup.py").exists():
|
|
153
|
+
(source_path / "VERSION").write_text(version)
|
|
154
|
+
env.run_python("setup.py", "develop", cwd=source_path)
|
|
155
|
+
else:
|
|
156
|
+
env.run_pip("install", "-e", ".", cwd=source_path)
|
|
155
157
|
|
|
156
158
|
# Build documentation with sphinx-build
|
|
157
159
|
print("\n--- Building Sphinx documentation ---")
|
|
@@ -216,8 +218,8 @@ def build_docs_for_version(version: str, output_base_dir: Path, repo_path: Path
|
|
|
216
218
|
print(f"\n--- Step 2: Creating and setting up virtual environment ---")
|
|
217
219
|
env = Venv(venv_path)
|
|
218
220
|
env.create()
|
|
219
|
-
#
|
|
220
|
-
#
|
|
221
|
+
# setuptools<80 pin keeps the legacy `python setup.py develop` path
|
|
222
|
+
# working for pre-1.4.0 tags; harmless for pyproject-only tags.
|
|
221
223
|
env.run_pip("install", "--upgrade", "pip", "setuptools<80", "wheel")
|
|
222
224
|
|
|
223
225
|
print(f"\n--- Step 3: Building documentation ---")
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Prepare release artifacts for the mmif-python package.
|
|
3
|
+
|
|
4
|
+
Run while preparing a release PR, passing the version being released::
|
|
5
|
+
|
|
6
|
+
python build-tools/prep_release.py X.Y.Z
|
|
7
|
+
|
|
8
|
+
Currently this adds a row to ``documentation/target-versions.csv`` for
|
|
9
|
+
the release version, resolving the target MMIF spec version from the
|
|
10
|
+
installed package metadata (``mmif.__specver__``). This script is the
|
|
11
|
+
single place that writes the target-versions table; the docs build only
|
|
12
|
+
renders it, and CI verifies (on the release PR) that a row for the PR's
|
|
13
|
+
version exists.
|
|
14
|
+
|
|
15
|
+
Requires an editable install (``pip install -e .``) so that
|
|
16
|
+
``mmif.__specver__`` is importable.
|
|
17
|
+
"""
|
|
18
|
+
import argparse
|
|
19
|
+
import re
|
|
20
|
+
import sys
|
|
21
|
+
from pathlib import Path
|
|
22
|
+
|
|
23
|
+
PROJECT_ROOT = Path(__file__).parent.parent
|
|
24
|
+
CSV_PATH = PROJECT_ROOT / 'documentation' / 'target-versions.csv'
|
|
25
|
+
|
|
26
|
+
VERSION_RE = re.compile(r'^\d+\.\d+\.\d+$')
|
|
27
|
+
TOP_ROW_RE = re.compile(r'`(\d+\.\d+\.\d+) <')
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _row(version, specver):
|
|
31
|
+
return (
|
|
32
|
+
f'`{version} <https://pypi.org/project/mmif-python/{version}/>`__,'
|
|
33
|
+
f'`{specver} <https://mmif.clams.ai/{specver}/>`__'
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _version_tuple(v):
|
|
38
|
+
return tuple(int(x) for x in v.split('.'))
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _top_version(data_lines):
|
|
42
|
+
if not data_lines:
|
|
43
|
+
return None
|
|
44
|
+
m = TOP_ROW_RE.match(data_lines[0])
|
|
45
|
+
return m.group(1) if m else None
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def main():
|
|
49
|
+
parser = argparse.ArgumentParser(
|
|
50
|
+
description="Prepare release artifacts for mmif-python."
|
|
51
|
+
)
|
|
52
|
+
parser.add_argument(
|
|
53
|
+
"version", metavar="X.Y.Z",
|
|
54
|
+
help="the release version being prepared",
|
|
55
|
+
)
|
|
56
|
+
args = parser.parse_args()
|
|
57
|
+
version = args.version
|
|
58
|
+
|
|
59
|
+
if not VERSION_RE.match(version):
|
|
60
|
+
sys.exit(f"Error: '{version}' is not a valid X.Y.Z version.")
|
|
61
|
+
|
|
62
|
+
try:
|
|
63
|
+
import mmif
|
|
64
|
+
specver = mmif.__specver__
|
|
65
|
+
except (ImportError, AttributeError):
|
|
66
|
+
sys.exit("Error: cannot read mmif.__specver__. "
|
|
67
|
+
"Run `pip install -e .` first.")
|
|
68
|
+
|
|
69
|
+
lines = CSV_PATH.read_text().splitlines()
|
|
70
|
+
header, data = lines[0], lines[1:]
|
|
71
|
+
top = _top_version(data)
|
|
72
|
+
|
|
73
|
+
if top is not None and _version_tuple(version) < _version_tuple(top):
|
|
74
|
+
sys.exit(f"Error: {version} is older than the current top row "
|
|
75
|
+
f"{top}; refusing to insert an out-of-order version.")
|
|
76
|
+
|
|
77
|
+
new_row = _row(version, specver)
|
|
78
|
+
if top == version:
|
|
79
|
+
data[0] = new_row # update in place (e.g. spec changed)
|
|
80
|
+
action = "updated"
|
|
81
|
+
else:
|
|
82
|
+
data.insert(0, new_row) # prepend as the new latest
|
|
83
|
+
action = "added"
|
|
84
|
+
|
|
85
|
+
CSV_PATH.write_text('\n'.join([header] + data) + '\n')
|
|
86
|
+
print(f"target-versions.csv: {action} row "
|
|
87
|
+
f"{version} -> MMIF spec {specver}")
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
if __name__ == "__main__":
|
|
91
|
+
main()
|
|
@@ -6,7 +6,6 @@ import datetime
|
|
|
6
6
|
import inspect
|
|
7
7
|
import json
|
|
8
8
|
import os
|
|
9
|
-
import re
|
|
10
9
|
import subprocess
|
|
11
10
|
import sys
|
|
12
11
|
import textwrap
|
|
@@ -148,42 +147,6 @@ def linkcode_resolve(domain, info):
|
|
|
148
147
|
return None
|
|
149
148
|
|
|
150
149
|
|
|
151
|
-
def update_target_versions(app):
|
|
152
|
-
"""
|
|
153
|
-
Update documentation/target-versions.csv with the current version and spec version.
|
|
154
|
-
This replaces the old logic in setup.py.
|
|
155
|
-
"""
|
|
156
|
-
# Check if we have __specver__ (it might not be there if not installed via setup.py develop)
|
|
157
|
-
if not hasattr(mmif, '__specver__'):
|
|
158
|
-
return
|
|
159
|
-
|
|
160
|
-
current_ver = mmif.__version__
|
|
161
|
-
# Skip dev/dummy versions to avoid dirtying the git-tracked CSV
|
|
162
|
-
if 'dev' in current_ver or not re.match(r'^\d+\.\d+\.\d+$', current_ver):
|
|
163
|
-
return
|
|
164
|
-
spec_ver = mmif.__specver__
|
|
165
|
-
|
|
166
|
-
csv_path = proj_root_dir / 'documentation' / 'target-versions.csv'
|
|
167
|
-
if not csv_path.exists():
|
|
168
|
-
return
|
|
169
|
-
|
|
170
|
-
# Read existing content
|
|
171
|
-
with open(csv_path, 'r') as f:
|
|
172
|
-
lines = f.readlines()
|
|
173
|
-
|
|
174
|
-
# Check if current version is already in the file (first data line)
|
|
175
|
-
# lines[0] is header, lines[1] is latest version
|
|
176
|
-
if len(lines) > 1 and lines[1].startswith(f'{current_ver},'):
|
|
177
|
-
return
|
|
178
|
-
|
|
179
|
-
# Insert new version
|
|
180
|
-
logger.info(f"Updating target-versions.csv: {current_ver} -> {spec_ver}")
|
|
181
|
-
lines.insert(1, f'{current_ver},"{spec_ver}"\n')
|
|
182
|
-
|
|
183
|
-
with open(csv_path, 'w') as f:
|
|
184
|
-
f.writelines(lines)
|
|
185
|
-
|
|
186
|
-
|
|
187
150
|
def generate_cli_rst(app):
|
|
188
151
|
from mmif import prep_argparser_and_subcmds
|
|
189
152
|
|
|
@@ -292,7 +255,6 @@ def run_apidoc(app):
|
|
|
292
255
|
def setup(app):
|
|
293
256
|
try:
|
|
294
257
|
app.connect('builder-inited', run_apidoc)
|
|
295
|
-
app.connect('builder-inited', update_target_versions)
|
|
296
258
|
app.connect('builder-inited', generate_cli_rst)
|
|
297
259
|
app.connect('builder-inited', generate_whatsnew_rst)
|
|
298
260
|
except ImportError:
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"``mmif-python`` version","Target MMIF Specification"
|
|
2
|
+
`1.5.1 <https://pypi.org/project/mmif-python/1.5.1/>`__,`1.2.0 <https://mmif.clams.ai/1.2.0/>`__
|
|
3
|
+
`1.5.0 <https://pypi.org/project/mmif-python/1.5.0/>`__,`1.2.0 <https://mmif.clams.ai/1.2.0/>`__
|
|
4
|
+
`1.4.0 <https://pypi.org/project/mmif-python/1.4.0/>`__,`1.1.1 <https://mmif.clams.ai/1.1.1/>`__
|
|
5
|
+
`1.3.1 <https://pypi.org/project/mmif-python/1.3.1/>`__,`1.1.0 <https://mmif.clams.ai/1.1.0/>`__
|
|
6
|
+
`1.3.0 <https://pypi.org/project/mmif-python/1.3.0/>`__,`1.1.0 <https://mmif.clams.ai/1.1.0/>`__
|
|
7
|
+
`1.2.1 <https://pypi.org/project/mmif-python/1.2.1/>`__,`1.1.0 <https://mmif.clams.ai/1.1.0/>`__
|
|
8
|
+
`1.2.0 <https://pypi.org/project/mmif-python/1.2.0/>`__,`1.1.0 <https://mmif.clams.ai/1.1.0/>`__
|
|
9
|
+
`1.1.2 <https://pypi.org/project/mmif-python/1.1.2/>`__,`1.1.0 <https://mmif.clams.ai/1.1.0/>`__
|
|
10
|
+
`1.1.1 <https://pypi.org/project/mmif-python/1.1.1/>`__,`1.1.0 <https://mmif.clams.ai/1.1.0/>`__
|
|
11
|
+
`1.1.0 <https://pypi.org/project/mmif-python/1.1.0/>`__,`1.1.0 <https://mmif.clams.ai/1.1.0/>`__
|
|
12
|
+
`1.0.19 <https://pypi.org/project/mmif-python/1.0.19/>`__,`1.0.5 <https://mmif.clams.ai/1.0.5/>`__
|
|
13
|
+
`1.0.18 <https://pypi.org/project/mmif-python/1.0.18/>`__,`1.0.5 <https://mmif.clams.ai/1.0.5/>`__
|
|
14
|
+
`1.0.17 <https://pypi.org/project/mmif-python/1.0.17/>`__,`1.0.5 <https://mmif.clams.ai/1.0.5/>`__
|
|
15
|
+
`1.0.16 <https://pypi.org/project/mmif-python/1.0.16/>`__,`1.0.4 <https://mmif.clams.ai/1.0.4/>`__
|
|
16
|
+
`1.0.15 <https://pypi.org/project/mmif-python/1.0.15/>`__,`1.0.4 <https://mmif.clams.ai/1.0.4/>`__
|
|
17
|
+
`1.0.14 <https://pypi.org/project/mmif-python/1.0.14/>`__,`1.0.4 <https://mmif.clams.ai/1.0.4/>`__
|
|
18
|
+
`1.0.13 <https://pypi.org/project/mmif-python/1.0.13/>`__,`1.0.4 <https://mmif.clams.ai/1.0.4/>`__
|
|
19
|
+
`1.0.12 <https://pypi.org/project/mmif-python/1.0.12/>`__,`1.0.4 <https://mmif.clams.ai/1.0.4/>`__
|
|
20
|
+
`1.0.11 <https://pypi.org/project/mmif-python/1.0.11/>`__,`1.0.4 <https://mmif.clams.ai/1.0.4/>`__
|
|
21
|
+
`1.0.10 <https://pypi.org/project/mmif-python/1.0.10/>`__,`1.0.2 <https://mmif.clams.ai/1.0.2/>`__
|
|
22
|
+
`1.0.9 <https://pypi.org/project/mmif-python/1.0.9/>`__,`1.1.0 <https://mmif.clams.ai/1.1.0/>`__
|
|
23
|
+
`1.0.8 <https://pypi.org/project/mmif-python/1.0.8/>`__,`1.0.0 <https://mmif.clams.ai/1.0.0/>`__
|
|
24
|
+
`1.0.7 <https://pypi.org/project/mmif-python/1.0.7/>`__,`1.0.0 <https://mmif.clams.ai/1.0.0/>`__
|
|
25
|
+
`1.0.6 <https://pypi.org/project/mmif-python/1.0.6/>`__,`1.0.0 <https://mmif.clams.ai/1.0.0/>`__
|
|
26
|
+
`1.0.5 <https://pypi.org/project/mmif-python/1.0.5/>`__,`1.0.0 <https://mmif.clams.ai/1.0.0/>`__
|
|
27
|
+
`1.0.4 <https://pypi.org/project/mmif-python/1.0.4/>`__,`1.0.0 <https://mmif.clams.ai/1.0.0/>`__
|
|
28
|
+
`1.0.3 <https://pypi.org/project/mmif-python/1.0.3/>`__,`1.0.0 <https://mmif.clams.ai/1.0.0/>`__
|
|
29
|
+
`1.0.2 <https://pypi.org/project/mmif-python/1.0.2/>`__,`1.0.0 <https://mmif.clams.ai/1.0.0/>`__
|
|
30
|
+
`1.0.1 <https://pypi.org/project/mmif-python/1.0.1/>`__,`1.0.0 <https://mmif.clams.ai/1.0.0/>`__
|
|
31
|
+
`1.0.0 <https://pypi.org/project/mmif-python/1.0.0/>`__,`0.5.0 <https://mmif.clams.ai/0.5.0/>`__
|
|
32
|
+
`0.5.2 <https://pypi.org/project/mmif-python/0.5.2/>`__,`0.5.0 <https://mmif.clams.ai/0.5.0/>`__
|
|
33
|
+
`0.5.1 <https://pypi.org/project/mmif-python/0.5.1/>`__,`0.5.0 <https://mmif.clams.ai/0.5.0/>`__
|
|
34
|
+
`0.5.0 <https://pypi.org/project/mmif-python/0.5.0/>`__,`0.5.0 <https://mmif.clams.ai/0.5.0/>`__
|
|
35
|
+
`0.4.8 <https://pypi.org/project/mmif-python/0.4.8/>`__,`0.4.2 <https://mmif.clams.ai/0.4.2/>`__
|
|
36
|
+
`0.4.7 <https://pypi.org/project/mmif-python/0.4.7/>`__,`0.4.1 <https://mmif.clams.ai/0.4.1/>`__
|
|
37
|
+
`0.4.6 <https://pypi.org/project/mmif-python/0.4.6/>`__,`0.4.0 <https://mmif.clams.ai/0.4.0/>`__
|
|
38
|
+
`0.4.5 <https://pypi.org/project/mmif-python/0.4.5/>`__,`0.4.0 <https://mmif.clams.ai/0.4.0/>`__
|
|
39
|
+
`0.4.4 <https://pypi.org/project/mmif-python/0.4.4/>`__,`0.4.0 <https://mmif.clams.ai/0.4.0/>`__
|
|
40
|
+
`0.4.3 <https://pypi.org/project/mmif-python/0.4.3/>`__,`0.4.0 <https://mmif.clams.ai/0.4.0/>`__
|
|
41
|
+
`0.4.2 <https://pypi.org/project/mmif-python/0.4.2/>`__,`0.4.0 <https://mmif.clams.ai/0.4.0/>`__
|
|
42
|
+
`0.4.1 <https://pypi.org/project/mmif-python/0.4.1/>`__,`0.4.0 <https://mmif.clams.ai/0.4.0/>`__
|
|
43
|
+
`0.4.0 <https://pypi.org/project/mmif-python/0.4.0/>`__,`0.4.0 <https://mmif.clams.ai/0.4.0/>`__
|
|
44
|
+
`0.3.5 <https://pypi.org/project/mmif-python/0.3.5/>`__,`0.3.1 <https://mmif.clams.ai/0.3.1/>`__
|
|
45
|
+
`0.3.4 <https://pypi.org/project/mmif-python/0.3.4/>`__,`0.3.1 <https://mmif.clams.ai/0.3.1/>`__
|
|
46
|
+
`0.3.3 <https://pypi.org/project/mmif-python/0.3.3/>`__,`0.3.1 <https://mmif.clams.ai/0.3.1/>`__
|
|
47
|
+
`0.3.2 <https://pypi.org/project/mmif-python/0.3.2/>`__,`0.3.1 <https://mmif.clams.ai/0.3.1/>`__
|
|
48
|
+
`0.3.1 <https://pypi.org/project/mmif-python/0.3.1/>`__,`0.3.0 <https://mmif.clams.ai/0.3.0/>`__
|
|
49
|
+
`0.3.0 <https://pypi.org/project/mmif-python/0.3.0/>`__,`0.3.0 <https://mmif.clams.ai/0.3.0/>`__
|
|
50
|
+
`0.2.2 <https://pypi.org/project/mmif-python/0.2.2/>`__,`0.2.1 <https://mmif.clams.ai/0.2.1/>`__
|
|
51
|
+
`0.2.1 <https://pypi.org/project/mmif-python/0.2.1/>`__,`0.2.1 <https://mmif.clams.ai/0.2.1/>`__
|
|
52
|
+
`0.2.0 <https://pypi.org/project/mmif-python/0.2.0/>`__,`0.2.1 <https://mmif.clams.ai/0.2.1/>`__
|