epyt-flow 0.5.0__py3-none-any.whl → 0.7.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/VERSION +1 -1
- epyt_flow/data/benchmarks/battledim.py +6 -2
- epyt_flow/data/benchmarks/leakdb.py +11 -9
- epyt_flow/data/networks.py +1 -2
- epyt_flow/gym/scenario_control_env.py +101 -6
- epyt_flow/metrics.py +66 -4
- epyt_flow/serialization.py +46 -3
- epyt_flow/simulation/scada/advanced_control.py +1 -1
- epyt_flow/simulation/scada/scada_data.py +160 -62
- epyt_flow/simulation/scenario_config.py +6 -2
- epyt_flow/simulation/scenario_simulator.py +362 -65
- epyt_flow/simulation/sensor_config.py +186 -15
- epyt_flow/topology.py +93 -5
- epyt_flow/uncertainty/uncertainties.py +8 -0
- epyt_flow/utils.py +69 -2
- {epyt_flow-0.5.0.dist-info → epyt_flow-0.7.0.dist-info}/METADATA +49 -6
- {epyt_flow-0.5.0.dist-info → epyt_flow-0.7.0.dist-info}/RECORD +20 -20
- {epyt_flow-0.5.0.dist-info → epyt_flow-0.7.0.dist-info}/WHEEL +1 -1
- {epyt_flow-0.5.0.dist-info → epyt_flow-0.7.0.dist-info}/LICENSE +0 -0
- {epyt_flow-0.5.0.dist-info → epyt_flow-0.7.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: epyt-flow
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.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
|
|
@@ -20,7 +20,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
20
20
|
Requires-Python: >=3.9
|
|
21
21
|
Description-Content-Type: text/markdown
|
|
22
22
|
License-File: LICENSE
|
|
23
|
-
Requires-Dist: epyt >=1.
|
|
23
|
+
Requires-Dist: epyt >=1.2.0
|
|
24
24
|
Requires-Dist: requests >=2.31.0
|
|
25
25
|
Requires-Dist: scipy >=1.11.4
|
|
26
26
|
Requires-Dist: u-msgpack-python >=2.8.0
|
|
@@ -121,7 +121,7 @@ pip install .
|
|
|
121
121
|
```python
|
|
122
122
|
from epyt_flow.data.benchmarks import load_leakdb_scenarios
|
|
123
123
|
from epyt_flow.simulation import ScenarioSimulator
|
|
124
|
-
from epyt_flow.utils import to_seconds
|
|
124
|
+
from epyt_flow.utils import to_seconds, plot_timeseries_data
|
|
125
125
|
|
|
126
126
|
|
|
127
127
|
if __name__ == "__main__":
|
|
@@ -142,14 +142,49 @@ if __name__ == "__main__":
|
|
|
142
142
|
# Run entire simulation
|
|
143
143
|
scada_data = sim.run_simulation()
|
|
144
144
|
|
|
145
|
-
#
|
|
145
|
+
# Print & plot sensor readings over the entire simulation
|
|
146
146
|
print(f"Pressure readings: {scada_data.get_data_pressures()}")
|
|
147
|
+
plot_timeseries_data(scada_data.get_data_pressures().T,
|
|
148
|
+
labels=[f"Node {n_id}" for n_id in
|
|
149
|
+
scada_data.sensor_config.pressure_sensors],
|
|
150
|
+
x_axis_label="Time (30min steps)",
|
|
151
|
+
y_axis_label="Pressure in $m$")
|
|
152
|
+
|
|
147
153
|
print(f"Flow readings: {scada_data.get_data_flows()}")
|
|
154
|
+
plot_timeseries_data(scada_data.get_data_flows().T,
|
|
155
|
+
x_axis_label="Time (30min steps)",
|
|
156
|
+
y_axis_label="Flow rate in $m^3/h$")
|
|
148
157
|
```
|
|
158
|
+
### Generated plots
|
|
159
|
+
|
|
160
|
+
<div>
|
|
161
|
+
<img src="https://github.com/WaterFutures/EPyT-Flow/blob/dev/docs/_static/examples_basic_usage_pressure.png?raw=true" width="49%"/>
|
|
162
|
+
<img src="https://github.com/WaterFutures/EPyT-Flow/blob/dev/docs/_static/examples_basic_usage_flow.png?raw=true" width="49%"/>
|
|
163
|
+
</div>
|
|
149
164
|
|
|
150
165
|
## Documentation
|
|
151
166
|
|
|
152
|
-
Documentation is available on readthedocs:[https://epyt-flow.readthedocs.io/en/latest/](https://epyt-flow.readthedocs.io/en/stable)
|
|
167
|
+
Documentation is available on readthedocs: [https://epyt-flow.readthedocs.io/en/latest/](https://epyt-flow.readthedocs.io/en/stable)
|
|
168
|
+
|
|
169
|
+
## How to Get Started?
|
|
170
|
+
|
|
171
|
+
EPyT-Flow is accompanied by an extensive documentation
|
|
172
|
+
[https://epyt-flow.readthedocs.io/en/latest/](https://epyt-flow.readthedocs.io/en/stable)
|
|
173
|
+
(including many [examples](https://epyt-flow.readthedocs.io/en/stable/#examples)).
|
|
174
|
+
|
|
175
|
+
If you are new to water distribution networks, we recommend first to read the chapter on
|
|
176
|
+
[Modeling of Water Distribution Networks](https://epyt-flow.readthedocs.io/en/stable/tut.intro.html).
|
|
177
|
+
You might also want to check out some lecture notes on
|
|
178
|
+
[Smart Water Systems](https://github.com/KIOS-Research/ece808-smart-water-systems).
|
|
179
|
+
|
|
180
|
+
If you are already familiar with WDNs (and software such as EPANET), we recommend checking out
|
|
181
|
+
our [WDSA CCWI 2024 tutorial](https://github.com/WaterFutures/EPyT-and-EPyT-Flow-Tutorial) which
|
|
182
|
+
not only teaches you how to use EPyT and EPyT-Flow but also contains some examples of applying
|
|
183
|
+
Machine Learning in WDNs.
|
|
184
|
+
Besides that, you can read in-depth about the different functionalities of EPyT-Flow in the
|
|
185
|
+
[In-depth Tutorial](https://epyt-flow.readthedocs.io/en/stable/tutorial.html) of the documentation --
|
|
186
|
+
we recommend reading the chapters in the order in which they are presented;
|
|
187
|
+
you might decide to skip some of the last chapters if their content is not relevant to you.
|
|
153
188
|
|
|
154
189
|
## License
|
|
155
190
|
|
|
@@ -170,6 +205,14 @@ If you use this software, please cite it as follows:
|
|
|
170
205
|
}
|
|
171
206
|
```
|
|
172
207
|
|
|
208
|
+
## How to get Support?
|
|
209
|
+
|
|
210
|
+
If you come across any bug or need assistance please feel free to open a new
|
|
211
|
+
[issue](https://github.com/WaterFutures/EPyT-Flow/issues/)
|
|
212
|
+
if non of the existing issues answers your questions.
|
|
213
|
+
|
|
173
214
|
## How to Contribute?
|
|
174
215
|
|
|
175
|
-
Contributions (e.g. creating issues, pull-requests, etc.) are welcome --
|
|
216
|
+
Contributions (e.g. creating issues, pull-requests, etc.) are welcome --
|
|
217
|
+
please make sure to read the [code of conduct](CODE_OF_CONDUCT.md) and
|
|
218
|
+
follow the [developers' guidelines](DEVELOPERS.md).
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
epyt_flow/VERSION,sha256=
|
|
1
|
+
epyt_flow/VERSION,sha256=ln2a-xATRmZxZvLnboGRC8GQSI19QdUMoAcunZLwDjI,6
|
|
2
2
|
epyt_flow/__init__.py,sha256=KNDiPWiHdB9a5ZF1ipjA1uoq61TwU2ThjaStpvSLBtY,1742
|
|
3
|
-
epyt_flow/metrics.py,sha256=
|
|
4
|
-
epyt_flow/serialization.py,sha256=
|
|
5
|
-
epyt_flow/topology.py,sha256=
|
|
6
|
-
epyt_flow/utils.py,sha256=
|
|
3
|
+
epyt_flow/metrics.py,sha256=W-dolnrmWfoanyvg-knoe2QMUtFwV1xODp4D4EwsQ00,14261
|
|
4
|
+
epyt_flow/serialization.py,sha256=ltWcLiTw62s0KG2DSgkQBkn6CCkxy9soDGq_ENohkrI,13998
|
|
5
|
+
epyt_flow/topology.py,sha256=8gqgJrKxw0zY69sIKo4NxrQAoXHP1Ni00U2DV09vR6g,25275
|
|
6
|
+
epyt_flow/utils.py,sha256=GJDktl7ciUPJxqMg9f2nCnQf6DosNd2mxeKOy7omkik,15196
|
|
7
7
|
epyt_flow/EPANET/compile_linux.sh,sha256=wcrDyiB8NkivmaC-X9FI2WxhY3IJqDLiyIbVTv2XEPY,489
|
|
8
8
|
epyt_flow/EPANET/compile_macos.sh,sha256=1K33-bPdgr01EIf87YUvmOFHXyOkBWI6mKXQ8x1Hzmo,504
|
|
9
9
|
epyt_flow/EPANET/EPANET/SRC_engines/AUTHORS,sha256=yie5yAsEEPY0984PmkSRUdqEU9rVvRSGGWmjxdwCYMU,925
|
|
@@ -80,19 +80,19 @@ epyt_flow/EPANET/EPANET-MSX/Src/smatrix.h,sha256=heHTNgQNNDTs_Jx0YBts7_B7dPg8VUF
|
|
|
80
80
|
epyt_flow/EPANET/EPANET-MSX/Src/include/epanetmsx.h,sha256=L9y0VKHk5Fg1JZxID9uBzcvLZWOb1xuQP-MkmHH_LD4,3429
|
|
81
81
|
epyt_flow/EPANET/EPANET-MSX/Src/include/epanetmsx_export.h,sha256=h5UMaf6pH_0asRJOmhWUGAZhyA180ui2Cz8_y5h1FKw,1054
|
|
82
82
|
epyt_flow/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
83
|
-
epyt_flow/data/networks.py,sha256=
|
|
83
|
+
epyt_flow/data/networks.py,sha256=ieL_rIQ21Wqm4_Ois2IyI54Qkv0R2FbbQfqA4MtsmQA,38393
|
|
84
84
|
epyt_flow/data/benchmarks/__init__.py,sha256=nJ6hqPaPNp8YMizniev3fwOWpzvvNUBMoRF16wACUkE,754
|
|
85
85
|
epyt_flow/data/benchmarks/batadal.py,sha256=sa_OZwO5XIbJONgGMwgok-KCGyHq07WpIQagVq-a-gw,11175
|
|
86
86
|
epyt_flow/data/benchmarks/batadal_data.py,sha256=oIzcysGivMPAgrfzrk5l8i-j6Ii96DPcFa6sL4TSaw8,880
|
|
87
|
-
epyt_flow/data/benchmarks/battledim.py,sha256=
|
|
87
|
+
epyt_flow/data/benchmarks/battledim.py,sha256=yLwiQB0x7yq197XSM77tjHm7E7ucTbrybFaNxZx2TtM,20448
|
|
88
88
|
epyt_flow/data/benchmarks/battledim_data.py,sha256=0vHm-2eAiLv6U-n5dqUUWS1o_szFRy9mVJ3eqDRp4PE,3373
|
|
89
89
|
epyt_flow/data/benchmarks/gecco_water_quality.py,sha256=1buZRJiNf4jsqWYg4Ud90GhqaiLVo4yij3RAZJkzsqE,10985
|
|
90
|
-
epyt_flow/data/benchmarks/leakdb.py,sha256=
|
|
90
|
+
epyt_flow/data/benchmarks/leakdb.py,sha256=iNgGVTQT7Sl8xXC1iCyTZTJ0OHXW_n5uqsM7NBTIBHU,25046
|
|
91
91
|
epyt_flow/data/benchmarks/leakdb_data.py,sha256=FNssgMkC1wqWVlaOrrihr4Od9trEZY7KeK5KuBeRMvM,507058
|
|
92
92
|
epyt_flow/data/benchmarks/water_usage.py,sha256=FLqjff3pha33oEU9ZM3UGPXn9eJJumsJH8Gdj7YFX3A,4778
|
|
93
93
|
epyt_flow/gym/__init__.py,sha256=KNTDtPTEtHwZ4ehHfj9qGw81Z9acFqPIgMzYUzH5_uM,115
|
|
94
94
|
epyt_flow/gym/control_gyms.py,sha256=xbq1gjUC2i-TR_0jXBxXFM24lo_ykHLqMEEpmXPaGq0,1281
|
|
95
|
-
epyt_flow/gym/scenario_control_env.py,sha256=
|
|
95
|
+
epyt_flow/gym/scenario_control_env.py,sha256=vOadWpjpdcdwcypu0vy0DBkJZODsXnT1tArGQsmsgoM,6789
|
|
96
96
|
epyt_flow/models/__init__.py,sha256=be5s08y1Tg66SuNYKGz5GnNMHThnQJo8SWJdT9493Kc,75
|
|
97
97
|
epyt_flow/models/event_detector.py,sha256=idR7byBgloo07XEJEyMIwi49VW4wxJErLQtI-tJXWPs,789
|
|
98
98
|
epyt_flow/models/sensor_interpolation_detector.py,sha256=5MBK9WlliGPonrNApf0j9lp-NjwF0iTwPDXx4yv7Fa0,3624
|
|
@@ -111,10 +111,10 @@ epyt_flow/rest_api/scenario/simulation_handlers.py,sha256=oY1Ch6ZQgYT_5WeE1I7tvG
|
|
|
111
111
|
epyt_flow/rest_api/scenario/uncertainty_handlers.py,sha256=uuu6AP11ZZUp2P3Dnukjg5ZTjyYKljlubg1xLN1GnXY,4048
|
|
112
112
|
epyt_flow/simulation/__init__.py,sha256=VGGJqJRUoXZjKJ0-m6KPp3JQqD_1TFW0pofLgkwZJ8M,164
|
|
113
113
|
epyt_flow/simulation/parallel_simulation.py,sha256=VmC7xemjxRB_N0fx1AAQ7ux82tnyTi7jk7jfFpeg7gM,6523
|
|
114
|
-
epyt_flow/simulation/scenario_config.py,sha256=
|
|
115
|
-
epyt_flow/simulation/scenario_simulator.py,sha256=
|
|
114
|
+
epyt_flow/simulation/scenario_config.py,sha256=NyadeCihpR4bpsWVPj7J-1DU2w1CEN0pAo2yh0t8Xkg,26751
|
|
115
|
+
epyt_flow/simulation/scenario_simulator.py,sha256=VYYUlpukvD9vLs8zmZWTb7-HCrmQlydxw52JyHiWKzE,105251
|
|
116
116
|
epyt_flow/simulation/scenario_visualizer.py,sha256=fpj67zl69q-byg7Oxocqhmu1S3P7B3ROCkSYzWyM--0,2187
|
|
117
|
-
epyt_flow/simulation/sensor_config.py,sha256=
|
|
117
|
+
epyt_flow/simulation/sensor_config.py,sha256=rX13QQv-OBoybCSJZR0gBsGP0GejBAuJ8BRDULKMIDU,90946
|
|
118
118
|
epyt_flow/simulation/events/__init__.py,sha256=tIdqzs7_Cus4X2kbZG4Jl2zs-zsk_4rnajFOCvL0zlI,185
|
|
119
119
|
epyt_flow/simulation/events/actuator_events.py,sha256=2_MPYbYO9As6fMkm5Oy9pjSB9kCvFuKpGu8ykYDAydg,7903
|
|
120
120
|
epyt_flow/simulation/events/event.py,sha256=kARPV20XCAl6zxnJwI9U7ICtZUPACO_rgAmtHm1mGCs,2603
|
|
@@ -124,16 +124,16 @@ epyt_flow/simulation/events/sensor_reading_attack.py,sha256=bo5VavArN0wD5AHbIXJC
|
|
|
124
124
|
epyt_flow/simulation/events/sensor_reading_event.py,sha256=rQ-CmdpSUyZzDFYwNUGH2jGoj0oyU-aAb-7E8Oshhqw,6785
|
|
125
125
|
epyt_flow/simulation/events/system_event.py,sha256=0KI2iaAaOyC9Y-FIfFVazeKT_4ORQRp26gWyMBUu_3c,2396
|
|
126
126
|
epyt_flow/simulation/scada/__init__.py,sha256=ZFAxJVqwEVsgiyFilFetnb13gPhZg1JEOPWYvKIJT4c,90
|
|
127
|
-
epyt_flow/simulation/scada/advanced_control.py,sha256=
|
|
128
|
-
epyt_flow/simulation/scada/scada_data.py,sha256=
|
|
127
|
+
epyt_flow/simulation/scada/advanced_control.py,sha256=5h7dmSMcNlTE7TMZa8gQVnOCGMf7uZy60r9aOfKDxMc,4487
|
|
128
|
+
epyt_flow/simulation/scada/scada_data.py,sha256=SlJEcAB06JNCZBl0IO8nv-axamcvznzUAg5SwCdjc2U,110591
|
|
129
129
|
epyt_flow/simulation/scada/scada_data_export.py,sha256=0BwDgV-5qZx17wIyWQ8Nl2TPgho3mBI49027RDq8sDA,11217
|
|
130
130
|
epyt_flow/uncertainty/__init__.py,sha256=ZRjuJL9rDpWVSdPwObPxFpEmMTcgAl3VmPOsS6cIyGg,89
|
|
131
131
|
epyt_flow/uncertainty/model_uncertainty.py,sha256=-2QT2AffZerKZyZ_w_mmeqYpfBALyPDvV61sCrvcK1o,13966
|
|
132
132
|
epyt_flow/uncertainty/sensor_noise.py,sha256=zJVULxnxVPSSqc6UW0iwZ9O-HGf9dn4CwScPqf4yCY0,2324
|
|
133
|
-
epyt_flow/uncertainty/uncertainties.py,sha256=
|
|
133
|
+
epyt_flow/uncertainty/uncertainties.py,sha256=jzaAwv5--HGc-H4-SwB0s-pAnzhhFuc06IXck7rC5l8,17902
|
|
134
134
|
epyt_flow/uncertainty/utils.py,sha256=gq66c9-QMOxOqI6wgWLyFxjVV0fbG0_8Yzd6mQjNYNo,5315
|
|
135
|
-
epyt_flow-0.
|
|
136
|
-
epyt_flow-0.
|
|
137
|
-
epyt_flow-0.
|
|
138
|
-
epyt_flow-0.
|
|
139
|
-
epyt_flow-0.
|
|
135
|
+
epyt_flow-0.7.0.dist-info/LICENSE,sha256=-4hYIY2BLmCkdOv2_PehEwlnMKTCes8_oyIUXjKtkug,1076
|
|
136
|
+
epyt_flow-0.7.0.dist-info/METADATA,sha256=UCqXTyaYY6EEBHf85PKDVH2sFglzFvWK-30vBrGP2mI,9420
|
|
137
|
+
epyt_flow-0.7.0.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
|
138
|
+
epyt_flow-0.7.0.dist-info/top_level.txt,sha256=Wh_kd7TRL8ownCw3Y3dxx-9C0iTSk6wNauv_NX9JcrY,10
|
|
139
|
+
epyt_flow-0.7.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|