Skip to content

SynHydro

Synthetic Generation Library - stochastic streamflow generation for hydrologic analysis.

Tests Docs Python License: MIT

SynHydro provides parametric and nonparametric stochastic generation methods under a unified API. All generators share the same fit() and generate() workflow.

Generators

Class Type Frequency Sites Reference
ThomasFieringGenerator Parametric AR(1) Monthly Single Thomas & Fiering (1962)
MatalasGenerator Parametric MAR(1) Monthly Multi Matalas (1967)
ARFIMAGenerator Fractional ARIMA Monthly/Annual Single Hosking (1984)
SPARTAGenerator PAR-to-Anything Monthly Multi Tsoukalas et al. (2018)
SMARTAGenerator SMA-to-Anything Annual Multi Tsoukalas et al. (2018)
MultiSiteHMMGenerator Hidden Markov Model Annual Multi Gold et al. (2024)
HMMKNNGenerator HMM + KNN resampling Annual Multi Prairie et al. (2008)
WARMGenerator Wavelet AR Annual Single Nowak et al. (2011)
KirschGenerator Nonparametric Bootstrap Monthly Multi Kirsch et al. (2013)
KNNBootstrapGenerator K-Nearest Neighbor Daily/Monthly/Annual Multi Lall & Sharma (1996)
PhaseRandomizationGenerator Spectral Daily Single Brunner et al. (2019)
MultisitePhaseRandomizationGenerator Wavelet phase-random Daily Multi Brunner & Gilleland (2020)

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.