from ylff.services.audit.audit_runner import run_audit from ylff.services.audit.models import ExternalReferenceMeasurement, OperatingRegime def _m(capture_id: str, *, err: float, sigma: float): return ExternalReferenceMeasurement( capture_id=capture_id, regime=OperatingRegime.INDOOR_CONSTRAINED, measurement_type="tag_to_tag", d_pred=10.0 + float(err), d_star=10.0, sigma_d=float(sigma), ) def test_run_audit_splits_by_capture_id_scene_disjoint(): # Two scenes, multiple measurements each. Ensure split happens at scene granularity. ms = [] for _ in range(10): ms.append(_m("scene_a", err=0.1, sigma=0.2)) ms.append(_m("scene_b", err=0.1, sigma=0.2)) res = run_audit(ms, calibrate=True, calibration_split_fraction=0.5) split = res.summary.get("split", {}) assert split.get("mode") in ("scene_stratified_by_regime", "row_fallback") if split.get("mode") == "scene_stratified_by_regime": assert split["num_scenes_total"] == 2 assert split["num_scenes_cal"] + split["num_scenes_audit"] == 2 def test_dataset_level_gate_2b_enforced_only_when_calibrated(): # If calibration set ends up empty (e.g., only one scene and rounding), Gate 2b is skipped. ms = [_m("scene_only", err=0.2, sigma=0.05) for _ in range(20)] res = run_audit(ms, calibrate=True, calibration_split_fraction=0.5) gates = {g.name: g for g in res.gates} assert "gate_2b_dataset_level_coverage" in gates # Skipped OR enforced is fine; what we require is the gate exists and is reported. assert isinstance(gates["gate_2b_dataset_level_coverage"].details, dict)