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.
Files changed (153) hide show
  1. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/PKG-INFO +3 -3
  2. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/README.md +2 -2
  3. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/compile_macos.sh +2 -2
  4. epyt_flow-0.14.0/epyt_flow/VERSION +1 -0
  5. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/__init__.py +1 -1
  6. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/backend/my_epyt.py +58 -13
  7. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/scada/scada_data.py +9 -13
  8. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/scenario_simulator.py +99 -22
  9. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/uncertainty/uncertainties.py +2 -2
  10. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow.egg-info/PKG-INFO +3 -3
  11. epyt_flow-0.13.0/epyt_flow/VERSION +0 -1
  12. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/CITATION.cff +0 -0
  13. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/CODE_OF_CONDUCT.md +0 -0
  14. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/LICENSE +0 -0
  15. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/MANIFEST.in +0 -0
  16. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/REQUIREMENTS.txt +0 -0
  17. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/AUTHORS +0 -0
  18. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/LICENSE +0 -0
  19. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/Readme_SRC_Engines.txt +0 -0
  20. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/enumstxt.h +0 -0
  21. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/epanet.c +0 -0
  22. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/epanet2.c +0 -0
  23. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/epanet2.def +0 -0
  24. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/errors.dat +0 -0
  25. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/funcs.h +0 -0
  26. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/genmmd.c +0 -0
  27. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/hash.c +0 -0
  28. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/hash.h +0 -0
  29. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/hydcoeffs.c +0 -0
  30. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/hydraul.c +0 -0
  31. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/hydsolver.c +0 -0
  32. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/hydstatus.c +0 -0
  33. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/include/epanet2.h +0 -0
  34. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/include/epanet2_2.h +0 -0
  35. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/include/epanet2_enums.h +0 -0
  36. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/inpfile.c +0 -0
  37. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/input1.c +0 -0
  38. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/input2.c +0 -0
  39. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/input3.c +0 -0
  40. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/main.c +0 -0
  41. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/mempool.c +0 -0
  42. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/mempool.h +0 -0
  43. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/output.c +0 -0
  44. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/project.c +0 -0
  45. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/quality.c +0 -0
  46. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/qualreact.c +0 -0
  47. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/qualroute.c +0 -0
  48. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/report.c +0 -0
  49. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/rules.c +0 -0
  50. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/smatrix.c +0 -0
  51. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/text.h +0 -0
  52. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET/SRC_engines/types.h +0 -0
  53. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/MSX_Updates.txt +0 -0
  54. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/dispersion.h +0 -0
  55. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/hash.c +0 -0
  56. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/hash.h +0 -0
  57. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/include/epanetmsx.h +0 -0
  58. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/include/epanetmsx_export.h +0 -0
  59. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/mathexpr.c +0 -0
  60. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/mathexpr.h +0 -0
  61. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/mempool.c +0 -0
  62. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/mempool.h +0 -0
  63. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxchem.c +0 -0
  64. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxcompiler.c +0 -0
  65. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxdict.h +0 -0
  66. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxdispersion.c +0 -0
  67. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxerr.c +0 -0
  68. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxfile.c +0 -0
  69. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxfuncs.c +0 -0
  70. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxfuncs.h +0 -0
  71. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxinp.c +0 -0
  72. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxout.c +0 -0
  73. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxproj.c +0 -0
  74. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxqual.c +0 -0
  75. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxrpt.c +0 -0
  76. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxtank.c +0 -0
  77. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxtoolkit.c +0 -0
  78. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxtypes.h +0 -0
  79. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxutils.c +0 -0
  80. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/msxutils.h +0 -0
  81. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/newton.c +0 -0
  82. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/newton.h +0 -0
  83. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/rk5.c +0 -0
  84. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/rk5.h +0 -0
  85. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/ros2.c +0 -0
  86. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/ros2.h +0 -0
  87. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/smatrix.c +0 -0
  88. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/Src/smatrix.h +0 -0
  89. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/EPANET-MSX/readme.txt +0 -0
  90. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/EPANET/compile_linux.sh +0 -0
  91. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/__init__.py +0 -0
  92. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/benchmarks/__init__.py +0 -0
  93. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/benchmarks/batadal.py +0 -0
  94. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/benchmarks/batadal_data.py +0 -0
  95. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/benchmarks/battledim.py +0 -0
  96. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/benchmarks/battledim_data.py +0 -0
  97. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/benchmarks/gecco_water_quality.py +0 -0
  98. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/benchmarks/leakdb.py +0 -0
  99. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/benchmarks/leakdb_data.py +0 -0
  100. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/benchmarks/water_usage.py +0 -0
  101. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/data/networks.py +0 -0
  102. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/gym/__init__.py +0 -0
  103. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/gym/scenario_control_env.py +0 -0
  104. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/__init__.py +0 -0
  105. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/base_handler.py +0 -0
  106. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/res_manager.py +0 -0
  107. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/scada_data/__init__.py +0 -0
  108. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/scada_data/data_handlers.py +0 -0
  109. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/scada_data/export_handlers.py +0 -0
  110. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/scada_data/handlers.py +0 -0
  111. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/scenario/__init__.py +0 -0
  112. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/scenario/control_handlers.py +0 -0
  113. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/scenario/event_handlers.py +0 -0
  114. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/scenario/handlers.py +0 -0
  115. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/scenario/simulation_handlers.py +0 -0
  116. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/scenario/uncertainty_handlers.py +0 -0
  117. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/rest_api/server.py +0 -0
  118. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/serialization.py +0 -0
  119. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/__init__.py +0 -0
  120. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/backend/__init__.py +0 -0
  121. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/events/__init__.py +0 -0
  122. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/events/actuator_events.py +0 -0
  123. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/events/event.py +0 -0
  124. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/events/leakages.py +0 -0
  125. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/events/quality_events.py +0 -0
  126. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/events/sensor_faults.py +0 -0
  127. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/events/sensor_reading_attack.py +0 -0
  128. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/events/sensor_reading_event.py +0 -0
  129. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/events/system_event.py +0 -0
  130. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/parallel_simulation.py +0 -0
  131. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/scada/__init__.py +0 -0
  132. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/scada/complex_control.py +0 -0
  133. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/scada/custom_control.py +0 -0
  134. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/scada/scada_data_export.py +0 -0
  135. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/scada/simple_control.py +0 -0
  136. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/scenario_config.py +0 -0
  137. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/simulation/sensor_config.py +0 -0
  138. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/topology.py +0 -0
  139. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/uncertainty/__init__.py +0 -0
  140. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/uncertainty/model_uncertainty.py +0 -0
  141. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/uncertainty/sensor_noise.py +0 -0
  142. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/uncertainty/utils.py +0 -0
  143. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/utils.py +0 -0
  144. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/visualization/__init__.py +0 -0
  145. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/visualization/scenario_visualizer.py +0 -0
  146. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow/visualization/visualization_utils.py +0 -0
  147. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow.egg-info/SOURCES.txt +0 -0
  148. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow.egg-info/dependency_links.txt +0 -0
  149. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow.egg-info/requires.txt +0 -0
  150. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/epyt_flow.egg-info/top_level.txt +0 -0
  151. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/pyproject.toml +0 -0
  152. {epyt_flow-0.13.0 → epyt_flow-0.14.0}/setup.cfg +0 -0
  153. {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.13.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 12) is needed which is not the
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@12
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 12) is needed which is not the
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@12
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-12 -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-12 -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
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-12")
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) -> None:
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, **kwds):
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 set_error_handling(self, raise_on_error: bool) -> None:
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.__raise_on_error:
165
- raise RuntimeError(self.__last_error_desc)
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, **kwds):
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) -> None:
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.__raise_on_error:
357
- raise RuntimeError(self.__last_error_desc)
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
- warnings.warn("Loading a file that was created with an outdated version of EPyT-Flow" +
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.__sensor_readings_time.tolist().index(start_time)
1752
- end_idx = self.__sensor_readings_time.tolist().index(end_time) + 1
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 = nodes_id.index(node_id)
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 = nodes_id.index(node_id)
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 = nodes_id.index(node_id)
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 = all_nodes_id.index(node_id)
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