def test_stations_by_risk_level(): s_id = "test-s-id" m_id = "test-m-id" label = "some station" coord = (-2.0, 4.0) trange = ( 0, 1) # because trange is 0,1 relative range is equal to latest level river = "River X" town = "My Town" s = MonitoringStation(s_id, m_id, label, coord, trange, river, town) label = "some station 1" river = "River Y" s1 = MonitoringStation(s_id, m_id, label, coord, trange, river, town) label = "some station 4" river = "River A" s4 = MonitoringStation(s_id, m_id, label, coord, trange, river, town) label = "some station 5" river = "River A" s5 = MonitoringStation(s_id, m_id, label, coord, trange, river, town) s.latest_level = 0.4 s1.latest_level = 0.75 s4.latest_level = 4 s5.latest_level = 0 stations = [s, s1, s4, s5] correct_order = [s4, s5, s1, s] ordered_stations = stations_by_risk_level(stations) for i in range(0, len(correct_order)): assert correct_order[i] == ordered_stations[i]
def test_level_over_threshold_returns_an_ordered_list_of_stations_that_are_over_the_threshold_level(): test_tol = 0.5 s_id = "test-s-id" m_id = "test-m-id" label = "some station" coord = (-2.0, 4.0) river = "River X" town = "My Town" trange = (0, 1) s1 = MonitoringStation(s_id, m_id, label, coord, trange, river, town) s2 = MonitoringStation(s_id, m_id, label, coord, trange, river, town) s3 = MonitoringStation(s_id, m_id, label, coord, trange, river, town) s4 = MonitoringStation(s_id, m_id, label, coord, trange, river, town) s5 = MonitoringStation(s_id, m_id, label, coord, trange, river, town) s1.latest_level = 0.9 s2.latest_level = 0.4 s3.latest_level = 1.5 s4.latest_level = -1.0 s5.latest_level = None stations = [s1, s2, s3, s4, s5] expected_stations = [(s3, 1.5), (s1, 0.9)] actual_stations = stations_level_over_threshold(stations, test_tol) assert len(expected_stations) == len(actual_stations) for i in range(len(expected_stations)): assert expected_stations[i][0] == actual_stations[i][0] assert expected_stations[i][1] == round(actual_stations[i][1], 2)
def test_determine_numerical_risk(): s_id = "test-s-id" m_id = "test-m-id" label = "some station" coord = (-2.0, 4.0) trange = ( 0, 1) # because trange is 0,1 relative range is equal to latest level river = "River X" town = "My Town" s = MonitoringStation(s_id, m_id, label, coord, trange, river, town) label = "some station 1" river = "River Y" s1 = MonitoringStation(s_id, m_id, label, coord, trange, river, town) label = "some station 4" river = "River A" s4 = MonitoringStation(s_id, m_id, label, coord, trange, river, town) label = "some station 5" river = "River A" s5 = MonitoringStation(s_id, m_id, label, coord, trange, river, town) s.latest_level = 0.4 s1.latest_level = 0.75 s4.latest_level = 4 s5.latest_level = 0 stations = [s, s1, s4, s5] determine_numerical_risk(stations) assert round(s.flood_risk_factor, 1) == round(0.4 * 0.5 - 0.1, 1) assert round(s1.flood_risk_factor, 3) == round(0.75 * 0.5 + (0.75 - 0.5), 3) assert round(s5.flood_risk_factor) == round((4 + 0) / 2 - 0.5)
def test_highest_rel_level_lists_stations_in_order_from_the_highest_to_lowest_relative_water_level(): N = 3 s_id = "test-s-id" m_id = "test-m-id" label = "some station" coord = (-2.0, 4.0) river = "River X" town = "My Town" trange1 = (1.1, 3.0) trange2 = (-1.2, 2.5) trange3 = (-1.67, 3.14) trange4 = (0, 1) s1 = MonitoringStation(s_id, m_id, label, coord, trange1, river, town) s2 = MonitoringStation(s_id, m_id, label, coord, trange2, river, town) s3 = MonitoringStation(s_id, m_id, label, coord, trange3, river, town) s4 = MonitoringStation(s_id, m_id, label, coord, trange4, river, town) s1.latest_level = 4.1 s2.latest_level = 1.0 s3.latest_level = 1.9 s4.latest_level = None stations = [s1, s2, s3, s4] expected_stations = [s1, s3, s2] actual_stations = stations_highest_rel_level(stations, N) assert expected_stations == actual_stations
def test_stations_level_over_threshold(self): station1 = MonitoringStation(station_id='test_station_id_1', measure_id='test_measure_id_1', label='Test Station 1', coord=(0., 1.), typical_range=(0., 1.), river='test_river_1', town='test_town_1') station2 = MonitoringStation(station_id='test_station_id_2', measure_id='test_measure_id_2', label='Test Station 2', coord=(1., 1.), typical_range=(0., 1.), river='test_river_2', town='test_town_2') station3 = MonitoringStation(station_id='test_station_id_3', measure_id='test_measure_id_3', label='Test Station 3', coord=(1., 1.), typical_range=(0., 1.), river='test_river_3', town='test_town_3') station1.latest_level = 0.5 station2.latest_level = 0.6 station3.latest_level = 0.7 stations = [station1, station2, station3] assert stations_level_over_threshold(stations, 0.5) == [(station3, 0.7), (station2, 0.6)]
def test_relative_water_level(): s1 = MonitoringStation("station_1", "measure_id", "station_1", (-2.0, 4.0), None, "river", "town") s2 = MonitoringStation("station_2", "measure_id", "station_2", (-2.0, 4.0), (1.0, 2.0), "river", "town") s3 = MonitoringStation("station_3", "measure_id", "station_3", (-2.0, 4.0), (1.0, 2.0), "river", "town") s1.latest_level = None s2.latest_level = 1.0 s3.latest_level = 4.0 #print(s2.typical_range) #print(s2.relative_water_level()) assert s1.relative_water_level() == None assert s2.relative_water_level() == 0 assert s3.relative_water_level() == 3
def test_stations_highest_rel_level(): stations = build_station_list() update_water_levels(stations) Aurimas = MonitoringStation(1234, 1234, "Aurimas", (1234, 1234), (0.5, 1), "Sarva", "Vilnius", 1997 - 11 - 12, 1234) Aurimas.latest_level = 3 stations.append(Aurimas) x = stations_highest_rel_level(stations, 10) assert Aurimas in x
def test_stations_level_over_threshold(): stations = build_station_list() update_water_levels(stations) Aurimas = MonitoringStation(1234, 1234, "Aurimas", (1234, 1234), (0.5, 1), "Sarva", "Vilnius", 1997 - 11 - 12, 1234) Aurimas.latest_level = 1 stations.append(Aurimas) x = stations_level_over_threshold(stations, 0.9) assert (Aurimas, 1) in x
def test_relative_water_level(): #Create station s_id = "test-s-id" m_id = "test-m-id" label = "some station" coord = (-2.0, 4.0) trange = (2, 3) river = "River X" town = "My Town" s = MonitoringStation(s_id, m_id, label, coord, trange, river, town) assert s.relative_water_level() is None s.latest_level = s.typical_range[0] assert round(s.relative_water_level()) == 0 s.latest_level = s.typical_range[1] assert round(s.relative_water_level()) == 1
def test_relative_water_level(): s_id = "test-s-id" m_id = "test-m-id" label = "some station" coord = (-2.0, 4.0) river = "River X" town = "My Town" trange1 = (3, 1) s1 = MonitoringStation(s_id, m_id, label, coord, trange1, river, town) s1.latest_level = 1 assert s1.relative_water_level() is None trange2 = (1, 3) s2 = MonitoringStation(s_id, m_id, label, coord, trange2, river, town) s2.latest_level = 1.4 expected_relative_water_level = 0.2 actual_relative_water_level = round(s2.relative_water_level(), 2) assert expected_relative_water_level == actual_relative_water_level
def test_stations_highest_rel_level(): s1 = MonitoringStation("station_1", "measure_id", "station_1", (-2.0, 4.0), (0.0, 1.0), "river", "town") s2 = MonitoringStation("station_2", "measure_id", "station_2", (-2.0, 4.0), (0.0, 1.0), "river", "town") s3 = MonitoringStation("station_3", "measure_id", "station_3", (-2.0, 4.0), (0.0, 1.0), "river", "town") s4 = MonitoringStation("station_4", "measure_id", "station_4", (-2.0, 4.0), (0.0, 1.0), "river", "town") s1.latest_level = 3.0 s2.latest_level = 1.0 s3.latest_level = 4.0 s4.latest_level = 2.0 stations = [s1, s2, s3, s4] stations_at_risk = stations_highest_rel_level(stations, 4) assert stations_at_risk == [('station_3', 4.0), ('station_1', 3.0), ('station_4', 2.0), ('station_2', 1.0)]
def test_create_monitoring_station(): # Create a station s_id = "test-s-id" m_id = "test-m-id" label = "some station" coord = (-2.0, 4.0) trange = (1, 3) river = "Cam" town = "My Town" s = MonitoringStation(s_id, m_id, label, coord, trange, river, town) s.latest_level = None assert s.station_id == s_id assert s.measure_id == m_id assert s.name == label assert s.coord == coord assert s.typical_range == trange assert s.river == river assert s.town == town assert s.typical_range_consistent() == False assert s.relative_water_level() == None
def stations_highest_rel_level(self): station1 = MonitoringStation(station_id='test_station_id_1', measure_id='test_measure_id_1', label='Test Station 1', coord=(0., 1.), typical_range=(0., 1.), river='test_river_1', town='test_town_1') station2 = MonitoringStation(station_id='test_station_id_2', measure_id='test_measure_id_2', label='Test Station 2', coord=(1., 1.), typical_range=(0., 1.), river='test_river_2', town='test_town_2') station3 = MonitoringStation(station_id='test_station_id_3', measure_id='test_measure_id_3', label='Test Station 3', coord=(1., 1.), typical_range=(0., 1.), river='test_river_3', town='test_town_3') station1.latest_level = 0.5 station2.latest_level = 0.6 station3.latest_level = 0.7 stations = [station1, station2, station3] assert stations_highest_rel_level(stations, 3) == [station3, station2, station1] assert stations_highest_rel_level(stations, 2) == [station3, station2] assert stations_highest_rel_level(stations, 1) == [station3] station1.latest_level = 0.5 station2.latest_level = 0.6 station3.latest_level = 0.2 assert stations_highest_rel_level(stations, 3) == [station2, station1, station3] assert stations_highest_rel_level(stations, 2) == [station2, station1]
from floodsystem.stationdata import build_station_list from floodsystem.flood import stations_level_over_threshold from floodsystem.flood import stations_highest_rel_level from floodsystem.station import MonitoringStation s1 = MonitoringStation('Bourton Dickler', None, None, (51.874767, -1.740083), (0.068, 0.42), 'River Glen', 'Surfleet Seas End') s1.latest_level=0.42 s2 = MonitoringStation('Hello', None, None, (51.874767, -1.740083), (0.068, 0.42), 'River Glen', 'Surfleet Seas End') s2.latest_level=-7 stations= [s1,s2]