File size: 1,981 Bytes
d4d5551
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
"""Shared fixtures: isolated runs/studio2 root + a fresh registry."""

from __future__ import annotations

import pytest

from sensorflow.studio2 import store as studio2_store
from sensorflow.studio2.registry import Registry


@pytest.fixture(autouse=True)
def studio2_env(tmp_path):
    studio2_store.set_studio2_root(str(tmp_path / "studio2"))
    yield
    studio2_store.set_studio2_root("runs/studio2")


@pytest.fixture()
def registry():
    return Registry()


# ------------------------------------------------------------------ planted
# release-gate inputs shaped exactly like the real engines' outputs


@pytest.fixture()
def passing_safety():
    return {"decision": "RELEASE_READY", "blocking_gates": [],
            "candidate_run_id": "eval-test", "baseline_run_id": "eval-base",
            "evidence_package_id": "sep-eval-test", "gates": []}


@pytest.fixture()
def blocked_safety():
    return {"decision": "BLOCKED", "blocking_gates": ["safety"],
            "candidate_run_id": "eval-test", "baseline_run_id": "eval-base",
            "evidence_package_id": "sep-eval-test", "gates": []}


@pytest.fixture()
def passing_seqeval():
    return {"run_id": "seq-test", "gate": "ALLOW", "decision": "PASS",
            "stopping_reason": "pass_confirmed", "samples_used": 4200,
            "affected_strata": [], "regression_map": []}


@pytest.fixture()
def regressed_seqeval():
    return {"run_id": "seq-test", "gate": "BLOCK", "decision": "REGRESSION",
            "stopping_reason": "regression_confirmed", "samples_used": 6100,
            "affected_strata": ["stratum:pedestrian|night"],
            "regression_map": [{"stratum": "pedestrian|night", "delta": -0.05}]}


@pytest.fixture()
def clean_shift():
    return {"run_id": "eval-test", "shifts": []}


@pytest.fixture()
def bad_shift():
    return {"run_id": "eval-test", "shifts": [
        {"cohort": "pedestrian/fog/night", "relative_change": 1.6,
         "recall_gap": -0.11, "eval_count": 900}]}