MAPSS
MAPSS (Manifold-based Assessment of Perceptual Source Separation) provides two perceptually grounded source-separation measures:
- Perceptual Separation (PS): how well each output is separated from the other reference sources.
- Perceptual Match (PM): how closely each output matches its attributed reference source.
Both measures operate frame by frame in [0, 1]; higher is better. MAPSS builds a
perceptual manifold from self-supervised audio representations and controlled distortions.
It can also return the error quantities derived in the ICLR 2026 paper.
Install
From PyPI after the first package release:
pip install mapss-measures
Directly from the current GitHub version:
pip install "git+https://github.com/Amir-Ivry/MAPSS-measures.git"
MAPSS supports Python 3.10-3.12. The default backbone is downloaded from Hugging Face on first use. A CUDA GPU is recommended; CPU execution is supported but slower.
Python quick start
from mapss import mapss
result = mapss(
reference=["reference_speaker_1.wav", "reference_speaker_2.wav"],
output=["estimate_speaker_1.wav", "estimate_speaker_2.wav"],
)
print(result.summary)
print(result.ps) # frame-level Perceptual Separation
print(result.pm) # frame-level Perceptual Match
result.save("mapss_results")
Source order is meaningful: output[i] must estimate reference[i]. MAPSS evaluates
source separation, so at least two reference/output sources are required.
In-memory waveforms
import soundfile as sf
from mapss import mapss
ref_1, sr = sf.read("reference_1.wav")
ref_2, _ = sf.read("reference_2.wav")
out_1, _ = sf.read("output_1.wav")
out_2, _ = sf.read("output_2.wav")
result = mapss(
reference=[ref_1, ref_2],
output=[out_1, out_2],
sample_rate=sr,
source_names=["speaker_1", "speaker_2"],
model="wav2vec2",
layer=2,
alpha=1.0,
)
Two-dimensional NumPy arrays or PyTorch tensors shaped (sources, samples) are also
accepted. Inputs are converted to mono and resampled to the paper's 16 kHz operating rate.
What the result contains
result.ps # pandas.DataFrame: timestamp_ms + one column per source
result.pm # pandas.DataFrame: timestamp_ms + one column per source
result.ci # confidence/error components, or None when add_ci=False
result.summary # mean PS/PM and valid-frame counts per source
result.source_names
Inactive frames are NaN and are excluded from the convenience means. For reported
challenge results, retain the frame tables and state the aggregation you use. The paper's
PM utterance score is a mean over active frames; its PS analysis uses the pooling procedure
defined in Appendix B.4 rather than a plain mean.
Important keyword arguments
| Argument | Default | Meaning |
|---|---|---|
model |
"wav2vec2" |
Self-supervised representation; the default is wav2vec 2.0 Large. |
layer |
2 |
Paper-selected transformer layer for the default English setup. |
alpha |
1.0 |
Diffusion-map density normalization in [0, 1]. |
add_ci |
True |
Compute the paper's deterministic/probabilistic error components. |
seed |
42 |
Seed used by MAPSS and its distortion bank. |
max_gpus |
all available | Maximum GPUs; use 0 to force CPU. |
length_policy |
"error" |
Reject unequal lengths, or use "trim" explicitly. |
Supported models are wav2vec2, wavlm, hubert, their _base variants,
wav2vec2_xlsr, and raw. raw bypasses self-supervised encoding and is useful for
development smoke tests; it is not the paper's recommended reporting configuration.
Command line
mapss \
--reference reference_1.wav reference_2.wav \
--output estimate_1.wav estimate_2.wav \
--model wav2vec2 --layer 2 \
--results-dir mapss_results
The historical manifest workflow remains supported:
mapss --manifest Manifests/example_English.json --model wav2vec2 --layer 2
Before reporting a challenge result
- Keep reference and output source order identical.
- Report the package version, model, layer,
alpha, seed, and aggregation. - Do not replace inactive-frame
NaNvalues with zeros. - Use the same settings for every submitted system.
- Cite the MAPSS paper and link this repository.
See the challenge integration guide, the complete Python API reference, and testing instructions.
Citation
@inproceedings{ivry2026mapss,
title = {MAPSS: Manifold-based Assessment of Perceptual Source Separation},
author = {Ivry, Amir and Cornell, Samuele and Watanabe, Shinji},
booktitle = {International Conference on Learning Representations},
year = {2026}
}
License
MIT. See LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mapss_measures-1.1.0.tar.gz.
File metadata
- Download URL: mapss_measures-1.1.0.tar.gz
- Upload date:
- Size: 35.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
105c55bbfbc9fce76843d6160098df2f15d3067e8ede83481c38b90f5398ed94
|
|
| MD5 |
85a21587fcf87fa3ac1d90ac4d36a83e
|
|
| BLAKE2b-256 |
48ff33adaf02b99bac6ad6556d0a43575903d12219d10c69ac433dc254447a16
|
Provenance
The following attestation bundles were made for mapss_measures-1.1.0.tar.gz:
Publisher:
publish.yml on Amir-Ivry/MAPSS-measures
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mapss_measures-1.1.0.tar.gz -
Subject digest:
105c55bbfbc9fce76843d6160098df2f15d3067e8ede83481c38b90f5398ed94 - Sigstore transparency entry: 2399595044
- Sigstore integration time:
-
Permalink:
Amir-Ivry/MAPSS-measures@33ea6387b54c11fdbb612cf220d02afd4d74c550 -
Branch / Tag:
refs/heads/release/v1.1.0 - Owner: https://github.com/Amir-Ivry
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@33ea6387b54c11fdbb612cf220d02afd4d74c550 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mapss_measures-1.1.0-py3-none-any.whl.
File metadata
- Download URL: mapss_measures-1.1.0-py3-none-any.whl
- Upload date:
- Size: 34.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5f7e2a43c44164ed9fa0eb32363b362821abaa72f3577122bacacbc8d08bf313
|
|
| MD5 |
22fa2841c4c3a9213db4c656ad034ed6
|
|
| BLAKE2b-256 |
0895f688732e6fba111dc52df56045edcc0eff0b34c328280c77467fb747bfc1
|
Provenance
The following attestation bundles were made for mapss_measures-1.1.0-py3-none-any.whl:
Publisher:
publish.yml on Amir-Ivry/MAPSS-measures
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mapss_measures-1.1.0-py3-none-any.whl -
Subject digest:
5f7e2a43c44164ed9fa0eb32363b362821abaa72f3577122bacacbc8d08bf313 - Sigstore transparency entry: 2399595130
- Sigstore integration time:
-
Permalink:
Amir-Ivry/MAPSS-measures@33ea6387b54c11fdbb612cf220d02afd4d74c550 -
Branch / Tag:
refs/heads/release/v1.1.0 - Owner: https://github.com/Amir-Ivry
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@33ea6387b54c11fdbb612cf220d02afd4d74c550 -
Trigger Event:
push
-
Statement type: