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", )