flood-adapt 0.3.9__py3-none-any.whl → 0.3.10__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- flood_adapt/__init__.py +26 -22
- flood_adapt/adapter/__init__.py +9 -9
- flood_adapt/adapter/fiat_adapter.py +1541 -1541
- flood_adapt/adapter/interface/hazard_adapter.py +70 -70
- flood_adapt/adapter/interface/impact_adapter.py +36 -36
- flood_adapt/adapter/interface/model_adapter.py +89 -89
- flood_adapt/adapter/interface/offshore.py +19 -19
- flood_adapt/adapter/sfincs_adapter.py +1848 -1848
- flood_adapt/adapter/sfincs_offshore.py +193 -193
- flood_adapt/config/config.py +248 -248
- flood_adapt/config/fiat.py +219 -219
- flood_adapt/config/gui.py +331 -331
- flood_adapt/config/sfincs.py +481 -336
- flood_adapt/config/site.py +129 -129
- flood_adapt/database_builder/database_builder.py +2210 -2210
- flood_adapt/database_builder/templates/default_units/imperial.toml +9 -9
- flood_adapt/database_builder/templates/default_units/metric.toml +9 -9
- flood_adapt/database_builder/templates/green_infra_table/green_infra_lookup_table.csv +10 -10
- flood_adapt/database_builder/templates/infographics/OSM/config_charts.toml +90 -90
- flood_adapt/database_builder/templates/infographics/OSM/config_people.toml +57 -57
- flood_adapt/database_builder/templates/infographics/OSM/config_risk_charts.toml +121 -121
- flood_adapt/database_builder/templates/infographics/OSM/config_roads.toml +65 -65
- flood_adapt/database_builder/templates/infographics/OSM/styles.css +45 -45
- flood_adapt/database_builder/templates/infographics/US_NSI/config_charts.toml +126 -126
- flood_adapt/database_builder/templates/infographics/US_NSI/config_people.toml +60 -60
- flood_adapt/database_builder/templates/infographics/US_NSI/config_risk_charts.toml +121 -121
- flood_adapt/database_builder/templates/infographics/US_NSI/config_roads.toml +65 -65
- flood_adapt/database_builder/templates/infographics/US_NSI/styles.css +45 -45
- flood_adapt/database_builder/templates/infometrics/OSM/metrics_additional_risk_configs.toml +4 -4
- flood_adapt/database_builder/templates/infometrics/OSM/with_SVI/infographic_metrics_config.toml +143 -143
- flood_adapt/database_builder/templates/infometrics/OSM/with_SVI/infographic_metrics_config_risk.toml +153 -153
- flood_adapt/database_builder/templates/infometrics/OSM/without_SVI/infographic_metrics_config.toml +127 -127
- flood_adapt/database_builder/templates/infometrics/OSM/without_SVI/infographic_metrics_config_risk.toml +57 -57
- flood_adapt/database_builder/templates/infometrics/US_NSI/metrics_additional_risk_configs.toml +4 -4
- flood_adapt/database_builder/templates/infometrics/US_NSI/with_SVI/infographic_metrics_config.toml +191 -191
- flood_adapt/database_builder/templates/infometrics/US_NSI/with_SVI/infographic_metrics_config_risk.toml +153 -153
- flood_adapt/database_builder/templates/infometrics/US_NSI/without_SVI/infographic_metrics_config.toml +178 -178
- flood_adapt/database_builder/templates/infometrics/US_NSI/without_SVI/infographic_metrics_config_risk.toml +57 -57
- flood_adapt/database_builder/templates/infometrics/mandatory_metrics_config.toml +9 -9
- flood_adapt/database_builder/templates/infometrics/mandatory_metrics_config_risk.toml +65 -65
- flood_adapt/database_builder/templates/output_layers/bin_colors.toml +5 -5
- flood_adapt/database_builder.py +16 -16
- flood_adapt/dbs_classes/__init__.py +21 -21
- flood_adapt/dbs_classes/database.py +495 -684
- flood_adapt/dbs_classes/dbs_benefit.py +77 -76
- flood_adapt/dbs_classes/dbs_event.py +61 -59
- flood_adapt/dbs_classes/dbs_measure.py +112 -111
- flood_adapt/dbs_classes/dbs_projection.py +34 -34
- flood_adapt/dbs_classes/dbs_scenario.py +137 -137
- flood_adapt/dbs_classes/dbs_static.py +274 -273
- flood_adapt/dbs_classes/dbs_strategy.py +130 -129
- flood_adapt/dbs_classes/dbs_template.py +279 -278
- flood_adapt/dbs_classes/interface/database.py +107 -139
- flood_adapt/dbs_classes/interface/element.py +121 -121
- flood_adapt/dbs_classes/interface/static.py +47 -47
- flood_adapt/flood_adapt.py +1207 -1178
- flood_adapt/misc/database_user.py +16 -16
- flood_adapt/misc/exceptions.py +22 -0
- flood_adapt/misc/log.py +183 -183
- flood_adapt/misc/path_builder.py +54 -54
- flood_adapt/misc/utils.py +185 -185
- flood_adapt/objects/__init__.py +82 -82
- flood_adapt/objects/benefits/benefits.py +61 -61
- flood_adapt/objects/events/event_factory.py +135 -135
- flood_adapt/objects/events/event_set.py +88 -84
- flood_adapt/objects/events/events.py +234 -234
- flood_adapt/objects/events/historical.py +58 -58
- flood_adapt/objects/events/hurricane.py +68 -67
- flood_adapt/objects/events/synthetic.py +46 -50
- flood_adapt/objects/forcing/__init__.py +92 -92
- flood_adapt/objects/forcing/csv.py +68 -68
- flood_adapt/objects/forcing/discharge.py +66 -66
- flood_adapt/objects/forcing/forcing.py +150 -150
- flood_adapt/objects/forcing/forcing_factory.py +182 -182
- flood_adapt/objects/forcing/meteo_handler.py +93 -93
- flood_adapt/objects/forcing/netcdf.py +40 -40
- flood_adapt/objects/forcing/plotting.py +453 -429
- flood_adapt/objects/forcing/rainfall.py +98 -98
- flood_adapt/objects/forcing/tide_gauge.py +191 -191
- flood_adapt/objects/forcing/time_frame.py +90 -90
- flood_adapt/objects/forcing/timeseries.py +564 -564
- flood_adapt/objects/forcing/unit_system.py +580 -580
- flood_adapt/objects/forcing/waterlevels.py +108 -108
- flood_adapt/objects/forcing/wind.py +124 -124
- flood_adapt/objects/measures/measure_factory.py +92 -92
- flood_adapt/objects/measures/measures.py +529 -529
- flood_adapt/objects/object_model.py +74 -68
- flood_adapt/objects/projections/projections.py +103 -103
- flood_adapt/objects/scenarios/scenarios.py +22 -22
- flood_adapt/objects/strategies/strategies.py +89 -89
- flood_adapt/workflows/benefit_runner.py +579 -554
- flood_adapt/workflows/floodmap.py +85 -85
- flood_adapt/workflows/impacts_integrator.py +85 -85
- flood_adapt/workflows/scenario_runner.py +70 -70
- {flood_adapt-0.3.9.dist-info → flood_adapt-0.3.10.dist-info}/LICENSE +674 -674
- {flood_adapt-0.3.9.dist-info → flood_adapt-0.3.10.dist-info}/METADATA +866 -865
- flood_adapt-0.3.10.dist-info/RECORD +140 -0
- flood_adapt-0.3.9.dist-info/RECORD +0 -139
- {flood_adapt-0.3.9.dist-info → flood_adapt-0.3.10.dist-info}/WHEEL +0 -0
- {flood_adapt-0.3.9.dist-info → flood_adapt-0.3.10.dist-info}/top_level.txt +0 -0
|
@@ -1,90 +1,90 @@
|
|
|
1
|
-
from datetime import datetime, timedelta
|
|
2
|
-
|
|
3
|
-
from pydantic import (
|
|
4
|
-
BaseModel,
|
|
5
|
-
field_validator,
|
|
6
|
-
model_validator,
|
|
7
|
-
)
|
|
8
|
-
|
|
9
|
-
from flood_adapt.objects.forcing import unit_system as us
|
|
10
|
-
|
|
11
|
-
REFERENCE_TIME = datetime(year=2021, month=1, day=1, hour=0, minute=0, second=0)
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class TimeFrame(BaseModel):
|
|
15
|
-
"""
|
|
16
|
-
Class representing a time frame for a simulation.
|
|
17
|
-
|
|
18
|
-
Attributes
|
|
19
|
-
----------
|
|
20
|
-
start_time : datetime
|
|
21
|
-
The start time of the simulation.
|
|
22
|
-
end_time : datetime
|
|
23
|
-
The end time of the simulation.
|
|
24
|
-
time_step : timedelta
|
|
25
|
-
The time step of the simulation. Default is calculated as 1/1000 of the duration.
|
|
26
|
-
"""
|
|
27
|
-
|
|
28
|
-
start_time: datetime = REFERENCE_TIME
|
|
29
|
-
end_time: datetime = REFERENCE_TIME + timedelta(days=1)
|
|
30
|
-
|
|
31
|
-
@property
|
|
32
|
-
def time_step(self) -> timedelta:
|
|
33
|
-
return self._time_step
|
|
34
|
-
|
|
35
|
-
@field_validator("start_time", "end_time", mode="before")
|
|
36
|
-
@classmethod
|
|
37
|
-
def try_parse_datetime(cls, value: str | datetime) -> datetime:
|
|
38
|
-
SUPPORTED_DATETIME_FORMATS = [
|
|
39
|
-
"%Y%m%d %H%M%S",
|
|
40
|
-
"%Y-%m-%d %H:%M:%S",
|
|
41
|
-
"%Y-%m-%d %H:%M:%S.%f",
|
|
42
|
-
"%Y-%m-%d %H:%M:%S.%f%z",
|
|
43
|
-
]
|
|
44
|
-
if not isinstance(value, datetime):
|
|
45
|
-
for fmt in SUPPORTED_DATETIME_FORMATS:
|
|
46
|
-
try:
|
|
47
|
-
value = datetime.strptime(value, fmt)
|
|
48
|
-
break
|
|
49
|
-
except Exception:
|
|
50
|
-
pass
|
|
51
|
-
|
|
52
|
-
if not isinstance(value, datetime):
|
|
53
|
-
raise ValueError(
|
|
54
|
-
f"Could not parse start time: {value}. Supported formats are {', '.join(SUPPORTED_DATETIME_FORMATS)}"
|
|
55
|
-
)
|
|
56
|
-
return value
|
|
57
|
-
|
|
58
|
-
@model_validator(mode="after")
|
|
59
|
-
def start_time_before_end_time(self):
|
|
60
|
-
if self.start_time >= self.end_time:
|
|
61
|
-
raise ValueError(
|
|
62
|
-
f"Start time: {self.start_time} must be before end time: {self.end_time}"
|
|
63
|
-
)
|
|
64
|
-
return self
|
|
65
|
-
|
|
66
|
-
@model_validator(mode="after")
|
|
67
|
-
def dynamic_timestep(self):
|
|
68
|
-
num_intervals = 1000
|
|
69
|
-
time_span = (self.end_time - self.start_time).total_seconds()
|
|
70
|
-
|
|
71
|
-
# Round the time step to the second for simplicity
|
|
72
|
-
self._time_step = timedelta(
|
|
73
|
-
seconds=int(timedelta(seconds=time_span / num_intervals).total_seconds())
|
|
74
|
-
)
|
|
75
|
-
return self
|
|
76
|
-
|
|
77
|
-
@property
|
|
78
|
-
def duration(self) -> timedelta:
|
|
79
|
-
return self.end_time - self.start_time
|
|
80
|
-
|
|
81
|
-
def duration_as_unitfultime(
|
|
82
|
-
self, unit: us.UnitTypesTime = us.UnitTypesTime.hours
|
|
83
|
-
) -> us.UnitfulTime:
|
|
84
|
-
return us.UnitfulTime(
|
|
85
|
-
value=(self.duration).total_seconds(),
|
|
86
|
-
units=us.UnitTypesTime.seconds,
|
|
87
|
-
).transform(unit)
|
|
88
|
-
|
|
89
|
-
def __str__(self) -> str:
|
|
90
|
-
return f"{self.start_time} - {self.end_time}"
|
|
1
|
+
from datetime import datetime, timedelta
|
|
2
|
+
|
|
3
|
+
from pydantic import (
|
|
4
|
+
BaseModel,
|
|
5
|
+
field_validator,
|
|
6
|
+
model_validator,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
from flood_adapt.objects.forcing import unit_system as us
|
|
10
|
+
|
|
11
|
+
REFERENCE_TIME = datetime(year=2021, month=1, day=1, hour=0, minute=0, second=0)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class TimeFrame(BaseModel):
|
|
15
|
+
"""
|
|
16
|
+
Class representing a time frame for a simulation.
|
|
17
|
+
|
|
18
|
+
Attributes
|
|
19
|
+
----------
|
|
20
|
+
start_time : datetime
|
|
21
|
+
The start time of the simulation.
|
|
22
|
+
end_time : datetime
|
|
23
|
+
The end time of the simulation.
|
|
24
|
+
time_step : timedelta
|
|
25
|
+
The time step of the simulation. Default is calculated as 1/1000 of the duration.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
start_time: datetime = REFERENCE_TIME
|
|
29
|
+
end_time: datetime = REFERENCE_TIME + timedelta(days=1)
|
|
30
|
+
|
|
31
|
+
@property
|
|
32
|
+
def time_step(self) -> timedelta:
|
|
33
|
+
return self._time_step
|
|
34
|
+
|
|
35
|
+
@field_validator("start_time", "end_time", mode="before")
|
|
36
|
+
@classmethod
|
|
37
|
+
def try_parse_datetime(cls, value: str | datetime) -> datetime:
|
|
38
|
+
SUPPORTED_DATETIME_FORMATS = [
|
|
39
|
+
"%Y%m%d %H%M%S",
|
|
40
|
+
"%Y-%m-%d %H:%M:%S",
|
|
41
|
+
"%Y-%m-%d %H:%M:%S.%f",
|
|
42
|
+
"%Y-%m-%d %H:%M:%S.%f%z",
|
|
43
|
+
]
|
|
44
|
+
if not isinstance(value, datetime):
|
|
45
|
+
for fmt in SUPPORTED_DATETIME_FORMATS:
|
|
46
|
+
try:
|
|
47
|
+
value = datetime.strptime(value, fmt)
|
|
48
|
+
break
|
|
49
|
+
except Exception:
|
|
50
|
+
pass
|
|
51
|
+
|
|
52
|
+
if not isinstance(value, datetime):
|
|
53
|
+
raise ValueError(
|
|
54
|
+
f"Could not parse start time: {value}. Supported formats are {', '.join(SUPPORTED_DATETIME_FORMATS)}"
|
|
55
|
+
)
|
|
56
|
+
return value
|
|
57
|
+
|
|
58
|
+
@model_validator(mode="after")
|
|
59
|
+
def start_time_before_end_time(self):
|
|
60
|
+
if self.start_time >= self.end_time:
|
|
61
|
+
raise ValueError(
|
|
62
|
+
f"Start time: {self.start_time} must be before end time: {self.end_time}"
|
|
63
|
+
)
|
|
64
|
+
return self
|
|
65
|
+
|
|
66
|
+
@model_validator(mode="after")
|
|
67
|
+
def dynamic_timestep(self):
|
|
68
|
+
num_intervals = 1000
|
|
69
|
+
time_span = (self.end_time - self.start_time).total_seconds()
|
|
70
|
+
|
|
71
|
+
# Round the time step to the second for simplicity
|
|
72
|
+
self._time_step = timedelta(
|
|
73
|
+
seconds=int(timedelta(seconds=time_span / num_intervals).total_seconds())
|
|
74
|
+
)
|
|
75
|
+
return self
|
|
76
|
+
|
|
77
|
+
@property
|
|
78
|
+
def duration(self) -> timedelta:
|
|
79
|
+
return self.end_time - self.start_time
|
|
80
|
+
|
|
81
|
+
def duration_as_unitfultime(
|
|
82
|
+
self, unit: us.UnitTypesTime = us.UnitTypesTime.hours
|
|
83
|
+
) -> us.UnitfulTime:
|
|
84
|
+
return us.UnitfulTime(
|
|
85
|
+
value=(self.duration).total_seconds(),
|
|
86
|
+
units=us.UnitTypesTime.seconds,
|
|
87
|
+
).transform(unit)
|
|
88
|
+
|
|
89
|
+
def __str__(self) -> str:
|
|
90
|
+
return f"{self.start_time} - {self.end_time}"
|