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.0.0"

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.0.0

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.0.0
File Actions
ddalab-2.0.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details for ddalab-2.0.0-py3-none-win_amd64.whl
ddalab-2.0.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details for ddalab-2.0.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
ddalab-2.0.0-py3-none-macosx_11_0_x86_64.whl Python 3 none macOS 11.0+ x86-64 Details for ddalab-2.0.0-py3-none-macosx_11_0_x86_64.whl
ddalab-2.0.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details for ddalab-2.0.0-py3-none-macosx_11_0_arm64.whl

Total release size: 5.1 MB

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

Download URL ddalab-2.0.0-py3-none-win_amd64.whl
Size 1.2 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
a6006f9db656cc5d6278331c1ce1fdf73a79383d58e563ff8e1e2d585811942b
BLAKE2b-256 checksum
How to use checksums
864369fa82e0132aa997b4c23257620253322cf4803ba677163fd03d48db2ffa
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 26, 2026.

Transparency log

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

Download URL ddalab-2.0.0-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
5042e5d2bb439a015c8e10e40933ccd6a19c2477986b973dd5b1516306a62f2e
BLAKE2b-256 checksum
How to use checksums
dbbab145e1cd1e22568f723fbdc1fd28429d36e91cd892c2cb5f4085ecc5e1f1
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 26, 2026.

Transparency log

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

Download URL ddalab-2.0.0-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
3add84a4b0829771d3945076853409a90b22b4a664c72e5efe7dc74b84768b42
BLAKE2b-256 checksum
How to use checksums
bb627982b90d6257056a349eef729d62169cf89c02877c7505161c8e759cf13a
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 26, 2026.

Transparency log

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

Download URL ddalab-2.0.0-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
db6b542390d4e28e67d28789fce03d3e0a91506283fd8da48091413e2987749b
BLAKE2b-256 checksum
How to use checksums
09fce480fc820824c5c8aa4fe9a8afe17f8ca8e47d4e1eab388786d96eab1d7b
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 26, 2026.

Transparency log

Security for ddalab 2.0.0

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.0.0-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 26, 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