feat(scada): add calibrated monitoring and incident recovery
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
from datetime import datetime, timezone
|
||||
|
||||
import pytest
|
||||
|
||||
from scripts.benchmark.generation import (
|
||||
deterministic_standard_normal,
|
||||
noisy_scada_observation,
|
||||
)
|
||||
|
||||
|
||||
AT = datetime(2026, 5, 1, tzinfo=timezone.utc)
|
||||
|
||||
|
||||
def test_noise_is_stable_and_bound_to_observation_identity():
|
||||
value = deterministic_standard_normal(
|
||||
seed="normal-day-v1", at=AT, device_id="P1", metric="pressure",
|
||||
)
|
||||
assert value == deterministic_standard_normal(
|
||||
seed="normal-day-v1", at=AT, device_id="P1", metric="pressure",
|
||||
)
|
||||
assert value != deterministic_standard_normal(
|
||||
seed="normal-day-v1", at=AT, device_id="P2", metric="pressure",
|
||||
)
|
||||
|
||||
|
||||
def test_pressure_keeps_metres_and_flow_converts_lps_to_m3h_before_noise():
|
||||
pressure = noisy_scada_observation(
|
||||
raw_value=20.0, device_type="pressure", at=AT, device_id="P1",
|
||||
seed="normal-day-v1", pressure_sigma_percent=0, pressure_sigma_floor_m=0,
|
||||
)
|
||||
flow = noisy_scada_observation(
|
||||
raw_value=10.0, device_type="pipe_flow", at=AT, device_id="F1",
|
||||
seed="normal-day-v1", flow_sigma_percent=0,
|
||||
)
|
||||
assert pressure == 20.0
|
||||
assert flow == 36.0
|
||||
|
||||
|
||||
def test_noise_is_clipped_and_pressure_never_becomes_negative():
|
||||
value = noisy_scada_observation(
|
||||
raw_value=0.01, device_type="pressure", at=AT, device_id="P1",
|
||||
seed="normal-day-v1", pressure_sigma_percent=0,
|
||||
pressure_sigma_floor_m=100, clip_sigma=3,
|
||||
)
|
||||
assert value >= 0
|
||||
|
||||
with pytest.raises(ValueError, match="unsupported"):
|
||||
noisy_scada_observation(
|
||||
raw_value=1, device_type="quality", at=AT, device_id="Q1",
|
||||
seed="normal-day-v1",
|
||||
)
|
||||
Reference in New Issue
Block a user