tests/test_rgbd_fresh_v2_data.py
"""FRESH-V2 metadata rule: never observed, unused, volume-fenced, asset-unique, hash order."""
import importlib.util
from collections import Counter
from pathlib import Path
def script():
path = Path(__file__).parents[1] / "scripts" / "prepare_rgbd_fresh_v2_data.py"
spec = importlib.util.spec_from_file_location("prepare_rgbd_fresh_v2_data", path)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
def row(scene, split="train", observed="False"):
return {
"scene_name": scene,
"official_split": split,
"protocol_partition": split,
"previously_observed": observed,
}
def test_selection_applies_every_metadata_rule_in_hash_order():
m = script()
rows = [
row("ai_001_002"), # volume fenced by the TRAIN/DEV scene ai_001_001
row("ai_002_001"),
row("ai_002_002"),
row("ai_002_003", observed="True"),
row("ai_002_004", split="val"),
row("ai_002_005"), # protected
row("ai_002_006"), # already used
row("ai_002_007"), # shares its source asset with ai_002_001
row("ai_002_008"), # fewer than 16 frames
row("ai_002_009"), # BAD trajectory
row("ai_003_001"),
]
names = [r["scene_name"] for r in rows]
assets = {s: {"archive_file": f"A_{s}.rar", "asset_file": "0"} for s in names}
assets["ai_002_007"] = dict(assets["ai_002_001"])
allowed = {s: list(range(16)) for s in names}
allowed["ai_002_008"] = list(range(15))
trajectories = {f"{s}_cam_00": {"Scene type": "OK"} for s in names}
trajectories["ai_002_009_cam_00"] = {"Scene type": "BAD"}
selected = m.select_fresh_v2(
rows,
assets,
allowed,
trajectories,
protected={"ai_002_005"},
excluded=set(),
used={"ai_002_006", "ai_001_001"},
fence={"ai_001_001"},
)
duplicate = min(("ai_002_001", "ai_002_007"), key=m.selection_key)
expected = sorted(["ai_002_002", "ai_003_001", duplicate], key=m.selection_key)
assert selected == expected
def test_a_full_volume_is_never_read_again():
m = script()
counts = Counter({"002": m.PER_VOLUME})
assert m.volume_full(counts, "ai_002_010")
assert not m.volume_full(counts, "ai_003_001")