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 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
- # Get list of continuous distributions
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
- __version__ = "0.0.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
- else:
145
- self.flood_depth = DistanceProbability(
146
- distance=Distance(-9999, "meter"),
147
- survival_probability=1,
148
- )
149
- self.flood_velocity = SpeedProbability(
150
- speed=Speed(0, "meter / second"),
151
- survival_probability=1,
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(..., gt=0, description="Height of the asset")
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
- return Distance(get_elevation(lat=self.latitude, lon=self.longitude), "meter")
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)
@@ -50,7 +50,10 @@ class TemperatureProbability(BaseProbabilityModel):
50
50
  class DistanceProbability(BaseProbabilityModel):
51
51
  distance: Annotated[
52
52
  Distance,
53
- Field(..., description="Distance of asset from the source / boundary of a disaster event"),
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
@@ -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
- return cdf(value.to(self.units).magnitude, *self.params)
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.iter_all_components())
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
 
@@ -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(3, "meter"),
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(3, "meter"),
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
- return (sum(xs) / len(xs), sum(ys) / len(ys))
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
- fig = go.Figure()
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
- fig = self._add_node_traces(i, fig, df_ts, plotting_object)
389
- fig = self._add_edge_traces(i, fig, df_ts, plotting_object)
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
- fig.update_layout(
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
- fig.show()
460
+ figure.show()
413
461
 
414
- return fig
462
+ return figure
@@ -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, fig, map_obj)
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
- fig.update_layout(
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
- fig.update_layout(
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
- fig.show()
120
+ figure.show()
121
121
 
122
- return fig
122
+ return figure
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: NREL-erad
3
- Version: 0.1.0
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=5WFr2OwgEvWirj5RuL0QwziSYH1p9XBnJCGard1qxjM,1621
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=AHfdrdRrebXEKgrcBQk9ZqH7bMfTVok7sxShV_O5nu8,1370
6
- erad/quantities.py,sha256=Qhl-0Qorv3AbBNotnS5hfxajZgRlpf6DE1iOCg7_0DI,454
7
- erad/runner.py,sha256=Lvqm0YFt_E-v4SsRmVMgmnun8bU9AeDYwZB-w_dJXvk,4549
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=sXLh7g3KC4QCFxcZGBTpG2scR7hmmBsMjq6LqRptkRg,22
17
- erad/models/asset.py,sha256=-SUjiaB9iIINDY8a1xhSxjv5gajB7LE7JG0EtxXwhHI,11237
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=hTVBCundyfX5NwoAyF_13osluJDWft1N2Il8XeLabfk,1933
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=MDzc0p6RE81k8ZPjzjuil5fME89Rd7fqeYlUqjNCYnw,17267
30
- erad/systems/hazard_system.py,sha256=dHrA4p1mnaQvBLQVIZWLhZ6NcGD3toyGElP-LW0HRX4,4305
31
- nrel_erad-0.1.0.dist-info/licenses/LICENSE.txt,sha256=YhE40B_XkokpkrkfYYs75IWapyRMl_Jdo__vzVWO7eY,1571
32
- nrel_erad-0.1.0.dist-info/METADATA,sha256=snlcuFSxtS0rJCaVkMYWwzjfGpf6EbsyfbZw3dJqFtA,4104
33
- nrel_erad-0.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
34
- nrel_erad-0.1.0.dist-info/top_level.txt,sha256=TR5AAzfVy08tAhcPCsDnwvQuVJ2oXZ334IFTb3iHj-k,5
35
- nrel_erad-0.1.0.dist-info/RECORD,,
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,,