From e6dec17a30ff8826e52390b678ceae81662b6934 Mon Sep 17 00:00:00 2001 From: Alexander Refsum Jensenius Date: Wed, 5 Aug 2026 16:20:21 +0200 Subject: [PATCH] =?UTF-8?q?1.8.0=20=E2=80=94=20group=20QoM=20returns=20a?= =?UTF-8?q?=20different=20number,=20and=20the=20old=20one=20was=20confound?= =?UTF-8?q?ed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `group_qom`, `pose_qom` and `normalized_qom` are re-exported from `micromotion`, which released 1.0.0 today. They averaged over every marker at every frame while the underlying `band_limited_qom` interpolates gaps, so an occluded marker contributed a near-zero speed and still counted in the divisor. The result tracked how much the cameras saw rather than how much the body moved: 16 to 17 per cent low on a realistic dropout pattern, with the speed series correlating up to +0.70 with the per-frame count of visible markers. The new default, `normalize="visible"`, excludes each marker at the frames where that marker was absent. Pass `normalize="worn"` to reproduce a figure published with an earlier release, and say which you used. Clean pose data with no dropouts is unaffected; occluded mocap is affected most. The `micromotion` floor is now `>=1.0.0`. That is a correctness floor rather than a documentation one: below it the re-exported function returns the confounded number. All 545 tests pass against micromotion 1.0.0 unchanged, which also means none of them covered the behaviour that changed. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Qx7SWwc4XGYgXNNKrcNAgP --- CHANGELOG.md | 19 +++++++++++++++++++ docs/releases.md | 11 ++++++++++- pyproject.toml | 9 +++++---- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 31db852..dbacf6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.8.0] — 2026-08-05 + +### Changed +- **`group_qom`, `pose_qom` and `normalized_qom` return different numbers.** They are re-exported + from `micromotion`, which released 1.0.0 today, and the change is a correctness fix rather than a + refinement. They averaged over every marker at every frame while the underlying + `band_limited_qom` interpolates gaps, so an occluded marker contributed a near-zero speed and + still counted in the divisor. The result tracked how much the cameras saw rather than how much + the body moved: 16 to 17 per cent low on a realistic dropout pattern, with the speed series + correlating up to +0.70 with the per-frame count of visible markers. + + The new default, `normalize="visible"`, excludes each marker at the frames where that marker was + absent, and lands within 0.8 per cent of the unoccluded value. Pass `normalize="worn"` to + reproduce a figure published with an earlier release, and say which you used. Pose data from a + clean, well-lit recording with no dropouts is unaffected; occluded mocap is affected most. + +- The `micromotion` floor is `>=1.0.0`, which is a correctness floor rather than a documentation + one: below it the re-exported function returns the confounded number. + ## [1.7.1] — 2026-08-05 ### Fixed diff --git a/docs/releases.md b/docs/releases.md index 05d9b36..20d693b 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1,6 +1,6 @@ # Release Notes -The current stable release is **MGT-python 1.7.1**. +The current stable release is **MGT-python 1.8.0**. Install or upgrade from PyPI: @@ -16,6 +16,15 @@ which is the single source of truth for release notes. ## Recent highlights +### 1.8.0 + +- **Quantity of motion over a group of markers returns a different number, and the old one was + confounded.** `group_qom`, `pose_qom` and `normalized_qom` come from `micromotion`, which + released 1.0.0 today. They used to average over every marker at every frame while gaps were + interpolated, so an occluded marker contributed almost no speed and still counted in the divisor, + and the result tracked camera coverage rather than movement. The new default excludes a marker at + the frames where it was absent. Pass `normalize="worn"` to reproduce an older figure. + ### 1.7.1 - **The published API pages described a band the package no longer uses.** They showed diff --git a/pyproject.toml b/pyproject.toml index e166f2e..a477c00 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "musicalgestures" -version = "1.7.1" +version = "1.8.0" description = "Musical Gestures Toolbox for Python" readme = "README.md" license = {text = "GPL-3.0-or-later"} @@ -25,9 +25,10 @@ classifiers = [ ] dependencies = [ # >=0.3 was wrong twice over: no such release exists on PyPI below 0.6, and the functions - # this package re-exports arrived much later. 0.15.2 is the floor that makes the - # committed API pages true, since they are generated from that package's docstrings. - "micromotion>=0.15.2", + # this package re-exports arrived much later. The floor is now 1.0.0, where `group_qom` + # stopped counting markers it could not see. Below that the re-exported function returns a + # different, confounded number, so this is a correctness floor and not only a docs one. + "micromotion>=1.0.0", "numpy", "pandas", "matplotlib",