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.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.0.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.0.1
File Actions
ddalab-2.0.1-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details for ddalab-2.0.1-py3-none-win_amd64.whl
ddalab-2.0.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.0.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
ddalab-2.0.1-py3-none-macosx_11_0_x86_64.whl Python 3 none macOS 11.0+ x86-64 Details for ddalab-2.0.1-py3-none-macosx_11_0_x86_64.whl
ddalab-2.0.1-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details for ddalab-2.0.1-py3-none-macosx_11_0_arm64.whl

Total release size: 5.1 MB

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

Download URL ddalab-2.0.1-py3-none-win_amd64.whl
Size 1.2 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
043a2b173a2f29289c1e0c276dfacd54424eeff7af12d825c8c168c615ab7216
BLAKE2b-256 checksum
How to use checksums
6a7bd4493d1b1aff758382400928d8376f51a668facbdbb34359abc0ba995a97
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.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL ddalab-2.0.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
dc99d04fd4b952d7027bb4da4d1004a6c8618ff0e0a5bdc551361071358aba4a
BLAKE2b-256 checksum
How to use checksums
59d7b60efa3d1e1fdc1d71f16c81910af22173fe27466f2f0d67f0471e9df3f9
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.1-py3-none-macosx_11_0_x86_64.whl

Download URL ddalab-2.0.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
795e21f728c77909c6f760d762954b3bb576213befec0cdf82cc93b45eea47c6
BLAKE2b-256 checksum
How to use checksums
8de224cc53aae00b510303200f067152de868803c2b33b1fee55d9c2079dbafc
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.1-py3-none-macosx_11_0_arm64.whl

Download URL ddalab-2.0.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
5cce3d381c28ca80bdb9db79b8f9e93a079890858ee77410bbad462f7566dcdf
BLAKE2b-256 checksum
How to use checksums
4525a1baaaf9e6a9563516b895969daca1aaa337711b22b2fc066a436f98a784
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.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.0.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 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