[package]
name = "wifi-densepose-signal"
version = "0.3.4"
edition.workspace = true
description = "WiFi CSI signal processing for DensePose estimation"
license.workspace = true
authors = ["rUv <ruv@ruv.net>", "WiFi-DensePose Contributors"]
repository.workspace = true
documentation = "https://docs.rs/wifi-densepose-signal"
keywords = ["wifi", "csi", "signal-processing", "densepose", "rust"]
categories = ["science", "computer-vision"]
readme = "README.md"

[features]
default = ["eigenvalue"]
## Enable eigenvalue-based person counting (requires BLAS via ndarray-linalg).
## Disable with --no-default-features to use the diagonal fallback instead.
eigenvalue = ["ndarray-linalg"]
## ADR-134: CIR sparse recovery module (default-on; zero-cost if never instantiated).
## ruvector-solver is already a mandatory dep so no additional dep needed here.
cir = []

[dependencies]
# Core utilities
thiserror.workspace = true
serde = { workspace = true }
serde_json.workspace = true
chrono = { version = "0.4", features = ["serde"] }

# Signal processing
ndarray = { workspace = true }
ndarray-linalg = { workspace = true, optional = true }
rustfft.workspace = true
num-complex.workspace = true
num-traits.workspace = true

# Graph algorithms
ruvector-mincut = { workspace = true }
ruvector-attn-mincut = { workspace = true }

# Attention and solver integrations (ADR-017)
ruvector-attention = { workspace = true }
ruvector-solver = { workspace = true }

# Midstreamer integrations (ADR-032a)
midstreamer-temporal-compare = { workspace = true }
midstreamer-attractor = { workspace = true }

# ADR-136: deterministic calibration-id → FrameMeta.calibration_id (ADR-135 link)
uuid = { version = "1.6", features = ["v4"] }

# Internal
wifi-densepose-core = { version = "0.3.0", path = "../wifi-densepose-core" }
# ADR-084 Pass 2: sketch-prefilter for the EmbeddingHistory search loop.
wifi-densepose-ruvector = { version = "0.3.0", path = "../wifi-densepose-ruvector", default-features = false }

[dev-dependencies]
criterion = { version = "0.5", features = ["html_reports"] }
proptest.workspace = true

[[bench]]
name = "signal_bench"
harness = false

[[bench]]
name = "aether_prefilter_bench"
harness = false

## ADR-154: FFT-planner caching (PSD) + DTW Sakoe-Chiba band perf benches.
[[bench]]
name = "features_bench"
harness = false

## ADR-154 Milestone-2: P2 "bench-first" perf items (§7.4 #5/#6/#7/#8/#20).
## #8 (field_model eigendecompose) is measured only under the eigenvalue feature.
[[bench]]
name = "dsp_perf_bench"
harness = false

## ADR-134: CIR estimator throughput benchmarks
[[bench]]
name = "cir_bench"
harness = false
required-features = ["cir"]

# ADR-134: CIR deterministic proof runner binary.
[[bin]]
name = "cir_proof_runner"
path = "src/bin/cir_proof_runner.rs"

# sha2 added for cir_proof_runner (ADR-134). In workspace root since v2/Cargo.toml:145.
# Appended here to avoid touching existing [dependencies] entries owned by the
# implementation agent; this addition is purely additive.
[dependencies.sha2]
workspace = true

## ADR-135: calibration module throughput benchmarks
[[bench]]
name = "calibration_bench"
harness = false

# ADR-135: calibration deterministic proof runner binary.
[[bin]]
name = "calibration_proof_runner"
path = "src/bin/calibration_proof_runner.rs"
