Source: scripts/diagnose_3d_observed_support.py · Plain text

scripts/diagnose_3d_observed_support.py

"""Compare two frozen geometries using observed cameras/RGB only; no query access."""

import argparse
import json
from pathlib import Path

import torch

from mcss.dynamic.cache import ObservationCache
from mcss.dynamic.carrier import DynamicSceneCarrier
from mcss.dynamic.config import WriteConfig
from mcss.dynamic.feedback import anchored_observation
from mcss.dynamic.write_rule import DirectWriteRule
from mcss.mechanism_pilot.small_training import TrainScene, sha, write_json
from mcss.mechanism_pilot.spatial import (
    SPATIAL_MODES,
    carrier_config_for_spatial_mode,
    observed_camera_support,
)


def main():
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--manifest", type=Path, required=True)
    parser.add_argument("--output", type=Path, required=True)
    args = parser.parse_args()
    if args.output.exists():
        raise FileExistsError(args.output)
    torch.set_num_threads(1)
    manifest = json.loads(args.manifest.read_text())
    access, rows = [], []
    with torch.no_grad():
        for mode in SPATIAL_MODES:
            torch.manual_seed(20260927)
            carrier = DynamicSceneCarrier(carrier_config_for_spatial_mode(mode))
            writer = DirectWriteRule(carrier.config, WriteConfig())
            for record in manifest["scenes"]:
                if record["split"] != "train":
                    raise ValueError("This diagnostic is train-only")
                # Narrow the record before loading media; no query camera or depth is used.
                ids = record["roles"]["context_a"] + record["roles"]["stream"]
                observed = {
                    **record,
                    "frames": [f for f in record["frames"] if f["frame_id"] in ids],
                }
                scene = TrainScene(
                    observed, manifest["image_size"], args.manifest.parent, "cpu", access
                )
                cameras = [scene.camera(scene.frames[i]) for i in ids]
                row = {
                    "mode": mode,
                    "scene_id": record["scene_id"],
                    "frame_ids": ids,
                    **observed_camera_support(carrier._candidate_points, cameras),
                }
                observations = scene.observations("context_a") + scene.observations("stream")
                cache = ObservationCache("observed-support", record["scene_id"])
                fast = carrier.initial_fast(cache.episode_id)
                proposals = []
                for observation in observations:
                    arrived = anchored_observation(observation, observations[0].camera.c2w)
                    cache = cache.append(arrived, carrier.encode(arrived))
                    trace = carrier.trace(cache, fast)
                    proposal = writer.propose(trace)
                    proposals.append(
                        {
                            "frame_id": observation.frame_id,
                            "supported_candidates": int((trace.support_weights > 0).sum()),
                            "fuse_norm": float(proposal.delta_fuse.norm()),
                            "complete_norm": float(proposal.delta_complete.norm()),
                        }
                    )
                assert [p["supported_candidates"] for p in proposals] == row[
                    "supported_candidates_per_prefix"
                ]
                row["zero_fast_proposals_per_prefix"] = proposals
                rows.append(row)
    write_json(
        args.output,
        {
            "scope": "OBSERVED_ONLY_TRAIN_GEOMETRY_DIAGNOSTIC",
            "manifest_sha256": sha(args.manifest),
            "rows": rows,
            "access_log": access,
            "query_media_reads": 0,
            "depth_reads": 0,
            "support_semantics": "At least two camera frusta; not surface visibility",
        },
    )
    print(json.dumps(rows, indent=2))


if __name__ == "__main__":
    main()