flood-adapt 0.3.9__py3-none-any.whl → 0.3.11__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.
Files changed (100) hide show
  1. flood_adapt/__init__.py +26 -22
  2. flood_adapt/adapter/__init__.py +9 -9
  3. flood_adapt/adapter/fiat_adapter.py +1541 -1541
  4. flood_adapt/adapter/interface/hazard_adapter.py +70 -70
  5. flood_adapt/adapter/interface/impact_adapter.py +36 -36
  6. flood_adapt/adapter/interface/model_adapter.py +89 -89
  7. flood_adapt/adapter/interface/offshore.py +19 -19
  8. flood_adapt/adapter/sfincs_adapter.py +1853 -1848
  9. flood_adapt/adapter/sfincs_offshore.py +187 -193
  10. flood_adapt/config/config.py +248 -248
  11. flood_adapt/config/fiat.py +219 -219
  12. flood_adapt/config/gui.py +331 -331
  13. flood_adapt/config/sfincs.py +481 -336
  14. flood_adapt/config/site.py +129 -129
  15. flood_adapt/database_builder/database_builder.py +2210 -2210
  16. flood_adapt/database_builder/templates/default_units/imperial.toml +9 -9
  17. flood_adapt/database_builder/templates/default_units/metric.toml +9 -9
  18. flood_adapt/database_builder/templates/green_infra_table/green_infra_lookup_table.csv +10 -10
  19. flood_adapt/database_builder/templates/infographics/OSM/config_charts.toml +90 -90
  20. flood_adapt/database_builder/templates/infographics/OSM/config_people.toml +57 -57
  21. flood_adapt/database_builder/templates/infographics/OSM/config_risk_charts.toml +121 -121
  22. flood_adapt/database_builder/templates/infographics/OSM/config_roads.toml +65 -65
  23. flood_adapt/database_builder/templates/infographics/OSM/styles.css +45 -45
  24. flood_adapt/database_builder/templates/infographics/US_NSI/config_charts.toml +126 -126
  25. flood_adapt/database_builder/templates/infographics/US_NSI/config_people.toml +60 -60
  26. flood_adapt/database_builder/templates/infographics/US_NSI/config_risk_charts.toml +121 -121
  27. flood_adapt/database_builder/templates/infographics/US_NSI/config_roads.toml +65 -65
  28. flood_adapt/database_builder/templates/infographics/US_NSI/styles.css +45 -45
  29. flood_adapt/database_builder/templates/infometrics/OSM/metrics_additional_risk_configs.toml +4 -4
  30. flood_adapt/database_builder/templates/infometrics/OSM/with_SVI/infographic_metrics_config.toml +143 -143
  31. flood_adapt/database_builder/templates/infometrics/OSM/with_SVI/infographic_metrics_config_risk.toml +153 -153
  32. flood_adapt/database_builder/templates/infometrics/OSM/without_SVI/infographic_metrics_config.toml +127 -127
  33. flood_adapt/database_builder/templates/infometrics/OSM/without_SVI/infographic_metrics_config_risk.toml +57 -57
  34. flood_adapt/database_builder/templates/infometrics/US_NSI/metrics_additional_risk_configs.toml +4 -4
  35. flood_adapt/database_builder/templates/infometrics/US_NSI/with_SVI/infographic_metrics_config.toml +191 -191
  36. flood_adapt/database_builder/templates/infometrics/US_NSI/with_SVI/infographic_metrics_config_risk.toml +153 -153
  37. flood_adapt/database_builder/templates/infometrics/US_NSI/without_SVI/infographic_metrics_config.toml +178 -178
  38. flood_adapt/database_builder/templates/infometrics/US_NSI/without_SVI/infographic_metrics_config_risk.toml +57 -57
  39. flood_adapt/database_builder/templates/infometrics/mandatory_metrics_config.toml +9 -9
  40. flood_adapt/database_builder/templates/infometrics/mandatory_metrics_config_risk.toml +65 -65
  41. flood_adapt/database_builder/templates/output_layers/bin_colors.toml +5 -5
  42. flood_adapt/database_builder.py +16 -16
  43. flood_adapt/dbs_classes/__init__.py +21 -21
  44. flood_adapt/dbs_classes/database.py +533 -684
  45. flood_adapt/dbs_classes/dbs_benefit.py +77 -76
  46. flood_adapt/dbs_classes/dbs_event.py +61 -59
  47. flood_adapt/dbs_classes/dbs_measure.py +112 -111
  48. flood_adapt/dbs_classes/dbs_projection.py +34 -34
  49. flood_adapt/dbs_classes/dbs_scenario.py +137 -137
  50. flood_adapt/dbs_classes/dbs_static.py +274 -273
  51. flood_adapt/dbs_classes/dbs_strategy.py +130 -129
  52. flood_adapt/dbs_classes/dbs_template.py +279 -278
  53. flood_adapt/dbs_classes/interface/database.py +107 -139
  54. flood_adapt/dbs_classes/interface/element.py +121 -121
  55. flood_adapt/dbs_classes/interface/static.py +47 -47
  56. flood_adapt/flood_adapt.py +1229 -1178
  57. flood_adapt/misc/database_user.py +16 -16
  58. flood_adapt/misc/exceptions.py +22 -0
  59. flood_adapt/misc/log.py +183 -183
  60. flood_adapt/misc/path_builder.py +54 -54
  61. flood_adapt/misc/utils.py +185 -185
  62. flood_adapt/objects/__init__.py +82 -82
  63. flood_adapt/objects/benefits/benefits.py +61 -61
  64. flood_adapt/objects/events/event_factory.py +135 -135
  65. flood_adapt/objects/events/event_set.py +88 -84
  66. flood_adapt/objects/events/events.py +236 -234
  67. flood_adapt/objects/events/historical.py +58 -58
  68. flood_adapt/objects/events/hurricane.py +68 -67
  69. flood_adapt/objects/events/synthetic.py +46 -50
  70. flood_adapt/objects/forcing/__init__.py +92 -92
  71. flood_adapt/objects/forcing/csv.py +68 -68
  72. flood_adapt/objects/forcing/discharge.py +66 -66
  73. flood_adapt/objects/forcing/forcing.py +150 -150
  74. flood_adapt/objects/forcing/forcing_factory.py +182 -182
  75. flood_adapt/objects/forcing/meteo_handler.py +93 -93
  76. flood_adapt/objects/forcing/netcdf.py +40 -40
  77. flood_adapt/objects/forcing/plotting.py +453 -429
  78. flood_adapt/objects/forcing/rainfall.py +98 -98
  79. flood_adapt/objects/forcing/tide_gauge.py +191 -191
  80. flood_adapt/objects/forcing/time_frame.py +90 -90
  81. flood_adapt/objects/forcing/timeseries.py +564 -564
  82. flood_adapt/objects/forcing/unit_system.py +580 -580
  83. flood_adapt/objects/forcing/waterlevels.py +108 -108
  84. flood_adapt/objects/forcing/wind.py +124 -124
  85. flood_adapt/objects/measures/measure_factory.py +92 -92
  86. flood_adapt/objects/measures/measures.py +551 -529
  87. flood_adapt/objects/object_model.py +74 -68
  88. flood_adapt/objects/projections/projections.py +103 -103
  89. flood_adapt/objects/scenarios/scenarios.py +22 -22
  90. flood_adapt/objects/strategies/strategies.py +89 -89
  91. flood_adapt/workflows/benefit_runner.py +579 -554
  92. flood_adapt/workflows/floodmap.py +85 -85
  93. flood_adapt/workflows/impacts_integrator.py +85 -85
  94. flood_adapt/workflows/scenario_runner.py +70 -70
  95. {flood_adapt-0.3.9.dist-info → flood_adapt-0.3.11.dist-info}/LICENSE +674 -674
  96. {flood_adapt-0.3.9.dist-info → flood_adapt-0.3.11.dist-info}/METADATA +867 -865
  97. flood_adapt-0.3.11.dist-info/RECORD +140 -0
  98. flood_adapt-0.3.9.dist-info/RECORD +0 -139
  99. {flood_adapt-0.3.9.dist-info → flood_adapt-0.3.11.dist-info}/WHEEL +0 -0
  100. {flood_adapt-0.3.9.dist-info → flood_adapt-0.3.11.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}"