52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
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",
|
|
)
|