ruvnet/RuView · error · ImportError

wifi_densepose.aether is not in the binary wheels yet (see r

Error message

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

What it means

wifi_densepose.aether re-exports AETHER symbols (AetherConfig, CsiAugmenter, EmbeddingExtractor, info_nce_loss, cosine_similarity) from the compiled `_native` extension. Those symbols exist only when the Rust extension was built with the cargo `aether` (or `sota`) feature; prebuilt binary wheels do not enable it yet (ruvnet/RuView#1412). Importing the module from a binary wheel raises ImportError at module load.

Source

Thrown at python/wifi_densepose/aether.py:31

    from wifi_densepose.aether import AetherConfig, EmbeddingExtractor, cosine_similarity

    ext = EmbeddingExtractor(n_subcarriers=56, config=AetherConfig())
    a = ext.embed(window_a)          # list[float], length == config.d_proj (128)
    b = ext.embed(window_b)
    score = cosine_similarity(a, b)  # re-ID similarity in [-1, 1]
"""

from __future__ import annotations

from wifi_densepose import _native

# The AETHER symbols are compiled into `_native` only under the Rust `aether`
# feature. The binary wheels do NOT enable it yet (ruvnet/RuView#1412);
# it is available from a source build with the feature. Name that fix, not
# a pip extra, which cannot add compiled code to a built wheel.
if not hasattr(_native, "AetherConfig"):
    raise ImportError(
        "wifi_densepose.aether is not in the binary wheels yet "
        "(see ruvnet/RuView#1412). Build from source with "
        "`maturin ... --features aether` (or `--features sota`)."
    )

AetherConfig = _native.AetherConfig
CsiAugmenter = _native.CsiAugmenter
EmbeddingExtractor = _native.EmbeddingExtractor
info_nce_loss = _native.info_nce_loss
cosine_similarity = _native.cosine_similarity

__all__ = [
    "AetherConfig",
    "CsiAugmenter",
    "EmbeddingExtractor",
    "info_nce_loss",
    "cosine_similarity",
]

View on GitHub (pinned to 4685618388)

Solutions

  1. Build from source with the feature: `maturin build --release --features aether` (or `--features sota`) and pip-install the resulting wheel
  2. Feature-detect at startup with `hasattr(wifi_densepose._native, "AetherConfig")` and fail with the build command
  3. Track ruvnet/RuView#1412 and switch back to binary wheels once the feature ships there

Example fix

# before
from wifi_densepose import aether  # ImportError on binary wheels

# after
from wifi_densepose import _native

if not hasattr(_native, "AetherConfig"):
    raise SystemExit(
        "aether needs a source build: maturin build --release --features aether"
    )
from wifi_densepose import aether
Defensive patterns

Strategy: validation

Validate before calling

from wifi_densepose import _native

AETHER_AVAILABLE = hasattr(_native, "AetherConfig")
if not AETHER_AVAILABLE:
    raise SystemExit(
        "aether requires a source build: "
        "maturin build --release --features aether"
    )
from wifi_densepose import aether

Try / catch

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

Prevention

When it happens

Trigger: `import wifi_densepose.aether` or `from wifi_densepose import aether` on an install of a prebuilt wheel (plain `pip install wifi-densepose` without a feature-enabled source build).

Common situations: Using CSI re-ID/embedding features in a service deployed from PyPI wheels; new team members on stock wheels; CI that installs wheels instead of building the workspace from source.

Related errors


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