mirror of
https://github.com/ruvnet/RuView
synced 2026-08-01 19:01:42 +00:00
99fea9df9b
Root cause (investigated, same rigor as the MAT fix): `wifi-densepose-train` declared `wifi-densepose-nn` as a dependency but NEVER imported it anywhere in src/ or bin/ — a dead dependency. (The tch-backend model path uses the `tch` crate directly, not wifi-densepose-nn; `grep -r wifi_densepose_nn src/` returns nothing.) That dead dep pulled `ort` (ONNX Runtime) + reqwest/hyper into every downstream consumer, including the ADR-185 `[meridian]` wheel, which binds only train's pure-compute geometry / rapid_adapt / eval modules + signal::hardware_norm. `cargo tree -i wifi-densepose-nn` confirmed train was the SOLE path pulling nn into the wheel; after removal, the package is absent from the graph. Fix: remove the dead dep line from train's Cargo.toml (no code change, no feature-gating needed — nothing referenced it). Not a hoist: the coupling turned out to be nonexistent, not deep. Measured (maturin build --release --features meridian --strip): BEFORE: 1.8 MB AFTER: 1.7 MB (both already within the ADR-117 §5.4 <=5 MB budget). Honest note: unlike MAT — which instantiates OnnxSession and thus bundles the ort native runtime (8.4 MB) — train never references ort, so the native lib was dead-stripped and the wheel was already under budget. The real win is removing ort/reqwest/hyper from train's dependency graph and compile for ALL consumers, not a dramatic wheel shrink. Verified: cargo build -p wifi-densepose-train (default=[]) OK cargo tree -i wifi-densepose-nn -> no longer in the graph cargo test --features meridian --test meridian_parity 2/2 pass maturin develop --features meridian + pytest test_meridian 13/13 pass
110 lines
3.3 KiB
TOML
110 lines
3.3 KiB
TOML
[package]
|
|
name = "wifi-densepose-train"
|
|
version = "0.3.2"
|
|
edition = "2021"
|
|
authors = ["rUv <ruv@ruv.net>", "WiFi-DensePose Contributors"]
|
|
license = "MIT OR Apache-2.0"
|
|
description = "Training pipeline for WiFi-DensePose pose estimation"
|
|
repository = "https://github.com/ruvnet/wifi-densepose"
|
|
documentation = "https://docs.rs/wifi-densepose-train"
|
|
keywords = ["wifi", "training", "pose-estimation", "deep-learning"]
|
|
categories = ["science", "computer-vision"]
|
|
readme = "README.md"
|
|
|
|
[[bin]]
|
|
name = "train"
|
|
path = "src/bin/train.rs"
|
|
|
|
[[bin]]
|
|
name = "verify-training"
|
|
path = "src/bin/verify_training.rs"
|
|
required-features = ["tch-backend"]
|
|
|
|
# AetherArena (ADR-149) deterministic score runner — the CI harness-gate entry
|
|
# point. Pure ruview_metrics (ndarray + sha2), no torch, so it builds and runs
|
|
# under --no-default-features for a fast, GPU-free PR gate.
|
|
[[bin]]
|
|
name = "aa_score_runner"
|
|
path = "src/bin/aa_score_runner.rs"
|
|
|
|
[features]
|
|
default = []
|
|
tch-backend = ["tch"]
|
|
cuda = ["tch-backend"]
|
|
|
|
[dependencies]
|
|
# Internal crates
|
|
wifi-densepose-signal = { version = "0.3.0", path = "../wifi-densepose-signal", default-features = false }
|
|
# NOTE: `wifi-densepose-nn` was declared here but never imported anywhere in
|
|
# this crate's src/ or bin/ (the tch-backend model path uses `tch` directly,
|
|
# not this crate). It was a dead dependency that pulled `ort` (ONNX Runtime) +
|
|
# reqwest/hyper into every downstream consumer — including the ADR-185
|
|
# `[meridian]` wheel. Removed to slim the dependency graph. Inference at
|
|
# serving time is done via `wifi-densepose-nn` by the binaries that actually
|
|
# load models, which depend on it directly.
|
|
|
|
# Core
|
|
thiserror.workspace = true
|
|
anyhow.workspace = true
|
|
serde = { workspace = true, features = ["derive"] }
|
|
serde_json.workspace = true
|
|
|
|
# Tensor / math
|
|
ndarray.workspace = true
|
|
num-complex.workspace = true
|
|
num-traits.workspace = true
|
|
|
|
# PyTorch bindings (optional — only enabled by `tch-backend` feature)
|
|
tch = { workspace = true, optional = true }
|
|
|
|
# Graph algorithms (min-cut for optimal keypoint assignment)
|
|
petgraph.workspace = true
|
|
|
|
# ruvector integration (subpolynomial min-cut, sparse solvers, temporal compression, attention)
|
|
ruvector-mincut = { workspace = true }
|
|
ruvector-attn-mincut = { workspace = true }
|
|
ruvector-temporal-tensor = { workspace = true }
|
|
ruvector-solver = { workspace = true }
|
|
ruvector-attention = { workspace = true }
|
|
|
|
# Data loading
|
|
ndarray-npy.workspace = true
|
|
memmap2 = "0.9"
|
|
walkdir.workspace = true
|
|
|
|
# Serialization
|
|
csv.workspace = true
|
|
toml = "0.8"
|
|
|
|
# Logging / progress
|
|
tracing.workspace = true
|
|
tracing-subscriber.workspace = true
|
|
indicatif.workspace = true
|
|
|
|
# Async (subset of features needed by training pipeline)
|
|
tokio = { workspace = true, features = ["rt", "rt-multi-thread", "macros", "fs"] }
|
|
|
|
# Crypto (for proof hash)
|
|
sha2.workspace = true
|
|
|
|
# CLI
|
|
clap.workspace = true
|
|
|
|
# Time
|
|
chrono = { version = "0.4", features = ["serde"] }
|
|
|
|
[dev-dependencies]
|
|
criterion.workspace = true
|
|
proptest.workspace = true
|
|
tempfile = "3.10"
|
|
approx = "0.5"
|
|
# Used by tests/test_real_loader.rs to write .npy fixtures that exercise the
|
|
# real MmFiDataset disk-loading path (the deterministic proof uses the
|
|
# in-memory SyntheticCsiDataset, which bypasses .npy parsing).
|
|
ndarray.workspace = true
|
|
ndarray-npy.workspace = true
|
|
|
|
[[bench]]
|
|
name = "training_bench"
|
|
harness = false
|