NREL-erad 0.0.0a0__py3-none-any.whl → 1.0.0__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/__init__.py +1 -0
- erad/constants.py +20 -20
- erad/cypher_queries/load_data_v1.cypher +211 -211
- erad/data/World_Earthquakes_1960_2016.csv +23410 -23410
- erad/db/assets/critical_infras.py +170 -170
- erad/db/assets/distribution_lines.py +101 -101
- erad/db/credential_model.py +20 -20
- erad/db/disaster_input_model.py +23 -23
- erad/db/inject_earthquake.py +52 -52
- erad/db/inject_flooding.py +53 -53
- erad/db/neo4j_.py +162 -162
- erad/db/utils.py +13 -13
- erad/exceptions.py +68 -68
- erad/metrics/check_microgrid.py +208 -208
- erad/metrics/metric.py +178 -178
- erad/programs/backup.py +61 -61
- erad/programs/microgrid.py +44 -44
- erad/scenarios/abstract_scenario.py +102 -102
- erad/scenarios/common.py +92 -92
- erad/scenarios/earthquake_scenario.py +161 -161
- erad/scenarios/fire_scenario.py +160 -160
- erad/scenarios/flood_scenario.py +493 -493
- erad/scenarios/flows.csv +671 -0
- erad/scenarios/utilities.py +75 -75
- erad/scenarios/wind_scenario.py +89 -89
- erad/utils/ditto_utils.py +252 -252
- erad/utils/hifld_utils.py +147 -147
- erad/utils/opendss_utils.py +357 -357
- erad/utils/overpass.py +76 -76
- erad/utils/util.py +178 -178
- erad/visualization/plot_graph.py +218 -218
- {NREL_erad-0.0.0a0.dist-info → nrel_erad-1.0.0.dist-info}/METADATA +65 -61
- nrel_erad-1.0.0.dist-info/RECORD +42 -0
- {NREL_erad-0.0.0a0.dist-info → nrel_erad-1.0.0.dist-info}/WHEEL +1 -2
- {NREL_erad-0.0.0a0.dist-info → nrel_erad-1.0.0.dist-info/licenses}/LICENSE.txt +28 -28
- NREL_erad-0.0.0a0.dist-info/RECORD +0 -42
- NREL_erad-0.0.0a0.dist-info/top_level.txt +0 -1
erad/visualization/plot_graph.py
CHANGED
@@ -1,218 +1,218 @@
|
|
1
|
-
""" Module for handling graph plots. """
|
2
|
-
|
3
|
-
# standard imports
|
4
|
-
import os
|
5
|
-
import abc
|
6
|
-
from typing import List, Dict
|
7
|
-
|
8
|
-
# third-party libraries
|
9
|
-
import networkx as nx
|
10
|
-
import plotly.graph_objects as go
|
11
|
-
from dotenv import load_dotenv
|
12
|
-
|
13
|
-
# internal libraries
|
14
|
-
from erad.utils.util import path_validation
|
15
|
-
|
16
|
-
load_dotenv()
|
17
|
-
|
18
|
-
|
19
|
-
class AbstractGraphPlot(abc.ABC):
|
20
|
-
"""Abstract interface for developing subclass to plot network graph."""
|
21
|
-
|
22
|
-
@abc.abstractmethod
|
23
|
-
def add_network_data(self, *args, **kwargs):
|
24
|
-
"""Abstract method for adding network data."""
|
25
|
-
|
26
|
-
@abc.abstractmethod
|
27
|
-
def prepare_plot(self, *args, **kwargs):
|
28
|
-
"""Abstract method for preparing and showing teh plot"""
|
29
|
-
|
30
|
-
|
31
|
-
class PloltyGraph(AbstractGraphPlot):
|
32
|
-
"""Class for managing graph plot using Plotly.
|
33
|
-
|
34
|
-
Attributes:
|
35
|
-
access_token (str): MapBox API token
|
36
|
-
style (str): MapBox style
|
37
|
-
zoom_level (int): Zoom level for the plot
|
38
|
-
data (List): Stores the data to be fed to plotly for plotting
|
39
|
-
scatter_data (Dict): Stores longitudes and latitudes of nodes
|
40
|
-
from network
|
41
|
-
fig (go.Figure): Plotly graph objects figure instance
|
42
|
-
"""
|
43
|
-
|
44
|
-
def __init__(
|
45
|
-
self,
|
46
|
-
access_token: str = None,
|
47
|
-
style: str = "carto-darkmatter",
|
48
|
-
zoom_level: int = 13,
|
49
|
-
) -> None:
|
50
|
-
"""Constructor for `PlotlyGraph` Subclass.
|
51
|
-
|
52
|
-
Args:
|
53
|
-
access_token (str): MapBox API token
|
54
|
-
style (str): MapBox style
|
55
|
-
zoom_level (int): Zoom level for the plot
|
56
|
-
"""
|
57
|
-
|
58
|
-
if access_token:
|
59
|
-
self.access_token = access_token
|
60
|
-
else:
|
61
|
-
self.access_token = os.getenv("MAPBOX_API_KEY")
|
62
|
-
self.style = style
|
63
|
-
self.zoom_level = zoom_level
|
64
|
-
|
65
|
-
self.data = []
|
66
|
-
|
67
|
-
def _get_map_centre(self, longitudes: List[float], latitudes: List[float]):
|
68
|
-
"""Returns map center."""
|
69
|
-
return {
|
70
|
-
"lon": sum(longitudes) / len(longitudes),
|
71
|
-
"lat": sum(latitudes) / len(latitudes),
|
72
|
-
}
|
73
|
-
|
74
|
-
def add_network_data(
|
75
|
-
self,
|
76
|
-
network: nx.Graph,
|
77
|
-
latitude_property: str = "lat",
|
78
|
-
longitude_property: str = "long",
|
79
|
-
node_color: str = "blue",
|
80
|
-
line_color: str = "red",
|
81
|
-
) -> None:
|
82
|
-
"""Method to add network data to plot data.
|
83
|
-
|
84
|
-
Args:
|
85
|
-
network (nx.Graph): Networkx graph instance
|
86
|
-
latitude_property (str): Property name to be
|
87
|
-
used as latitude
|
88
|
-
longitude_property (str): Property name to be
|
89
|
-
used as longitude
|
90
|
-
node_color (str): Color name to be used to plot
|
91
|
-
nodes
|
92
|
-
line_color (str): Color name to be used to plot
|
93
|
-
line segments
|
94
|
-
"""
|
95
|
-
|
96
|
-
# Add nodes
|
97
|
-
self.scatter_data = {"latitudes": [], "longitudes": []}
|
98
|
-
|
99
|
-
for node in network.nodes.data():
|
100
|
-
|
101
|
-
# Storing the lat lons in scatter data
|
102
|
-
# container
|
103
|
-
self.scatter_data["latitudes"].append(node[1][latitude_property])
|
104
|
-
self.scatter_data["longitudes"].append(node[1][longitude_property])
|
105
|
-
|
106
|
-
# Stroing the edge data in container
|
107
|
-
line_data = {"latitudes": [], "longitudes": []}
|
108
|
-
node_data = {node[0]: node[1] for node in network.nodes.data()}
|
109
|
-
|
110
|
-
for edge in network.edges():
|
111
|
-
line_data["latitudes"].extend(
|
112
|
-
[
|
113
|
-
node_data[edge[0]][latitude_property],
|
114
|
-
node_data[edge[1]][latitude_property],
|
115
|
-
None,
|
116
|
-
]
|
117
|
-
)
|
118
|
-
|
119
|
-
line_data["longitudes"].extend(
|
120
|
-
[
|
121
|
-
node_data[edge[0]][longitude_property],
|
122
|
-
node_data[edge[1]][longitude_property],
|
123
|
-
None,
|
124
|
-
]
|
125
|
-
)
|
126
|
-
|
127
|
-
# Adding plots to plotly graph object
|
128
|
-
self.data.append(
|
129
|
-
go.Scattermapbox(
|
130
|
-
mode="markers",
|
131
|
-
lon=self.scatter_data["longitudes"],
|
132
|
-
lat=self.scatter_data["latitudes"],
|
133
|
-
marker={"size": 5, "color": node_color},
|
134
|
-
)
|
135
|
-
)
|
136
|
-
|
137
|
-
self.data.append(
|
138
|
-
go.Scattermapbox(
|
139
|
-
mode="markers+lines",
|
140
|
-
lon=line_data["longitudes"],
|
141
|
-
lat=line_data["latitudes"],
|
142
|
-
marker={"size": 0},
|
143
|
-
line={"color": line_color},
|
144
|
-
)
|
145
|
-
)
|
146
|
-
|
147
|
-
def add_scatter_points(
|
148
|
-
self,
|
149
|
-
latitudes: List[float],
|
150
|
-
longitudes: List[float],
|
151
|
-
color: str = "yellow",
|
152
|
-
size: int = 5,
|
153
|
-
) -> None:
|
154
|
-
"""Method for scatter points to plot data.
|
155
|
-
|
156
|
-
Args:
|
157
|
-
latitudes (List[float]): List of latitude points
|
158
|
-
longitudes (List[float]): List of longitude points
|
159
|
-
color (str): Color to be used for scatter points
|
160
|
-
size (int): Size of scatter points
|
161
|
-
"""
|
162
|
-
|
163
|
-
self.data.append(
|
164
|
-
go.Scattermapbox(
|
165
|
-
mode="markers",
|
166
|
-
lon=longitudes,
|
167
|
-
lat=latitudes,
|
168
|
-
marker={"size": size, "color": color},
|
169
|
-
)
|
170
|
-
)
|
171
|
-
|
172
|
-
def add_polygon(
|
173
|
-
self,
|
174
|
-
latitudes: List[float],
|
175
|
-
longitudes: List[float],
|
176
|
-
fill: str = "toself",
|
177
|
-
) -> None:
|
178
|
-
"""Method for adding polygon to the plot.
|
179
|
-
|
180
|
-
Args:
|
181
|
-
latitudes (List[float]): List of latitude points
|
182
|
-
longitudes (List[float]): List of longitude points
|
183
|
-
fill (str): Accepted fill value by plotly
|
184
|
-
"""
|
185
|
-
self.data.append(
|
186
|
-
go.Scattermapbox(
|
187
|
-
lon=longitudes, lat=latitudes, fill=fill, mode="lines"
|
188
|
-
)
|
189
|
-
)
|
190
|
-
|
191
|
-
def prepare_plot(self, show: bool = True):
|
192
|
-
"""Method to prepare and show the plot.
|
193
|
-
|
194
|
-
Args:
|
195
|
-
show (bool): True if want to see the plot.
|
196
|
-
"""
|
197
|
-
self.fig = go.Figure(data=self.data)
|
198
|
-
self.fig.update_layout(margin={"r": 0, "t": 0, "l": 0, "b": 0})
|
199
|
-
self.fig.update_mapboxes(
|
200
|
-
{
|
201
|
-
"accesstoken": self.access_token,
|
202
|
-
"style": self.style,
|
203
|
-
"center": self._get_map_centre(
|
204
|
-
self.scatter_data["longitudes"],
|
205
|
-
self.scatter_data["latitudes"],
|
206
|
-
),
|
207
|
-
"zoom": self.zoom_level,
|
208
|
-
}
|
209
|
-
)
|
210
|
-
|
211
|
-
if show:
|
212
|
-
self.fig.show()
|
213
|
-
|
214
|
-
def html_export(self, html_file_path: str):
|
215
|
-
"""Method for exporting plot as HTML file."""
|
216
|
-
path_validation(html_file_path)
|
217
|
-
self.fig.write_html(html_file_path)
|
218
|
-
|
1
|
+
""" Module for handling graph plots. """
|
2
|
+
|
3
|
+
# standard imports
|
4
|
+
import os
|
5
|
+
import abc
|
6
|
+
from typing import List, Dict
|
7
|
+
|
8
|
+
# third-party libraries
|
9
|
+
import networkx as nx
|
10
|
+
import plotly.graph_objects as go
|
11
|
+
from dotenv import load_dotenv
|
12
|
+
|
13
|
+
# internal libraries
|
14
|
+
from erad.utils.util import path_validation
|
15
|
+
|
16
|
+
load_dotenv()
|
17
|
+
|
18
|
+
|
19
|
+
class AbstractGraphPlot(abc.ABC):
|
20
|
+
"""Abstract interface for developing subclass to plot network graph."""
|
21
|
+
|
22
|
+
@abc.abstractmethod
|
23
|
+
def add_network_data(self, *args, **kwargs):
|
24
|
+
"""Abstract method for adding network data."""
|
25
|
+
|
26
|
+
@abc.abstractmethod
|
27
|
+
def prepare_plot(self, *args, **kwargs):
|
28
|
+
"""Abstract method for preparing and showing teh plot"""
|
29
|
+
|
30
|
+
|
31
|
+
class PloltyGraph(AbstractGraphPlot):
|
32
|
+
"""Class for managing graph plot using Plotly.
|
33
|
+
|
34
|
+
Attributes:
|
35
|
+
access_token (str): MapBox API token
|
36
|
+
style (str): MapBox style
|
37
|
+
zoom_level (int): Zoom level for the plot
|
38
|
+
data (List): Stores the data to be fed to plotly for plotting
|
39
|
+
scatter_data (Dict): Stores longitudes and latitudes of nodes
|
40
|
+
from network
|
41
|
+
fig (go.Figure): Plotly graph objects figure instance
|
42
|
+
"""
|
43
|
+
|
44
|
+
def __init__(
|
45
|
+
self,
|
46
|
+
access_token: str = None,
|
47
|
+
style: str = "carto-darkmatter",
|
48
|
+
zoom_level: int = 13,
|
49
|
+
) -> None:
|
50
|
+
"""Constructor for `PlotlyGraph` Subclass.
|
51
|
+
|
52
|
+
Args:
|
53
|
+
access_token (str): MapBox API token
|
54
|
+
style (str): MapBox style
|
55
|
+
zoom_level (int): Zoom level for the plot
|
56
|
+
"""
|
57
|
+
|
58
|
+
if access_token:
|
59
|
+
self.access_token = access_token
|
60
|
+
else:
|
61
|
+
self.access_token = os.getenv("MAPBOX_API_KEY")
|
62
|
+
self.style = style
|
63
|
+
self.zoom_level = zoom_level
|
64
|
+
|
65
|
+
self.data = []
|
66
|
+
|
67
|
+
def _get_map_centre(self, longitudes: List[float], latitudes: List[float]):
|
68
|
+
"""Returns map center."""
|
69
|
+
return {
|
70
|
+
"lon": sum(longitudes) / len(longitudes),
|
71
|
+
"lat": sum(latitudes) / len(latitudes),
|
72
|
+
}
|
73
|
+
|
74
|
+
def add_network_data(
|
75
|
+
self,
|
76
|
+
network: nx.Graph,
|
77
|
+
latitude_property: str = "lat",
|
78
|
+
longitude_property: str = "long",
|
79
|
+
node_color: str = "blue",
|
80
|
+
line_color: str = "red",
|
81
|
+
) -> None:
|
82
|
+
"""Method to add network data to plot data.
|
83
|
+
|
84
|
+
Args:
|
85
|
+
network (nx.Graph): Networkx graph instance
|
86
|
+
latitude_property (str): Property name to be
|
87
|
+
used as latitude
|
88
|
+
longitude_property (str): Property name to be
|
89
|
+
used as longitude
|
90
|
+
node_color (str): Color name to be used to plot
|
91
|
+
nodes
|
92
|
+
line_color (str): Color name to be used to plot
|
93
|
+
line segments
|
94
|
+
"""
|
95
|
+
|
96
|
+
# Add nodes
|
97
|
+
self.scatter_data = {"latitudes": [], "longitudes": []}
|
98
|
+
|
99
|
+
for node in network.nodes.data():
|
100
|
+
|
101
|
+
# Storing the lat lons in scatter data
|
102
|
+
# container
|
103
|
+
self.scatter_data["latitudes"].append(node[1][latitude_property])
|
104
|
+
self.scatter_data["longitudes"].append(node[1][longitude_property])
|
105
|
+
|
106
|
+
# Stroing the edge data in container
|
107
|
+
line_data = {"latitudes": [], "longitudes": []}
|
108
|
+
node_data = {node[0]: node[1] for node in network.nodes.data()}
|
109
|
+
|
110
|
+
for edge in network.edges():
|
111
|
+
line_data["latitudes"].extend(
|
112
|
+
[
|
113
|
+
node_data[edge[0]][latitude_property],
|
114
|
+
node_data[edge[1]][latitude_property],
|
115
|
+
None,
|
116
|
+
]
|
117
|
+
)
|
118
|
+
|
119
|
+
line_data["longitudes"].extend(
|
120
|
+
[
|
121
|
+
node_data[edge[0]][longitude_property],
|
122
|
+
node_data[edge[1]][longitude_property],
|
123
|
+
None,
|
124
|
+
]
|
125
|
+
)
|
126
|
+
|
127
|
+
# Adding plots to plotly graph object
|
128
|
+
self.data.append(
|
129
|
+
go.Scattermapbox(
|
130
|
+
mode="markers",
|
131
|
+
lon=self.scatter_data["longitudes"],
|
132
|
+
lat=self.scatter_data["latitudes"],
|
133
|
+
marker={"size": 5, "color": node_color},
|
134
|
+
)
|
135
|
+
)
|
136
|
+
|
137
|
+
self.data.append(
|
138
|
+
go.Scattermapbox(
|
139
|
+
mode="markers+lines",
|
140
|
+
lon=line_data["longitudes"],
|
141
|
+
lat=line_data["latitudes"],
|
142
|
+
marker={"size": 0},
|
143
|
+
line={"color": line_color},
|
144
|
+
)
|
145
|
+
)
|
146
|
+
|
147
|
+
def add_scatter_points(
|
148
|
+
self,
|
149
|
+
latitudes: List[float],
|
150
|
+
longitudes: List[float],
|
151
|
+
color: str = "yellow",
|
152
|
+
size: int = 5,
|
153
|
+
) -> None:
|
154
|
+
"""Method for scatter points to plot data.
|
155
|
+
|
156
|
+
Args:
|
157
|
+
latitudes (List[float]): List of latitude points
|
158
|
+
longitudes (List[float]): List of longitude points
|
159
|
+
color (str): Color to be used for scatter points
|
160
|
+
size (int): Size of scatter points
|
161
|
+
"""
|
162
|
+
|
163
|
+
self.data.append(
|
164
|
+
go.Scattermapbox(
|
165
|
+
mode="markers",
|
166
|
+
lon=longitudes,
|
167
|
+
lat=latitudes,
|
168
|
+
marker={"size": size, "color": color},
|
169
|
+
)
|
170
|
+
)
|
171
|
+
|
172
|
+
def add_polygon(
|
173
|
+
self,
|
174
|
+
latitudes: List[float],
|
175
|
+
longitudes: List[float],
|
176
|
+
fill: str = "toself",
|
177
|
+
) -> None:
|
178
|
+
"""Method for adding polygon to the plot.
|
179
|
+
|
180
|
+
Args:
|
181
|
+
latitudes (List[float]): List of latitude points
|
182
|
+
longitudes (List[float]): List of longitude points
|
183
|
+
fill (str): Accepted fill value by plotly
|
184
|
+
"""
|
185
|
+
self.data.append(
|
186
|
+
go.Scattermapbox(
|
187
|
+
lon=longitudes, lat=latitudes, fill=fill, mode="lines"
|
188
|
+
)
|
189
|
+
)
|
190
|
+
|
191
|
+
def prepare_plot(self, show: bool = True):
|
192
|
+
"""Method to prepare and show the plot.
|
193
|
+
|
194
|
+
Args:
|
195
|
+
show (bool): True if want to see the plot.
|
196
|
+
"""
|
197
|
+
self.fig = go.Figure(data=self.data)
|
198
|
+
self.fig.update_layout(margin={"r": 0, "t": 0, "l": 0, "b": 0})
|
199
|
+
self.fig.update_mapboxes(
|
200
|
+
{
|
201
|
+
"accesstoken": self.access_token,
|
202
|
+
"style": self.style,
|
203
|
+
"center": self._get_map_centre(
|
204
|
+
self.scatter_data["longitudes"],
|
205
|
+
self.scatter_data["latitudes"],
|
206
|
+
),
|
207
|
+
"zoom": self.zoom_level,
|
208
|
+
}
|
209
|
+
)
|
210
|
+
|
211
|
+
if show:
|
212
|
+
self.fig.show()
|
213
|
+
|
214
|
+
def html_export(self, html_file_path: str):
|
215
|
+
"""Method for exporting plot as HTML file."""
|
216
|
+
path_validation(html_file_path)
|
217
|
+
self.fig.write_html(html_file_path)
|
218
|
+
|
@@ -1,61 +1,65 @@
|
|
1
|
-
Metadata-Version: 2.
|
2
|
-
Name: NREL-erad
|
3
|
-
Version: 0.0
|
4
|
-
Summary: Graph based scalable tool for computing equitable
|
5
|
-
|
6
|
-
Author: Kapil Duwadi
|
7
|
-
|
8
|
-
Keywords:
|
9
|
-
Classifier: License :: OSI Approved :: BSD License
|
10
|
-
Classifier:
|
11
|
-
Classifier:
|
12
|
-
Requires-Python: >=3.8
|
13
|
-
|
14
|
-
|
15
|
-
Requires-Dist:
|
16
|
-
Requires-Dist:
|
17
|
-
Requires-Dist:
|
18
|
-
Requires-Dist:
|
19
|
-
Requires-Dist:
|
20
|
-
Requires-Dist:
|
21
|
-
Requires-Dist:
|
22
|
-
Requires-Dist:
|
23
|
-
Requires-Dist:
|
24
|
-
Requires-Dist:
|
25
|
-
Requires-Dist: pandas
|
26
|
-
Requires-Dist:
|
27
|
-
Requires-Dist:
|
28
|
-
Requires-Dist:
|
29
|
-
Requires-Dist:
|
30
|
-
Requires-Dist:
|
31
|
-
Requires-Dist:
|
32
|
-
Requires-Dist:
|
33
|
-
Requires-Dist: scipy
|
34
|
-
Requires-Dist:
|
35
|
-
Requires-Dist:
|
36
|
-
Requires-Dist: xmltodict
|
37
|
-
|
38
|
-
Requires-Dist:
|
39
|
-
|
40
|
-
Requires-Dist: mkdocs
|
41
|
-
Requires-Dist:
|
42
|
-
Requires-Dist:
|
43
|
-
Requires-Dist:
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
<
|
49
|
-
<
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
[
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
1
|
+
Metadata-Version: 2.3
|
2
|
+
Name: NREL-erad
|
3
|
+
Version: 1.0.0
|
4
|
+
Summary: Graph based scalable tool for computing equitable resilience metrics for distribution systems.
|
5
|
+
Project-URL: Homepage, https://github.com/nrel/erad
|
6
|
+
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>
|
7
|
+
License-File: LICENSE.txt
|
8
|
+
Keywords: Distribution,Earthquake,Equity,Fire,Flooding,Power,Python,Resilience,Systems
|
9
|
+
Classifier: License :: OSI Approved :: BSD License
|
10
|
+
Classifier: Operating System :: OS Independent
|
11
|
+
Classifier: Programming Language :: Python :: 3.8
|
12
|
+
Requires-Python: >=3.8
|
13
|
+
Requires-Dist: boto3
|
14
|
+
Requires-Dist: botocore
|
15
|
+
Requires-Dist: ditto-py
|
16
|
+
Requires-Dist: geojson
|
17
|
+
Requires-Dist: geopandas
|
18
|
+
Requires-Dist: geopy
|
19
|
+
Requires-Dist: graphdatascience
|
20
|
+
Requires-Dist: jupyter
|
21
|
+
Requires-Dist: matplotlib
|
22
|
+
Requires-Dist: neo4j-driver
|
23
|
+
Requires-Dist: networkx
|
24
|
+
Requires-Dist: opendssdirect-py
|
25
|
+
Requires-Dist: pandas
|
26
|
+
Requires-Dist: plotly
|
27
|
+
Requires-Dist: pydantic~=1.10.14
|
28
|
+
Requires-Dist: pytest
|
29
|
+
Requires-Dist: python-dotenv
|
30
|
+
Requires-Dist: pyyaml
|
31
|
+
Requires-Dist: rasterio
|
32
|
+
Requires-Dist: requests
|
33
|
+
Requires-Dist: scipy
|
34
|
+
Requires-Dist: shapely
|
35
|
+
Requires-Dist: stateplane
|
36
|
+
Requires-Dist: xmltodict
|
37
|
+
Provides-Extra: dev
|
38
|
+
Requires-Dist: black; extra == 'dev'
|
39
|
+
Requires-Dist: mkdocs; extra == 'dev'
|
40
|
+
Requires-Dist: mkdocs-jupyter; extra == 'dev'
|
41
|
+
Requires-Dist: mkdocs-material; extra == 'dev'
|
42
|
+
Requires-Dist: mkdocstrings[python]; extra == 'dev'
|
43
|
+
Requires-Dist: pylint; extra == 'dev'
|
44
|
+
Description-Content-Type: text/markdown
|
45
|
+
|
46
|
+
# ERAD (<u>E</u>quity and <u>R</u>esilience <u>A</u>nalysis for electric <u>D</u>istribution systems)
|
47
|
+
<p align="center">
|
48
|
+
<img src="docs/images/logo.svg" width="250" style="display:flex;justify-content:center;">
|
49
|
+
<p align="center">Graph based python tool for computing equitable resilience. </p>
|
50
|
+
</p>
|
51
|
+
|
52
|
+

|
53
|
+

|
54
|
+
[](https://www.codefactor.io/repository/github/nrel/erad)
|
55
|
+
[](https://github.com/NREL/erad/blob/main/LICENSE.txt)
|
56
|
+
[](https://github.com/NREL/erad/issues)
|
57
|
+

|
58
|
+
|
59
|
+
[Visit full documentation here.](https://nrel.github.io/erad/)
|
60
|
+
|
61
|
+
Understanding the impact of disaster events on people's ability to access critical service is key to designing appropriate programs to minimize the overall impact. Flooded roads, downed power lines, flooded power substation etc. could impact access to critical services like electricity, food, health and more. The field of disaster modeling is still evolving and so is our understanding of how these events would impact our critical infrastructures such power grid, hospitals, groceries, banks etc.
|
62
|
+
|
63
|
+
ERAD is a free, open-source Python toolkit for computing equity and resilience measures in the face of hazards like earthquakes and flooding. It uses graph database to store data and perform computation at the household level for a variety of critical services that are connected by power distribution network. It uses asset fragility curves, which are functions that relate hazard severity to survival probability for power system assets including cables, transformers, substations, roof-mounted solar panels, etc. recommended in top literature. Programs like undergrounding, microgrid, and electricity backup units for critical infrastructures may all be evaluated using metrics and compared across different neighborhoods to assess their effects on equity and resilience.
|
64
|
+
|
65
|
+
ERAD is designed to be used by researchers, students, community stakeholders, distribution utilities to understand and possibly evaluate effectiveness of different post disaster programs to improve resilience and equity. It was funded by National Renewable Energy Laboratory (NREL) and made publicly available with open license.
|
@@ -0,0 +1,42 @@
|
|
1
|
+
erad/__init__.py,sha256=Aj77VL1d5Mdku7sgCgKQmPuYavPpAHuZuJcy6bygQZE,21
|
2
|
+
erad/constants.py,sha256=HZKN6wM_zXqZje8SsUIj_msokFhPcWsoRNeHY8yI_WA,699
|
3
|
+
erad/exceptions.py,sha256=DNpMurLC-KJwAWQCbH6LmZURUV9W0zmdEsFFLk05Y7Q,2141
|
4
|
+
erad/cypher_queries/load_data_v1.cypher,sha256=t52glQxFjvdGzpGhMvCgXYyEiEf9C26gfCKvs3fCoZE,7920
|
5
|
+
erad/data/World_Earthquakes_1960_2016.csv,sha256=Z5nNXwqqe0VNatZFRSkXtbS73zJWI_MbreIyEfJCoGE,2362711
|
6
|
+
erad/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
|
+
erad/db/credential_model.py,sha256=9baQ3fHpsJgd205S-hf4dULR9J38TVszBZWcNb9pP6Q,571
|
8
|
+
erad/db/disaster_input_model.py,sha256=4CVkgce-oTJbfg3p6VcFDa_L9ftNfakx5IrFeQra9Ws,614
|
9
|
+
erad/db/inject_earthquake.py,sha256=duZmNzT5R4pEtgSSKTQJvzMK_XiGvF9mro4uq7DDdBc,1648
|
10
|
+
erad/db/inject_flooding.py,sha256=OARZE4YVx-AYrG7mzRBRy1IJv4LZ4fhrJzP8u2iO2DU,1716
|
11
|
+
erad/db/neo4j_.py,sha256=cHNMYMIq0KwBeam2yWzMKTDw7R_G6hzQc0ZArk3k8ko,5061
|
12
|
+
erad/db/utils.py,sha256=-YcbExU7gG8M50ak_fLagzafnLAd92rZxAzHbTu3Yik,442
|
13
|
+
erad/db/assets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
14
|
+
erad/db/assets/critical_infras.py,sha256=2DiEKoyeplXeUrjFczrxzs-bfcSRW3Cf41YnVEMtEYo,5902
|
15
|
+
erad/db/assets/distribution_lines.py,sha256=v-jkmzwmzN9DXka-9BIhx5du0kKi525qfHGNqfYNmQQ,3446
|
16
|
+
erad/metrics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
17
|
+
erad/metrics/check_microgrid.py,sha256=ct0AQsIAQmZ_-Z6_yJky4gE9P4U2uFNMUui8B7jgEEs,7480
|
18
|
+
erad/metrics/metric.py,sha256=haZwrtd9UYkpHXh3Cd80y0mb6H2fvk6uHBP_lHtuTFA,5969
|
19
|
+
erad/programs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
20
|
+
erad/programs/backup.py,sha256=I5KAxa4SZcouUfe_DQQoL89exKpTI5Rgd-BlvQKifQQ,1910
|
21
|
+
erad/programs/microgrid.py,sha256=W9WiQeQ64ncfrerUqC0Eu7tk9MmgIZffN7qL5qZs8EU,1626
|
22
|
+
erad/scenarios/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
23
|
+
erad/scenarios/abstract_scenario.py,sha256=ua035wPNWTYKKirOcdNEGGHrRnilUfn9daCijkDcgG4,4165
|
24
|
+
erad/scenarios/common.py,sha256=MwAJtZF8xya4qw_vMsnaD3WOTZV-1HsCKZqfTh8LAIw,2930
|
25
|
+
erad/scenarios/earthquake_scenario.py,sha256=sz_8O0py4prDjlqtiHssvAgDI6o6bl25qcnhVa_82RY,8556
|
26
|
+
erad/scenarios/fire_scenario.py,sha256=nfZGbr-pfOvfOgZCIzTr62wBXM7VAA4gjfcupmmH81M,7084
|
27
|
+
erad/scenarios/flood_scenario.py,sha256=RVMlVUruvtgG0pktO_M0FnqA4EkN8LlCV5e3y3Xcl4o,19843
|
28
|
+
erad/scenarios/flows.csv,sha256=BqF7KCjAsuO9qnIK8ioslDdm7FmmvwVDnxQyhLwVn24,42941
|
29
|
+
erad/scenarios/utilities.py,sha256=G0cqpFUfkfU15IyIw7dnJnPaWK__AleRvfyQFiN_ssc,2678
|
30
|
+
erad/scenarios/wind_scenario.py,sha256=2GXmLRmcNO6-Vm0knL1hd-MfV4QRJ9nRL87rid2B6O4,3855
|
31
|
+
erad/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
32
|
+
erad/utils/ditto_utils.py,sha256=akWWBunbWGdogYde1xaMTFPe753T3NyOG4GNtm0x8K4,7886
|
33
|
+
erad/utils/hifld_utils.py,sha256=hkIItgSzpqBjQAPHNHwjirGEDYX5dUXiPbiLMZWB3DI,4836
|
34
|
+
erad/utils/opendss_utils.py,sha256=i2yZjxHA4p8dkU0Rz8NPtzBPaIjbHUer74K-x0ohoJM,10555
|
35
|
+
erad/utils/overpass.py,sha256=sakprZEdzCmeFO-RiVdSG3YMaPsADGzSeZNxDa2wem8,2030
|
36
|
+
erad/utils/util.py,sha256=x0SzVu68W7JrSXzoCG3bq9_XJ1EIrWoOVB3UjLnAFTk,4975
|
37
|
+
erad/visualization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
38
|
+
erad/visualization/plot_graph.py,sha256=1wJm5LHxQgyxhax-jnOdaL4ssVtXV7q0m-Ga-_fphjI,6559
|
39
|
+
nrel_erad-1.0.0.dist-info/METADATA,sha256=AniNz2dTFaCTOHeMY6xDpHFQley6-3SKQz__oo0N5ug,4307
|
40
|
+
nrel_erad-1.0.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
|
41
|
+
nrel_erad-1.0.0.dist-info/licenses/LICENSE.txt,sha256=tE45GOKNRzfHwPByr46JpZw9R9dlukkKli5qFr0DbeM,1543
|
42
|
+
nrel_erad-1.0.0.dist-info/RECORD,,
|