Skip to main content

dda-rs

Pure Rust Delay Differential Analysis (DDA) engine and the ddalab command-line tool. The same crate runs in the browser as WebAssembly in the DDALAB web application.

All analysis runs through the Rust engine directly; nothing shells out to a native DDA binary.

Command-line tool

Install it as a Python tool (the wheel carries the ddalab executable only) or download an archive and its .sha256 file from GitHub Releases:

uv tool install ddalab
ddalab inspect --file recording.edf
ddalab run --file recording.edf --variants ST --wl 1000 --ws 200 --delays 7 10 --bundle out

It reads EDF, BDF, BrainVision and delimited text. ddalab --help lists the other commands (batch, variants, validate, samples, info).

Features

  • Pure Rust execution for DDA variants and CCD extensions
  • Typed request/response API with serde
  • Built-in variant metadata and SELECT-mask helpers
  • Configurable solver backend:
    • RobustSvd for the default numerically stable path
    • NativeCompatSvd for the native-compatible SVD path
  • Optional batched CUDA acceleration for ST, CT, CD, DE, and SY

Rust library

[dependencies]
dda-rs = "2.4.1"

Quick Start

use dda_rs::{
    run_request_on_matrix, AlgorithmSelection, DDARequest, DelayParameters, PreprocessingOptions,
    TimeRange, WindowParameters,
};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let request = DDARequest {
        file_path: "synthetic.csv".to_string(),
        channels: Some(vec![0, 1, 2]),
        time_range: TimeRange {
            start: 0.0,
            end: 511.0,
        },
        preprocessing_options: PreprocessingOptions {
            highpass: None,
            lowpass: None,
        },
        algorithm_selection: AlgorithmSelection {
            enabled_variants: vec!["ST".to_string(), "CD".to_string()],
            select_mask: None,
        },
        window_parameters: WindowParameters {
            window_length: 128,
            window_step: 64,
            ct_window_length: None,
            ct_window_step: None,
        },
        delay_parameters: DelayParameters { delays: vec![1, 2] },
        ct_channel_pairs: None,
        cd_channel_pairs: None,
        model_parameters: None,
        model_terms: None,
        variant_configs: None,
        sampling_rate: None,
    };

    let samples = (0..512)
        .map(|t| {
            let x = t as f64 * 0.03;
            vec![x.sin(), (1.7 * x).cos(), (0.5 * x).sin()]
        })
        .collect::<Vec<_>>();

    let result = run_request_on_matrix(&request, &samples, None)?;
    println!("analysis id: {}", result.id);
    Ok(())
}

Solver Backends

The Rust engine exposes two SVD backends through PureRustOptions::svd_backend:

  • SvdBackend::RobustSvd
    • default
    • uses nalgebra SVD
    • preferred for real analysis
  • SvdBackend::NativeCompatSvd
    • uses the native-compatible SVD kernel ported into Rust
    • useful when comparing against historical native-binary behavior

CUDA

CPU execution remains the default. Build the optional CUDA backend and select a device with:

cargo run --release --features cuda -- run --file data.csv --channels 0 1 --device cuda

--device cuda:N selects device N. The CUDA build dynamically loads the NVIDIA driver and cuBLAS. Compilation does not require a local CUDA toolkit; execution requires a working NVIDIA CUDA installation. The implementation batches same-shaped f64 regressions and computes predictions and residual norms on the GPU. Rank-deficient regressions fall back to the CPU SVD solver. Rust-only CCD extensions continue to use their existing CPU implementations.

Library users configure the same backend through PureRustOptions:

use dda_rs::{ComputeDevice, PureRustOptions, PureRustRunner};

let runner = PureRustRunner::new(PureRustOptions {
    compute_device: ComputeDevice::Cuda(0),
    ..PureRustOptions::default()
});

Modules

  • engine: core DDA and CCD execution
  • types: request/response structures
  • variants: variant metadata and SELECT-mask utilities
  • network_motifs: motif analysis helpers
  • profiling: profiling helpers
  • error: error types

License

MIT

Metadata

Release files for ddalab 2.4.1

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

Built distributions (wheels)

Table of built distributions (wheels) for ddalab 2.4.1
File Actions
ddalab-2.4.1-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details for ddalab-2.4.1-py3-none-win_amd64.whl
ddalab-2.4.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details for ddalab-2.4.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
ddalab-2.4.1-py3-none-macosx_11_0_x86_64.whl Python 3 none macOS 11.0+ x86-64 Details for ddalab-2.4.1-py3-none-macosx_11_0_x86_64.whl
ddalab-2.4.1-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details for ddalab-2.4.1-py3-none-macosx_11_0_arm64.whl

Total release size: 5.2 MB

Release files / ddalab-2.4.1-py3-none-win_amd64.whl

Download URL ddalab-2.4.1-py3-none-win_amd64.whl
Size 1.3 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
2d77a1d424b531e381eb8a96d00a1f71a938e54255ca3aaa720c8fe97f67dbdb
BLAKE2b-256 checksum
How to use checksums
aeebb3ff04f978f1da441f13b60abd76e032933b9aaa8a6f34f1b0eed18302ef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 27, 2026.

Transparency log

Release files / ddalab-2.4.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL ddalab-2.4.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.4 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
0b7ff6d94501506260dea03a50201c58664289aa0255f52ecfe2dc9feb3b7bbf
BLAKE2b-256 checksum
How to use checksums
24b28dfd6d33f8d1cbd5effc342c527b75be0b76b63c3a9af799b65cbce7985e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 27, 2026.

Transparency log

Release files / ddalab-2.4.1-py3-none-macosx_11_0_x86_64.whl

Download URL ddalab-2.4.1-py3-none-macosx_11_0_x86_64.whl
Size 1.3 MB
Tags Python 3 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
78e2e5acff1eb78353d5a06ae4362000f60bb07aeb3220fd1588677a5153e258
BLAKE2b-256 checksum
How to use checksums
745c1c21d048760f72e95ee9c7c26a5c267c552ea28b491473504bdaf62f9120
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 27, 2026.

Transparency log

Release files / ddalab-2.4.1-py3-none-macosx_11_0_arm64.whl

Download URL ddalab-2.4.1-py3-none-macosx_11_0_arm64.whl
Size 1.2 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
f45aa065b29bc3b94a73b6cbafc4a9a61ae425ed1e20cff7bac7048e866e1a95
BLAKE2b-256 checksum
How to use checksums
d427471311baa001d7ae40326fc1e3d90b98e84438079378c3d0fe05066acfb9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 27, 2026.

Transparency log

Security for ddalab 2.4.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 4 files in this release have been uploaded with provenance metadata.

Select from 4 files

Attestation for ddalab-2.4.1-py3-none-win_amd64.whl

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 27, 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.

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