61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
from __future__ import annotations
|
|
|
|
from k1link.compute.e38_perception_baseline import (
|
|
_dimension_metrics,
|
|
_predict_tree,
|
|
_train_tree,
|
|
)
|
|
|
|
|
|
def test_e38_cart_is_deterministic_and_respects_minimum_leaf() -> None:
|
|
rows = [
|
|
({"score": 0.1, "support": 0.0}, "background"),
|
|
({"score": 0.2, "support": 1.0}, "background"),
|
|
({"score": 0.7, "support": 3.0}, "object"),
|
|
({"score": 0.8, "support": 4.0}, "object"),
|
|
({"score": 0.9, "support": 5.0}, "object"),
|
|
({"score": 1.0, "support": 6.0}, "object"),
|
|
]
|
|
first = _train_tree(
|
|
rows,
|
|
feature_names=["score", "support"],
|
|
max_depth=3,
|
|
min_leaf=2,
|
|
)
|
|
second = _train_tree(
|
|
rows,
|
|
feature_names=["score", "support"],
|
|
max_depth=3,
|
|
min_leaf=2,
|
|
)
|
|
assert first == second
|
|
assert _predict_tree(first, {"score": 0.15, "support": 1.0}) == "background"
|
|
assert _predict_tree(first, {"score": 0.85, "support": 4.0}) == "object"
|
|
|
|
|
|
def test_e38_dimension_metrics_do_not_blend_strata() -> None:
|
|
rows = [
|
|
{
|
|
"source_stratum": "agree",
|
|
"prediction": {"presence": "object-present"},
|
|
"reference": {"presence": "object-present"},
|
|
},
|
|
{
|
|
"source_stratum": "agree",
|
|
"prediction": {"presence": "object-present"},
|
|
"reference": {"presence": "background-or-noise"},
|
|
},
|
|
{
|
|
"source_stratum": "geometry-only",
|
|
"prediction": {"presence": "occupied-environment"},
|
|
"reference": {"presence": "occupied-environment"},
|
|
},
|
|
]
|
|
metrics = _dimension_metrics(rows, dimension="presence", target=0.9)
|
|
assert metrics["correct"] == 2
|
|
assert metrics["incorrect"] == 1
|
|
assert metrics["accuracy"] == 0.666667
|
|
assert metrics["passed"] is False
|
|
assert metrics["by_stratum"]["agree"]["accuracy"] == 0.5
|
|
assert metrics["by_stratum"]["geometry-only"]["accuracy"] == 1.0
|