wdm-transform
wdm-transform provides Wilson-Daubechies-Meyer (WDM) transforms and an opt-in
orthogonalized modified-Gaussian Wilson (WDG) window for sampled one-dimensional
signals. Both use the same package, objects, and coefficient layout.
The public API centers on three objects:
TimeSeriesFrequencySeriesWDM
Choose a window
Use Meyer for compact frequency support and the lowest transform cost; try Gaussian when tighter time localization matters for transients or data gaps. Gaussian trades that localization for wider frequency mixing. See Choosing a window for the comparison figure, parameter guidance and Noah Pearson et al.'s paper.
import numpy as np
from wdm_transform import TimeSeries
data = np.random.default_rng(42).normal(size=8192)
ts = TimeSeries(data, dt=5.0)
meyer = ts.to_wdm(nt=256, window="meyer")
gaussian = ts.to_wdm(nt=256, window="gaussian")
recovered = gaussian.to_time_series() # retains the originating window
Omitting window keeps the original Meyer defaults, a=1/3, d=1. Gaussian
uses nu=0.5 and support=min(16,nf) by default; support counts half-band
spacings retained on each side of a frequency-window center. It controls
finite-tail reconstruction error, rather than the number of signal samples.
The currently validated shape range is 0.3 <= nu <= 0.8; small nf can
limit accuracy. Set nu and support explicitly when needed.
Both results have real coefficients shaped (batch, nt, nf+1). WDM records
window, nu, and effective support as keyword-only metadata and passes
them to every inverse. Changing basis requires a new transform; changing
metadata does not convert coefficients. Gaussian rejects nondefault a/d,
and Meyer rejects explicit nu/support.
Gaussian full transforms support NumPy, JAX, and the shared CuPy implementation;
GPU correctness requires a CuPy-capable machine. Compact subband APIs accept
the same window options; Gaussian uses wider frequency margins. The existing
wdm_noise_variance channel-PSD approximation is not a calibrated WDG
colored-noise covariance model. The runnable
docs/examples/gaussian_comparison.py example generates the guide's figure.
Installation
pip install wdm-transform
Optional JAX support:
pip install "wdm-transform[jax]"
If you prefer uv:
uv add wdm-transform
Useful repository commands from the project root:
# make a new venv for the repo
uv venv
# install local dev dependencies
uv sync --extra dev
# include docs dependencies too
uv sync --extra dev --extra docs
# run the walkthrough example
uv run python docs/examples/wdm_walkthrough.py
# run the test suite
uv run pytest
# build the docs
uv run mkdocs build
# serve the docs locally
uv run mkdocs serve
# run the benchmark CLI
uv run wdm_transform_benchmarking --backends numpy jax --pow2 12 22
# compare window families with synchronized timings and reconstruction errors
uv run wdm_transform_window_benchmark --backends numpy jax --runs 7 --outdir test_output/wdg_benchmarks
# refresh the checked-in benchmark snapshot used in the docs
uv run python docs/examples/generate_benchmark_plot.py --backends numpy jax
Documentation and source live at:
Metadata
Release files for wdm-transform 0.6.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| wdm_transform-0.6.0.tar.gz | 92.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| wdm_transform-0.6.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 158.4 kB
Release files / wdm_transform-0.6.0.tar.gz
| Download URL | wdm_transform-0.6.0.tar.gz |
|---|---|
| Size | 92.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e28149b0a395887c0f23c12afcfbef42c51318ed706d7cbde0c01758d3033e9f
|
|
BLAKE2b-256 checksum How to use checksums |
a6b69dac3d0a3831a80710d36581293507d6154454213b601bde3c31362d5d79
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Oct 11, 2026.
Transparency logRelease files / wdm_transform-0.6.0-py3-none-any.whl
| Download URL | wdm_transform-0.6.0-py3-none-any.whl |
|---|---|
| Size | 66.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ab47341203319fe397cc37be6adde6894b8790516cd6c860aa96010fedde55b7
|
|
BLAKE2b-256 checksum How to use checksums |
887e11e7e0fb79f94d0247fe9a09142517b35c77bed229c1384b3b5b9f889544
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Oct 11, 2026.
Transparency log