music3lab / tests /test_reference_guided_append.py
coolpoodle's picture
code and training scripts (part 2)
b9dc61d verified
Raw
History Blame Contribute Delete
8.17 kB
from __future__ import annotations
import hashlib
import json
import shutil
from pathlib import Path
import numpy as np
import pytest
import soundfile as sf
from music3lab import reference_guided_append as rga
from music3lab.__main__ import build_parser
def _sha(path: Path) -> str:
return hashlib.sha256(path.read_bytes()).hexdigest()
def _write_float(path: Path, audio: np.ndarray) -> None:
sf.write(path, audio.T, rga.SAMPLE_RATE, subtype="FLOAT", format="WAV")
def _fixture_bundle(tmp_path: Path) -> tuple[Path, Path]:
source = tmp_path / "source.wav"
t = np.arange(5000, dtype=np.float32) / rga.SAMPLE_RATE
source_audio = np.stack((0.1 * np.sin(2*np.pi*110*t), 0.09*np.sin(2*np.pi*113*t)))
sf.write(source, source_audio.T, rga.SAMPLE_RATE, subtype="PCM_16", format="WAV")
bundle = tmp_path / "candidates.reference-style"
bundle.mkdir()
candidates = []
profiles = []
for index in range(8):
phase = np.arange(rga.CANDIDATE_FRAMES, dtype=np.float32) / rga.SAMPLE_RATE
audio = np.stack((
0.04 * np.sin(2*np.pi*(220+index)*phase),
0.035 * np.sin(2*np.pi*(223+index)*phase),
)).astype(np.float32)
path = bundle / f"candidate-{index:02d}-seed-{101+index}.wav"
_write_float(path, audio)
decoded = sf.read(path, dtype="float32", always_2d=True)[0].T.copy()
candidates.append({
"index": index, "seed": 101 + index, "wav_sha256": _sha(path),
"decoded_pcm_sha256": hashlib.sha256(decoded.astype("<f4").tobytes()).hexdigest(),
"eligible": index < 3, "rejections": [] if index < 3 else ["tempo drift"],
"final_score": [0.3, 0.2, 0.2][index] if index < 3 else 0.5 + index / 100,
"source_correlation": 0.1,
"metrics": {"rms": 0.03, "clipped_fraction": 0.0, "tempo_bpm": 120.0,
"key": "C", "mode": "major", "stereo_width": 0.5},
})
profiles.append({"profile_sha256": f"{index:064x}", "finite": True})
source_decoded = sf.read(source, dtype="float32", always_2d=True)[0].T.copy()
manifest = {
"schema_version": "music3lab.reference-style-render.v1",
"capability": "reference_style_direct_latent_scorer_internal_text_bridge",
"reference": {
"source_audio_sha256": _sha(source),
"decoded_pcm_sha256": hashlib.sha256(source_decoded.astype("<f4").tobytes()).hexdigest(),
"tempo_bpm": 120.0, "key": "C", "mode": "major", "stereo_width": 0.5,
"profile": {"profile_sha256": "f" * 64},
},
"candidates": candidates,
"candidate_profiles": profiles,
"semantic_digest": "a" * 64,
}
(bundle / "manifest.json").write_text(json.dumps(manifest), encoding="utf-8")
return source, bundle
def test_seam_formula_is_bounded_deterministic_and_combines_both_terms() -> None:
x = np.zeros((2, rga.CROSSFADE_FRAMES), dtype=np.float32)
y = np.linspace(-0.2, 0.2, rga.CROSSFADE_FRAMES, dtype=np.float32)[None].repeat(2, 0)
first = rga.seam_cost(x, y)
second = rga.seam_cost(x, y)
assert first == second
assert first["seam_cost"] == pytest.approx(
0.5 * (first["waveform_mismatch"] + first["first_difference_mismatch"])
)
assert all(0.0 <= value <= 1.0 for value in first.values())
def test_equal_power_append_has_exact_geometry_and_exact_outside_guard() -> None:
rng = np.random.default_rng(7)
source = rng.normal(0, 0.05, (2, 6000)).astype(np.float32)
candidate = rng.normal(0, 0.04, (2, rga.CANDIDATE_FRAMES)).astype(np.float32)
output = rga.equal_power_append(source, candidate)
assert output.shape == (2, 6000 + rga.CANDIDATE_FRAMES - rga.CROSSFADE_FRAMES)
assert np.array_equal(output[:, : 6000-rga.CROSSFADE_FRAMES], source[:, :-rga.CROSSFADE_FRAMES])
assert np.array_equal(output[:, 6000:], candidate[:, rga.CROSSFADE_FRAMES:])
assert np.array_equal(output[:, 6000-rga.CROSSFADE_FRAMES], source[:, -rga.CROSSFADE_FRAMES])
assert np.allclose(output[:, 5999], candidate[:, rga.CROSSFADE_FRAMES-1], atol=2e-7)
def test_ranking_uses_frozen_composite_and_candidate_index_tie() -> None:
records = [
{"index": 2, "eligible": True, "composite_score": 0.3},
{"index": 1, "eligible": True, "composite_score": 0.3},
{"index": 0, "eligible": False, "composite_score": 0.1},
]
assert rga.select_evaluated(records)["index"] == 1
def test_manifest_source_and_candidate_swap_are_rejected(tmp_path: Path) -> None:
source, bundle = _fixture_bundle(tmp_path)
wrong_source = tmp_path / "wrong.wav"
sf.write(wrong_source, np.zeros((6000, 2), dtype=np.float32), rga.SAMPLE_RATE, subtype="PCM_16")
with pytest.raises(ValueError, match="provenance"):
rga.evaluate_bundle(source=wrong_source, bundle=bundle, negative="")
first = bundle / "candidate-00-seed-101.wav"
second = bundle / "candidate-01-seed-102.wav"
saved = first.read_bytes()
first.write_bytes(second.read_bytes())
with pytest.raises(ValueError, match="file hash"):
rga.evaluate_bundle(source=source, bundle=bundle, negative="")
first.write_bytes(saved)
def test_negative_truth_and_cli_surface(tmp_path: Path) -> None:
source, bundle = _fixture_bundle(tmp_path)
_, _, records, constraints, _ = rga.evaluate_bundle(
source=source, bundle=bundle, negative="no vocals, no clipping, no tempo drift"
)
status = {item["name"]: item["status"] for item in constraints.to_dict()["items"]}
assert status == {"vocals": "NOT_ENFORCEABLE", "clipping": "ENFORCEABLE", "tempo drift": "ENFORCEABLE"}
assert constraints.to_dict()["native_negative_prompt_used"] is False
assert [record["index"] for record in records if record["eligible"]] == [0, 1, 2]
args = build_parser().parse_args([
"reference-guided-append", "--audio", "a.wav", "--bundle", "b", "--output", "o.wav"
])
assert args.config == "configs/reference-guided-append-v1.yaml" and not hasattr(args, "prompt")
def test_synthetic_end_to_end_roundtrip_and_retained_originals(tmp_path: Path) -> None:
source, bundle = _fixture_bundle(tmp_path)
result = rga.run_reference_guided_append(
source_audio=source, candidate_bundle=bundle, output=tmp_path / "joined.wav",
negative="no vocals, no clipping, no source copy",
config_path="configs/reference-guided-append-v1.yaml",
)
payload = json.loads(result.sidecar.read_text())
assert payload["status"] == "PASS" and len(payload["candidates"]) == 8
assert result.selected_index == 1
assert payload["geometry"]["net_appended_duration_seconds"] == pytest.approx(7.952834467120181)
assert payload["validation"]["float_wav_roundtrip_sample_exact"]
report_lines = result.report.read_text().splitlines()
assert all(any(line.startswith(f"| {index} |") for line in report_lines) for index in range(8))
assert _sha(result.evidence_bundle / "source-original.wav") == _sha(source)
assert _sha(result.evidence_bundle / "candidate-01-seed-102.wav") == _sha(bundle / "candidate-01-seed-102.wav")
def test_retained_real_bundle_integrates_when_present() -> None:
source = Path("/home/ubuntu/minimax-user-audio/incoming/loveonme_x_osh.wav")
bundle = Path("/home/ubuntu/minimax-reference-style-evidence/user-loveonme-f040ab1-seed101.reference-style")
if not source.exists() or not bundle.exists():
pytest.skip("retained measured bundle unavailable")
_, _, records, constraints, provenance = rga.evaluate_bundle(
source=source, bundle=bundle,
negative="no clipping, no source copy, no tempo drift, no vocals",
)
assert provenance["source"]["wav_sha256"] == "ff777c257a9f8044bbe08eb2933d6f4073a22770cf04ae527b8fe768982e6fea"
assert provenance["manifest_sha256"] == "2ada3a88bc57936810e7c8b8cf920d722225d438ca697745d9869ff4eeaa7485"
assert [record["index"] for record in records if record["eligible"]] == [0, 1, 2]
assert rga.select_evaluated(records)["index"] == 0
assert {item.name: item.status for item in constraints.items}["vocals"] == "NOT_ENFORCEABLE"