Skip to content

SynHydro

Synthetic Generation Library - stochastic streamflow generation for hydrologic analysis.

Tests Docs Python License: MIT

SynHydro provides parametric, hybrid, and non-parametric stochastic generation methods under a unified API. All generators share the same fit() and generate() workflow. See the Algorithms overview for the classification and plain-language descriptions of each class.

Generators

Matrix of SynHydro generators arranged by method family (Parametric, Hybrid, Non-parametric) on the vertical axis and timescale (Daily, Weekly, Monthly, Annual) on the horizontal axis, with capability bars indicating single-site vs. multi-site support

See the Algorithms overview for definitions of the method-family groups.

Generator Class Frequency Sites Reference
ThomasFieringGenerator Parametric Monthly Single Thomas & Fiering (1962)
MatalasGenerator Parametric Monthly Multi Matalas (1967)
ARFIMAGenerator Parametric Monthly/Annual Single Hosking (1984)
SPARTAGenerator Parametric Monthly Multi Tsoukalas et al. (2018)
SMARTAGenerator Parametric Annual Multi Tsoukalas et al. (2018)
MultiSiteHMMGenerator Parametric Annual Multi Gold et al. (2024)
KirschGenerator Hybrid Weekly/Monthly Multi Kirsch et al. (2013)
WARMGenerator Hybrid Annual Single Nowak et al. (2011)
PhaseRandomizationGenerator Hybrid Daily Single Brunner et al. (2019)
MultisitePhaseRandomizationGenerator Hybrid Daily Multi Brunner & Gilleland (2020)
KNNBootstrapGenerator Non-parametric Monthly/Annual Multi Lall & Sharma (1996); Prairie et al. (2006, 2008)

Quick Example

import synhydro

Q_obs = synhydro.load_example_data()                       # daily DataFrame
Q_monthly = Q_obs.resample("MS").sum()                  # resample to monthly

gen = synhydro.KirschGenerator()
gen.fit(Q_monthly)
ensemble = gen.generate(n_realizations=50, n_years=30, seed=42)

Installation

pip install git+https://github.com/TrevorJA/SynHydro.git

See Getting Started for full setup and data format details.