Skip to main content

Hydraulic Engine

Testing CI - Test
Package PyPI Latest Release PyPI Downloads
Meta License - GNU GPL3

Python toolkit to run SWMM and EPANET simulations, work with their input and result files, and export results to a Giswater PostgreSQL database or a FROST SensorThings endpoint.

Features

  • Run SWMM (pyswmm) and EPANET (WNTR) simulations, with optional progress callbacks
  • Read and write SWMM / EPANET INP models
  • Read SWMM RPT and OUT results, and EPANET BIN results
  • Export simulation results to PostgreSQL (Giswater) or FROST
  • Connect to PostgreSQL, SQLite, and GeoPackage

Installation

pip install hydraulic-engine

From source:

git clone https://github.com/Giswater/hydraulic-engine.git
cd hydraulic-engine
pip install -e .

For development:

pip install -e ".[dev]"

Quick start

Run a simulation

import hydraulic_engine as he
from hydraulic_engine.utils.enums import RunStatus

# SWMM
swmm = he.swmm.SwmmRunner(inp_path="drainage.inp")
swmm_result = swmm.run()

# EPANET
epanet = he.epanet.EpanetRunner(inp_path="network.inp")
epanet_result = epanet.run()

if swmm_result.status == RunStatus.SUCCESS:
    print(f"SWMM finished in {swmm_result.duration_seconds:.2f}s")

Pass progress_callback=fn to either runner to receive progress updates during the run.

Work with model files

from hydraulic_engine.swmm import SwmmInpHandler
from hydraulic_engine.epanet import EpanetInpHandler

swmm_inp = SwmmInpHandler()
swmm_inp.load_file("drainage.inp")
print(swmm_inp.get_summary())

epanet_inp = EpanetInpHandler()
epanet_inp.load_file("network.inp")
print(epanet_inp.get_summary())

Result files use the matching handlers: SwmmRptHandler, SwmmOutHandler, and EpanetBinHandler.

Export results

After a successful run, push results to the database or to FROST:

import hydraulic_engine as he

runner = he.swmm.SwmmRunner(inp_path="drainage.inp")
runner.run()

dao = he.create_pg_connection(
    host="localhost",
    port=5432,
    dbname="hydraulic_db",
    user="user",
    password="pass",
    schema="my_schema",
)

runner.export_result(
    to=he.ExportDataSource.DATABASE,
    result_id="my_result",  # must already exist in rpt_cat_result
    client=dao,
)

The same export_result(..., to=he.ExportDataSource.FROST) path works for SensorThings via he.create_frost_connection(...). EPANET uses the same pattern on EpanetRunner.

Exported SWMM time series follow what the model’s [REPORT] section requests (nodes, links, subcatchments).

Database connections

import hydraulic_engine as he

pg = he.create_pg_connection(host="localhost", port=5432, dbname="db", user="u", password="p")
gpkg = he.create_gpkg_connection("project.gpkg")
sqlite = he.create_sqlite_connection("local.db")

he.close_connection()

Package layout

Module Role
hydraulic_engine.swmm SWMM runner, INP / RPT / OUT handlers
hydraulic_engine.epanet EPANET runner, INP / BIN handlers
hydraulic_engine.utils DB / API / logging helpers, ExportDataSource, RunStatus
hydraulic_engine.config Package configuration

Development

pytest tests/
black src/
ruff check src/

License

GNU General Public License v3.0 or later — see LICENSE.

Authors

BGEOinfo@bgeo.es

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hydraulic_engine-0.7.0.tar.gz (100.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hydraulic_engine-0.7.0-py3-none-any.whl (102.1 kB view details)

Uploaded Python 3

File details

Details for the file hydraulic_engine-0.7.0.tar.gz.

File metadata

  • Download URL: hydraulic_engine-0.7.0.tar.gz
  • Upload date:
  • Size: 100.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for hydraulic_engine-0.7.0.tar.gz
Algorithm Hash digest
SHA256 182fa6ca9b9c905a73256e2c4f8f7e71558bbe9e58bd64d910c4f3e2688546da
MD5 1b7b23c3f297756dea282d0093ab32ac
BLAKE2b-256 d40dbc3555fa3a0d319e252aeb51f7dc590e3759a96d3c925ac75aed9d5fdb40

See more details on using hashes here.

Provenance

The following attestation bundles were made for hydraulic_engine-0.7.0.tar.gz:

Publisher: publish-to-pypi.yml on bgeo-gis/hydraulic-engine

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hydraulic_engine-0.7.0-py3-none-any.whl.

File metadata

File hashes

Hashes for hydraulic_engine-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 97bc725d0a0de65dc8124ec055ab98a14f10ea6db18af7a5e6f4e17929cfb889
MD5 88a1faebf4e2a5eddaab3ea5666d62ea
BLAKE2b-256 c689f2a38bef2479ced71aa9e2434e8d89faaa526a9318ff31c32d7228498c0b

See more details on using hashes here.

Provenance

The following attestation bundles were made for hydraulic_engine-0.7.0-py3-none-any.whl:

Publisher: publish-to-pypi.yml on bgeo-gis/hydraulic-engine

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.7.0 This release

2 files

0.6.0

2 files

0.5.0

2 files

0.4.1

2 files

0.4.0

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page