audit: establish accuracy phase 1 baseline
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import importlib.util
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
SCRIPT = ROOT / "scripts" / "run_accuracy_phase1_baseline.py"
|
||||
SPEC = importlib.util.spec_from_file_location("accuracy_phase1_baseline", SCRIPT)
|
||||
assert SPEC and SPEC.loader
|
||||
MODULE = importlib.util.module_from_spec(SPEC)
|
||||
SPEC.loader.exec_module(MODULE)
|
||||
|
||||
INFERENCE_SCRIPT = ROOT / "scripts" / "collect_accuracy_phase1_inference_smoke.py"
|
||||
INFERENCE_SPEC = importlib.util.spec_from_file_location("accuracy_phase1_inference", INFERENCE_SCRIPT)
|
||||
assert INFERENCE_SPEC and INFERENCE_SPEC.loader
|
||||
INFERENCE_MODULE = importlib.util.module_from_spec(INFERENCE_SPEC)
|
||||
INFERENCE_SPEC.loader.exec_module(INFERENCE_MODULE)
|
||||
|
||||
|
||||
def test_sha256_file_is_stable(tmp_path: Path) -> None:
|
||||
artifact = tmp_path / "manifest.json"
|
||||
artifact.write_bytes(b'{"version":1}\n')
|
||||
assert MODULE.sha256_file(artifact) == "50208d78350a7a160dec59a82df1499b6ca7da33e54c5eb11c97e342118e68bb"
|
||||
|
||||
|
||||
def test_mirror_inventory_distinguishes_identical_and_drifted_files(tmp_path: Path) -> None:
|
||||
(tmp_path / "geointel").mkdir()
|
||||
(tmp_path / "same.txt").write_text("same", encoding="utf-8")
|
||||
(tmp_path / "geointel" / "same.txt").write_text("same", encoding="utf-8")
|
||||
(tmp_path / "drift.txt").write_text("root", encoding="utf-8")
|
||||
(tmp_path / "geointel" / "drift.txt").write_text("mirror", encoding="utf-8")
|
||||
tracked = {"same.txt", "drift.txt", "geointel/same.txt", "geointel/drift.txt"}
|
||||
|
||||
report = MODULE.mirror_inventory(tmp_path, tracked)
|
||||
|
||||
assert report["tracked_mirror_file_count"] == 2
|
||||
assert report["paired_identical_file_count"] == 1
|
||||
assert report["paired_different_file_count"] == 1
|
||||
assert report["different_files"][0]["path"] == "drift.txt"
|
||||
|
||||
|
||||
def test_artifact_roles_do_not_claim_images_are_models() -> None:
|
||||
assert MODULE.artifact_role(Path("candidate.pt")) == "model_checkpoint"
|
||||
assert MODULE.artifact_role(Path("split-manifest.json")) == "manifest"
|
||||
assert MODULE.artifact_role(Path("contact_sheet_001.png")) == "visual_review"
|
||||
assert MODULE.artifact_role(Path("orthophoto.tif")) == "raster"
|
||||
|
||||
|
||||
def test_inference_summary_is_explicit_for_empty_and_non_empty_outputs() -> None:
|
||||
assert INFERENCE_MODULE._summarize_detections([]) == {
|
||||
"count": 0,
|
||||
"class_counts": {},
|
||||
"confidence": {"minimum": None, "maximum": None, "mean": None},
|
||||
"sample": [],
|
||||
}
|
||||
|
||||
detections = [
|
||||
{"class_name": "building", "confidence": 0.8, "bbox": [1, 2, 3, 4]},
|
||||
{"class_name": "building", "confidence": 0.4, "bbox": [5, 6, 7, 8]},
|
||||
{"class_name": "shed", "confidence": 0.6, "bbox": [9, 10, 11, 12]},
|
||||
]
|
||||
summary = INFERENCE_MODULE._summarize_detections(detections)
|
||||
|
||||
assert summary["count"] == 3
|
||||
assert summary["class_counts"] == {"building": 2, "shed": 1}
|
||||
assert summary["confidence"] == {
|
||||
"minimum": 0.4,
|
||||
"maximum": 0.8,
|
||||
"mean": 0.6,
|
||||
}
|
||||
assert summary["sample"] == detections
|
||||
Reference in New Issue
Block a user