epyt-flow 0.13.0__tar.gz → 0.14.0__tar.gz
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-0.13.0 → epyt_flow-0.14.0}/PKG-INFO +3 -3
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/README.md +2 -2
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/compile_macos.sh +2 -2
- epyt_flow-0.14.0/epyt_flow/VERSION +1 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/__init__.py +1 -1
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/backend/my_epyt.py +58 -13
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/scada/scada_data.py +9 -13
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/scenario_simulator.py +99 -22
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/uncertainty/uncertainties.py +2 -2
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow.egg-info/PKG-INFO +3 -3
- epyt_flow-0.13.0/epyt_flow/VERSION +0 -1
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/CITATION.cff +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/CODE_OF_CONDUCT.md +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/LICENSE +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/MANIFEST.in +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/REQUIREMENTS.txt +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/AUTHORS +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/LICENSE +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/Readme_SRC_Engines.txt +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/enumstxt.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/epanet.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/epanet2.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/epanet2.def +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/errors.dat +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/funcs.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/genmmd.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/hash.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/hash.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/hydcoeffs.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/hydraul.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/hydsolver.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/hydstatus.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/include/epanet2.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/include/epanet2_2.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/include/epanet2_enums.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/inpfile.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/input1.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/input2.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/input3.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/main.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/mempool.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/mempool.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/output.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/project.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/quality.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/qualreact.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/qualroute.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/report.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/rules.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/smatrix.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/text.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/types.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/MSX_Updates.txt +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/dispersion.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/hash.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/hash.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/include/epanetmsx.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/include/epanetmsx_export.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/mathexpr.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/mathexpr.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/mempool.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/mempool.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxchem.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxcompiler.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxdict.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxdispersion.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxerr.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxfile.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxfuncs.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxfuncs.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxinp.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxout.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxproj.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxqual.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxrpt.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxtank.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxtoolkit.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxtypes.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxutils.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxutils.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/newton.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/newton.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/rk5.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/rk5.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/ros2.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/ros2.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/smatrix.c +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/smatrix.h +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/readme.txt +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/compile_linux.sh +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/__init__.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/benchmarks/__init__.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/benchmarks/batadal.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/benchmarks/batadal_data.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/benchmarks/battledim.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/benchmarks/battledim_data.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/benchmarks/gecco_water_quality.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/benchmarks/leakdb.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/benchmarks/leakdb_data.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/benchmarks/water_usage.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/networks.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/gym/__init__.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/gym/scenario_control_env.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/__init__.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/base_handler.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/res_manager.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/scada_data/__init__.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/scada_data/data_handlers.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/scada_data/export_handlers.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/scada_data/handlers.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/scenario/__init__.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/scenario/control_handlers.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/scenario/event_handlers.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/scenario/handlers.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/scenario/simulation_handlers.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/scenario/uncertainty_handlers.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/server.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/serialization.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/__init__.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/backend/__init__.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/events/__init__.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/events/actuator_events.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/events/event.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/events/leakages.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/events/quality_events.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/events/sensor_faults.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/events/sensor_reading_attack.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/events/sensor_reading_event.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/events/system_event.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/parallel_simulation.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/scada/__init__.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/scada/complex_control.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/scada/custom_control.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/scada/scada_data_export.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/scada/simple_control.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/scenario_config.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/sensor_config.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/topology.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/uncertainty/__init__.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/uncertainty/model_uncertainty.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/uncertainty/sensor_noise.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/uncertainty/utils.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/utils.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/visualization/__init__.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/visualization/scenario_visualizer.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/visualization/visualization_utils.py +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow.egg-info/SOURCES.txt +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow.egg-info/dependency_links.txt +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow.egg-info/requires.txt +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow.egg-info/top_level.txt +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/pyproject.toml +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/setup.cfg +0 -0
- {epyt_flow-0.13.0 → epyt_flow-0.14.0}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: epyt-flow
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.14.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-Expression: MIT
|
|
@@ -85,12 +85,12 @@ By this, we not only aim to achieve a better performance of the simulations but
|
|
|
85
85
|
compatibility issues of pre-compiled binaries.
|
|
86
86
|
|
|
87
87
|
#### Prerequisites for macOS users
|
|
88
|
-
The "true" *gcc* compiler (version
|
|
88
|
+
The "true" *gcc* compiler (version 15) is needed which is not the
|
|
89
89
|
*clang* compiler that is shipped with Xcode and is linked to gcc!
|
|
90
90
|
|
|
91
91
|
The correct version of the "true" *gcc* can be installed via [brew](https://brew.sh/):
|
|
92
92
|
```
|
|
93
|
-
brew install gcc@
|
|
93
|
+
brew install gcc@15
|
|
94
94
|
```
|
|
95
95
|
|
|
96
96
|
### PyPI
|
|
@@ -47,12 +47,12 @@ By this, we not only aim to achieve a better performance of the simulations but
|
|
|
47
47
|
compatibility issues of pre-compiled binaries.
|
|
48
48
|
|
|
49
49
|
#### Prerequisites for macOS users
|
|
50
|
-
The "true" *gcc* compiler (version
|
|
50
|
+
The "true" *gcc* compiler (version 15) is needed which is not the
|
|
51
51
|
*clang* compiler that is shipped with Xcode and is linked to gcc!
|
|
52
52
|
|
|
53
53
|
The correct version of the "true" *gcc* can be installed via [brew](https://brew.sh/):
|
|
54
54
|
```
|
|
55
|
-
brew install gcc@
|
|
55
|
+
brew install gcc@15
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
### PyPI
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
mkdir -p "../customlibs/"
|
|
3
|
-
gcc-
|
|
4
|
-
gcc-
|
|
3
|
+
gcc-15 -w -O3 -march=native -dynamiclib -fPIC -install_name libepanet2_2.dylib -o "../customlibs/libepanet2_2.dylib" EPANET/SRC_engines/*.c -IEPANET/SRC_engines/include -lc -lm -pthread
|
|
4
|
+
gcc-15 -w -O3 -march=native -dynamiclib -fPIC -install_name libepanetmsx2_2_0.dylib -o "../customlibs/libepanetmsx2_2_0.dylib" -fopenmp -Depanetmsx_EXPORTS -IEPANET-MSX/Src/include -IEPANET/SRC_engines/include EPANET-MSX/Src/*.c -L'../customlibs' -lepanet2_2 -lm -lgomp -lpthread
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.14.0
|
|
@@ -39,4 +39,4 @@ def compile_libraries_unix(lib_epanet_name: str, compile_script_name: str,
|
|
|
39
39
|
if sys.platform.startswith("linux"):
|
|
40
40
|
compile_libraries_unix("libepanet2_2.so", "compile_linux.sh")
|
|
41
41
|
elif sys.platform.startswith("darwin"):
|
|
42
|
-
compile_libraries_unix("libepanet2_2.dylib", "compile_macos.sh", gcc_name="gcc-
|
|
42
|
+
compile_libraries_unix("libepanet2_2.dylib", "compile_macos.sh", gcc_name="gcc-15")
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""
|
|
2
2
|
This module contains a wrapper for EPyT that allows a better error/warning handling.
|
|
3
3
|
"""
|
|
4
|
+
import warnings
|
|
4
5
|
from ctypes import byref, create_string_buffer
|
|
5
6
|
from epyt import epanet
|
|
6
7
|
from epyt.epanet import epanetapi, epanetmsxapi
|
|
@@ -30,6 +31,10 @@ class EPyT(epanet):
|
|
|
30
31
|
self.LibEPANETpath = self.api.LibEPANETpath
|
|
31
32
|
self.LibEPANET = self.api.LibEPANET
|
|
32
33
|
|
|
34
|
+
def _logFunctionError(self, function_name):
|
|
35
|
+
# Do not print warnings.
|
|
36
|
+
pass
|
|
37
|
+
|
|
33
38
|
def loadMSXFile(self, msxname, customMSXlib=None, ignore_properties=False):
|
|
34
39
|
super().loadMSXFile(msxname, customMSXlib, ignore_properties)
|
|
35
40
|
|
|
@@ -40,17 +45,25 @@ class EPyT(epanet):
|
|
|
40
45
|
msxrealfile=self.MSXFile)
|
|
41
46
|
return self.msx
|
|
42
47
|
|
|
43
|
-
def set_error_handling(self, raise_exception_on_error: bool
|
|
48
|
+
def set_error_handling(self, raise_exception_on_error: bool, warn_on_error: bool,
|
|
49
|
+
ignore_error_codes: list[int]) -> None:
|
|
44
50
|
"""
|
|
45
51
|
Specifies the behavior in the case of an error/warning --
|
|
46
|
-
i.e. should an exception be raised or not?
|
|
52
|
+
i.e. should an exception or warning be raised or not?
|
|
47
53
|
|
|
48
54
|
Parameters
|
|
49
55
|
----------
|
|
50
56
|
raise_exception_on_error : `bool`
|
|
51
57
|
True if an exception should be raise, False otherwise.
|
|
58
|
+
warn_on_error : `bool`
|
|
59
|
+
True if a warning should be generated, False otherwise.
|
|
60
|
+
ignore_error_codes : `list[int]`
|
|
61
|
+
List of error codes that should be ignored -- i.e., no exception or
|
|
62
|
+
warning will be generated.
|
|
52
63
|
"""
|
|
53
|
-
self.api.set_error_handling(raise_exception_on_error)
|
|
64
|
+
self.api.set_error_handling(raise_exception_on_error, warn_on_error, ignore_error_codes)
|
|
65
|
+
if self.msx is not None:
|
|
66
|
+
self.msx.set_error_handling(raise_exception_on_error, warn_on_error, ignore_error_codes)
|
|
54
67
|
|
|
55
68
|
def was_last_func_successful(self) -> bool:
|
|
56
69
|
"""
|
|
@@ -96,24 +109,39 @@ class MyEpanetMsxAPI(epanetmsxapi):
|
|
|
96
109
|
Wrapper for the `epyt.epanet.epanetmsxapi <https://epanet-python-toolkit-epyt.readthedocs.io/en/latest/api.html#epyt.epanet.epanetmsxapi>`_
|
|
97
110
|
class adding error/warning storage functionalities.
|
|
98
111
|
"""
|
|
99
|
-
def __init__(self, raise_on_error: bool = True,
|
|
112
|
+
def __init__(self, raise_on_error: bool = True, warn_on_error: bool = False,
|
|
113
|
+
ignore_error_codes: list[int] = [], **kwds):
|
|
100
114
|
self.__raise_on_error = raise_on_error
|
|
115
|
+
self.__warn_on_error = warn_on_error
|
|
116
|
+
self.__ignore_error_codes = ignore_error_codes
|
|
101
117
|
self.__last_error_code = None
|
|
102
118
|
self.__last_error_desc = None
|
|
103
119
|
|
|
104
120
|
super().__init__(**kwds)
|
|
105
121
|
|
|
106
|
-
def
|
|
122
|
+
def _logFunctionError(self, function_name):
|
|
123
|
+
# Do not print warnings.
|
|
124
|
+
pass
|
|
125
|
+
|
|
126
|
+
def set_error_handling(self, raise_on_error: bool, warn_on_error: bool,
|
|
127
|
+
ignore_error_codes: list[int] = []) -> None:
|
|
107
128
|
"""
|
|
108
129
|
Specifies the behavior in the case of an error/warning --
|
|
109
|
-
i.e. should an exception be raised or not?
|
|
130
|
+
i.e. should an exception or warning be raised or not?
|
|
110
131
|
|
|
111
132
|
Parameters
|
|
112
133
|
----------
|
|
113
134
|
raise_exception_on_error : `bool`
|
|
114
135
|
True if an exception should be raise, False otherwise.
|
|
136
|
+
warn_on_error : `bool`
|
|
137
|
+
True if a warning should be generated, False otherwise.
|
|
138
|
+
ignore_error_codes : `list[int]`
|
|
139
|
+
List of error codes that should be ignored -- i.e., no exception or
|
|
140
|
+
warning will be generated.
|
|
115
141
|
"""
|
|
116
142
|
self.__raise_on_error = raise_on_error
|
|
143
|
+
self.__warn_on_error = warn_on_error
|
|
144
|
+
self.__ignore_error_codes = ignore_error_codes
|
|
117
145
|
|
|
118
146
|
def get_last_error_desc(self) -> str:
|
|
119
147
|
"""
|
|
@@ -161,8 +189,11 @@ class MyEpanetMsxAPI(epanetmsxapi):
|
|
|
161
189
|
self.__last_error_code = err_code
|
|
162
190
|
self.__last_error_desc = error_desc.value.decode()
|
|
163
191
|
|
|
164
|
-
if self.
|
|
165
|
-
|
|
192
|
+
if self.__last_error_code not in self.__ignore_error_codes:
|
|
193
|
+
if self.__warn_on_error:
|
|
194
|
+
warnings.warn(self.__last_error_desc, RuntimeWarning)
|
|
195
|
+
if self.__raise_on_error:
|
|
196
|
+
raise RuntimeError(self.__last_error_desc)
|
|
166
197
|
|
|
167
198
|
def MSXopen(self, msxfile, msxrealfile):
|
|
168
199
|
self._reset_error()
|
|
@@ -286,24 +317,35 @@ class MyEpanetAPI(epanetapi):
|
|
|
286
317
|
Wrapper for the `epyt.epanet.epanetapi <https://epanet-python-toolkit-epyt.readthedocs.io/en/latest/api.html#epyt.epanet.epanetapi>`_
|
|
287
318
|
class adding error/warning storage functionalities.
|
|
288
319
|
"""
|
|
289
|
-
def __init__(self, raise_on_error: bool = True,
|
|
320
|
+
def __init__(self, raise_on_error: bool = True, warn_on_error: bool = False,
|
|
321
|
+
ignore_error_codes: list[int] = [], **kwds):
|
|
290
322
|
self.__raise_on_error = raise_on_error
|
|
323
|
+
self.__warn_on_error = warn_on_error
|
|
324
|
+
self.__ignore_error_codes = ignore_error_codes
|
|
291
325
|
self.__last_error_code = None
|
|
292
326
|
self.__last_error_desc = None
|
|
293
327
|
|
|
294
328
|
super().__init__(**kwds)
|
|
295
329
|
|
|
296
|
-
def set_error_handling(self, raise_on_error: bool
|
|
330
|
+
def set_error_handling(self, raise_on_error: bool, warn_on_error: bool,
|
|
331
|
+
ignore_error_codes: list[int] = []) -> None:
|
|
297
332
|
"""
|
|
298
333
|
Specifies the behavior in the case of an error/warning --
|
|
299
|
-
i.e. should an exception be raised or not?
|
|
334
|
+
i.e. should an exception or warning be raised or not?
|
|
300
335
|
|
|
301
336
|
Parameters
|
|
302
337
|
----------
|
|
303
338
|
raise_exception_on_error : `bool`
|
|
304
339
|
True if an exception should be raise, False otherwise.
|
|
340
|
+
warn_on_error : `bool`
|
|
341
|
+
True if a warning should be generated, False otherwise.
|
|
342
|
+
ignore_error_codes : `list[int]`
|
|
343
|
+
List of error codes that should be ignored -- i.e., no exception or
|
|
344
|
+
warning will be generated.
|
|
305
345
|
"""
|
|
306
346
|
self.__raise_on_error = raise_on_error
|
|
347
|
+
self.__warn_on_error = warn_on_error
|
|
348
|
+
self.__ignore_error_codes = ignore_error_codes
|
|
307
349
|
|
|
308
350
|
def get_last_error_desc(self) -> str:
|
|
309
351
|
"""
|
|
@@ -353,8 +395,11 @@ class MyEpanetAPI(epanetapi):
|
|
|
353
395
|
self.__last_error_code = self.errcode
|
|
354
396
|
self.__last_error_desc = error_desc.value.decode()
|
|
355
397
|
|
|
356
|
-
if self.
|
|
357
|
-
|
|
398
|
+
if self.__last_error_code not in self.__ignore_error_codes:
|
|
399
|
+
if self.__warn_on_error:
|
|
400
|
+
warnings.warn(self.__last_error_desc, RuntimeWarning)
|
|
401
|
+
if self.__raise_on_error:
|
|
402
|
+
raise RuntimeError(self.__last_error_desc)
|
|
358
403
|
|
|
359
404
|
def ENepanet(self, inpfile="", rptfile="", binfile=""):
|
|
360
405
|
self._reset_error()
|
|
@@ -167,9 +167,7 @@ class ScadaData(Serializable):
|
|
|
167
167
|
raise TypeError("'sensor_readings_time' must be an instance of 'numpy.ndarray' " +
|
|
168
168
|
f"but not of '{type(sensor_readings_time)}'")
|
|
169
169
|
if warnings_code is None:
|
|
170
|
-
|
|
171
|
-
" -- support of such old files will be removed in the next release!",
|
|
172
|
-
DeprecationWarning)
|
|
170
|
+
warnings_code = [0] * len(sensor_readings_time)
|
|
173
171
|
else:
|
|
174
172
|
if not isinstance(warnings_code, np.ndarray):
|
|
175
173
|
raise TypeError("'warnings_code' must be an instance of 'numpy.ndarray' " +
|
|
@@ -376,6 +374,8 @@ class ScadaData(Serializable):
|
|
|
376
374
|
self.__sensor_readings = None
|
|
377
375
|
self.__frozen_sensor_config = frozen_sensor_config
|
|
378
376
|
self.__sensor_readings_time = sensor_readings_time
|
|
377
|
+
self.__sensor_readings_time_to_idx = {time: idx for idx, time in
|
|
378
|
+
enumerate(self.__sensor_readings_time)}
|
|
379
379
|
|
|
380
380
|
if self.__frozen_sensor_config is False:
|
|
381
381
|
self.__pressure_data_raw = pressure_data_raw
|
|
@@ -1748,8 +1748,8 @@ class ScadaData(Serializable):
|
|
|
1748
1748
|
else:
|
|
1749
1749
|
end_time = self.__sensor_readings_time[-1]
|
|
1750
1750
|
|
|
1751
|
-
start_idx = self.
|
|
1752
|
-
end_idx = self.
|
|
1751
|
+
start_idx = self.__sensor_readings_time_to_idx[start_time]
|
|
1752
|
+
end_idx = self.__sensor_readings_time_to_idx[end_time] + 1
|
|
1753
1753
|
|
|
1754
1754
|
pressure_data_raw = None
|
|
1755
1755
|
if self.__pressure_data_raw is not None:
|
|
@@ -2375,11 +2375,10 @@ class ScadaData(Serializable):
|
|
|
2375
2375
|
mask = np.zeros(len(self.__sensor_config.nodes))
|
|
2376
2376
|
node_features = np.array([[default_missing_value] * len(self.__sensor_config.nodes)
|
|
2377
2377
|
for _ in range(len(self.__sensor_readings_time))])
|
|
2378
|
-
nodes_id = self.__network_topo.get_all_nodes()
|
|
2379
2378
|
|
|
2380
2379
|
pressure_readings = self.get_data_pressures()
|
|
2381
2380
|
for pressures_idx, node_id in enumerate(self.__sensor_config.pressure_sensors):
|
|
2382
|
-
idx =
|
|
2381
|
+
idx = self.__sensor_config.map_node_id_to_idx(node_id)
|
|
2383
2382
|
node_features[:, idx] = pressure_readings[:, pressures_idx]
|
|
2384
2383
|
mask[idx] = 1
|
|
2385
2384
|
|
|
@@ -2617,11 +2616,10 @@ class ScadaData(Serializable):
|
|
|
2617
2616
|
mask = np.zeros(len(self.__sensor_config.nodes))
|
|
2618
2617
|
node_features = np.array([[default_missing_value] * len(self.__sensor_config.nodes)
|
|
2619
2618
|
for _ in range(len(self.__sensor_readings_time))])
|
|
2620
|
-
nodes_id = self.__network_topo.get_all_nodes()
|
|
2621
2619
|
|
|
2622
2620
|
demand_readings = self.get_data_demands()
|
|
2623
2621
|
for demands_idx, node_id in enumerate(self.__sensor_config.demand_sensors):
|
|
2624
|
-
idx =
|
|
2622
|
+
idx = self.__sensor_config.map_node_id_to_idx(node_id)
|
|
2625
2623
|
node_features[:, idx] = demand_readings[:, demands_idx]
|
|
2626
2624
|
mask[idx] = 1
|
|
2627
2625
|
|
|
@@ -2737,11 +2735,10 @@ class ScadaData(Serializable):
|
|
|
2737
2735
|
mask = np.zeros(len(self.__sensor_config.nodes))
|
|
2738
2736
|
node_features = np.array([[default_missing_value] * len(self.__sensor_config.nodes)
|
|
2739
2737
|
for _ in range(len(self.__sensor_readings_time))])
|
|
2740
|
-
nodes_id = self.__network_topo.get_all_nodes()
|
|
2741
2738
|
|
|
2742
2739
|
node_quality_readings = self.get_data_nodes_quality()
|
|
2743
2740
|
for quality_idx, node_id in enumerate(self.__sensor_config.quality_node_sensors):
|
|
2744
|
-
idx =
|
|
2741
|
+
idx = self.__sensor_config.map_node_id_to_idx(node_id)
|
|
2745
2742
|
node_features[:, idx] = node_quality_readings[:, quality_idx]
|
|
2746
2743
|
mask[idx] = 1
|
|
2747
2744
|
|
|
@@ -3752,7 +3749,6 @@ class ScadaData(Serializable):
|
|
|
3752
3749
|
masks = []
|
|
3753
3750
|
results = []
|
|
3754
3751
|
|
|
3755
|
-
all_nodes_id = self.__network_topo.get_all_nodes()
|
|
3756
3752
|
bulk_species_sensor_locations = self.__sensor_config.bulk_species_node_sensors
|
|
3757
3753
|
|
|
3758
3754
|
for species_id, nodes_id in bulk_species_sensor_locations.items():
|
|
@@ -3762,7 +3758,7 @@ class ScadaData(Serializable):
|
|
|
3762
3758
|
|
|
3763
3759
|
sensor_readings = self.get_data_bulk_species_node_concentration({species_id: nodes_id})
|
|
3764
3760
|
for sensor_readings_idx, node_id in enumerate(nodes_id):
|
|
3765
|
-
idx =
|
|
3761
|
+
idx = self.__sensor_config.map_node_id_to_idx(node_id)
|
|
3766
3762
|
node_features[:, idx] = sensor_readings[:, sensor_readings_idx]
|
|
3767
3763
|
mask[idx] = 1
|
|
3768
3764
|
|