Skip to main content

pwa-raven

Raven hydrological model setup and input generation for PWA (pipeline Steps 1–2), extracted from the PWA dev repo's _notebooks/1_nc_processing.ipynb, _notebooks/2_raven_input_gen.ipynb, and src/py/phydap.py / raven_py.py. Also generates the RavenView visualization GeoJSON.

Layout

pwa_raven/
  nc_processing.py       # Step 1: PHyDAP/NetCDF subsetting + time offset + grid weights
  raven_inputs.py        # Step 2: orchestrates .rv* + WSC RVT + calibration templates
  run_*.py               # CLI entry points (nc_processing, raven_inputs, ravenview)
  init_*_config.py        # Interactive config builders (one per step)
  raven/
    rv_writers.py        # .rvi/.rvp/.rvh/.rvc/.rvt template writers
    runner.py            # run_raven() — invokes the Raven binary, checks errors
    ravenview.py         # subbasin/river shapefiles -> RavenView GeoJSON + validation
    wsc_rvt.py           # WSC observed-streamflow RVT generation
    basin_prep.py        # subbasin/HRU preparation
    calibration_templates.py
  grid/
    weights.py           # GridWeights.txt generation

Installation

pip install -e .                 # core
pip install -e .[dev]            # plus pytest, pytest-cov, xarray (test deps)

The Raven binary is not a pip dependency — install it from http://raven.uwaterloo.ca/Downloads.html and place it on PATH as Raven (Linux/macOS) or Raven.exe (Windows). pwa-raven is itself a dependency of pwa-calibration.

Running

Programmatic entry points (notebook / script use):

from pwa_raven.nc_processing import NcProcessingConfig, run_nc_processing
from pwa_raven.raven_inputs import RavenInputsConfig, run_raven_inputs
from pwa_raven.raven.ravenview import export_for_ravenview

Equivalent CLIs (thin wrappers around the above):

python -m pwa_raven.run_nc_processing --config nc_processing.yml
python -m pwa_raven.run_raven_inputs  --config raven_inputs.yml
python -m pwa_raven.run_ravenview --subbasins SUB.shp --rivers RIV.shp \
    --output-dir RavenView --watershed-name my_watershed

Generate a starter config for any step with the matching pwa_raven.init_*_config module.

Running tests

This project uses pytest. From pwa_raven/ with the conda env activated:

python -m pytest tests/unit -q          # fast unit suite (what CI runs)
python -m pytest tests/integration      # local-only e2e (see below)

From the repo root, the Makefile provides shortcuts: make test-raven (unit) and make integration-raven (e2e).

Test tiers, by marker:

  • unit (default, tests/unit/) — fast, no external dependencies; runs in CI. Includes a real-data RavenView export test backed by the committed tests/fixtures/05MH008/ watershed.
  • integration — invokes the real Raven binary; local-only, skips unless inputs are present. See tests/integration/README.md for the env vars (PWA_RAVEN_INPUTS_CONFIG, PWA_RAVEN_BINARY) and how to trigger.
  • regression — needs an external reference dataset (e.g. the Liard sample); skips when absent.
  • slow — a real Raven run; skip with -m "not slow" during a fast dev loop.

Useful flags: -q (quiet), -k <pattern> (filter by name), -x (stop on first failure), --tb=short (concise tracebacks).

All unit tests should pass before opening a pull request.

Contributing

Workflow for adding a feature or fixing a bug:

  1. Create a feature branch off the default branch. Use feat/<short-name> for features and fix/<short-name> for bug fixes — never commit directly to the default branch.
  2. Write a failing test first that describes the desired behavior. Run python -m pytest -q to confirm the new test fails. For bug fixes, the test should reproduce the bug.
  3. Write code to make the test pass. Run the suite again and confirm green.
  4. Commit incrementally with focused commit messages that explain why (the motivation, the problem, the trade-off) rather than just what (the diff is the what).
  5. Open a pull request against the default branch. Tag the relevant reviewer. The PR description should include a short summary, a test plan, and links to any related issues.

Practical notes:

  • New features should ship with corresponding tests. If a unit test is hard to write, that's often a signal the design needs refactoring.
  • Avoid disabling, skipping, or commenting out tests to make builds pass — investigate the root cause and fix it properly.
  • Keep commits small and atomic. If you find yourself making unrelated changes in the same commit, split them.
  • Don't add features beyond what the issue/PR scope requires. YAGNI — build for the current need, refactor later when a second use case emerges.

Metadata

Release files for pwa-raven 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 pwa-raven 0.2.2
File Size Uploaded
pwa_raven-0.2.2.tar.gz 82.9 kB Details

Built distribution (wheel)

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

Total release size: 178.1 kB

Release files / pwa_raven-0.2.2.tar.gz

Download URL pwa_raven-0.2.2.tar.gz
Size 82.9 kB
Tags Source
SHA-256 checksum
How to use checksums
d8a162ee81857f0c09d2b4eaf0702e2ee76933cb3b92555e4004fd26d6c641f8
BLAKE2b-256 checksum
How to use checksums
98da1c33a2459e1448450e05ccff083c007e7ff0fcfe841470351daeb88525e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

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

Download URL pwa_raven-0.2.2-py3-none-any.whl
Size 95.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
acad86d75d3ca62cbc3285ce01bc71dc8dd41897f7da8187731c666d25d1af78
BLAKE2b-256 checksum
How to use checksums
8b5e6dec7bb97735998560e771f85494cf0313d7bc69bedb5331bc6669eae639
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release history Release notifications | RSS feed

This release

0.2.2 This release

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