Skip to main content

pypi License: MIT PyPI - Python Version build Documentation Status Downloads Downloads DOI

EPyT-Flow -- EPANET Python Toolkit - Flow

EPyT-Flow is a Python package building on top of EPANET-PLUS -- an extension and interface of EPANET and EPANET-MSX -- for providing easy access to water distribution network simulations. It aims to provide a high-level interface for the easy generation of hydraulic and water quality scenario data. However, it also provides access to all functions of EPANET and EPANET-MSX.

EPyT-Flow provides easy access to popular benchmark data sets for event detection and localization. Furthermore, it also provides an environment for developing and testing control algorithms.

Unique Features

Unique features of EPyT-Flow that make it superior to other (Python) toolboxes are the following:

  • High-performance hydraulic and (advanced) water quality simulation
  • High- and low-level interface
  • Object-orientated design that is easy to extend and customize
  • Sensor configurations
  • Wide variety of pre-defined events (e.g. leakages, sensor faults, actuator events, contamination, cyber-attacks, etc.)
  • Wide variety of pre-defined types of global & local uncertainties (e.g. model uncertainties)
  • Step-wise simulation and environment for training and evaluating control strategies
  • Serialization module for easy exchange of data and (scenario) configurations
  • REST API to make EPyT-Flow accessible in other applications
  • Access to many WDNs and popular benchmarks (incl. their evaluation)

Installation

EPyT-Flow supports Python 3.10 - 3.14

Note that EPyT-Flow builds upon EPANET-PLUS which constitutes a C extension and Python package. In the rare case that the pre-build package of EPANET-PLUS does not work on your system, you have to build and install it manually -- please follow the instructions provided here.

PyPI

pip install epyt-flow

Git

Download or clone the repository:

git clone https://github.com/WaterFutures/EPyT-Flow.git
cd EPyT-Flow

Install all requirements as listed in REQUIREMENTS.txt:

pip install -r REQUIREMENTS.txt

Install the toolbox:

pip install .

Quick Example

Open In Colab
from epyt_flow.data.benchmarks import load_leakdb_scenarios
from epyt_flow.simulation import ScenarioSimulator
from epyt_flow.utils import to_seconds


if __name__ == "__main__":
    # Load first Hanoi scenario from LeakDB
    network_config, = load_leakdb_scenarios(scenarios_id=["1"], use_net1=False)

    # Create scenario
    with ScenarioSimulator(scenario_config=network_config) as sim:
        # Set simulation duration to two days
        sim.set_general_parameters(simulation_duration=to_seconds(days=2))

        # Place pressure sensors at nodes "13", "16", "22", and "30"
        sim.set_pressure_sensors(sensor_locations=["13", "16", "22", "30"])

        # Place a flow sensor at link/pipe "1"
        sim.set_flow_sensors(sensor_locations=["1"])

        # Run entire simulation
        scada_data = sim.run_simulation()

        # Print & plot sensor readings over the entire simulation
        print(f"Pressure readings: {scada_data.get_data_pressures()}")
        scada_data.plot_pressures()

        print(f"Flow readings: {scada_data.get_data_flows()}")
        scada_data.plot_flows()

Generated plots

Documentation

Documentation is available on readthedocs: https://epyt-flow.readthedocs.io/en/latest/

How to Get Started?

EPyT-Flow is accompanied by an extensive documentation https://epyt-flow.readthedocs.io/en/latest/ (including many examples).

If you are new to water distribution networks, we recommend first to read the chapter on Modeling of Water Distribution Networks. You might also want to check out some lecture notes on Smart Water Systems.

If you are already familiar with WDNs (and software such as EPANET), we recommend checking out our WDSA CCWI 2024 tutorial which not only teaches you how to use EPyT and EPyT-Flow but also contains some examples of applying Machine Learning in WDNs. Besides that, you can read in-depth about the different functionalities of EPyT-Flow in the In-depth Tutorial of the documentation -- we recommend reading the chapters in the order in which they are presented; you might decide to skip some of the last chapters if their content is not relevant to you.

More Networks and Benchmarks

More Water Distribution Networks (WDNs) and benchmarks are available on the WaterBenchmarkHub platform.

More on Control

We recommend checking out EPyT-Control if you are intersted in (data-driven) control and relates tasks such as state estimation and event diagnosis in Water Distribution Networks.

License

MIT license -- see LICENSE

How to Cite?

If you use this software, please cite it as follows:

@article{Artelt2024,
    doi = {10.21105/joss.07104},
    url = {https://doi.org/10.21105/joss.07104},
    year = {2024},
    publisher = {The Open Journal},
    volume = {9},
    number = {103},
    pages = {7104},
    author = {André Artelt and Marios S. Kyriakou and Stelios G. Vrachimis and Demetrios G. Eliades and Barbara Hammer and Marios M. Polycarpou},
    title = {EPyT-Flow: A Toolkit for Generating Water Distribution Network Data},
    journal = {Journal of Open Source Software}
}

How to get Support?

If you come across any bug or need assistance please feel free to open a new issue if non of the existing issues answers your questions.

How to Contribute?

Contributions (e.g. creating issues, pull-requests, etc.) are welcome -- please make sure to read the code of conduct and follow the developers' guidelines.

Release files for epyt-flow 0.17.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for epyt-flow 0.17.2
File Size Uploaded
epyt_flow-0.17.2.tar.gz 222.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for epyt-flow 0.17.2
File Interpreter ABI Platform
epyt_flow-0.17.2-py3-none-any.whl Python 3 none any Details

Total release size: 466.6 kB

Release files / epyt_flow-0.17.2.tar.gz

Download URL epyt_flow-0.17.2.tar.gz
Size 222.0 kB
Tags Source
SHA-256 checksum
How to use checksums
b23c2cd570e5928d2b9a54145f31baab57aeca7abc8c9b66d7f58a0e948eddfc
BLAKE2b-256 checksum
How to use checksums
d129c393662e761eeac701d511f7a38f7480ab1e65c778c0d7fbea0fd1949cb3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.13

Release files / epyt_flow-0.17.2-py3-none-any.whl

Download URL epyt_flow-0.17.2-py3-none-any.whl
Size 244.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
86f67eedaad296f0ade37e14d917d42c8cf97e98dc06000be3c1bea09467453d
BLAKE2b-256 checksum
How to use checksums
dba929ebe99b4b6204f89e2a045fc860ff67ae1d2ab2fa08187360c359e520b9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.13
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page