Skip to main content

DIWASP-Python

DIrectional WAve SPectrum analysis - Python port of the DIWASP Matlab toolbox

Python Version License: MIT

DIWASP is a comprehensive toolbox for estimating directional wave spectra from measurements of water surface elevation, pressure, velocity, or acceleration. This Python implementation provides a modern, user-friendly interface built on top of industry-standard scientific Python libraries.

DIWASP

Features

  • Multiple estimation methods: DFTM, EMLM, IMLM, EMEP, and BDM
  • Flexible input formats: pandas DataFrame or xarray Dataset
  • Seamless integration with wavespectra for advanced wave analysis
  • Windowed analysis: Process continuous time series with configurable window length and overlap
  • Multiple sensor types: Pressure, velocity, acceleration, surface elevation, and more
  • Array configurations: Support for single sensors or multi-sensor arrays
  • Modern output: Returns wavespectra-compatible xarray Datasets with comprehensive metadata

Quick Start

Installation

pip install diwasp

Basic Usage

import pandas as pd
from diwasp import diwasp

# Load your wave data (pressure and velocity measurements)
df = pd.read_csv('wave_data.csv', index_col='time', parse_dates=True)

# Run directional wave analysis
result = diwasp(
    df,
    sensor_mapping={
        'pressure': 'pres',      # Map column names to sensor types
        'u_velocity': 'velx',
        'v_velocity': 'vely',
    },
    window_length=1800,          # 30-minute analysis windows
    window_overlap=900,           # 15-minute overlap
    depth=15.0,                  # Water depth in meters
    z=0.5,                       # Sensor height above seabed
    method='imlm',               # Iterative Maximum Likelihood Method
)

# Access wave statistics
print(f"Significant wave height: {result.hsig.values} m")
print(f"Peak period: {result.tp.values} s")
print(f"Peak direction: {result.dp.values} degrees")

# Save results
result.to_netcdf('wave_spectra.nc')

Estimation Methods

Method Description Speed Accuracy
dftm Direct Fourier Transform Fastest Lowest
emlm Extended Maximum Likelihood Fast Good for narrow spectra
imlm Iterative Maximum Likelihood Medium Good balance (default)
emep Extended Maximum Entropy Medium Robust to noise
bdm Bayesian Directional Slowest Highest

Supported Sensor Types

  • Surface elevation (elev)
  • Pressure (pres)
  • Velocity components (velx, vely, velz, vels)
  • Acceleration components (accx, accy, accz, accs)
  • Surface slopes (slpx, slpy)
  • Displacement (dspx, dspy)

Output Format

The function returns a wavespectra-compatible xarray Dataset containing:

Dimensions:

  • time: Center time of each analysis window
  • freq: Frequency bins (Hz)
  • dir: Direction bins (degrees, nautical convention)

Variables:

  • efth: Spectral energy density (m²/Hz/degree)
  • hsig: Significant wave height (m)
  • tp: Peak period (s)
  • fp: Peak frequency (Hz)
  • dp: Peak direction (degrees)
  • dm: Mean direction (degrees)
  • spread: Directional spread (degrees)

Examples

Pressure-Velocity-Velocity (PUV) Sensor

from diwasp import diwasp
import pandas as pd

# Load data
df = pd.read_csv('puv_data.csv', index_col='time', parse_dates=True)

# Analyze
result = diwasp(
    df,
    sensor_mapping={'p': 'pres', 'u': 'velx', 'v': 'vely'},
    window_length=1800,
    window_overlap=900,
    depth=20.0,
    z=0.5,
    method='imlm',
)

# Plot time series
result['hsig'].plot()

Pressure Gauge Array

# Multiple pressure sensors in triangular configuration
result = diwasp(
    df,
    sensor_mapping={'p1': 'pres', 'p2': 'pres', 'p3': 'pres'},
    window_length=1800,
    window_overlap=900,
    depth=10.0,
    x={'p1': 0, 'p2': 5, 'p3': -5},
    y={'p1': 0, 'p2': 5, 'p3': 5},
    z=0.0,
    method='emep',
)

Using xarray Dataset

import xarray as xr

ds = xr.Dataset({
    'pres': (['time'], pressure_data),
    'velx': (['time'], u_data),
    'vely': (['time'], v_data),
}, coords={
    'time': time_values,
})

result = diwasp(
    ds,
    sensor_mapping={'pres': 'pres', 'velx': 'velx', 'vely': 'vely'},
    window_length=1800,
    window_overlap=900,
    depth=15.0,
)

Documentation

Full documentation is available at https://wavespectra.github.io/diwasp-python

Requirements

  • Python >= 3.9
  • numpy >= 1.20
  • scipy >= 1.7
  • xarray >= 0.19
  • wavespectra >= 4.0
  • pandas >= 1.3

Development

Install for Development

git clone https://github.com/wavespectra/diwasp-python.git
cd diwasp-python
pip install -e ".[dev]"

Run Tests

pytest

Code Formatting

black diwasp tests
ruff check diwasp tests

Citation

If you use DIWASP in your research, please cite the original DIWASP toolbox:

Johnson, D. (2002). DIWASP, a directional wave spectra toolbox for MATLAB: User Manual. Research Report WP-1601-DJ (V1.1), Centre for Water Research, University of Western Australia.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Credits

  • Original DIWASP Matlab toolbox: David Johnson, University of Western Australia
  • Python port: Developed with support from the oceanographic community
  • Built on wavespectra, xarray, and pandas

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Related Projects

Metadata

Release files for diwasp 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for diwasp 0.1.1
File Size Uploaded Provenance
diwasp-0.1.1.tar.gz 51.1 kB With provenance Details

Built distribution (wheel)

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

Total release size: 93.2 kB

Release files / diwasp-0.1.1.tar.gz

Download URL diwasp-0.1.1.tar.gz
Size 51.1 kB
Tags Source
SHA-256 checksum
How to use checksums
9ba8fc4a0cc7de7fd19ec5cc62dd928760e11bfea530587c09ec8c728366a1a8
BLAKE2b-256 checksum
How to use checksums
b75d0de899d920168f6a5e0dad55635efd5b8629ccb0a0d6c99c12cb4dc5373d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 17, 2026.

Transparency log

Release files / diwasp-0.1.1-py3-none-any.whl

Download URL diwasp-0.1.1-py3-none-any.whl
Size 42.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
547c785957712d08da53aa2373d30c65c4cd21b786ab9e87230c3cf66272abc3
BLAKE2b-256 checksum
How to use checksums
7586cbcea7de92616870fad8afde101c6717784950d44a9cdd3f1037ddf3a572
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 17, 2026.

Transparency log

Security for diwasp 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for diwasp-0.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 17, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files Full provenance

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