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

Total release size: 5.1 MB

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

Download URL ddalab-2.3.0-py3-none-win_amd64.whl
Size 1.2 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
c66f1ea91a78ddce274814afaa4ade62fa831f049d1612acfbff77134bd8dec8
BLAKE2b-256 checksum
How to use checksums
292b93a9d87c59f4f878c397b770d4dc625bdf9ae5b928e574b8c3cfa30741de
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.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL ddalab-2.3.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
c9c3ed98d48206624022ba5bf1fd381af6991a7037c463c44427f07a3f5e6c8a
BLAKE2b-256 checksum
How to use checksums
f0a407c2da412b8bd516623919b54d9b5f657218dbfc6ccacd4d27cbada1a94f
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.3.0-py3-none-macosx_11_0_x86_64.whl

Download URL ddalab-2.3.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
1bfc45cff94d513368f8f8f3ee5c8bdcf19bdb81291a3b94d988273761413184
BLAKE2b-256 checksum
How to use checksums
76979122a53870f4528fa785de99550e9988f3cfe91ef35710183950b674cc06
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.3.0-py3-none-macosx_11_0_arm64.whl

Download URL ddalab-2.3.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
ddeabaa7aff881a151161b2561e82ebd6c064255da9864213a5d8b9351667867
BLAKE2b-256 checksum
How to use checksums
3aa0fb36e819c4794f4bfe09539448cbf04a40f51aad9c316c21d38d2c9f0bd3
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.3.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.3.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