mirror of
https://github.com/ruvnet/RuView
synced 2026-07-22 17:23:19 +00:00
0f405213d3
ADR-185 §4.2 pytest-benchmark micro-benchmarks + runnable examples +
README extras table for the aether/meridian/mat bindings.
- python/bench/test_bench_{aether,meridian,mat}.py — follow the existing
test_bench_vitals.py pattern (skipped by default; --benchmark-only).
- python/examples/{reid_from_csi,cross_room_calibrate,mat_triage}.py —
typed, runnable, mypy --strict clean.
- python/README.md — SOTA extras table + example links.
Measured on a RELEASE wheel (maturin develop --release --features sota),
reference machine per ADR-117 §10:
AETHER embed() mean ~150 us/window (target <2 ms) PASS
batch scaling 1/8/64: 140 / 1091 / 8509 us (linear, no O(n^2)) PASS
MERIDIAN normalize() mean ~2.2 us/frame (target <200 us) PASS
MERIDIAN encode() mean ~6.9 us (target <200 us) PASS
MAT ingest+scan_once() mean ~40 ms/256-frame (< 500 ms interval) PASS
Acceptance self-verification (ADR-185 §6), all run just now:
§6.1 default wheel 279 KB (<=5 MB); build_features has no p6-* feature PASS
§6.2 pytest tests/test_aether.py 9/9 PASS
§6.3 pytest tests/test_meridian.py 13/13 PASS
§6.4 pytest tests/test_mat.py 7/7 PASS
§6.5 benchmarks meet all targets (above) PASS
§6.6 parity harness: 3/3 SHA golden gates green (cargo test --features
sota, 6/6); CI *wiring* as a release gate is out of python/ scope PARTIAL
§6.7 SOTA accuracy bars on labeled fixtures: NOT met (no labeled
fixtures / trained models available; parity proves path-equality,
not accuracy) OPEN
§6.8 .pyi stubs present for all three; mypy --strict on the 3 examples PASS
§6.9 base wheel `import wifi_densepose.{aether,meridian,mat}` raises a
clear ImportError naming the extra PASS
No regression: 76 pre-existing tests pass on the default wheel.
Status NOT flipped to Accepted: §6.7 (accuracy bars) is unmet, §6.6 CI
wiring is pending, and the per-extra wheel-size hoists (sensing-server /
train / mat leaf crates) remain follow-ups. docs/adr/ is owned by another
agent this session, so the ADR ledger edit is deferred to that owner.
45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
"""ADR-185 §4.2 — AETHER embed() micro-benchmarks.
|
||
|
||
Target (release build, ADR-024 §2.8 FP32 <1 ms with headroom): steady-state
|
||
`embed()` < 2 ms/window, and batched `embed()` scales roughly linearly (no
|
||
accidental O(n²)).
|
||
|
||
Run with:
|
||
pytest python/bench/test_bench_aether.py --benchmark-only
|
||
|
||
Skipped by default (they live in `bench/`, outside `testpaths`). Timing
|
||
targets are validated on a RELEASE wheel (`maturin develop --release
|
||
--features sota`); a debug wheel will be several× slower.
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
import math
|
||
|
||
import pytest
|
||
|
||
from wifi_densepose import aether
|
||
|
||
|
||
def _window(frames: int = 8, subc: int = 56) -> list[list[float]]:
|
||
return [[math.sin(0.1 * t + 0.03 * k) for k in range(subc)] for t in range(frames)]
|
||
|
||
|
||
def _extractor() -> aether.EmbeddingExtractor:
|
||
return aether.EmbeddingExtractor(n_subcarriers=56, config=aether.AetherConfig())
|
||
|
||
|
||
def test_embed_per_window(benchmark) -> None:
|
||
ext = _extractor()
|
||
window = _window()
|
||
out = benchmark(lambda: ext.embed(window))
|
||
assert len(out) == 128
|
||
|
||
|
||
@pytest.mark.parametrize("batch", [1, 8, 64])
|
||
def test_embed_batch_scaling(benchmark, batch: int) -> None:
|
||
ext = _extractor()
|
||
windows = [_window() for _ in range(batch)]
|
||
out = benchmark(lambda: [ext.embed(w) for w in windows])
|
||
assert len(out) == batch
|