{"id":46235972,"url":"https://github.com/waterfutures/epyt-flow","last_synced_at":"2026-03-03T19:01:28.520Z","repository":{"id":238967039,"uuid":"738986318","full_name":"WaterFutures/EPyT-Flow","owner":"WaterFutures","description":"A Python package designed for the easy generation of hydraulic and water quality scenario data of water distribution networks.","archived":false,"fork":false,"pushed_at":"2026-02-27T07:34:16.000Z","size":8097,"stargazers_count":38,"open_issues_count":0,"forks_count":8,"subscribers_count":6,"default_branch":"dev","last_synced_at":"2026-03-02T11:33:47.728Z","etag":null,"topics":["epanet","epanet-python-toolkit","hydraulics","python","simulation","water","water-distribution-networks"],"latest_commit_sha":null,"homepage":"https://epyt-flow.readthedocs.io/en/stable","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/WaterFutures.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-01-04T14:07:18.000Z","updated_at":"2026-02-27T07:34:20.000Z","dependencies_parsed_at":"2024-05-21T09:37:21.251Z","dependency_job_id":"625e3ff6-ef87-4366-8fe8-760679bbaa60","html_url":"https://github.com/WaterFutures/EPyT-Flow","commit_stats":{"total_commits":484,"total_committers":4,"mean_commits":121.0,"dds":"0.10330578512396693","last_synced_commit":"a793ae1cc5f79964f05e376ccea0876ea4e655c8"},"previous_names":["waterfutures/epyt-flow"],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/WaterFutures/EPyT-Flow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WaterFutures%2FEPyT-Flow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WaterFutures%2FEPyT-Flow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WaterFutures%2FEPyT-Flow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WaterFutures%2FEPyT-Flow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WaterFutures","download_url":"https://codeload.github.com/WaterFutures/EPyT-Flow/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WaterFutures%2FEPyT-Flow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30056056,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-03T18:21:05.932Z","status":"ssl_error","status_checked_at":"2026-03-03T18:20:59.341Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["epanet","epanet-python-toolkit","hydraulics","python","simulation","water","water-distribution-networks"],"created_at":"2026-03-03T19:01:27.969Z","updated_at":"2026-03-03T19:01:28.515Z","avatar_url":"https://github.com/WaterFutures.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![pypi](https://img.shields.io/pypi/v/epyt-flow.svg)](https://pypi.org/project/epyt-flow/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/epyt-flow)\n[![build](https://github.com/WaterFutures/EPyT-Flow/actions/workflows/build_tests.yml/badge.svg)](https://github.com/WaterFutures/EPyT-Flow/actions/workflows/build_tests.yml)\n[![Documentation Status](https://readthedocs.org/projects/epyt-flow/badge/?version=stable)](https://epyt-flow.readthedocs.io/en/stable/?badge=stable)\n[![Downloads](https://static.pepy.tech/badge/epyt-flow)](https://pepy.tech/project/epyt-flow)\n[![Downloads](https://static.pepy.tech/badge/epyt-flow/month)](https://pepy.tech/project/epyt-flow)\n[![DOI](https://joss.theoj.org/papers/10.21105/joss.07104/status.svg)](https://doi.org/10.21105/joss.07104)\n\n# EPyT-Flow -- EPANET Python Toolkit - Flow\n\n\u003cimg src=\"https://github.com/WaterFutures/EPyT-Flow/blob/main/docs/_static/net1_plot.png?raw=true\" align=\"right\" height=\"230px\"/\u003e\n\nEPyT-Flow is a Python package building on top of [EPANET-PLUS](https://github.com/WaterFutures/EPANET-PLUS) --\nan extension and interface of [EPANET](https://github.com/OpenWaterAnalytics/EPANET)\nand [EPANET-MSX](https://github.com/OpenWaterAnalytics/epanet-msx) -- \nfor providing easy access to water distribution network simulations.\nIt aims to provide a high-level interface for the easy generation of hydraulic and water quality scenario data.\nHowever, it also provides access to all functions of EPANET\nand EPANET-MSX.\n\nEPyT-Flow provides easy access to popular benchmark data sets for event detection and localization.\nFurthermore, it also provides an environment for developing and testing control algorithms.\n\n\n## Unique Features\n\nUnique features of EPyT-Flow that make it superior to other (Python) toolboxes are the following:\n\n- High-performance hydraulic and (advanced) water quality simulation\n- High- and low-level interface\n- Object-orientated design that is easy to extend and customize\n- Sensor configurations\n- Wide variety of pre-defined events (e.g. leakages, sensor faults, actuator events, contamination, cyber-attacks, etc.)\n- Wide variety of pre-defined types of global \u0026 local uncertainties (e.g. model uncertainties)\n- Step-wise simulation and environment for training and evaluating control strategies\n- Serialization module for easy exchange of data and (scenario) configurations\n- REST API to make EPyT-Flow accessible in other applications\n- Access to many WDNs and popular benchmarks (incl. their evaluation)\n\n\n## Installation\n\nEPyT-Flow supports Python 3.10 - 3.14\n\nNote that EPyT-Flow builds upon [EPANET-PLUS](https://github.com/WaterFutures/EPANET-PLUS) which\nconstitutes a C extension and Python package.\nIn the rare case that the pre-build package of EPANET-PLUS does not work on your system,\nyou have to build and install it manually -- please follow the instructions provided\n[here](https://epanet-plus.readthedocs.io/en/stable/installation.html).\n\n### PyPI\n\n```\npip install epyt-flow\n```\n\n### Git\nDownload or clone the repository:\n```\ngit clone https://github.com/WaterFutures/EPyT-Flow.git\ncd EPyT-Flow\n```\n\nInstall all requirements as listed in [REQUIREMENTS.txt](REQUIREMENTS.txt):\n```\npip install -r REQUIREMENTS.txt\n```\n\nInstall the toolbox:\n```\npip install .\n```\n\n## Quick Example\n\n\u003ca target=\"_blank\" href=\"https://colab.research.google.com/github/WaterFutures/EPyT-Flow/blob/main/docs/examples/basic_usage.ipynb\"\u003e\n\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/\u003e\n\u003c/a\u003e\n\n```python\nfrom epyt_flow.data.benchmarks import load_leakdb_scenarios\nfrom epyt_flow.simulation import ScenarioSimulator\nfrom epyt_flow.utils import to_seconds\n\n\nif __name__ == \"__main__\":\n    # Load first Hanoi scenario from LeakDB\n    network_config, = load_leakdb_scenarios(scenarios_id=[\"1\"], use_net1=False)\n\n    # Create scenario\n    with ScenarioSimulator(scenario_config=network_config) as sim:\n        # Set simulation duration to two days\n        sim.set_general_parameters(simulation_duration=to_seconds(days=2))\n\n        # Place pressure sensors at nodes \"13\", \"16\", \"22\", and \"30\"\n        sim.set_pressure_sensors(sensor_locations=[\"13\", \"16\", \"22\", \"30\"])\n\n        # Place a flow sensor at link/pipe \"1\"\n        sim.set_flow_sensors(sensor_locations=[\"1\"])\n\n        # Run entire simulation\n        scada_data = sim.run_simulation()\n\n        # Print \u0026 plot sensor readings over the entire simulation\n        print(f\"Pressure readings: {scada_data.get_data_pressures()}\")\n        scada_data.plot_pressures()\n\n        print(f\"Flow readings: {scada_data.get_data_flows()}\")\n        scada_data.plot_flows()\n```\n### Generated plots\n\n\u003cdiv\u003e\n    \u003cimg src=\"https://github.com/WaterFutures/EPyT-Flow/blob/dev/docs/_static/examples_basic_usage_pressure.png?raw=true\" width=\"49%\"/\u003e\n    \u003cimg src=\"https://github.com/WaterFutures/EPyT-Flow/blob/dev/docs/_static/examples_basic_usage_flow.png?raw=true\" width=\"49%\"/\u003e\n\u003c/div\u003e\n\n## Documentation\n\nDocumentation is available on readthedocs: [https://epyt-flow.readthedocs.io/en/latest/](https://epyt-flow.readthedocs.io/en/stable)\n\n## How to Get Started?\n\nEPyT-Flow is accompanied by an extensive documentation\n[https://epyt-flow.readthedocs.io/en/latest/](https://epyt-flow.readthedocs.io/en/stable)\n(including many [examples](https://epyt-flow.readthedocs.io/en/stable/#examples)).\n\nIf you are new to water distribution networks, we recommend first to read the chapter on\n[Modeling of Water Distribution Networks](https://epyt-flow.readthedocs.io/en/stable/tut.intro.html).\nYou might also want to check out some lecture notes on\n[Smart Water Systems](https://github.com/KIOS-Research/ece808-smart-water-systems).\n\nIf you are already familiar with WDNs (and software such as EPANET), we recommend checking out\nour [WDSA CCWI 2024 tutorial](https://github.com/WaterFutures/EPyT-and-EPyT-Flow-Tutorial) which\nnot only teaches you how to use EPyT and EPyT-Flow but also contains some examples of applying\nMachine Learning in WDNs.\nBesides that, you can read in-depth about the different functionalities of EPyT-Flow in the\n[In-depth Tutorial](https://epyt-flow.readthedocs.io/en/stable/tutorial.html) of the documentation --\nwe recommend reading the chapters in the order in which they are presented;\nyou might decide to skip some of the last chapters if their content is not relevant to you.\n\n## More Networks and Benchmarks\n\nMore Water Distribution Networks (WDNs) and benchmarks are available on the\n[WaterBenchmarkHub](https://waterfutures.github.io/WaterBenchmarkHub) platform.\n\n## More on Control\n\nWe recommend checking out [EPyT-Control](https://github.com/WaterFutures/EPyT-Control)\nif you are intersted in (data-driven) control and relates tasks such as state estimation\nand event diagnosis in Water Distribution Networks.\n\n## License\n\nMIT license -- see [LICENSE](LICENSE)\n\n## How to Cite?\n\nIf you use this software, please cite it as follows:\n\n```bibtex\n@article{Artelt2024,\n    doi = {10.21105/joss.07104},\n    url = {https://doi.org/10.21105/joss.07104},\n    year = {2024},\n    publisher = {The Open Journal},\n    volume = {9},\n    number = {103},\n    pages = {7104},\n    author = {André Artelt and Marios S. Kyriakou and Stelios G. Vrachimis and Demetrios G. Eliades and Barbara Hammer and Marios M. Polycarpou},\n    title = {EPyT-Flow: A Toolkit for Generating Water Distribution Network Data},\n    journal = {Journal of Open Source Software}\n}\n```\n\n## How to get Support?\n\nIf you come across any bug or need assistance please feel free to open a new\n[issue](https://github.com/WaterFutures/EPyT-Flow/issues/)\nif non of the existing issues answers your questions.\n\n## How to Contribute?\n\nContributions (e.g. creating issues, pull-requests, etc.) are welcome --\nplease make sure to read the [code of conduct](CODE_OF_CONDUCT.md) and\nfollow the [developers' guidelines](DEVELOPERS.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwaterfutures%2Fepyt-flow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwaterfutures%2Fepyt-flow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwaterfutures%2Fepyt-flow/lists"}