ruvnet/RuView · error · ImportError

wifi_densepose.mat is not in the binary wheels yet (see ruvn

Error message

wifi_densepose.mat is not in the binary wheels yet (see ruvnet/RuView#1412). Build from source with `maturin ... --features mat` (or `--features sota`).

What it means

wifi_densepose.mat re-exports MAT (disaster-response / rubble search) symbols — DisasterType, TriageStatus, DisasterConfig, DisasterResponse, ScanZone, Survivor, VitalSignsReading — from the compiled `_native` extension. They are compiled in only under the Rust `mat` (or `sota`) cargo feature; binary wheels omit it (ruvnet/RuView#1412), so importing wifi_densepose.mat from a wheel raises ImportError.

Source

Thrown at python/wifi_densepose/mat.py:39

    resp.scan_once()                                        # one detection cycle
    for s in resp.survivors():
        print(s.id, s.triage_status, s.confidence, s.location)

Honest scope (ADR-185 §3.4): the ADR's Rust-side `scan_once()` wrapper was
unnecessary — this binding drives one cycle of the public async
`start_scanning()` (with `continuous_monitoring` forced off) on an internal
runtime. `initialize_event` + `add_zone` are required before `scan_once`.
`Survivor.latest_vitals` returns the latest reading (the Rust accessor is a
history). The detection pipeline is real but unvalidated on live rubble.
"""

from __future__ import annotations

from wifi_densepose import _native

# MAT symbols are compiled into `_native` only under the Rust `mat` feature.
if not hasattr(_native, "DisasterResponse"):
    raise ImportError(
        "wifi_densepose.mat is not in the binary wheels yet "
        "(see ruvnet/RuView#1412). Build from source with "
        "`maturin ... --features mat` (or `--features sota`)."
    )

DisasterType = _native.DisasterType
TriageStatus = _native.TriageStatus
DisasterConfig = _native.DisasterConfig
DisasterResponse = _native.DisasterResponse
ScanZone = _native.ScanZone
Survivor = _native.Survivor
VitalSignsReading = _native.VitalSignsReading

__all__ = [
    "DisasterType",
    "TriageStatus",
    "DisasterConfig",
    "DisasterResponse",

View on GitHub (pinned to 4685618388)

Solutions

  1. Build from source with the feature: `maturin build --release --features mat` (or `--features sota`) and pip-install the wheel
  2. Feature-detect with `hasattr(wifi_densepose._native, "DisasterResponse")` before importing the submodule and surface the build command
  3. Track ruvnet/RuView#1412 for binary-wheel enablement of MAT

Example fix

# before
from wifi_densepose.mat import DisasterResponse  # ImportError on wheels

# after
from wifi_densepose import _native

if not hasattr(_native, "DisasterResponse"):
    raise SystemExit("build with: maturin build --release --features mat")
from wifi_densepose.mat import DisasterResponse
Defensive patterns

Strategy: validation

Validate before calling

from wifi_densepose import _native

MAT_AVAILABLE = hasattr(_native, "DisasterResponse")
if not MAT_AVAILABLE:
    raise SystemExit("build with: maturin build --release --features mat")
from wifi_densepose.mat import DisasterResponse

Try / catch

try:
    from wifi_densepose import mat
except ImportError as e:
    if "not in the binary wheels yet" in str(e):
        log.warning("MAT unavailable: build with --features mat")
        mat = None
    else:
        raise

Prevention

When it happens

Trigger: `import wifi_densepose.mat` or `from wifi_densepose.mat import DisasterResponse` on a stock binary-wheel install of wifi-densepose.

Common situations: Building USAR/survivor-detection tooling on PyPI wheels; CI environments that never build the workspace; local dev on the wheel rather than the repo.

Related errors


AI-assisted analysis of ruvnet/RuView@4685618388 (2026-08-16). Data as JSON: /api/errors/effb4fd1b223c188. Report an issue: GitHub.