flood-adapt 0.3.10__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.
- flood_adapt/__init__.py +1 -1
- flood_adapt/adapter/sfincs_adapter.py +28 -23
- flood_adapt/adapter/sfincs_offshore.py +1 -7
- flood_adapt/dbs_classes/database.py +38 -0
- flood_adapt/flood_adapt.py +23 -1
- flood_adapt/objects/events/events.py +5 -3
- flood_adapt/objects/measures/measures.py +88 -66
- {flood_adapt-0.3.10.dist-info → flood_adapt-0.3.11.dist-info}/METADATA +2 -1
- {flood_adapt-0.3.10.dist-info → flood_adapt-0.3.11.dist-info}/RECORD +12 -12
- {flood_adapt-0.3.10.dist-info → flood_adapt-0.3.11.dist-info}/LICENSE +0 -0
- {flood_adapt-0.3.10.dist-info → flood_adapt-0.3.11.dist-info}/WHEEL +0 -0
- {flood_adapt-0.3.10.dist-info → flood_adapt-0.3.11.dist-info}/top_level.txt +0 -0
flood_adapt/__init__.py
CHANGED
|
@@ -35,8 +35,8 @@ from flood_adapt.misc.path_builder import (
|
|
|
35
35
|
from flood_adapt.misc.utils import cd, resolve_filepath
|
|
36
36
|
from flood_adapt.objects.events.event_set import EventSet
|
|
37
37
|
from flood_adapt.objects.events.events import Event, Mode, Template
|
|
38
|
-
from flood_adapt.objects.events.historical import HistoricalEvent
|
|
39
38
|
from flood_adapt.objects.events.hurricane import TranslationModel
|
|
39
|
+
from flood_adapt.objects.events.synthetic import SyntheticEvent
|
|
40
40
|
from flood_adapt.objects.forcing import unit_system as us
|
|
41
41
|
from flood_adapt.objects.forcing.discharge import (
|
|
42
42
|
DischargeConstant,
|
|
@@ -885,9 +885,11 @@ class SfincsAdapter(IHazardAdapter):
|
|
|
885
885
|
self.preprocess(scenario, event)
|
|
886
886
|
self.process(scenario, event)
|
|
887
887
|
self.postprocess(scenario, event)
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
888
|
+
|
|
889
|
+
if not self.settings.config.save_simulation:
|
|
890
|
+
shutil.rmtree(
|
|
891
|
+
self._get_simulation_path(scenario, sub_event=event), ignore_errors=True
|
|
892
|
+
)
|
|
891
893
|
|
|
892
894
|
def _run_risk_scenario(self, scenario: Scenario):
|
|
893
895
|
"""Run the whole workflow for a risk scenario.
|
|
@@ -911,11 +913,12 @@ class SfincsAdapter(IHazardAdapter):
|
|
|
911
913
|
self.calculate_rp_floodmaps(scenario)
|
|
912
914
|
|
|
913
915
|
# Cleanup
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
916
|
+
if not self.settings.config.save_simulation:
|
|
917
|
+
for i, sub_event in enumerate(event_set._events):
|
|
918
|
+
shutil.rmtree(
|
|
919
|
+
self._get_simulation_path(scenario, sub_event=sub_event),
|
|
920
|
+
ignore_errors=True,
|
|
921
|
+
)
|
|
919
922
|
|
|
920
923
|
def _ensure_no_existing_forcings(self):
|
|
921
924
|
"""Check for existing forcings in the model and raise an error if any are found."""
|
|
@@ -1819,8 +1822,7 @@ class SfincsAdapter(IHazardAdapter):
|
|
|
1819
1822
|
def _add_tide_gauge_plot(
|
|
1820
1823
|
self, fig, event: Event, units: us.UnitTypesLength
|
|
1821
1824
|
) -> None:
|
|
1822
|
-
|
|
1823
|
-
if not isinstance(event, HistoricalEvent):
|
|
1825
|
+
if isinstance(event, SyntheticEvent):
|
|
1824
1826
|
return
|
|
1825
1827
|
if self.settings.tide_gauge is None:
|
|
1826
1828
|
return
|
|
@@ -1832,17 +1834,20 @@ class SfincsAdapter(IHazardAdapter):
|
|
|
1832
1834
|
units=us.UnitTypesLength(units),
|
|
1833
1835
|
)
|
|
1834
1836
|
|
|
1835
|
-
if df_gauge is
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
)
|
|
1837
|
+
if df_gauge is None:
|
|
1838
|
+
self.logger.warning(
|
|
1839
|
+
"No water level data available for the tide gauge. Could not add it to the plot."
|
|
1840
|
+
)
|
|
1841
|
+
return
|
|
1839
1842
|
|
|
1840
|
-
|
|
1843
|
+
gauge_reference_height = self.settings.water_level.get_datum(
|
|
1844
|
+
self.settings.tide_gauge.reference
|
|
1845
|
+
).height.convert(units)
|
|
1841
1846
|
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1847
|
+
waterlevel = df_gauge.iloc[:, 0] + gauge_reference_height
|
|
1848
|
+
|
|
1849
|
+
# If data is available, add to plot
|
|
1850
|
+
fig.add_trace(px.line(waterlevel, color_discrete_sequence=["#ea6404"]).data[0])
|
|
1851
|
+
fig["data"][0]["name"] = "model"
|
|
1852
|
+
fig["data"][1]["name"] = "measurement"
|
|
1853
|
+
fig.update_layout(showlegend=True)
|
|
@@ -97,14 +97,8 @@ class OffshoreSfincsHandler(IOffshoreSfincsHandler, DatabaseUser):
|
|
|
97
97
|
# SfincsAdapter.write() doesnt write the bca file apparently so we need to copy the template
|
|
98
98
|
if sim_path.exists():
|
|
99
99
|
shutil.rmtree(sim_path)
|
|
100
|
-
shutil.copytree(self.template_path, sim_path)
|
|
101
100
|
|
|
102
|
-
with SfincsAdapter(model_root=
|
|
103
|
-
if _offshore_model.sfincs_completed(sim_path):
|
|
104
|
-
_offshore_model.logger.info(
|
|
105
|
-
f"Skip preprocessing offshore model as it has already been run for `{self.scenario.name}`."
|
|
106
|
-
)
|
|
107
|
-
return
|
|
101
|
+
with SfincsAdapter(model_root=self.template_path) as _offshore_model:
|
|
108
102
|
# Load objects, set root & write template model
|
|
109
103
|
_offshore_model._load_scenario_objects(self.scenario, self.event)
|
|
110
104
|
_offshore_model.write(path_out=sim_path)
|
|
@@ -285,6 +285,44 @@ class Database(IDatabase):
|
|
|
285
285
|
zsmax = ds["risk_map"][:, :].to_numpy().T
|
|
286
286
|
return zsmax
|
|
287
287
|
|
|
288
|
+
def get_flood_map_geotiff(
|
|
289
|
+
self,
|
|
290
|
+
scenario_name: str,
|
|
291
|
+
return_period: Optional[int] = None,
|
|
292
|
+
) -> Optional[Path]:
|
|
293
|
+
"""Return the path to the geotiff file with the flood map for the given scenario.
|
|
294
|
+
|
|
295
|
+
Parameters
|
|
296
|
+
----------
|
|
297
|
+
scenario_name : str
|
|
298
|
+
name of scenario
|
|
299
|
+
return_period : int, optional
|
|
300
|
+
return period in years, by default None. Only for risk scenarios.
|
|
301
|
+
|
|
302
|
+
Returns
|
|
303
|
+
-------
|
|
304
|
+
Optional[Path]
|
|
305
|
+
path to the flood map geotiff file, or None if it does not exist
|
|
306
|
+
"""
|
|
307
|
+
if not return_period:
|
|
308
|
+
file_path = self.scenarios.output_path.joinpath(
|
|
309
|
+
scenario_name,
|
|
310
|
+
"Flooding",
|
|
311
|
+
f"FloodMap_{scenario_name}.tif",
|
|
312
|
+
)
|
|
313
|
+
else:
|
|
314
|
+
file_path = self.scenarios.output_path.joinpath(
|
|
315
|
+
scenario_name,
|
|
316
|
+
"Flooding",
|
|
317
|
+
f"RP_{return_period:04d}_maps.tif",
|
|
318
|
+
)
|
|
319
|
+
if not file_path.is_file():
|
|
320
|
+
self.logger.warning(
|
|
321
|
+
f"Flood map for scenario '{scenario_name}' at {file_path} does not exist."
|
|
322
|
+
)
|
|
323
|
+
return None
|
|
324
|
+
return file_path
|
|
325
|
+
|
|
288
326
|
def get_building_footprints(self, scenario_name: str) -> GeoDataFrame:
|
|
289
327
|
"""Return a geodataframe of the impacts at the footprint level.
|
|
290
328
|
|
flood_adapt/flood_adapt.py
CHANGED
|
@@ -770,7 +770,9 @@ class FloodAdapt:
|
|
|
770
770
|
"""
|
|
771
771
|
return self.database.get_depth_conversion()
|
|
772
772
|
|
|
773
|
-
def get_max_water_level_map(
|
|
773
|
+
def get_max_water_level_map(
|
|
774
|
+
self, name: str, rp: Optional[int] = None
|
|
775
|
+
) -> np.ndarray:
|
|
774
776
|
"""
|
|
775
777
|
Return the maximum water level for the given scenario.
|
|
776
778
|
|
|
@@ -788,6 +790,26 @@ class FloodAdapt:
|
|
|
788
790
|
"""
|
|
789
791
|
return self.database.get_max_water_level(name, rp)
|
|
790
792
|
|
|
793
|
+
def get_flood_map_geotiff(
|
|
794
|
+
self, name: str, rp: Optional[int] = None
|
|
795
|
+
) -> Optional[Path]:
|
|
796
|
+
"""
|
|
797
|
+
Return the path to the geotiff file with the flood map for the given scenario.
|
|
798
|
+
|
|
799
|
+
Parameters
|
|
800
|
+
----------
|
|
801
|
+
name : str
|
|
802
|
+
The name of the scenario.
|
|
803
|
+
rp : int, optional
|
|
804
|
+
The return period of the water level, by default None. Only for event set scenarios.
|
|
805
|
+
|
|
806
|
+
Returns
|
|
807
|
+
-------
|
|
808
|
+
flood_map_geotiff : Optional[Path]
|
|
809
|
+
The path to the geotiff file with the flood map for the scenario if it exists, otherwise None.
|
|
810
|
+
"""
|
|
811
|
+
return self.database.get_flood_map_geotiff(name, rp)
|
|
812
|
+
|
|
791
813
|
def get_building_footprint_impacts(self, name: str) -> gpd.GeoDataFrame:
|
|
792
814
|
"""
|
|
793
815
|
Return a geodataframe of the impacts at the footprint level.
|
|
@@ -53,11 +53,13 @@ class Template(str, Enum):
|
|
|
53
53
|
def description(self) -> str:
|
|
54
54
|
match self:
|
|
55
55
|
case Template.Historical:
|
|
56
|
-
return "Select
|
|
56
|
+
return "Select and optionally modify a real event by specifying a past time period."
|
|
57
57
|
case Template.Hurricane:
|
|
58
|
-
return
|
|
58
|
+
return (
|
|
59
|
+
"Select a historical hurricane track from the hurricane database."
|
|
60
|
+
)
|
|
59
61
|
case Template.Synthetic:
|
|
60
|
-
return "
|
|
62
|
+
return "Build a custom event by specifying wind, water levels, rainfall, and discharge."
|
|
61
63
|
case _:
|
|
62
64
|
raise ValueError(f"Invalid event template: {self}")
|
|
63
65
|
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import os
|
|
2
2
|
from enum import Enum
|
|
3
3
|
from pathlib import Path
|
|
4
|
-
from typing import Any, Optional
|
|
4
|
+
from typing import Any, Optional, Type, TypeVar
|
|
5
5
|
|
|
6
6
|
import geopandas as gpd
|
|
7
7
|
import pyproj
|
|
8
|
-
|
|
8
|
+
import tomli
|
|
9
|
+
from pydantic import Field, field_serializer, field_validator, model_validator
|
|
9
10
|
|
|
10
11
|
from flood_adapt.config.site import Site
|
|
11
12
|
from flood_adapt.misc.utils import resolve_filepath, save_file_to_database
|
|
@@ -107,6 +108,9 @@ class SelectionType(str, Enum):
|
|
|
107
108
|
all = "all"
|
|
108
109
|
|
|
109
110
|
|
|
111
|
+
T = TypeVar("T", bound="Measure")
|
|
112
|
+
|
|
113
|
+
|
|
110
114
|
class Measure(Object):
|
|
111
115
|
"""The expected variables and data types of attributes common to all measures.
|
|
112
116
|
|
|
@@ -120,9 +124,91 @@ class Measure(Object):
|
|
|
120
124
|
Description of the measure.
|
|
121
125
|
type: MeasureType
|
|
122
126
|
Type of measure. Should be one of the MeasureType enum values.
|
|
127
|
+
selection_type: SelectionType
|
|
128
|
+
Type of selection. Should be one of the SelectionType enum values.
|
|
129
|
+
polygon_file: str, Optional
|
|
130
|
+
Path to a polygon file, either absolute or relative to the measure's toml path in the database.
|
|
131
|
+
aggregation_area_name: str, Optional
|
|
132
|
+
Name of the aggregation area. Required if `selection_type` is 'aggregation_area'.
|
|
133
|
+
aggregation_area_type: str, Optional
|
|
134
|
+
Type of aggregation area. Required if `selection_type` is 'aggregation_area'.
|
|
123
135
|
"""
|
|
124
136
|
|
|
125
137
|
type: MeasureType
|
|
138
|
+
selection_type: SelectionType
|
|
139
|
+
|
|
140
|
+
polygon_file: Optional[str] = Field(
|
|
141
|
+
default=None,
|
|
142
|
+
min_length=1,
|
|
143
|
+
description="Path to a polygon file, either absolute or relative to the measure path.",
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
aggregation_area_type: Optional[str] = None
|
|
147
|
+
aggregation_area_name: Optional[str] = None
|
|
148
|
+
|
|
149
|
+
@model_validator(mode="after")
|
|
150
|
+
def validate_selection_type(self) -> "Measure":
|
|
151
|
+
match self.selection_type:
|
|
152
|
+
case SelectionType.all:
|
|
153
|
+
pass
|
|
154
|
+
case SelectionType.polygon | SelectionType.polyline:
|
|
155
|
+
if not self.polygon_file:
|
|
156
|
+
raise ValueError(
|
|
157
|
+
"If `selection_type` is 'polygon' or 'polyline', then `polygon_file` needs to be set."
|
|
158
|
+
)
|
|
159
|
+
case SelectionType.aggregation_area:
|
|
160
|
+
if not self.aggregation_area_name:
|
|
161
|
+
raise ValueError(
|
|
162
|
+
"If `selection_type` is 'aggregation_area', then `aggregation_area_name` needs to be set."
|
|
163
|
+
)
|
|
164
|
+
if not self.aggregation_area_type:
|
|
165
|
+
raise ValueError(
|
|
166
|
+
"If `selection_type` is 'aggregation_area', then `aggregation_area_type` needs to be set."
|
|
167
|
+
)
|
|
168
|
+
case _:
|
|
169
|
+
raise ValueError(
|
|
170
|
+
f"Invalid selection type: {self.selection_type}. "
|
|
171
|
+
"Must be one of 'aggregation_area', 'polygon', 'polyline', or 'all'."
|
|
172
|
+
)
|
|
173
|
+
return self
|
|
174
|
+
|
|
175
|
+
@field_serializer("polygon_file")
|
|
176
|
+
def serialize_polygon_file(self, value: Optional[str]) -> Optional[str]:
|
|
177
|
+
"""Serialize the polygon_file attribute to a string of only the file name."""
|
|
178
|
+
if value is None:
|
|
179
|
+
return None
|
|
180
|
+
return Path(value).name
|
|
181
|
+
|
|
182
|
+
@classmethod
|
|
183
|
+
def load_file(cls: Type[T], file_path: Path | str | os.PathLike) -> T:
|
|
184
|
+
"""Load the measure from a file.
|
|
185
|
+
|
|
186
|
+
Parameters
|
|
187
|
+
----------
|
|
188
|
+
filepath : Path | str | os.PathLike
|
|
189
|
+
Path to the file to load the measure from.
|
|
190
|
+
|
|
191
|
+
Returns
|
|
192
|
+
-------
|
|
193
|
+
Measure
|
|
194
|
+
The loaded measure object.
|
|
195
|
+
"""
|
|
196
|
+
with open(file_path, mode="rb") as fp:
|
|
197
|
+
toml = tomli.load(fp)
|
|
198
|
+
measure = cls.model_validate(toml)
|
|
199
|
+
|
|
200
|
+
if measure.polygon_file:
|
|
201
|
+
measure.polygon_file = str(Path(file_path).parent / measure.polygon_file)
|
|
202
|
+
|
|
203
|
+
return measure
|
|
204
|
+
|
|
205
|
+
def save_additional(self, output_dir: Path | str | os.PathLike) -> None:
|
|
206
|
+
if self.polygon_file:
|
|
207
|
+
Path(output_dir).mkdir(parents=True, exist_ok=True)
|
|
208
|
+
src_path = resolve_filepath("measures", self.name, self.polygon_file)
|
|
209
|
+
path = save_file_to_database(src_path, Path(output_dir))
|
|
210
|
+
# Update the shapefile path in the object so it is saved in the toml file as well
|
|
211
|
+
self.polygon_file = path.name
|
|
126
212
|
|
|
127
213
|
|
|
128
214
|
class HazardMeasure(Measure):
|
|
@@ -143,39 +229,12 @@ class HazardMeasure(Measure):
|
|
|
143
229
|
|
|
144
230
|
"""
|
|
145
231
|
|
|
146
|
-
selection_type: SelectionType
|
|
147
|
-
polygon_file: Optional[str] = Field(
|
|
148
|
-
default=None,
|
|
149
|
-
min_length=1,
|
|
150
|
-
description="Path to a polygon file, either absolute or relative to the measure path.",
|
|
151
|
-
)
|
|
152
|
-
|
|
153
232
|
@field_validator("type")
|
|
154
233
|
def validate_type(cls, value):
|
|
155
234
|
if not MeasureType.is_hazard(value):
|
|
156
235
|
raise ValueError(f"Invalid hazard type: {value}")
|
|
157
236
|
return value
|
|
158
237
|
|
|
159
|
-
@model_validator(mode="after")
|
|
160
|
-
def validate_selection_type(self) -> "HazardMeasure":
|
|
161
|
-
if (
|
|
162
|
-
self.selection_type
|
|
163
|
-
not in [SelectionType.aggregation_area, SelectionType.all]
|
|
164
|
-
and self.polygon_file is None
|
|
165
|
-
):
|
|
166
|
-
raise ValueError(
|
|
167
|
-
"If `selection_type` is not 'aggregation_area' or 'all', then `polygon_file` needs to be set."
|
|
168
|
-
)
|
|
169
|
-
return self
|
|
170
|
-
|
|
171
|
-
def save_additional(self, output_dir: Path | str | os.PathLike) -> None:
|
|
172
|
-
if self.polygon_file:
|
|
173
|
-
Path(output_dir).mkdir(parents=True, exist_ok=True)
|
|
174
|
-
src_path = resolve_filepath("measures", self.name, self.polygon_file)
|
|
175
|
-
path = save_file_to_database(src_path, Path(output_dir))
|
|
176
|
-
# Update the shapefile path in the object so it is saved in the toml file as well
|
|
177
|
-
self.polygon_file = path.name
|
|
178
|
-
|
|
179
238
|
|
|
180
239
|
class ImpactMeasure(Measure):
|
|
181
240
|
"""The expected variables and data types of attributes common to all impact measures.
|
|
@@ -200,15 +259,6 @@ class ImpactMeasure(Measure):
|
|
|
200
259
|
Name of the aggregation area.
|
|
201
260
|
"""
|
|
202
261
|
|
|
203
|
-
type: MeasureType
|
|
204
|
-
selection_type: SelectionType
|
|
205
|
-
aggregation_area_type: Optional[str] = None
|
|
206
|
-
aggregation_area_name: Optional[str] = None
|
|
207
|
-
polygon_file: Optional[str] = Field(
|
|
208
|
-
default=None,
|
|
209
|
-
min_length=1,
|
|
210
|
-
description="Path to a polygon file, relative to the database path.",
|
|
211
|
-
)
|
|
212
262
|
property_type: str # TODO make enum
|
|
213
263
|
|
|
214
264
|
@field_validator("type")
|
|
@@ -217,34 +267,6 @@ class ImpactMeasure(Measure):
|
|
|
217
267
|
raise ValueError(f"Invalid impact type: {value}")
|
|
218
268
|
return value
|
|
219
269
|
|
|
220
|
-
@model_validator(mode="after")
|
|
221
|
-
def validate_aggregation_area_name(self):
|
|
222
|
-
if (
|
|
223
|
-
self.selection_type == SelectionType.aggregation_area
|
|
224
|
-
and self.aggregation_area_name is None
|
|
225
|
-
):
|
|
226
|
-
raise ValueError(
|
|
227
|
-
"If `selection_type` is 'aggregation_area', then `aggregation_area_name` needs to be set."
|
|
228
|
-
)
|
|
229
|
-
return self
|
|
230
|
-
|
|
231
|
-
@model_validator(mode="after")
|
|
232
|
-
def validate_polygon_file(self):
|
|
233
|
-
if self.selection_type == SelectionType.polygon and self.polygon_file is None:
|
|
234
|
-
raise ValueError(
|
|
235
|
-
"If `selection_type` is 'polygon', then `polygon_file` needs to be set."
|
|
236
|
-
)
|
|
237
|
-
|
|
238
|
-
return self
|
|
239
|
-
|
|
240
|
-
def save_additional(self, output_dir: Path | str | os.PathLike) -> None:
|
|
241
|
-
"""Save the additional files to the database."""
|
|
242
|
-
if self.polygon_file:
|
|
243
|
-
src_path = resolve_filepath("measures", self.name, self.polygon_file)
|
|
244
|
-
path = save_file_to_database(src_path, Path(output_dir))
|
|
245
|
-
# Update the shapefile path in the object so it is saved in the toml file as well
|
|
246
|
-
self.polygon_file = path.name
|
|
247
|
-
|
|
248
270
|
|
|
249
271
|
class Elevate(ImpactMeasure):
|
|
250
272
|
"""The expected variables and data types of the "elevate" impact measure.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: flood-adapt
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.11
|
|
4
4
|
Summary: A software package support system which can be used to assess the benefits and costs of flood resilience measures
|
|
5
5
|
Author-email: Gundula Winter <Gundula.Winter@deltares.nl>, Panos Athanasiou <Panos.Athanasiou@deltares.nl>, Frederique de Groen <Frederique.deGroen@deltares.nl>, Tim de Wilde <Tim.deWilde@deltares.nl>, Julian Hofer <Julian.Hofer@deltares.nl>, Daley Adrichem <Daley.Adrichem@deltares.nl>, Luuk Blom <Luuk.Blom@deltares.nl>
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -731,6 +731,7 @@ Requires-Dist: minio<8,>=7.2.15; extra == "docs"
|
|
|
731
731
|
Requires-Dist: python-dotenv<2.0,>=1.0; extra == "docs"
|
|
732
732
|
Requires-Dist: folium<1.0,>=0.19.0; extra == "docs"
|
|
733
733
|
Requires-Dist: mapclassify<3.0,>=2.8.0; extra == "docs"
|
|
734
|
+
Requires-Dist: contextily; extra == "docs"
|
|
734
735
|
Provides-Extra: all
|
|
735
736
|
Requires-Dist: flood-adapt[build,dev,docs]; extra == "all"
|
|
736
737
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
flood_adapt/__init__.py,sha256=
|
|
1
|
+
flood_adapt/__init__.py,sha256=ddZDt6_YqcpNI59YE5LwRFDqQiHxX7abekyhUu8Lvi0,776
|
|
2
2
|
flood_adapt/database_builder.py,sha256=E0JPsPuq2PHhCzH0cp7kDEkRYG3XQBjlCaEoK0GGttc,436
|
|
3
|
-
flood_adapt/flood_adapt.py,sha256=
|
|
3
|
+
flood_adapt/flood_adapt.py,sha256=szovzFyApBeT-XPMZ-GNsWH-ap63ejouP7hZZjadMVU,38364
|
|
4
4
|
flood_adapt/adapter/__init__.py,sha256=UuiuVz5vKDoXnvBUMJ7Yybk0pjZkYLREgTA4G1Pzj8c,258
|
|
5
5
|
flood_adapt/adapter/fiat_adapter.py,sha256=hKvQa86w7Gxrg2c_hCjN-mcyASd5gLCE5eugQJ3ExYY,58781
|
|
6
|
-
flood_adapt/adapter/sfincs_adapter.py,sha256=
|
|
7
|
-
flood_adapt/adapter/sfincs_offshore.py,sha256=
|
|
6
|
+
flood_adapt/adapter/sfincs_adapter.py,sha256=8xIWnW-hHUMqtSLTl01GoE9s-MNN3zaSkLo8HBnoQZo,74880
|
|
7
|
+
flood_adapt/adapter/sfincs_offshore.py,sha256=QWJBD1ReQuVrQn3enyQeKR-YTHTQmGxzrLOjnOJkths,7486
|
|
8
8
|
flood_adapt/adapter/interface/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
9
|
flood_adapt/adapter/interface/hazard_adapter.py,sha256=S2NIUAMSRgxC_E-tZRJ2qIP06U1zEVdn-MnvMTrn86s,2828
|
|
10
10
|
flood_adapt/adapter/interface/impact_adapter.py,sha256=wWMCcKUkxISz-yN2q3CBIQj0Gm8C2gtXsMwOKajX9ik,1423
|
|
@@ -75,7 +75,7 @@ flood_adapt/database_builder/templates/infometrics/US_NSI/without_SVI/infographi
|
|
|
75
75
|
flood_adapt/database_builder/templates/infometrics/US_NSI/without_SVI/infographic_metrics_config_risk.toml,sha256=VLO7NRWTPzYRj3jYDb_mImPTppSm8Lh1ajCdNPuyc4U,2045
|
|
76
76
|
flood_adapt/database_builder/templates/output_layers/bin_colors.toml,sha256=yN3_h2IimOyjtfhZ-ZoWyNa-2cAeFRNlbvaNTLhEMfA,417
|
|
77
77
|
flood_adapt/dbs_classes/__init__.py,sha256=J-a6BEkjDhuUzzRKuAn_AtTg_D9wNIsmY3BnVTiC2JA,731
|
|
78
|
-
flood_adapt/dbs_classes/database.py,sha256=
|
|
78
|
+
flood_adapt/dbs_classes/database.py,sha256=iNf9nDm09gH9wdTO__CXmFKNr_IcHXbIscZLcDv7xQU,18390
|
|
79
79
|
flood_adapt/dbs_classes/dbs_benefit.py,sha256=DDiVeXei8GGRs95gCd3B9NxcHwcWrcsrebnpqxMjvYU,2642
|
|
80
80
|
flood_adapt/dbs_classes/dbs_event.py,sha256=LbkFbT5aHdfcSkvuHlaA1C0stEFhCjy6JiNIsbrowds,1848
|
|
81
81
|
flood_adapt/dbs_classes/dbs_measure.py,sha256=tbhLkcly_gtofOpenidOPc993BZWxZHgM09cfEb09a4,4050
|
|
@@ -100,7 +100,7 @@ flood_adapt/objects/benefits/benefits.py,sha256=1Di8v2B7YOdMkRlg0A6k6qtMqYE_JaaN
|
|
|
100
100
|
flood_adapt/objects/events/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
101
101
|
flood_adapt/objects/events/event_factory.py,sha256=CYq8itWurILPGNSDtWKWV5FF4UxjrRFiza6w2OQJEdU,4276
|
|
102
102
|
flood_adapt/objects/events/event_set.py,sha256=fpmNbrd3qXWPgyqphv_Rf2iNsZCLvwz6YEbjMV7WIXA,2810
|
|
103
|
-
flood_adapt/objects/events/events.py,sha256=
|
|
103
|
+
flood_adapt/objects/events/events.py,sha256=xuZsmew4oG2TTh7M3lRLr0z2k-T-XU2ahbi-l_uPNGY,8341
|
|
104
104
|
flood_adapt/objects/events/historical.py,sha256=rnutGsi_S3WaSKUD7nB7GzSmGUOoToPL4V_M4kCMxiE,1858
|
|
105
105
|
flood_adapt/objects/events/hurricane.py,sha256=UFbw8_DvxuY0_nEqpFfW3op6NWOApbTlN6BgwCAP_yI,2330
|
|
106
106
|
flood_adapt/objects/events/synthetic.py,sha256=Q8OHbBumeEwbrzA1imBrxiGiB92RWyigVcGVUbisSh4,1366
|
|
@@ -121,7 +121,7 @@ flood_adapt/objects/forcing/waterlevels.py,sha256=8lCmUdeyABurJwftae4_Iut9hCn24x
|
|
|
121
121
|
flood_adapt/objects/forcing/wind.py,sha256=xs_xZdUoZUDP1y1xITlNVJwiyDt6wQsFbPFhVRDjSqg,3925
|
|
122
122
|
flood_adapt/objects/measures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
123
123
|
flood_adapt/objects/measures/measure_factory.py,sha256=tPT4fSzT5buiLf3gmxtap1vrfH2HusQOWTluucFFwJ0,2728
|
|
124
|
-
flood_adapt/objects/measures/measures.py,sha256=
|
|
124
|
+
flood_adapt/objects/measures/measures.py,sha256=NPng6jSLdukq_vqxqVZyx5xa7b1kJ1SUeBQuHYhGNwo,19716
|
|
125
125
|
flood_adapt/objects/projections/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
126
126
|
flood_adapt/objects/projections/projections.py,sha256=GCbT2nAGEkiBicVrfuYsw1UYIj9BLj9v0pGnhBI7DZk,4052
|
|
127
127
|
flood_adapt/objects/scenarios/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -133,8 +133,8 @@ flood_adapt/workflows/benefit_runner.py,sha256=VtYt0sHFymNyErpzOtuN55cKJGVm5hT2a
|
|
|
133
133
|
flood_adapt/workflows/floodmap.py,sha256=8PMd9PBep4nkrOtavW_UXeLU15J7AZMk1QEonQxVNk0,3017
|
|
134
134
|
flood_adapt/workflows/impacts_integrator.py,sha256=zPJrb3Fm6gXPCmlA3vMh-2nmIwH_DWGrJGS1BUDqHLU,2495
|
|
135
135
|
flood_adapt/workflows/scenario_runner.py,sha256=o6x_p7oF0apmo6Zq-_4uBXVeL6saRJZlIX6lTCPN2Rc,2984
|
|
136
|
-
flood_adapt-0.3.
|
|
137
|
-
flood_adapt-0.3.
|
|
138
|
-
flood_adapt-0.3.
|
|
139
|
-
flood_adapt-0.3.
|
|
140
|
-
flood_adapt-0.3.
|
|
136
|
+
flood_adapt-0.3.11.dist-info/LICENSE,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
|
|
137
|
+
flood_adapt-0.3.11.dist-info/METADATA,sha256=TNhqi_1Yfw4a0axhR5x4WY4sNDNoB5Vxv9vOUPhuOvg,52578
|
|
138
|
+
flood_adapt-0.3.11.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
|
|
139
|
+
flood_adapt-0.3.11.dist-info/top_level.txt,sha256=JvzMi6cTcQPEThCfpgMEeVny3ghI1urSH0CCgVIqSzw,12
|
|
140
|
+
flood_adapt-0.3.11.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|