Skip to main content

Python bindings for the Rust fCWT implementation

Project description

fCWT in Rust

Crates.io Version PyPI - Version

Rust implementation of the fast Continuous Wavelet Transform.

It uses rustfft for FFT planning and execution, and nightly Rust portable_simd for the daughter-wavelet frequency multiplication.

Toolchain

The crate is pinned to nightly in rust-toolchain.toml because std::simd/portable_simd is still unstable.

cargo test
cargo clippy --all-targets
cargo fmt --check
cargo bench --bench cwt

If you want to call the toolchain explicitly:

cargo +nightly-2026-04-03 test

Usage

use fcwt2::{Fcwt, Morlet, ScaleType, Scales};

let signal = vec![0.0_f32; 1024];
let scales = Scales::new(ScaleType::LinearFrequencies, 1_000, 1.0, 100.0, 64)?;
let mut fcwt = Fcwt::new(Morlet::new(2.0));

let coefficients = fcwt.cwt_real(&signal, &scales);
assert_eq!(coefficients.len(), signal.len() * scales.len());
# Ok::<(), fcwt2::ScaleError>(())

Output is scale-major: coefficients[scale_index * signal.len() + sample_index].

Benchmarks

Criterion benchmarks cover real and complex CWT transforms at 1024 and 4096 samples:

cargo bench --bench cwt

My homelab benchmarks

Running benches/cwt.rs (target/release/deps/cwt-6c2d4260722aeb78)
cwt_real/1024           time:   [320.71 µs 321.58 µs 322.68 µs]
                        thrpt:  [203.10 Melem/s 203.79 Melem/s 204.34 Melem/s]
Found 3 outliers among 100 measurements (3.00%)
  3 (3.00%) high severe
Benchmarking cwt_real/4096: Warming up for 3.0000 s
cwt_real/4096           time:   [1.6010 ms 1.6288 ms 1.6622 ms]
                        thrpt:  [157.71 Melem/s 160.95 Melem/s 163.74 Melem/s]
Found 15 outliers among 100 measurements (15.00%)
  2 (2.00%) high mild
  13 (13.00%) high severe

cwt_complex/1024        time:   [325.21 µs 326.07 µs 327.12 µs]
                        thrpt:  [200.34 Melem/s 200.99 Melem/s 201.52 Melem/s]
Found 3 outliers among 100 measurements (3.00%)
  2 (2.00%) high mild
  1 (1.00%) high severe
Benchmarking cwt_complex/4096: Warming up for 3.0000 s
cwt_complex/4096        time:   [1.4950 ms 1.4991 ms 1.5039 ms]
                        thrpt:  [174.31 Melem/s 174.86 Melem/s 175.35 Melem/s]
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high mild

Python bindings

PyO3 bindings are available behind the optional python feature:

cargo build --features python

The module exposes Morlet, Scales, and Fcwt/FCWT. Real transforms accept a list of floats; complex transforms accept Python complex values or (real, imag) tuples and return Python complex values in the same scale-major layout as the Rust API.

To build/install the Python extension with maturin:

pip install maturin
maturin develop

Example:

import fcwt2

scales = fcwt2.Scales.linear_frequencies(1000, 1.0, 120.0, 64)
transform = fcwt2.Fcwt(2.0)
coefficients = transform.cwt_real([0.0] * 1024, scales)

complex_coefficients = transform.cwt_complex([1.0 + 0.0j] * 1024, scales)

Tagged releases matching v* build Python wheels on Linux, macOS, and Windows with GitHub Actions and upload the wheels plus source distribution to the corresponding GitHub Release.

Acknowledgements

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fcwt2-1.3.0.tar.gz (25.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

fcwt2-1.3.0-cp38-abi3-win_amd64.whl (519.2 kB view details)

Uploaded CPython 3.8+Windows x86-64

fcwt2-1.3.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (707.8 kB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ x86-64

fcwt2-1.3.0-cp38-abi3-macosx_11_0_arm64.whl (509.3 kB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

File details

Details for the file fcwt2-1.3.0.tar.gz.

File metadata

  • Download URL: fcwt2-1.3.0.tar.gz
  • Upload date:
  • Size: 25.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for fcwt2-1.3.0.tar.gz
Algorithm Hash digest
SHA256 c2905da5e89c9969f53ca2955649d524388cf1468b0c3f8e99bef5faadc61da5
MD5 2a821c68b53a463904540cad421a67ca
BLAKE2b-256 af108b1d9d5e9231076240d5c0b0b1e58736dfadd8bfa6baf8282c4be9bddc8d

See more details on using hashes here.

Provenance

The following attestation bundles were made for fcwt2-1.3.0.tar.gz:

Publisher: python-release.yml on RustedBytes/fcwt2

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fcwt2-1.3.0-cp38-abi3-win_amd64.whl.

File metadata

  • Download URL: fcwt2-1.3.0-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 519.2 kB
  • Tags: CPython 3.8+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for fcwt2-1.3.0-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 fc5f18f3a3f3e4db7127eab5c0467fa6990f43281becc4f095bdd7e0feb35e3e
MD5 12bd48886bab1b5bdc8ffaf1f2a29503
BLAKE2b-256 22387ca3feab5c6e45571803a192cbe80c477680cc7816739d3eb2e0a141b6bd

See more details on using hashes here.

Provenance

The following attestation bundles were made for fcwt2-1.3.0-cp38-abi3-win_amd64.whl:

Publisher: python-release.yml on RustedBytes/fcwt2

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fcwt2-1.3.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fcwt2-1.3.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0f171f14f0dc035c9dcced1f562248c8308a4546bcd0d106c5d4230b59b1fda9
MD5 008570b9491a7f389edefa7114dbe3a3
BLAKE2b-256 0f6ebf547141e88ce41123f882da69ade7d02ef61030dd2828486b758c08c8c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for fcwt2-1.3.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python-release.yml on RustedBytes/fcwt2

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fcwt2-1.3.0-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

  • Download URL: fcwt2-1.3.0-cp38-abi3-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 509.3 kB
  • Tags: CPython 3.8+, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for fcwt2-1.3.0-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8f70fe033045cc8e849c702c45b9914067dcbccf142e69f6859dfd60a7cb2049
MD5 301296ffd6f67fa401e0869678617d0b
BLAKE2b-256 27e5b461c0dc289f624b772aa6576d5e935a906a9421ec385f34b22aa926f68d

See more details on using hashes here.

Provenance

The following attestation bundles were made for fcwt2-1.3.0-cp38-abi3-macosx_11_0_arm64.whl:

Publisher: python-release.yml on RustedBytes/fcwt2

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page