epyt-flow 0.2.0__py3-none-any.whl → 0.3.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.
- epyt_flow/EPANET/compile_macos.sh +4 -0
- epyt_flow/VERSION +1 -1
- epyt_flow/__init__.py +6 -2
- epyt_flow/data/benchmarks/leakdb.py +7 -12
- epyt_flow/data/networks.py +404 -40
- epyt_flow/rest_api/base_handler.py +14 -0
- epyt_flow/rest_api/scada_data/handlers.py +42 -0
- epyt_flow/rest_api/server.py +3 -1
- epyt_flow/simulation/events/leakages.py +27 -17
- epyt_flow/simulation/scada/scada_data.py +543 -12
- epyt_flow/simulation/scada/scada_data_export.py +38 -5
- epyt_flow/simulation/scenario_config.py +2 -2
- epyt_flow/simulation/scenario_simulator.py +44 -35
- epyt_flow/simulation/sensor_config.py +342 -47
- epyt_flow/topology.py +104 -4
- {epyt_flow-0.2.0.dist-info → epyt_flow-0.3.0.dist-info}/METADATA +17 -6
- {epyt_flow-0.2.0.dist-info → epyt_flow-0.3.0.dist-info}/RECORD +20 -19
- {epyt_flow-0.2.0.dist-info → epyt_flow-0.3.0.dist-info}/LICENSE +0 -0
- {epyt_flow-0.2.0.dist-info → epyt_flow-0.3.0.dist-info}/WHEEL +0 -0
- {epyt_flow-0.2.0.dist-info → epyt_flow-0.3.0.dist-info}/top_level.txt +0 -0
epyt_flow/topology.py
CHANGED
|
@@ -3,6 +3,7 @@ Module provides a class for representing the topology of WDN.
|
|
|
3
3
|
"""
|
|
4
4
|
from copy import deepcopy
|
|
5
5
|
import warnings
|
|
6
|
+
from typing import Any
|
|
6
7
|
import numpy as np
|
|
7
8
|
import networkx as nx
|
|
8
9
|
from scipy.sparse import bsr_array
|
|
@@ -14,6 +15,35 @@ UNITS_USCUSTOM = 0
|
|
|
14
15
|
UNITS_SIMETRIC = 1
|
|
15
16
|
|
|
16
17
|
|
|
18
|
+
def unitscategoryid_to_str(unit_category_id: int) -> str:
|
|
19
|
+
"""
|
|
20
|
+
Converts a given units category ID to the corresponding description.
|
|
21
|
+
|
|
22
|
+
Parameters
|
|
23
|
+
----------
|
|
24
|
+
unit_category_id : `int`
|
|
25
|
+
ID of the units category.
|
|
26
|
+
|
|
27
|
+
Must be one of the following constants:
|
|
28
|
+
|
|
29
|
+
- UNITS_USCUSTOM = 0
|
|
30
|
+
- UNITS_SIMETRIC = 1
|
|
31
|
+
|
|
32
|
+
Returns
|
|
33
|
+
-------
|
|
34
|
+
`str`
|
|
35
|
+
Units category description.
|
|
36
|
+
"""
|
|
37
|
+
if unit_category_id is None:
|
|
38
|
+
return ""
|
|
39
|
+
elif unit_category_id == UNITS_USCUSTOM:
|
|
40
|
+
return "US CUSTOMARY"
|
|
41
|
+
elif unit_category_id == UNITS_SIMETRIC:
|
|
42
|
+
return "SI METRIC"
|
|
43
|
+
else:
|
|
44
|
+
raise ValueError(f"Unknown units category ID '{unit_category_id}'")
|
|
45
|
+
|
|
46
|
+
|
|
17
47
|
@serializable(NETWORK_TOPOLOGY_ID, ".epytflow_topology")
|
|
18
48
|
class NetworkTopology(nx.Graph, JsonSerializable):
|
|
19
49
|
"""
|
|
@@ -29,7 +59,7 @@ class NetworkTopology(nx.Graph, JsonSerializable):
|
|
|
29
59
|
List of all links/pipes -- i.e. link ID, ID of connecting nodes, and link information
|
|
30
60
|
such as pipe diameter, length, etc.
|
|
31
61
|
units : `int`
|
|
32
|
-
Measurement units category.
|
|
62
|
+
Measurement units category -- i.e. US Customary or SI Metric.
|
|
33
63
|
|
|
34
64
|
Must be one of the following constants:
|
|
35
65
|
|
|
@@ -63,6 +93,76 @@ class NetworkTopology(nx.Graph, JsonSerializable):
|
|
|
63
93
|
info={"id": link_id, "nodes": link, "diameter": link_diameter,
|
|
64
94
|
"length": link_length})
|
|
65
95
|
|
|
96
|
+
def convert_units(self, units: int) -> Any:
|
|
97
|
+
"""
|
|
98
|
+
Converts this instance to a :class:`epyt_flow.topology.NetworkTopology` instance
|
|
99
|
+
where everything is measured in given measurement units category
|
|
100
|
+
(US Customary or SI Metric).
|
|
101
|
+
|
|
102
|
+
Parameters
|
|
103
|
+
----------
|
|
104
|
+
units : `int`
|
|
105
|
+
Measurement units category.
|
|
106
|
+
|
|
107
|
+
Must be one of the following constants:
|
|
108
|
+
|
|
109
|
+
- UNITS_USCUSTOM = 0 (US Customary)
|
|
110
|
+
- UNITS_SIMETRIC = 1 (SI Metric)
|
|
111
|
+
|
|
112
|
+
Returns
|
|
113
|
+
-------
|
|
114
|
+
:class:`epyt_flow.topology.NetworkTopology`
|
|
115
|
+
Network topology with the new measurements units.
|
|
116
|
+
"""
|
|
117
|
+
if self.__units is None:
|
|
118
|
+
raise ValueError("This instance does not contain any units!")
|
|
119
|
+
|
|
120
|
+
if not isinstance(units, int):
|
|
121
|
+
raise TypeError(f"'units' must be an instance of 'int' but not of '{type(units)}'")
|
|
122
|
+
if units not in [UNITS_SIMETRIC, UNITS_USCUSTOM]:
|
|
123
|
+
raise ValueError(f"Invalid units '{units}'")
|
|
124
|
+
|
|
125
|
+
if units == self.__units:
|
|
126
|
+
warnings.warn("Units already set in this NetworkTopology instance -- nothing to do!")
|
|
127
|
+
return deepcopy(self)
|
|
128
|
+
|
|
129
|
+
# Get all data and convert units
|
|
130
|
+
inch_to_millimeter = 25.4
|
|
131
|
+
feet_to_meter = 0.3048
|
|
132
|
+
|
|
133
|
+
nodes = []
|
|
134
|
+
for node_id in self.get_all_nodes():
|
|
135
|
+
node_info = self.get_node_info(node_id)
|
|
136
|
+
if units == UNITS_USCUSTOM:
|
|
137
|
+
conv_factor = 1. / feet_to_meter
|
|
138
|
+
else:
|
|
139
|
+
conv_factor = feet_to_meter
|
|
140
|
+
node_info["elevation"] *= conv_factor
|
|
141
|
+
if "diameter" in node_info:
|
|
142
|
+
node_info["diameter"] *= conv_factor
|
|
143
|
+
|
|
144
|
+
nodes.append((node_id, node_info))
|
|
145
|
+
|
|
146
|
+
links = []
|
|
147
|
+
for link_id, link_nodes in self.get_all_links():
|
|
148
|
+
link_info = self.get_link_info(link_id)
|
|
149
|
+
|
|
150
|
+
if units == UNITS_USCUSTOM:
|
|
151
|
+
conv_factor = 1. / feet_to_meter
|
|
152
|
+
else:
|
|
153
|
+
conv_factor = feet_to_meter
|
|
154
|
+
link_info["length"] *= conv_factor
|
|
155
|
+
|
|
156
|
+
if units == UNITS_USCUSTOM:
|
|
157
|
+
conv_factor = 1. / inch_to_millimeter
|
|
158
|
+
else:
|
|
159
|
+
conv_factor = inch_to_millimeter
|
|
160
|
+
link_info["diameter"] *= conv_factor
|
|
161
|
+
|
|
162
|
+
links.append((link_id, link_nodes, link_info))
|
|
163
|
+
|
|
164
|
+
return NetworkTopology(f_inp=self.name, nodes=nodes, links=links, units=units)
|
|
165
|
+
|
|
66
166
|
def get_all_nodes(self) -> list[str]:
|
|
67
167
|
"""
|
|
68
168
|
Gets a list of all nodes.
|
|
@@ -85,7 +185,7 @@ class NetworkTopology(nx.Graph, JsonSerializable):
|
|
|
85
185
|
"""
|
|
86
186
|
return [(link_id, end_points) for link_id, end_points, _ in self.__links]
|
|
87
187
|
|
|
88
|
-
def get_node_info(self, node_id) -> dict:
|
|
188
|
+
def get_node_info(self, node_id: str) -> dict:
|
|
89
189
|
"""
|
|
90
190
|
Gets all information (e.g. elevation, type, etc.) associated with a given node.
|
|
91
191
|
|
|
@@ -105,7 +205,7 @@ class NetworkTopology(nx.Graph, JsonSerializable):
|
|
|
105
205
|
|
|
106
206
|
raise ValueError(f"Unknown node '{node_id}'")
|
|
107
207
|
|
|
108
|
-
def get_link_info(self, link_id) -> dict:
|
|
208
|
+
def get_link_info(self, link_id: str) -> dict:
|
|
109
209
|
"""
|
|
110
210
|
Gets all information (e.g. diameter, length, etc.) associated with a given link/pipe.
|
|
111
211
|
|
|
@@ -155,7 +255,7 @@ class NetworkTopology(nx.Graph, JsonSerializable):
|
|
|
155
255
|
|
|
156
256
|
def __str__(self) -> str:
|
|
157
257
|
return f"f_inp: {self.name} nodes: {self.__nodes} links: {self.__links} " +\
|
|
158
|
-
f"units: {self.__units}"
|
|
258
|
+
f"units: {unitscategoryid_to_str(self.__units)}"
|
|
159
259
|
|
|
160
260
|
def get_attributes(self) -> dict:
|
|
161
261
|
return super().get_attributes() | {"f_inp": self.name,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: epyt-flow
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: EPyT-Flow -- EPANET Python Toolkit - Flow
|
|
5
5
|
Author-email: André Artelt <aartelt@techfak.uni-bielefeld.de>, "Marios S. Kyriakou" <kiriakou.marios@ucy.ac.cy>, "Stelios G. Vrachimis" <vrachimis.stelios@ucy.ac.cy>
|
|
6
6
|
License: MIT License
|
|
@@ -32,8 +32,9 @@ Requires-Dist: falcon >=3.1.3
|
|
|
32
32
|
Requires-Dist: multiprocess >=0.70.16
|
|
33
33
|
Requires-Dist: psutil
|
|
34
34
|
|
|
35
|
-
[](https://opensource.org/licenses/MIT)
|
|
36
35
|
[](https://pypi.org/project/epyt-flow/)
|
|
36
|
+
[](https://opensource.org/licenses/MIT)
|
|
37
|
+

|
|
37
38
|
[](https://github.com/WaterFutures/EPyT-Flow/actions/workflows/build_tests.yml)
|
|
38
39
|
[](https://epyt-flow.readthedocs.io/en/stable/?badge=stable)
|
|
39
40
|
[](https://pepy.tech/project/epyt-flow)
|
|
@@ -41,6 +42,8 @@ Requires-Dist: psutil
|
|
|
41
42
|
|
|
42
43
|
# EPyT-Flow -- EPANET Python Toolkit - Flow
|
|
43
44
|
|
|
45
|
+
<img src="https://github.com/WaterFutures/EPyT-Flow/blob/main/docs/_static/net1_plot.png?raw=true" align="right" height="230px"/>
|
|
46
|
+
|
|
44
47
|
EPyT-Flow is a Python package building on top of [EPyT](https://github.com/OpenWaterAnalytics/EPyT)
|
|
45
48
|
for providing easy access to water distribution network simulations.
|
|
46
49
|
It aims to provide a high-level interface for the easy generation of hydraulic and water quality scenario data.
|
|
@@ -50,8 +53,6 @@ and [EPANET-MSX](https://github.com/USEPA/EPANETMSX/).
|
|
|
50
53
|
EPyT-Flow provides easy access to popular benchmark data sets for event detection and localization.
|
|
51
54
|
Furthermore, it also provides an environment for developing and testing control algorithms.
|
|
52
55
|
|
|
53
|
-

|
|
54
|
-
|
|
55
56
|
|
|
56
57
|
## Unique Features
|
|
57
58
|
|
|
@@ -74,8 +75,18 @@ Unique features of EPyT-Flow that make it superior to other (Python) toolboxes a
|
|
|
74
75
|
EPyT-Flow supports Python 3.9 - 3.12
|
|
75
76
|
|
|
76
77
|
Note that [EPANET and EPANET-MSX sources](epyt_flow/EPANET/) are compiled and overwrite the binaries
|
|
77
|
-
shipped by EPyT IF EPyT-Flow is installed on a
|
|
78
|
-
a better performance of the simulations but also avoid any
|
|
78
|
+
shipped by EPyT **IF** EPyT-Flow is installed on a Unix system and the *gcc* compiler is available.
|
|
79
|
+
By this, we not only aim to achieve a better performance of the simulations but also avoid any
|
|
80
|
+
compatibility issues of pre-compiled binaries.
|
|
81
|
+
|
|
82
|
+
#### Prerequisites for macOS users
|
|
83
|
+
The "true" *gcc* compiler (version 12) is needed which is not the
|
|
84
|
+
*clang* compiler that is shipped with Xcode and is linked to gcc!
|
|
85
|
+
|
|
86
|
+
The correct version of the "true" *gcc* can be installed via [brew](https://brew.sh/):
|
|
87
|
+
```
|
|
88
|
+
brew install gcc@12
|
|
89
|
+
```
|
|
79
90
|
|
|
80
91
|
### PyPI
|
|
81
92
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
epyt_flow/VERSION,sha256=
|
|
2
|
-
epyt_flow/__init__.py,sha256=
|
|
1
|
+
epyt_flow/VERSION,sha256=2RXMldbKj0euKXcT7UbU5cXZnd0p_Dxh4mO98wXytbA,6
|
|
2
|
+
epyt_flow/__init__.py,sha256=KNDiPWiHdB9a5ZF1ipjA1uoq61TwU2ThjaStpvSLBtY,1742
|
|
3
3
|
epyt_flow/metrics.py,sha256=kvt42pzZrUR9PSlCyK4uq5kj6UlYHkt7OcCjLnI1RQE,12883
|
|
4
4
|
epyt_flow/serialization.py,sha256=nBcwc3aMUbHF0zW8Nvpc49kKeLPh75blc3gzjKDR1ok,12893
|
|
5
|
-
epyt_flow/topology.py,sha256=
|
|
5
|
+
epyt_flow/topology.py,sha256=LTWqKwXVRfg3zYN16x5_ZH-wUj8U5hB2spLWzlEnsqM,14221
|
|
6
6
|
epyt_flow/utils.py,sha256=-1DFDpST_J86AB6pd2ufe_QQ06_tvQqB-5wD8DXacaU,11507
|
|
7
7
|
epyt_flow/EPANET/compile_linux.sh,sha256=wcrDyiB8NkivmaC-X9FI2WxhY3IJqDLiyIbVTv2XEPY,489
|
|
8
|
+
epyt_flow/EPANET/compile_macos.sh,sha256=1K33-bPdgr01EIf87YUvmOFHXyOkBWI6mKXQ8x1Hzmo,504
|
|
8
9
|
epyt_flow/EPANET/EPANET/SRC_engines/AUTHORS,sha256=yie5yAsEEPY0984PmkSRUdqEU9rVvRSGGWmjxdwCYMU,925
|
|
9
10
|
epyt_flow/EPANET/EPANET/SRC_engines/LICENSE,sha256=8SIIcPPO-ga2HotvptcK3uRccZOEGCeUOIU0Asiq7CU,1070
|
|
10
11
|
epyt_flow/EPANET/EPANET/SRC_engines/Readme_SRC_Engines.txt,sha256=7LWHGbghkYJb18wkIskUzYswRq0ZTMu_m6nV0IfvCOs,1005
|
|
@@ -79,14 +80,14 @@ epyt_flow/EPANET/EPANET-MSX/Src/smatrix.h,sha256=heHTNgQNNDTs_Jx0YBts7_B7dPg8VUF
|
|
|
79
80
|
epyt_flow/EPANET/EPANET-MSX/Src/include/epanetmsx.h,sha256=L9y0VKHk5Fg1JZxID9uBzcvLZWOb1xuQP-MkmHH_LD4,3429
|
|
80
81
|
epyt_flow/EPANET/EPANET-MSX/Src/include/epanetmsx_export.h,sha256=h5UMaf6pH_0asRJOmhWUGAZhyA180ui2Cz8_y5h1FKw,1054
|
|
81
82
|
epyt_flow/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
82
|
-
epyt_flow/data/networks.py,sha256=
|
|
83
|
+
epyt_flow/data/networks.py,sha256=Ct-3tNEJPq6EooGWHr_Hz4vkkNYjv-QgiSwNKOTZ-oM,38526
|
|
83
84
|
epyt_flow/data/benchmarks/__init__.py,sha256=nJ6hqPaPNp8YMizniev3fwOWpzvvNUBMoRF16wACUkE,754
|
|
84
85
|
epyt_flow/data/benchmarks/batadal.py,sha256=sa_OZwO5XIbJONgGMwgok-KCGyHq07WpIQagVq-a-gw,11175
|
|
85
86
|
epyt_flow/data/benchmarks/batadal_data.py,sha256=oIzcysGivMPAgrfzrk5l8i-j6Ii96DPcFa6sL4TSaw8,880
|
|
86
87
|
epyt_flow/data/benchmarks/battledim.py,sha256=K0j9tbfxuXJmqBQY_e5XBJZGDYavaOZ7efkCT96Fb8A,20167
|
|
87
88
|
epyt_flow/data/benchmarks/battledim_data.py,sha256=0vHm-2eAiLv6U-n5dqUUWS1o_szFRy9mVJ3eqDRp4PE,3373
|
|
88
89
|
epyt_flow/data/benchmarks/gecco_water_quality.py,sha256=1buZRJiNf4jsqWYg4Ud90GhqaiLVo4yij3RAZJkzsqE,10985
|
|
89
|
-
epyt_flow/data/benchmarks/leakdb.py,sha256=
|
|
90
|
+
epyt_flow/data/benchmarks/leakdb.py,sha256=jMMSxJ6XrjOo5b91sGwplT5mTcv3k9Xr-TnWz3BhMbw,24952
|
|
90
91
|
epyt_flow/data/benchmarks/leakdb_data.py,sha256=FNssgMkC1wqWVlaOrrihr4Od9trEZY7KeK5KuBeRMvM,507058
|
|
91
92
|
epyt_flow/data/benchmarks/water_usage.py,sha256=FLqjff3pha33oEU9ZM3UGPXn9eJJumsJH8Gdj7YFX3A,4778
|
|
92
93
|
epyt_flow/gym/__init__.py,sha256=KNTDtPTEtHwZ4ehHfj9qGw81Z9acFqPIgMzYUzH5_uM,115
|
|
@@ -96,13 +97,13 @@ epyt_flow/models/__init__.py,sha256=be5s08y1Tg66SuNYKGz5GnNMHThnQJo8SWJdT9493Kc,
|
|
|
96
97
|
epyt_flow/models/event_detector.py,sha256=idR7byBgloo07XEJEyMIwi49VW4wxJErLQtI-tJXWPs,789
|
|
97
98
|
epyt_flow/models/sensor_interpolation_detector.py,sha256=5MBK9WlliGPonrNApf0j9lp-NjwF0iTwPDXx4yv7Fa0,3624
|
|
98
99
|
epyt_flow/rest_api/__init__.py,sha256=4HilmXhdh6H56UHJBB2WUSULlEBUDnI1FPTP11ft3HE,126
|
|
99
|
-
epyt_flow/rest_api/base_handler.py,sha256=
|
|
100
|
+
epyt_flow/rest_api/base_handler.py,sha256=I5ZcSiCJOH9sY5Ai_CdvSZ8PMVblyxCd82beE_2Sjlo,2262
|
|
100
101
|
epyt_flow/rest_api/res_manager.py,sha256=j6-3FUBZNLKM9bCsIDZzSytfDYJbDLRwjn1mIPstTqI,2342
|
|
101
|
-
epyt_flow/rest_api/server.py,sha256=
|
|
102
|
+
epyt_flow/rest_api/server.py,sha256=kZlprvRw7op39s7KhtEt1TgAsqs94KTQEdzIW9NMMJc,7778
|
|
102
103
|
epyt_flow/rest_api/scada_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
103
104
|
epyt_flow/rest_api/scada_data/data_handlers.py,sha256=VpOQq_jb2d7CuZbPQ1lKfb5dd5UAkBp7H0mEtlDJMzo,10938
|
|
104
105
|
epyt_flow/rest_api/scada_data/export_handlers.py,sha256=m5gM1u7z-KFZ5SCSS0f2Fs6PpAT8FX3FvCS2mp7DmTA,4450
|
|
105
|
-
epyt_flow/rest_api/scada_data/handlers.py,sha256=
|
|
106
|
+
epyt_flow/rest_api/scada_data/handlers.py,sha256=tFVY11C3tolTkNVbXXBb0_KnHv38UE4fOUtnqkvec8Y,6893
|
|
106
107
|
epyt_flow/rest_api/scenario/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
107
108
|
epyt_flow/rest_api/scenario/event_handlers.py,sha256=oIqbXWQVqJp0MzE9V4UhGF4fXPF03oWbKEyLhC6g_Ko,3842
|
|
108
109
|
epyt_flow/rest_api/scenario/handlers.py,sha256=bDqMa-jM4hOMVqs0XvQJtHbQDZx9FP40GiEGwW38fGk,12353
|
|
@@ -110,29 +111,29 @@ epyt_flow/rest_api/scenario/simulation_handlers.py,sha256=oY1Ch6ZQgYT_5WeE1I7tvG
|
|
|
110
111
|
epyt_flow/rest_api/scenario/uncertainty_handlers.py,sha256=uuu6AP11ZZUp2P3Dnukjg5ZTjyYKljlubg1xLN1GnXY,4048
|
|
111
112
|
epyt_flow/simulation/__init__.py,sha256=VGGJqJRUoXZjKJ0-m6KPp3JQqD_1TFW0pofLgkwZJ8M,164
|
|
112
113
|
epyt_flow/simulation/parallel_simulation.py,sha256=mMevycgtnMjV2FDq50WS4HjAdcOlI72Aj6FBX4HZDtc,6508
|
|
113
|
-
epyt_flow/simulation/scenario_config.py,sha256=
|
|
114
|
-
epyt_flow/simulation/scenario_simulator.py,sha256=
|
|
114
|
+
epyt_flow/simulation/scenario_config.py,sha256=6xZD3Gwje-isiSaoKCXLkX0R81SVDH8LojsXdDlH8to,26540
|
|
115
|
+
epyt_flow/simulation/scenario_simulator.py,sha256=Yf2oo3fMfvxrrW3nX8d6y2plrNcGZ-DBK-5mpLtplms,92070
|
|
115
116
|
epyt_flow/simulation/scenario_visualizer.py,sha256=2gr1o731VLlhA8wQKgrLT94M43FsBNKjG_eucZPHy9A,2186
|
|
116
|
-
epyt_flow/simulation/sensor_config.py,sha256=
|
|
117
|
+
epyt_flow/simulation/sensor_config.py,sha256=9pUzvRm4HSF8zZ-Hu4pdpxzTjpNSdNmDvcPhRaRFNAI,80175
|
|
117
118
|
epyt_flow/simulation/events/__init__.py,sha256=tIdqzs7_Cus4X2kbZG4Jl2zs-zsk_4rnajFOCvL0zlI,185
|
|
118
119
|
epyt_flow/simulation/events/actuator_events.py,sha256=2_MPYbYO9As6fMkm5Oy9pjSB9kCvFuKpGu8ykYDAydg,7903
|
|
119
120
|
epyt_flow/simulation/events/event.py,sha256=kARPV20XCAl6zxnJwI9U7ICtZUPACO_rgAmtHm1mGCs,2603
|
|
120
|
-
epyt_flow/simulation/events/leakages.py,sha256=
|
|
121
|
+
epyt_flow/simulation/events/leakages.py,sha256=lDZNKOtVtQsKYhAuJ5Mt7tG6IfHX1436eSkjYTkQiZk,15267
|
|
121
122
|
epyt_flow/simulation/events/sensor_faults.py,sha256=XX6k-GJh9RWZ4x54eGj9um-Ir9Eq41tY_9pRSCeYeqc,8447
|
|
122
123
|
epyt_flow/simulation/events/sensor_reading_attack.py,sha256=bo5VavArN0wD5AHbIXJC9NFGZ7KR1uyWE6tBtwj0k9I,7538
|
|
123
124
|
epyt_flow/simulation/events/sensor_reading_event.py,sha256=rQ-CmdpSUyZzDFYwNUGH2jGoj0oyU-aAb-7E8Oshhqw,6785
|
|
124
125
|
epyt_flow/simulation/events/system_event.py,sha256=0KI2iaAaOyC9Y-FIfFVazeKT_4ORQRp26gWyMBUu_3c,2396
|
|
125
126
|
epyt_flow/simulation/scada/__init__.py,sha256=ZFAxJVqwEVsgiyFilFetnb13gPhZg1JEOPWYvKIJT4c,90
|
|
126
127
|
epyt_flow/simulation/scada/advanced_control.py,sha256=Enox02ggt36HdFLX7ZNxgxuqsTEeu9AACHrzU8CXGrg,4489
|
|
127
|
-
epyt_flow/simulation/scada/scada_data.py,sha256=
|
|
128
|
-
epyt_flow/simulation/scada/scada_data_export.py,sha256=
|
|
128
|
+
epyt_flow/simulation/scada/scada_data.py,sha256=NfGDGrQ7HIXTcShUaGeCALTvGmM5LAJW0Bgmk0H4UQg,104867
|
|
129
|
+
epyt_flow/simulation/scada/scada_data_export.py,sha256=YlA-6R6XpQ28POyKsw1eEe23gMAuDFvwBuDUN-ciu2Y,11213
|
|
129
130
|
epyt_flow/uncertainty/__init__.py,sha256=ZRjuJL9rDpWVSdPwObPxFpEmMTcgAl3VmPOsS6cIyGg,89
|
|
130
131
|
epyt_flow/uncertainty/model_uncertainty.py,sha256=DAgyfvdTQvOVMyduuPIpPB_8e3GIMNpehu6kh0jFg0s,13592
|
|
131
132
|
epyt_flow/uncertainty/sensor_noise.py,sha256=zJVULxnxVPSSqc6UW0iwZ9O-HGf9dn4CwScPqf4yCY0,2324
|
|
132
133
|
epyt_flow/uncertainty/uncertainties.py,sha256=X-o7GZUC0HELtzpoXIAJaAeYOw35N05TuRoSmStcCpI,17669
|
|
133
134
|
epyt_flow/uncertainty/utils.py,sha256=gq66c9-QMOxOqI6wgWLyFxjVV0fbG0_8Yzd6mQjNYNo,5315
|
|
134
|
-
epyt_flow-0.
|
|
135
|
-
epyt_flow-0.
|
|
136
|
-
epyt_flow-0.
|
|
137
|
-
epyt_flow-0.
|
|
138
|
-
epyt_flow-0.
|
|
135
|
+
epyt_flow-0.3.0.dist-info/LICENSE,sha256=-4hYIY2BLmCkdOv2_PehEwlnMKTCes8_oyIUXjKtkug,1076
|
|
136
|
+
epyt_flow-0.3.0.dist-info/METADATA,sha256=tnq12BhftSSxemSI93ONtLRs4K4eT8R_I71NENxUuX4,7053
|
|
137
|
+
epyt_flow-0.3.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
138
|
+
epyt_flow-0.3.0.dist-info/top_level.txt,sha256=Wh_kd7TRL8ownCw3Y3dxx-9C0iTSk6wNauv_NX9JcrY,10
|
|
139
|
+
epyt_flow-0.3.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|