| from __future__ import annotations |
|
|
| import math |
|
|
| import pytest |
| import torch |
|
|
| from music3lab.codec.native_state_multiclip import ( |
| CAPABILITY_LABEL, |
| LiteNativeStateBatch, |
| ScaleUpMetrics, |
| assert_no_residual_loss_path, |
| deterministic_split_plan, |
| derive_feedback_deterministically, |
| extract_global_from_fused, |
| scale_up_gate, |
| validate_lite_native_state_batch, |
| ) |
|
|
|
|
| FRAMES = 25 |
| WIDTH = 4096 |
|
|
|
|
| def _batch(n: int = 2) -> LiteNativeStateBatch: |
| global_hidden = torch.randn(n, FRAMES, WIDTH).bfloat16() |
| return LiteNativeStateBatch( |
| audio=torch.randn(n, 2, 44_032, dtype=torch.float32).clamp(-1, 1), |
| continuous_latent=torch.randn(n, 128, 86).bfloat16(), |
| semantic=torch.randint(0, 16_384, (n, FRAMES), dtype=torch.int64), |
| residual=torch.randint(0, 2048, (n, FRAMES, 7), dtype=torch.int64), |
| priming=torch.randint(0, 16_384, (n, 8), dtype=torch.int64), |
| global_hidden=global_hidden, |
| feedback=torch.randn(n, FRAMES, WIDTH).bfloat16(), |
| seeds=torch.arange(n, dtype=torch.int64), |
| ) |
|
|
|
|
| def test_lite_schema_accepts_exact_tensors_and_rejects_bad_dtype_shape_nonfinite() -> None: |
| batch = _batch() |
| validate_lite_native_state_batch(batch) |
| with pytest.raises(ValueError, match="audio.*float32"): |
| validate_lite_native_state_batch(LiteNativeStateBatch(**{**batch.__dict__, "audio": batch.audio.bfloat16()})) |
| with pytest.raises(ValueError, match="continuous_latent.*128, 86"): |
| validate_lite_native_state_batch(LiteNativeStateBatch(**{**batch.__dict__, "continuous_latent": batch.continuous_latent[..., :-1]})) |
| bad_feedback = batch.feedback.clone() |
| bad_feedback[0, 0, 0] = float("nan") |
| with pytest.raises(ValueError, match="feedback.*finite"): |
| validate_lite_native_state_batch(LiteNativeStateBatch(**{**batch.__dict__, "feedback": bad_feedback})) |
|
|
|
|
| def test_split_plan_is_deterministic_disjoint_and_has_the_bounded_composition() -> None: |
| first = deterministic_split_plan() |
| assert first == deterministic_split_plan() |
| assert len(first.train) == 80 |
| assert len(first.validation) == len(first.heldout) == 12 |
| assert len(first.diagnostic_train) == len(first.diagnostic_heldout) == 16 |
| assert sum(item.source == "reused_french_house" for item in first.train) == 64 |
| assert sum(item.source == "fresh" for item in first.train) == 16 |
| assert len({item.prompt_id for item in first.train}) == 2 |
| primary = first.train + first.validation + first.heldout |
| assert not ({item.prompt_id for item in first.validation} & {item.prompt_id for item in first.train}) |
| assert not ({item.prompt_id for item in first.heldout} & {item.prompt_id for item in first.train}) |
| assert not ({item.prompt_id for item in first.validation} & {item.prompt_id for item in first.heldout}) |
| assert len({(item.prompt_id, item.seed) for item in primary}) == len(primary) |
| assert all(item.frames == FRAMES for item in primary) |
|
|
|
|
| def test_global_extraction_is_exact_fused_prefix_and_feedback_callback_consumes_no_rng() -> None: |
| batch = _batch() |
| fused = torch.randn(batch.audio.shape[0], FRAMES, 32_768).bfloat16() |
| fused[..., :WIDTH] = batch.global_hidden |
| assert torch.equal(extract_global_from_fused(fused), batch.global_hidden) |
| state_before = torch.random.get_rng_state() |
| observed = [] |
| def callback(global_hidden: torch.Tensor) -> torch.Tensor: |
| observed.append(global_hidden.shape) |
| return global_hidden + 1 |
| feedback = derive_feedback_deterministically(batch.global_hidden, callback) |
| assert observed == [batch.global_hidden.shape] |
| assert feedback.shape == (2, FRAMES, WIDTH) |
| assert torch.equal(feedback, batch.global_hidden + 1) |
| assert torch.equal(state_before, torch.random.get_rng_state()) |
|
|
|
|
| def test_residual_is_provenance_only_not_a_loss_target() -> None: |
| targets = assert_no_residual_loss_path(_batch()) |
| assert set(targets) == {"semantic", "feedback", "global_hidden"} |
| assert all("residual" not in name for name in targets) |
|
|
|
|
| def test_scaleup_gate_requires_all_generalization_and_capability_conditions() -> None: |
| baseline = ScaleUpMetrics(1.0, 1.0, 1.0, 1.0, math.log(16_384)) |
| passing = ScaleUpMetrics(0.80, 0.94, 0.80, 0.94, math.log(16_384) - 0.11) |
| assert scale_up_gate(baseline, passing).accepted is True |
| bad_gap = ScaleUpMetrics(0.40, 0.94, 0.40, 0.94, math.log(16_384) - 0.11) |
| result = scale_up_gate(baseline, bad_gap) |
| assert result.accepted is False |
| assert "train_vs_heldout_gap" in result.reasons |
|
|
|
|
| def test_capability_is_truthfully_labeled_as_captured_multiclip_only() -> None: |
| assert CAPABILITY_LABEL == "captured_music3_multiclip_only" |
| assert CAPABILITY_LABEL != "native_tokenizer" |
| assert CAPABILITY_LABEL != "arbitrary_external_music" |
|
|