Files
geointel/backend/tests/test_sam_roof_label_refinement.py
T
Jens faeb58ef6d
GeoIntel release gates / Compile, test, contracts and builds (push) Successful in 1m49s
GeoIntel release gates / Python and npm vulnerability policy (push) Successful in 21s
GeoIntel release gates / Production AI image, SBOM and container scan (push) Successful in 5m39s
GeoIntel release gates / Deploy exact gated revision to Unraid (push) Failing after 58m43s
Initial public release
2026-08-31 21:56:53 +02:00

40 lines
1.4 KiB
Python

from __future__ import annotations
import importlib.util
from pathlib import Path
SCRIPT = Path(__file__).parents[2] / "scripts" / "refine_yolo_labels_with_sam.py"
SPEC = importlib.util.spec_from_file_location("sam_roof_refinement", SCRIPT)
assert SPEC and SPEC.loader
MODULE = importlib.util.module_from_spec(SPEC)
SPEC.loader.exec_module(MODULE)
def test_plausible_refinement_is_fail_closed() -> None:
source = (10.0, 10.0, 30.0, 30.0)
limits = dict(
min_iou=0.15,
min_area_ratio=0.25,
max_area_ratio=4.0,
max_center_shift_ratio=0.75,
min_dimension_ratio=0.5,
max_dimension_ratio=2.0,
)
assert MODULE.plausible_refinement(source, (8.0, 9.0, 31.0, 32.0), **limits)
assert not MODULE.plausible_refinement(source, (100.0, 100.0, 120.0, 120.0), **limits)
assert not MODULE.plausible_refinement(source, (0.0, 0.0, 100.0, 100.0), **limits)
assert not MODULE.plausible_refinement(source, (10.0, 10.0, 51.0, 20.0), **limits)
assert not MODULE.plausible_refinement(source, (24.0, 24.0, 44.0, 44.0), **limits)
def test_yolo_round_trip_shape() -> None:
line = MODULE.yolo_line((10.0, 20.0, 30.0, 40.0), 100, 100)
assert line == "0 0.20000000 0.30000000 0.20000000 0.20000000"
def test_cli_exposes_explicit_fallback_policy() -> None:
source = SCRIPT.read_text(encoding="utf-8")
assert 'choices=("retain", "drop")' in source
assert '"dropped_fallback_label_count"' in source