tests/test_trained_mechanism.py
"""Tiny fixture verifies checkpoint-driven diagnostic boundaries, not research quality."""
import importlib.util
import json
from pathlib import Path
import pytest
import torch
from mcss.dynamic.carrier import DynamicSceneCarrier
from mcss.dynamic.checkpoint import save_dynamic_checkpoint
from mcss.dynamic.config import WriteConfig
from mcss.dynamic.write_rule import DirectWriteRule
from mcss.mechanism_pilot.spatial import carrier_config_for_spatial_mode
from mcss.mechanism_pilot.statistics import analyze_history
def load_module(relative, name):
spec = importlib.util.spec_from_file_location(
name, Path(__file__).resolve().parents[1] / relative
)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
@pytest.fixture(scope="module")
def run_fixture(tmp_path_factory):
root = tmp_path_factory.mktemp("trained-mechanism")
fixture = load_module("tests/test_small_3d_training.py", "small_training_fixture")
manifest = fixture.manifest_fixture(root)
# Shift every pose: missing query/continuation anchoring then becomes observable.
for scene in manifest["scenes"]:
for frame in scene["frames"]:
frame["c2w"][0][3] = 11.0
frame["c2w"][2][3] = -7.0
path = root / "manifest.json"
path.write_text(json.dumps(manifest))
torch.manual_seed(20260927)
carrier = DynamicSceneCarrier(carrier_config_for_spatial_mode("anchor-centered"))
writer = DirectWriteRule(carrier.config, WriteConfig())
checkpoint = root / "fixture.pt"
save_dynamic_checkpoint(
checkpoint, carrier, writer, phase="fixture", provenance={"scope": "fixture"}
)
runner = load_module("scripts/run_trained_3d_mechanism.py", "trained_mechanism")
output = root / "run"
runner.run(path, checkpoint, output, device="cpu", engineering_fixture=True)
return runner, output, path, checkpoint
def read(output, name):
return json.loads((output / name).read_text())
def test_seals_precede_queries_and_no_query_in_runtime(run_fixture):
runner, output, path, _ = run_fixture
events = read(output, "sealed_query_access_log.json")
assert all(e["event"] == "seal" for e in events[:33])
assert all(e["event"] != "seal" and e["status"] == "completed" for e in events[33:])
manifest = read(output, "state_manifest.json")
assert len(manifest) == 33
assert all(set(r["observed_ids"]).issubset(set(range(8))) for r in manifest.values())
access = [json.loads(s) for s in (output / "label_access.jsonl").read_text().splitlines()]
assert all(r["kind"] == "rgb_camera" for r in access if r["stage"] == "state_construction")
data = runner.PilotData(path, "cpu", [])
for i in (8, 9, 12, 15):
with pytest.raises(PermissionError):
data.observation("fixture0", i)
def test_fixed_cohorts_recompute_and_query_camera_not_changed(run_fixture):
runner, output, _, _ = run_fixture
static = read(output, "static_state_results.json")
dynamic = read(output, "controlled_history_results.json")
assert len(static) == 90 and len(dynamic) == 144
for cohort in runner.COHORTS:
subset = [r for r in dynamic if r["cohort"] == cohort]
assert analyze_history(subset) == read(output, f"history_analysis_{cohort}.json")
assert runner.summarize_static([r for r in static if r["cohort"] == cohort]) == read(
output, f"static_analysis_{cohort}.json"
)
for scene in ("fixture0", "fixture1", "fixture2"):
for query in (8, 9, 12, 13, 14, 15):
assert (
len(
{
r["query_camera_hash"]
for r in static + dynamic
if r["scene_id"] == scene and r["query_id"] == query
}
)
== 1
)
assert all(r["coverage"] == 1.0 for r in static)
def test_checkpoint_immutable_and_no_overwrite(run_fixture):
runner, output, path, checkpoint = run_fixture
summary = read(output, "summary.json")
assert summary["checkpoint_unchanged"] and summary["source_data_unchanged"]
assert summary["candidate_isolation"] and summary["controlled_pairs"] == 3
with pytest.raises(FileExistsError):
runner.run(path, checkpoint, output, device="cpu", engineering_fixture=True)