Source: tests/test_rgbd_pretrained_v31.py · Plain text

tests/test_rgbd_pretrained_v31.py

"""V31: frozen DINOv2 features through a zero bypass on the V17 L carrier; scripts and branch."""

import importlib.util
from pathlib import Path

import pytest
import torch
from test_rgbd_stream_write_v3 import contexts

from mcss.dynamic.types import hash_scene_state
from mcss.mechanism_pilot import rgbd_long_train_carrier as v17
from mcss.mechanism_pilot import rgbd_pretrained_carrier as v31

SEED = 20260928
SCRIPTS = Path(__file__).parents[1] / "scripts"
needs_backbone = pytest.mark.skipif(
    not v31.backbone_files_present(), reason="the DINOv2 snapshot exists only on the training host"
)


def script(name):
    spec = importlib.util.spec_from_file_location(name.replace(".py", ""), SCRIPTS / name)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module


def test_shared_parameters_are_the_v17_draw_and_the_global_rng_is_untouched():
    base = v17.make_carrier("L", SEED, "cpu")
    after_base = torch.get_rng_state()
    mine = v31.make_carrier("L", SEED, "cpu")
    assert torch.equal(torch.get_rng_state(), after_base)
    state = mine.state_dict()
    extra = set(state) - set(base.state_dict())
    assert extra == {"feature_projection", "feature_projection_bias", "pretrained_weight"}
    assert all(torch.equal(state[k], v) for k, v in base.state_dict().items())
    assert sum(state[k].numel() for k in extra) == 384 * 24 + 24 + 48 * 64 == 12312
    assert not mine.pretrained_weight.any() and not mine.feature_projection_bias.any()
    assert torch.equal(
        v31.make_carrier("L", SEED, "cpu").feature_projection, state["feature_projection"]
    )
    assert not torch.equal(
        v31.make_carrier("L", SEED + 1, "cpu").feature_projection, state["feature_projection"]
    )
    bound = 1 / 384**0.5
    assert mine.feature_projection.abs().max() <= bound
    assert mine.feature_projection.std() > bound / 4


def test_checkpoint_roundtrip_and_schema_and_backbone_guards(tmp_path):
    carrier = v31.make_carrier("L", SEED, "cpu")
    path = tmp_path / "step_000100.pt"
    digest = v31.save_checkpoint(path, carrier, variant="L", seed=SEED, step=100, lock_sha256="x")
    assert len(digest) == 64
    restored, payload = v31.load_checkpoint(path, "cpu")
    assert isinstance(restored, v31.PretrainedFeatureCarrier)
    assert payload["backbone"] == v31.BACKBONE and payload["projected"] == v31.PROJECTED == 24
    assert all(
        torch.equal(a, b)
        for a, b in zip(restored.state_dict().values(), carrier.state_dict().values(), strict=True)
    )
    with pytest.raises(PermissionError):
        v17.load_checkpoint(path, "cpu")
    old = tmp_path / "v17.pt"
    v17.save_checkpoint(
        old, v17.make_carrier("L", SEED, "cpu"), variant="L", seed=SEED, step=1, lock_sha256="x"
    )
    with pytest.raises(PermissionError):
        v31.load_checkpoint(old, "cpu")
    payload["backbone"] = {**payload["backbone"], "weights_sha256": "0" * 64}
    torch.save(payload, tmp_path / "other_backbone.pt")
    with pytest.raises(PermissionError):
        v31.load_checkpoint(tmp_path / "other_backbone.pt", "cpu")


@needs_backbone
def test_backbone_is_registered_frozen_cached_and_outside_the_state_dict():
    assert v31.code_tree_sha256(v31.repository()) == v31.BACKBONE["code_tree_sha256"]
    model = v31.load_backbone("cpu")
    assert v31.load_backbone("cpu") is model and not model.training
    assert not any(p.requires_grad for p in model.parameters())
    warm, _, _, _ = contexts()
    tokens = v31.patch_tokens(warm[0].rgb)
    assert tokens.shape == (384, 18, 23) and not tokens.requires_grad
    assert torch.isfinite(tokens).all()
    assert v31.patch_tokens(warm[0].rgb.clone()) is tokens
    carrier = v31.make_carrier("L", SEED, "cpu")
    assert len(carrier.state_dict()) == len(v17.make_carrier("L", SEED, "cpu").state_dict()) + 3
    features = carrier.encode(warm[0])
    assert features.shape == (32, *warm[0].rgb.shape[-2:])
    assert torch.equal(features[:8], v17.make_carrier("L", SEED, "cpu").encode(warm[0]))
    features[8:].square().sum().backward()
    assert carrier.feature_projection.grad.abs().sum() > 0


@needs_backbone
def test_zero_bypass_builds_the_v17_l_state_and_a_live_bypass_changes_it():
    torch.set_num_threads(1)
    warm, _, bounds, _ = contexts()
    base = v17.make_carrier("L", SEED, "cpu")
    mine = v31.make_carrier("L", SEED, "cpu")
    with torch.no_grad():
        expected, anchor = v17.build_state(base, warm, bounds, "e")
        state, mine_anchor = v31.build_state(mine, warm, bounds, "e")
    assert hash_scene_state(state) == hash_scene_state(expected)
    assert torch.equal(anchor, mine_anchor)
    with torch.no_grad():
        mine.pretrained_weight.normal_(0.0, 0.1, generator=torch.Generator().manual_seed(1))
        live, _ = v31.build_state(mine, warm, bounds, "e")
    assert hash_scene_state(live) != hash_scene_state(expected)


def test_derived_scripts_change_only_the_carrier_module():
    train = (SCRIPTS / "train_rgbd_pretrained_v31.py").read_text()
    frozen_train = (SCRIPTS / "train_rgbd_long_train_carrier.py").read_text()
    start, end = "def train(", '        "dynamic_ttt_run": False,\n'
    assert (
        train[train.index(start) : train.index(end)]
        == frozen_train[frozen_train.index(start) : frozen_train.index(end)]
    )
    assert "rgbd_pretrained_carrier import (" in train and "rgbd_long_train_carrier" not in train
    evaluate = (SCRIPTS / "evaluate_rgbd_pretrained_eval_v31.py").read_text()
    frozen_evaluate = (SCRIPTS / "evaluate_rgbd_long_train_eval.py").read_text()
    line = "build_state, load_checkpoint\n"
    assert "from mcss.mechanism_pilot.rgbd_pretrained_carrier import " + line in evaluate
    assert evaluate.split(line, 1)[1] == frozen_evaluate.split(line, 1)[1]


def test_branch_needs_both_the_feature_gain_and_the_hybrid_label():
    analysis = script("analyze_rgbd_pretrained_v31.py")
    assert analysis.ARMS == ("G1", "P")
    assert analysis.branch("SUPPORTED", "ABOVE") == "A"
    assert analysis.branch("SUPPORTED", "NOT_DISTINGUISHABLE") == "B"
    assert analysis.branch("PARTIAL", "ABOVE") == "B"
    assert analysis.branch("NOT_ESTABLISHED", "BELOW") == "C"