NREL-erad 0.1.0__py3-none-any.whl → 0.1.1__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.
- erad/constants.py +22 -1
- erad/models/__init__.py +1 -1
- erad/models/asset.py +27 -14
- erad/models/edit_store.py +22 -0
- erad/models/probability.py +4 -1
- erad/probability_builder.py +4 -1
- erad/quantities.py +7 -1
- erad/runner.py +5 -2
- erad/systems/asset_system.py +59 -11
- erad/systems/hazard_system.py +6 -6
- {nrel_erad-0.1.0.dist-info → nrel_erad-0.1.1.dist-info}/METADATA +7 -1
- {nrel_erad-0.1.0.dist-info → nrel_erad-0.1.1.dist-info}/RECORD +15 -14
- {nrel_erad-0.1.0.dist-info → nrel_erad-0.1.1.dist-info}/WHEEL +0 -0
- {nrel_erad-0.1.0.dist-info → nrel_erad-0.1.1.dist-info}/licenses/LICENSE.txt +0 -0
- {nrel_erad-0.1.0.dist-info → nrel_erad-0.1.1.dist-info}/top_level.txt +0 -0
erad/constants.py
CHANGED
@@ -6,14 +6,18 @@ _Do not change this constants in your code._
|
|
6
6
|
from datetime import datetime
|
7
7
|
from pathlib import Path
|
8
8
|
|
9
|
+
import elevation
|
10
|
+
|
9
11
|
import erad.models.fragility_curve as frag
|
10
12
|
import erad.models.probability as prob
|
11
13
|
import erad.models.hazard as hazard
|
12
14
|
import erad.models.asset as asset
|
13
15
|
|
14
|
-
|
16
|
+
from erad.enums import AssetTypes
|
15
17
|
|
18
|
+
# Get list of continuous distributions
|
16
19
|
|
20
|
+
RASTER_DOWNLOAD_PATH = Path(elevation.CACHE_DIR) / "SRTM1" / "raster.tif"
|
17
21
|
ROOT_PATH = Path(__file__).parent.parent.parent
|
18
22
|
TEST_PATH = Path(__file__).parent.parent.parent / "tests"
|
19
23
|
DATA_FOLDER_NAME = "data"
|
@@ -21,6 +25,23 @@ DATA_FOLDER = TEST_PATH / DATA_FOLDER_NAME
|
|
21
25
|
|
22
26
|
DEFAULT_TIME_STAMP = datetime(1970, 1, 1, 0, 0, 0)
|
23
27
|
|
28
|
+
DEFAULT_HEIGHTS_M = {
|
29
|
+
AssetTypes.substation: 0.0,
|
30
|
+
AssetTypes.solar_panels: 3.0,
|
31
|
+
AssetTypes.distribution_underground_cables: -1.0,
|
32
|
+
AssetTypes.transmission_underground_cables: -1.0,
|
33
|
+
AssetTypes.battery_storage: 1.0,
|
34
|
+
AssetTypes.transmission_tower: 0.0,
|
35
|
+
AssetTypes.distribution_poles: 0.0,
|
36
|
+
AssetTypes.transmission_overhead_lines: 30.0,
|
37
|
+
AssetTypes.distribution_overhead_lines: 10.0,
|
38
|
+
AssetTypes.transformer_mad_mount: 0.3,
|
39
|
+
AssetTypes.transformer_pole_mount: 6.0,
|
40
|
+
AssetTypes.transmission_junction_box: -1.0,
|
41
|
+
AssetTypes.distribution_junction_box: -1.0,
|
42
|
+
AssetTypes.switch: 6.0,
|
43
|
+
}
|
44
|
+
|
24
45
|
ASSET_TYPES = (
|
25
46
|
asset.AssetState,
|
26
47
|
asset.Asset,
|
erad/models/__init__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
|
erad/models/asset.py
CHANGED
@@ -8,7 +8,9 @@ from geopy.distance import geodesic
|
|
8
8
|
from shapely.geometry import Point
|
9
9
|
from pyhigh import get_elevation
|
10
10
|
from infrasys import Component
|
11
|
+
from loguru import logger
|
11
12
|
|
13
|
+
# from erad.constants import RASTER_DOWNLOAD_PATH
|
12
14
|
from erad.quantities import Acceleration, Speed
|
13
15
|
from erad.models.probability import (
|
14
16
|
AccelerationProbability,
|
@@ -141,15 +143,16 @@ class AssetState(Component):
|
|
141
143
|
speed=area.water_velocity,
|
142
144
|
survival_probability=1,
|
143
145
|
)
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
146
|
+
|
147
|
+
if self.flood_depth is None and self.flood_velocity is None:
|
148
|
+
self.flood_depth = DistanceProbability(
|
149
|
+
distance=Distance(-9999, "meter"),
|
150
|
+
survival_probability=1,
|
151
|
+
)
|
152
|
+
self.flood_velocity = SpeedProbability(
|
153
|
+
speed=Speed(0, "meter / second"),
|
154
|
+
survival_probability=1,
|
155
|
+
)
|
153
156
|
|
154
157
|
@computed_field
|
155
158
|
@property
|
@@ -201,16 +204,26 @@ class Asset(Component):
|
|
201
204
|
devices: list[UUID] = Field(
|
202
205
|
[], description="List of UUIDs of devices associated with the asset"
|
203
206
|
)
|
204
|
-
asset_type: AssetTypes
|
205
|
-
height: Distance = Field(...,
|
207
|
+
asset_type: AssetTypes = Field(..., description="Type of the asset")
|
208
|
+
height: Distance = Field(..., description="Height of the asset")
|
206
209
|
latitude: float = Field(..., ge=-90, le=90, description="Latitude in degrees")
|
207
210
|
longitude: float = Field(..., ge=-180, le=180, description="Longitude in degrees")
|
208
|
-
asset_state: list[AssetState]
|
211
|
+
asset_state: list[AssetState] = Field(
|
212
|
+
..., description="List of asset states associated with the asset"
|
213
|
+
)
|
214
|
+
_raster_handler: str | None = None
|
209
215
|
|
210
216
|
@computed_field
|
211
217
|
@property
|
212
218
|
def elevation(self) -> Distance:
|
213
|
-
|
219
|
+
try:
|
220
|
+
elev = Distance(get_elevation(lat=self.latitude, lon=self.longitude), "meter")
|
221
|
+
except Exception:
|
222
|
+
logger.warning(
|
223
|
+
f"Error getting elevation information for asset {self.name} with coordinates {self.latitude}, {self.longitude}. Defaulting to 999 meters"
|
224
|
+
)
|
225
|
+
elev = Distance(999, "meter")
|
226
|
+
return elev
|
214
227
|
|
215
228
|
def _get_asset_state_at_timestamp(self, timestamp: datetime) -> AssetState | None:
|
216
229
|
for asset_state in self.asset_state:
|
@@ -240,9 +253,9 @@ class Asset(Component):
|
|
240
253
|
raise (f"Unsupported hazard type {hazard_model.__class__.__name__}")
|
241
254
|
|
242
255
|
self.calculate_probabilities(asset_state, frag_curves)
|
243
|
-
|
244
256
|
if asset_state not in self.asset_state:
|
245
257
|
self.asset_state.append(asset_state)
|
258
|
+
return asset_state
|
246
259
|
|
247
260
|
def calculate_probabilities(self, asset_state: AssetState, frag_curves):
|
248
261
|
fields = [
|
@@ -0,0 +1,22 @@
|
|
1
|
+
from pathlib import Path
|
2
|
+
import json
|
3
|
+
|
4
|
+
from pydantic import BaseModel
|
5
|
+
|
6
|
+
from gdm.tracked_changes import TrackedChange
|
7
|
+
|
8
|
+
|
9
|
+
class EditStore(BaseModel):
|
10
|
+
updates: list[TrackedChange] = []
|
11
|
+
|
12
|
+
def to_json(self, filename: Path):
|
13
|
+
filename = Path(filename)
|
14
|
+
with open(filename, "w") as f:
|
15
|
+
f.write(self.model_dump_json(indent=4))
|
16
|
+
|
17
|
+
@classmethod
|
18
|
+
def from_json(cls, filename: Path):
|
19
|
+
filename = Path(filename)
|
20
|
+
with open(filename) as f:
|
21
|
+
data = json.load(f)
|
22
|
+
return EditStore(**data)
|
erad/models/probability.py
CHANGED
@@ -50,7 +50,10 @@ class TemperatureProbability(BaseProbabilityModel):
|
|
50
50
|
class DistanceProbability(BaseProbabilityModel):
|
51
51
|
distance: Annotated[
|
52
52
|
Distance,
|
53
|
-
Field(
|
53
|
+
Field(
|
54
|
+
Distance(-9999, "m"),
|
55
|
+
description="Distance of asset from the source / boundary of a disaster event",
|
56
|
+
),
|
54
57
|
]
|
55
58
|
|
56
59
|
@classmethod
|
erad/probability_builder.py
CHANGED
@@ -32,4 +32,7 @@ class ProbabilityFunctionBuilder:
|
|
32
32
|
assert isinstance(value, BaseQuantity), "Value must be a BaseQuantity"
|
33
33
|
|
34
34
|
cdf = self.dist.cdf
|
35
|
-
|
35
|
+
try:
|
36
|
+
return cdf(value.to(self.units).magnitude, *self.params)
|
37
|
+
except Exception:
|
38
|
+
return cdf(value, *self.params)
|
erad/quantities.py
CHANGED
@@ -2,7 +2,7 @@ from infrasys.base_quantity import BaseQuantity
|
|
2
2
|
|
3
3
|
|
4
4
|
class Speed(BaseQuantity):
|
5
|
-
"""Quantity representing speed"""
|
5
|
+
"""Quantity representing speed."""
|
6
6
|
|
7
7
|
__base_unit__ = "m/second"
|
8
8
|
|
@@ -14,12 +14,18 @@ class Acceleration(BaseQuantity):
|
|
14
14
|
|
15
15
|
|
16
16
|
class Temperature(BaseQuantity):
|
17
|
+
"""Quantity representing temperature."""
|
18
|
+
|
17
19
|
__base_unit__ = "degC"
|
18
20
|
|
19
21
|
|
20
22
|
class Pressure(BaseQuantity):
|
23
|
+
"""Quantity representing pressure."""
|
24
|
+
|
21
25
|
__base_unit__ = "millibar"
|
22
26
|
|
23
27
|
|
24
28
|
class Flow(BaseQuantity):
|
29
|
+
"""Quantity representing flow."""
|
30
|
+
|
25
31
|
__base_unit__ = "feet**3/second"
|
erad/runner.py
CHANGED
@@ -20,6 +20,7 @@ from erad.models.asset import Asset
|
|
20
20
|
class HarzardSimulator:
|
21
21
|
def __init__(self, asset_system: AssetSystem):
|
22
22
|
self._asset_system = asset_system
|
23
|
+
self._asset_system.auto_add_composed_components = True
|
23
24
|
self.assets: list[Asset] = list(asset_system.get_components(Asset))
|
24
25
|
|
25
26
|
@classmethod
|
@@ -61,9 +62,11 @@ class HarzardSimulator:
|
|
61
62
|
hazard_type, filter_func=lambda x: x.timestamp == timestamp
|
62
63
|
):
|
63
64
|
for asset in self.assets:
|
64
|
-
asset.update_survival_probability(
|
65
|
+
assset_state = asset.update_survival_probability(
|
65
66
|
timestamp, hazard_model, probability_models
|
66
67
|
)
|
68
|
+
if not self._asset_system.has_component(assset_state):
|
69
|
+
self._asset_system.add_component(assset_state)
|
67
70
|
|
68
71
|
|
69
72
|
class HazardScenarioGenerator:
|
@@ -73,7 +76,7 @@ class HazardScenarioGenerator:
|
|
73
76
|
hazard_system: HazardSystem,
|
74
77
|
curve_set: str = "DEFAULT_CURVES",
|
75
78
|
):
|
76
|
-
self.assets = list(asset_system.
|
79
|
+
self.assets = list(asset_system.get_components(Asset))
|
77
80
|
self.harzard_simulator = HarzardSimulator(asset_system)
|
78
81
|
self.harzard_simulator.run(hazard_system, curve_set)
|
79
82
|
|
erad/systems/asset_system.py
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
from collections import defaultdict, Counter
|
2
|
+
from pathlib import Path
|
2
3
|
|
3
4
|
from gdm.distribution.enums import PlotingStyle, MapType
|
4
5
|
from gdm.distribution import DistributionSystem
|
@@ -7,13 +8,15 @@ import gdm.distribution.components as gdc
|
|
7
8
|
from gdm.quantities import Distance
|
8
9
|
import plotly.graph_objects as go
|
9
10
|
from infrasys import System
|
11
|
+
from loguru import logger
|
10
12
|
import geopandas as gpd
|
11
13
|
import networkx as nx
|
12
14
|
import pandas as pd
|
13
15
|
import numpy as np
|
16
|
+
import elevation
|
14
17
|
|
15
18
|
|
16
|
-
from erad.constants import ASSET_TYPES, DEFAULT_TIME_STAMP
|
19
|
+
from erad.constants import ASSET_TYPES, DEFAULT_TIME_STAMP, RASTER_DOWNLOAD_PATH, DEFAULT_HEIGHTS_M
|
17
20
|
from erad.gdm_mapping import asset_to_gdm_mapping
|
18
21
|
from erad.models.asset import Asset, AssetState
|
19
22
|
from erad.enums import AssetTypes, NodeTypes
|
@@ -184,7 +187,7 @@ class AssetSystem(System):
|
|
184
187
|
connections=[],
|
185
188
|
asset_type=asset_type,
|
186
189
|
distribution_asset=component.uuid,
|
187
|
-
height=Distance(
|
190
|
+
height=Distance(DEFAULT_HEIGHTS_M[asset_type], "meter"),
|
188
191
|
latitude=lat,
|
189
192
|
longitude=long,
|
190
193
|
asset_state=[],
|
@@ -214,7 +217,7 @@ class AssetSystem(System):
|
|
214
217
|
connections=connections,
|
215
218
|
asset_type=asset_type,
|
216
219
|
distribution_asset=component.uuid,
|
217
|
-
height=Distance(
|
220
|
+
height=Distance(DEFAULT_HEIGHTS_M[asset_type], "meter"),
|
218
221
|
latitude=lat,
|
219
222
|
longitude=long,
|
220
223
|
asset_state=[],
|
@@ -232,7 +235,10 @@ class AssetSystem(System):
|
|
232
235
|
if hasattr(component, "buses"):
|
233
236
|
xs = [bus.coordinate.x for bus in component.buses]
|
234
237
|
ys = [bus.coordinate.y for bus in component.buses]
|
235
|
-
|
238
|
+
if 0 not in xs and 0 not in ys:
|
239
|
+
return (sum(xs) / len(xs), sum(ys) / len(ys))
|
240
|
+
else:
|
241
|
+
return (0, 0)
|
236
242
|
elif hasattr(component, "bus"):
|
237
243
|
return (component.bus.coordinate.x, component.bus.coordinate.y)
|
238
244
|
elif isinstance(component, gdc.DistributionBus):
|
@@ -315,7 +321,6 @@ class AssetSystem(System):
|
|
315
321
|
):
|
316
322
|
points_only = df_ts[df_ts.geometry.geom_type == "Point"]
|
317
323
|
for asset_type in set(points_only["type"]):
|
318
|
-
print("Asset type: ", asset_type)
|
319
324
|
df_filt = points_only[points_only["type"] == asset_type]
|
320
325
|
text = [
|
321
326
|
"<br>".join([f"<b>{kk}:</b> {vv}" for kk, vv in rr.to_dict().items()][:-1])
|
@@ -366,6 +371,47 @@ class AssetSystem(System):
|
|
366
371
|
fig.add_trace(trace)
|
367
372
|
return fig
|
368
373
|
|
374
|
+
def _has_zero_zero_coords(self, geom):
|
375
|
+
if geom.is_empty or geom is None:
|
376
|
+
return False
|
377
|
+
if geom.geom_type == "Point":
|
378
|
+
return geom.x == 0 and geom.y == 0
|
379
|
+
elif geom.geom_type in ["Polygon", "MultiPolygon"]:
|
380
|
+
return any(x == 0 and y == 0 for x, y in geom.exterior.coords)
|
381
|
+
elif geom.geom_type == "LineString":
|
382
|
+
return any(x == 0 and y == 0 for x, y in geom.coords)
|
383
|
+
elif geom.geom_type.startswith("Multi") or geom.geom_type == "GeometryCollection":
|
384
|
+
return any(self._has_zero_zero_coords(g) for g in geom.geoms)
|
385
|
+
return False
|
386
|
+
|
387
|
+
def get_elevation_raster(self) -> Path:
|
388
|
+
"""Download and clip elevation raster for the AssetSystem."""
|
389
|
+
if RASTER_DOWNLOAD_PATH.exists():
|
390
|
+
RASTER_DOWNLOAD_PATH.unlink()
|
391
|
+
|
392
|
+
coordinates = np.array(
|
393
|
+
[
|
394
|
+
(asset.latitude, asset.longitude)
|
395
|
+
for asset in self.get_components(Asset)
|
396
|
+
if asset.latitude and asset.latitude
|
397
|
+
]
|
398
|
+
)
|
399
|
+
|
400
|
+
if len(coordinates):
|
401
|
+
lat_min, lat_max = float(coordinates[:, 0].min()), float(coordinates[:, 0].max())
|
402
|
+
lon_min, lon_max = float(coordinates[:, 1].min()), float(coordinates[:, 1].max())
|
403
|
+
bounds = (lon_min, lat_min, lon_max, lat_max)
|
404
|
+
logger.info(f"Downloading raster file to path: {RASTER_DOWNLOAD_PATH}")
|
405
|
+
logger.info(f"Clipping raster for bounds: {bounds}")
|
406
|
+
elevation.clip(bounds=bounds, output=str(RASTER_DOWNLOAD_PATH.name))
|
407
|
+
if not RASTER_DOWNLOAD_PATH.exists():
|
408
|
+
raise FileNotFoundError(f"File path {RASTER_DOWNLOAD_PATH} does not exist")
|
409
|
+
else:
|
410
|
+
logger.info(
|
411
|
+
"No assets found in the AssetSystem, no elevation raster will be downloaded."
|
412
|
+
)
|
413
|
+
return None
|
414
|
+
|
369
415
|
def plot(
|
370
416
|
self,
|
371
417
|
show: bool = True,
|
@@ -373,20 +419,22 @@ class AssetSystem(System):
|
|
373
419
|
map_type: MapType = MapType.SCATTER_MAP,
|
374
420
|
style: PlotingStyle = PlotingStyle.CARTO_POSITRON,
|
375
421
|
zoom_level: int = 11,
|
422
|
+
figure=go.Figure(),
|
376
423
|
):
|
377
424
|
"""Plot the AssetSystem."""
|
378
425
|
plotting_object = getattr(go, map_type.value)
|
379
426
|
gdf = self.to_gdf()
|
380
427
|
gdf["timestamp"] = pd.to_datetime(gdf["timestamp"])
|
428
|
+
gdf = gdf[~gdf.geometry.apply(self._has_zero_zero_coords)]
|
381
429
|
timestamps = sorted(gdf["timestamp"].unique())
|
382
|
-
|
430
|
+
|
383
431
|
steps = []
|
384
432
|
|
385
433
|
for i, ts in enumerate(timestamps):
|
386
434
|
df_ts = gdf[gdf["timestamp"] == ts]
|
387
435
|
|
388
|
-
|
389
|
-
|
436
|
+
figure = self._add_node_traces(i, figure, df_ts, plotting_object)
|
437
|
+
figure = self._add_edge_traces(i, figure, df_ts, plotting_object)
|
390
438
|
|
391
439
|
steps.append(
|
392
440
|
dict(
|
@@ -398,7 +446,7 @@ class AssetSystem(System):
|
|
398
446
|
|
399
447
|
sliders = [dict(active=0, pad={"t": 50}, steps=steps)]
|
400
448
|
|
401
|
-
|
449
|
+
figure.update_layout(
|
402
450
|
mapbox=dict(
|
403
451
|
style=style.value,
|
404
452
|
zoom=zoom_level,
|
@@ -409,6 +457,6 @@ class AssetSystem(System):
|
|
409
457
|
)
|
410
458
|
|
411
459
|
if show:
|
412
|
-
|
460
|
+
figure.show()
|
413
461
|
|
414
|
-
return
|
462
|
+
return figure
|
erad/systems/hazard_system.py
CHANGED
@@ -77,12 +77,12 @@ class HazardSystem(System):
|
|
77
77
|
map_type: MapType = MapType.SCATTER_MAP,
|
78
78
|
style: PlotingStyle = PlotingStyle.CARTO_POSITRON,
|
79
79
|
zoom_level: int = 11,
|
80
|
+
figure=go.Figure(),
|
80
81
|
):
|
81
82
|
timestamps = sorted(
|
82
83
|
[model.timestamp for model in self.get_components(hz.BaseDisasterModel)]
|
83
84
|
)
|
84
85
|
|
85
|
-
fig = go.Figure()
|
86
86
|
steps = []
|
87
87
|
for i, ts in enumerate(timestamps):
|
88
88
|
hazards = self.get_components(
|
@@ -91,7 +91,7 @@ class HazardSystem(System):
|
|
91
91
|
map_obj = getattr(go, map_type.value)
|
92
92
|
num_traces = 0
|
93
93
|
for hazard in hazards:
|
94
|
-
num_traces += hazard.plot(i,
|
94
|
+
num_traces += hazard.plot(i, figure, map_obj)
|
95
95
|
vis = [j == i for j in range(len(timestamps))]
|
96
96
|
result = [x for x in vis for _ in range(num_traces)]
|
97
97
|
steps.append(dict(method="update", label=str(ts), args=[{"visible": result}]))
|
@@ -99,7 +99,7 @@ class HazardSystem(System):
|
|
99
99
|
sliders = [dict(active=0, pad={"t": 50}, steps=steps)]
|
100
100
|
|
101
101
|
if map_type == MapType.SCATTER_MAP:
|
102
|
-
|
102
|
+
figure.update_layout(
|
103
103
|
map={
|
104
104
|
"style": style.value,
|
105
105
|
"zoom": zoom_level,
|
@@ -108,7 +108,7 @@ class HazardSystem(System):
|
|
108
108
|
showlegend=True if show_legend else False,
|
109
109
|
)
|
110
110
|
else:
|
111
|
-
|
111
|
+
figure.update_layout(
|
112
112
|
geo=dict(
|
113
113
|
projection_scale=zoom_level,
|
114
114
|
),
|
@@ -117,6 +117,6 @@ class HazardSystem(System):
|
|
117
117
|
)
|
118
118
|
|
119
119
|
if show:
|
120
|
-
|
120
|
+
figure.show()
|
121
121
|
|
122
|
-
return
|
122
|
+
return figure
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: NREL-erad
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.1
|
4
4
|
Summary: Graph based scalable tool for computing energy resilience metrics for distribution systems.
|
5
5
|
Author-email: Kapil Duwadi <kapil.duwadi@nrel.gov>, Aadil Latif <aadil.altif@nrel.gov>, Kwami Sedzro <sherinann.abraham@nrel.gov>, Sherin Ann Abraham <kwami.sedzro@nrel.gov>, Bryan Palmintier <bryan.palmintier@nrel.gov>
|
6
6
|
Maintainer-email: Aadil Latif <Aadil.Latif@nrel.gov>
|
@@ -31,6 +31,12 @@ Requires-Dist: pylint; extra == "dev"
|
|
31
31
|
Requires-Dist: pytest; extra == "dev"
|
32
32
|
Requires-Dist: pytest-cov; extra == "dev"
|
33
33
|
Requires-Dist: ruff; extra == "dev"
|
34
|
+
Provides-Extra: doc
|
35
|
+
Requires-Dist: sphinx; extra == "doc"
|
36
|
+
Requires-Dist: pydata-sphinx-theme; extra == "doc"
|
37
|
+
Requires-Dist: myst-parser; extra == "doc"
|
38
|
+
Requires-Dist: autodoc_pydantic; extra == "doc"
|
39
|
+
Requires-Dist: sphinxcontrib-mermaid; extra == "doc"
|
34
40
|
Dynamic: license-file
|
35
41
|
|
36
42
|
# ERAD (<u>E</u>nergy <u>R</u>esilience <u>A</u>nalysis for electric <u>D</u>istribution systems)
|
@@ -1,10 +1,10 @@
|
|
1
1
|
erad/__init__.py,sha256=sXLh7g3KC4QCFxcZGBTpG2scR7hmmBsMjq6LqRptkRg,22
|
2
|
-
erad/constants.py,sha256=
|
2
|
+
erad/constants.py,sha256=YEbmM-fV4C_4hdUtt-y2tvq0Rr4tev3nqDr3K3-Nvvo,2395
|
3
3
|
erad/enums.py,sha256=w4sPPIwOyjFsw9NCZy13NmH4nQWkWaDlqnP_BdNrrxI,916
|
4
4
|
erad/gdm_mapping.py,sha256=Ur6-vJpxrRhLszJuSv7AjMotyqZ9MRlz_5MArmBE6LQ,2937
|
5
|
-
erad/probability_builder.py,sha256=
|
6
|
-
erad/quantities.py,sha256=
|
7
|
-
erad/runner.py,sha256=
|
5
|
+
erad/probability_builder.py,sha256=4eePibGlUFiSKtsfASdDq9eHtJO5s3CN4UosO2tLqNg,1457
|
6
|
+
erad/quantities.py,sha256=znguUBYvGT-9_hWCnUuZ9Oib6ky3TMIpbSLJ_ZAtwcU,583
|
7
|
+
erad/runner.py,sha256=O8xQDWIE5PZsd1AjOm-4xGVbKzfiktjOdKeSgnlvRII,4781
|
8
8
|
erad/default_fragility_curves/__init__.py,sha256=TEoZ01NIb1uIAs6AF0V1NJaPBA7FcYtQ5379Frwty5M,778
|
9
9
|
erad/default_fragility_curves/default_fire_boundary_dist.py,sha256=KX_pmJ9yyOqSavzRWk1cgkHbqyxAGmu8GCke9wh48YI,3623
|
10
10
|
erad/default_fragility_curves/default_flood_depth.py,sha256=uy4aAKqDNfsXQq1LKYViQhPIeq0EiO8Y_i3Ow3K5p6E,4208
|
@@ -13,11 +13,12 @@ erad/default_fragility_curves/default_fragility_curves.py,sha256=uGQb0WhtgCyu_rN
|
|
13
13
|
erad/default_fragility_curves/default_peak_ground_acceleration.py,sha256=cvjgm0jK7nEf0T8Tx0KyOyVPqnqj6GUTrKhqIIFZEK4,5695
|
14
14
|
erad/default_fragility_curves/default_peak_ground_velocity.py,sha256=-M6EWv5sq_M2FxQfad_kwORMk0RRfQVjNzNQo2NnKJA,3887
|
15
15
|
erad/default_fragility_curves/default_wind_speed.py,sha256=gtsNFJYcY2qA906lmFYTZDpxvfknk-kxuLgOId5-nLY,3915
|
16
|
-
erad/models/__init__.py,sha256=
|
17
|
-
erad/models/asset.py,sha256
|
16
|
+
erad/models/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
17
|
+
erad/models/asset.py,sha256=kidUQOiEc9fVsWX_PrA9lxD_9RAJM4Ha_tRUbCFmm4g,11828
|
18
18
|
erad/models/asset_mapping.py,sha256=vdqiraFo_Ssd4Se9YEne34TjW1MSCVErmLHFqJa96Nw,518
|
19
|
+
erad/models/edit_store.py,sha256=6UF1T4qhMzytIZCQBXNFac9hNQCX-E1l_2yBg768_E4,544
|
19
20
|
erad/models/fragility_curve.py,sha256=9K5q_VZVEqNKSPIcmrD2uhF9ClZ7p57oKY4jtxyu9tc,3725
|
20
|
-
erad/models/probability.py,sha256=
|
21
|
+
erad/models/probability.py,sha256=7QfeU_tWEssg1j6b04r4LXzG9PUFem6ogLlMBwQZAWE,1985
|
21
22
|
erad/models/hazard/__init__.py,sha256=3PacFmU_iIxZRLiIvcRCXJLUDdgHputUEnuvQvJ8VNM,295
|
22
23
|
erad/models/hazard/base_models.py,sha256=nZndeKYIJrn_FDyDIfpfnGQiHdoXBz_mAtBn61iW4bY,423
|
23
24
|
erad/models/hazard/common.py,sha256=FIGPD8w3hsFyK_J99Wyp2p2KsC1McmtXD4zIrtqLjYM,815
|
@@ -26,10 +27,10 @@ erad/models/hazard/flood.py,sha256=ScmqKu_ChbsfHWZy5SrkVixevLOrcQPY2eGlzOaWAio,2
|
|
26
27
|
erad/models/hazard/wild_fire.py,sha256=hjlp_AI4I1P00F_p0N4pYVdTAmrBr4F4kXKvpmMGWoM,4110
|
27
28
|
erad/models/hazard/wind.py,sha256=YNmXnxMpNWb45UwPheQqC5PCaVN8wdnLLp8jQZjMHuw,5187
|
28
29
|
erad/systems/__init__.py,sha256=TYQ44-fJ0REaEg0I4RClxPK0BZTuvVlSEqmrh_xqTAs,102
|
29
|
-
erad/systems/asset_system.py,sha256=
|
30
|
-
erad/systems/hazard_system.py,sha256=
|
31
|
-
nrel_erad-0.1.
|
32
|
-
nrel_erad-0.1.
|
33
|
-
nrel_erad-0.1.
|
34
|
-
nrel_erad-0.1.
|
35
|
-
nrel_erad-0.1.
|
30
|
+
erad/systems/asset_system.py,sha256=K1ZdzpWWClbQj7T-OFVC6kbGKPpptvi_dQyZDREpgrc,19449
|
31
|
+
erad/systems/hazard_system.py,sha256=DczPyuoz_YGBiMWHJjQVaI9q4aXofmNQPKuxSnhDR2Y,4322
|
32
|
+
nrel_erad-0.1.1.dist-info/licenses/LICENSE.txt,sha256=YhE40B_XkokpkrkfYYs75IWapyRMl_Jdo__vzVWO7eY,1571
|
33
|
+
nrel_erad-0.1.1.dist-info/METADATA,sha256=bSddrNZwgBVoy52DkJ_COmRJO31mhDajQCadC-FwTjk,4357
|
34
|
+
nrel_erad-0.1.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
35
|
+
nrel_erad-0.1.1.dist-info/top_level.txt,sha256=TR5AAzfVy08tAhcPCsDnwvQuVJ2oXZ334IFTb3iHj-k,5
|
36
|
+
nrel_erad-0.1.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|