Skip to main content

Python bindings for the Rust fCWT implementation

Project description

fCWT in Rust

CI 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.4.0.tar.gz (25.3 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.4.0-cp38-abi3-win_amd64.whl (519.2 kB view details)

Uploaded CPython 3.8+Windows x86-64

fcwt2-1.4.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (707.9 kB view details)

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

fcwt2-1.4.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.4.0.tar.gz.

File metadata

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

File hashes

Hashes for fcwt2-1.4.0.tar.gz
Algorithm Hash digest
SHA256 becec76f0c316d66f96461c34ae4b27dbd2a2cf6b73bb506a1c4d2454a4ace07
MD5 d1a8e093a7fff75619a474357361cb21
BLAKE2b-256 65ea633995f7d129eadbd6d4bbec0cad9e019ff495ab0aa65bcf130583cf0449

See more details on using hashes here.

Provenance

The following attestation bundles were made for fcwt2-1.4.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.4.0-cp38-abi3-win_amd64.whl.

File metadata

  • Download URL: fcwt2-1.4.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.4.0-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 08f4c6fd0df230ff612e34a9e8cdc54dfb2aae4178a07d9684278a652dda00ea
MD5 634f3df373bf771ca8609dfea59f610d
BLAKE2b-256 7e6129f53fdea25bb4944c624d3c1ebcb5b77facd298d92d35d9dfe8e5af4c05

See more details on using hashes here.

Provenance

The following attestation bundles were made for fcwt2-1.4.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.4.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fcwt2-1.4.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1db8d2544080b6d165b678b3dd29a6c3ce7fae95f34c65a3469b80b872d5d510
MD5 07582c1e2b17b082880e6ea515ae634f
BLAKE2b-256 531b354eb206bd308ac5331d3b67f8c03b15fe9da7bcee7e948b199afa82bad3

See more details on using hashes here.

Provenance

The following attestation bundles were made for fcwt2-1.4.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.4.0-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

  • Download URL: fcwt2-1.4.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.4.0-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e3b913c2c5727f76b7178b185f0a60d8339672ea56a5f794e042c1fef23d434d
MD5 130c58ae9c3fa7f43699e347075131cc
BLAKE2b-256 4a20eaff6e0ad36796a12d6016fc8fd96b9a21ed179bd01724c86c3cc2f4021c

See more details on using hashes here.

Provenance

The following attestation bundles were made for fcwt2-1.4.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