Skip to main content

baseflowx

PyPI Python License Docs Web App

A comprehensive Python toolkit for baseflow separation from streamflow hydrographs.

baseflowx implements 17 baseflow separation methods spanning four paradigms: recursive digital filters, graphical/interval methods, recession-based methods, and tracer-based methods. It also provides parameter estimation, USGS data retrieval, and a CMB-to-Eckhardt calibration bridge.

Try it in the browser: Baseflow Explorer — pick any USGS gage on a map and compare every separation method side by side.

This project builds on the baseflow package by Xie et al. (2020), which implemented methods described in "Evaluation of typical methods for baseflow separation in the contiguous United States" (Journal of Hydrology, 583, 124628). baseflowx extends that work with new methods (PART, CMB, BFlow, IHACRES), a unified filter architecture, modern packaging, and USGS data integration.

This project is funded by CIROH.

Install

pip install baseflowx

Quick Start

import baseflowx

# Load bundled sample data (USGS 01013500, Fish River, Maine)
data = baseflowx.load_sample_data()
Q = data['Q']

# Run a single method
b = baseflowx.eckhardt(Q, a=0.98, BFImax=0.8)

# Or fetch your own data from USGS NWIS
from baseflowx.io import fetch_usgs
data = fetch_usgs('01013500', '2019-01-01', '2020-12-31')

Methods

Recursive Digital Filters

All recursive digital filters share a generalized core: b[t] = alpha * b[t-1] + beta * (Q[t] + gamma * Q[t-1])

gamma=0 family (linear reservoir based):

Method Function Reference
Boughton boughton(Q, a, C) Boughton, 1993
Chapman-Maxwell chapman_maxwell(Q, a) Chapman & Maxwell, 1996
Eckhardt eckhardt(Q, a, BFImax) Eckhardt, 2005
EWMA ewma(Q, e) Tularam & Ilahee, 2008
Furey-Gupta furey(Q, a, A) Furey & Gupta, 2001
WHAT what(Q, BFImax, a) Lim et al., 2005 (alias for Eckhardt)

gamma=1 family (signal processing based):

Method Function Reference
Lyne-Hollick lh(Q) / lh_multi(Q, num_pass=3) Lyne & Hollick, 1979; Nathan & McMahon, 1990
Chapman chapman(Q, a) Chapman, 1991
Willems willems(Q, a, w) Willems, 2009

Variable gamma (hybrid):

Method Function Reference
IHACRES ihacres(Q, a, C, alpha_s) Jakeman & Hornberger, 1993

Graphical / Recession-Based Methods

Method Function Reference
UKIH ukih(Q, b_LH) UKIH, 1980
Local minimum local(Q, b_LH, area) Sloto & Crouse, 1996
Fixed interval fixed(Q, area) Sloto & Crouse, 1996
Sliding interval slide(Q, area) Sloto & Crouse, 1996
PART part(Q, area) Rutledge, 1998

Tracer-Based Methods

Method Function Reference
Conductivity Mass Balance cmb(Q, SC) Stewart et al., 2007

Recession Analysis

Function Description
bflow(Q) BFlow 3-pass filter + recession analysis (Arnold & Allen, 1999)
bn77(Q, ...) Brutsaert-Nieber drought flow identification (Cheng et al., 2016)

Parameter Estimation

import baseflowx

data = baseflowx.load_sample_data()
Q = data['Q']

# Estimate recession coefficient from the hydrograph
strict = baseflowx.strict_baseflow(Q)
a = baseflowx.recession_coefficient(Q, strict)

# Use the estimated recession coefficient with any filter
b = baseflowx.eckhardt(Q, a, BFImax=0.8)
b = baseflowx.chapman_maxwell(Q, a)
b = baseflowx.willems(Q, a, w=0.5)

CMB Calibration Bridge

Use specific conductance data to calibrate Eckhardt's BFImax:

from baseflowx.tracer import calibrate_eckhardt_from_cmb

cal = calibrate_eckhardt_from_cmb(Q, SC)
b = baseflowx.eckhardt(Q, cal['a'], cal['BFImax'])

BFlow / SWAT Integration

result = baseflowx.bflow(Q)
print(f"ALPHA_BF = {result['alpha_factor']:.4f}")  # for SWAT calibration
print(f"BFI = {result['BFI']:.3f}")
print(f"Baseflow days = {result['baseflow_days']:.1f}")

USGS Data Retrieval

from baseflowx.io import fetch_usgs

# Fetch daily discharge
data = fetch_usgs('01013500', '2015-01-01', '2020-12-31')
Q = data['values']

# Fetch specific conductance (for CMB)
sc_data = fetch_usgs('01013500', '2015-01-01', '2020-12-31', parameter='sc')

License

MIT

Release files for baseflowx 0.2.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 baseflowx 0.2.2
File Size Uploaded
baseflowx-0.2.2.tar.gz 37.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for baseflowx 0.2.2
File Interpreter ABI Platform
baseflowx-0.2.2-py3-none-any.whl Python 3 none any Details

Total release size: 63.7 kB

Release files / baseflowx-0.2.2.tar.gz

Download URL baseflowx-0.2.2.tar.gz
Size 37.9 kB
Tags Source
SHA-256 checksum
How to use checksums
2f1108f2c39ac0f43cd3dbcfc2c792b0894f133fea9cd7603e51146195fed457
BLAKE2b-256 checksum
How to use checksums
4075a978b73c430162ac2a271622268aa74ad662c93b8e218f2517e1ad408e73
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release files / baseflowx-0.2.2-py3-none-any.whl

Download URL baseflowx-0.2.2-py3-none-any.whl
Size 25.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
37eb8d5c6649d7f6b646891c6abbf378c580a66b6bf35a81364baadb2c0353a9
BLAKE2b-256 checksum
How to use checksums
db74966e53f0a0d3926309d12eca08f3916abcfe3c945a523935cc19db5b078c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release history Release notifications | RSS feed

This release

0.2.2 This release

2 release files

0.2.1

2 release files

0.2.0

2 release files

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