{"record":{"id":"33865700693d1486","repo":"ruvnet/RuView","slug":"wifi-densepose-aether-is-not-in-the-binary-wheels","errorCode":null,"errorMessage":"wifi_densepose.aether is not in the binary wheels yet (see ruvnet/RuView#1412). Build from source with `maturin ... --features aether` (or `--features sota`).","messagePattern":"wifi_densepose\\.aether is not in the binary wheels yet \\(see ruvnet/RuView#1412\\)\\. Build from source with `maturin \\.\\.\\. --features aether` \\(or `--features sota`\\)\\.","errorType":"exception","errorClass":"ImportError","httpStatus":null,"severity":"error","filePath":"python/wifi_densepose/aether.py","lineNumber":31,"sourceCode":"\n    from wifi_densepose.aether import AetherConfig, EmbeddingExtractor, cosine_similarity\n\n    ext = EmbeddingExtractor(n_subcarriers=56, config=AetherConfig())\n    a = ext.embed(window_a)          # list[float], length == config.d_proj (128)\n    b = ext.embed(window_b)\n    score = cosine_similarity(a, b)  # re-ID similarity in [-1, 1]\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom wifi_densepose import _native\n\n# The AETHER symbols are compiled into `_native` only under the Rust `aether`\n# feature. The binary wheels do NOT enable it yet (ruvnet/RuView#1412);\n# it is available from a source build with the feature. Name that fix, not\n# a pip extra, which cannot add compiled code to a built wheel.\nif not hasattr(_native, \"AetherConfig\"):\n    raise ImportError(\n        \"wifi_densepose.aether is not in the binary wheels yet \"\n        \"(see ruvnet/RuView#1412). Build from source with \"\n        \"`maturin ... --features aether` (or `--features sota`).\"\n    )\n\nAetherConfig = _native.AetherConfig\nCsiAugmenter = _native.CsiAugmenter\nEmbeddingExtractor = _native.EmbeddingExtractor\ninfo_nce_loss = _native.info_nce_loss\ncosine_similarity = _native.cosine_similarity\n\n__all__ = [\n    \"AetherConfig\",\n    \"CsiAugmenter\",\n    \"EmbeddingExtractor\",\n    \"info_nce_loss\",\n    \"cosine_similarity\",\n]","sourceCodeStart":13,"sourceCodeEnd":49,"githubUrl":"https://github.com/ruvnet/RuView/blob/4685618388a5e49fad5b3005806f3bdd6a7c25c3/python/wifi_densepose/aether.py#L13-L49","documentation":"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.","triggerScenarios":"`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).","commonSituations":"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.","solutions":["Build from source with the feature: `maturin build --release --features aether` (or `--features sota`) and pip-install the resulting wheel","Feature-detect at startup with `hasattr(wifi_densepose._native, \"AetherConfig\")` and fail with the build command","Track ruvnet/RuView#1412 and switch back to binary wheels once the feature ships there"],"exampleFix":"# before\nfrom wifi_densepose import aether  # ImportError on binary wheels\n\n# after\nfrom wifi_densepose import _native\n\nif not hasattr(_native, \"AetherConfig\"):\n    raise SystemExit(\n        \"aether needs a source build: maturin build --release --features aether\"\n    )\nfrom wifi_densepose import aether","handlingStrategy":"validation","validationCode":"from wifi_densepose import _native\n\nAETHER_AVAILABLE = hasattr(_native, \"AetherConfig\")\nif not AETHER_AVAILABLE:\n    raise SystemExit(\n        \"aether requires a source build: \"\n        \"maturin build --release --features aether\"\n    )\nfrom wifi_densepose import aether","typeGuard":null,"tryCatchPattern":"try:\n    from wifi_densepose import aether\nexcept ImportError as e:\n    if \"not in the binary wheels yet\" in str(e):\n        log.warning(\"aether unavailable: build with --features aether\")\n        aether = None\n    else:\n        raise","preventionTips":["Check hasattr(_native, 'AetherConfig') at startup instead of letting the import fail mid-run","Document the maturin feature requirement wherever aether is used","Publish the feature-built wheel to an internal index so deployments are reproducible"],"tags":["python","rust","maturin","feature-flags","build","import","optional-feature"],"backgroundTag":null,"analyzedSha":"4685618388a5e49fad5b3005806f3bdd6a7c25c3","analyzedAt":"2026-08-16T06:09:40.886Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}