{"record":{"id":"94f128cffcd49514","repo":"ruvnet/RuView","slug":"wifi-densepose-meridian-is-not-in-the-binary-wheel","errorCode":null,"errorMessage":"wifi_densepose.meridian is not in the binary wheels yet (see ruvnet/RuView#1412). Build from source with `maturin ... --features meridian` (or `--features sota`).","messagePattern":"wifi_densepose\\.meridian is not in the binary wheels yet \\(see ruvnet/RuView#1412\\)\\. Build from source with `maturin \\.\\.\\. --features meridian` \\(or `--features sota`\\)\\.","errorType":"exception","errorClass":"ImportError","httpStatus":null,"severity":"error","filePath":"python/wifi_densepose/meridian.py","lineNumber":36,"sourceCode":"    frame = norm.normalize(amplitude, phase, hw)     # -> CanonicalCsiFrame\n    print(len(frame.amplitude), frame.hardware_type)\n\nNote (honest scope, ADR-185 §3.3): the ADR's ``RapidAdaptation.calibrate``\n/ ``AdaptationResult.converged`` do not exist in the Rust core — use\n``push_frame(...)`` then ``adapt()``; the result exposes ``final_loss``,\n``frames_used``, ``adaptation_epochs``. Training-time types\n(DomainFactorizer, GradientReversalLayer, VirtualDomainAugmentor) are\nout of scope for P6 (they need the deferred libtorch training tier).\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom wifi_densepose import _native\n\n# MERIDIAN symbols are compiled into `_native` only under the Rust\n# `meridian` feature; absent in a base wheel (ADR-185 §6 acceptance).\nif not hasattr(_native, \"HardwareNormalizer\"):\n    raise ImportError(\n        \"wifi_densepose.meridian is not in the binary wheels yet \"\n        \"(see ruvnet/RuView#1412). Build from source with \"\n        \"`maturin ... --features meridian` (or `--features sota`).\"\n    )\n\nHardwareType = _native.HardwareType\nCanonicalCsiFrame = _native.CanonicalCsiFrame\nHardwareNormalizer = _native.HardwareNormalizer\nMeridianGeometryConfig = _native.MeridianGeometryConfig\nGeometryEncoder = _native.GeometryEncoder\nRapidAdaptation = _native.RapidAdaptation\nAdaptationResult = _native.AdaptationResult\nCrossDomainEvaluator = _native.CrossDomainEvaluator\nmpjpe = _native.mpjpe\n\n__all__ = [\n    \"HardwareType\",\n    \"CanonicalCsiFrame\",","sourceCodeStart":18,"sourceCodeEnd":54,"githubUrl":"https://github.com/ruvnet/RuView/blob/4685618388a5e49fad5b3005806f3bdd6a7c25c3/python/wifi_densepose/meridian.py#L18-L54","documentation":"wifi_densepose.meridian re-exports MERIDIAN symbols — HardwareType, CanonicalCsiFrame, HardwareNormalizer, MeridianGeometryConfig, GeometryEncoder, RapidAdaptation, AdaptationResult — from `_native`. They exist only under the Rust `meridian` (or `sota`) cargo feature; a base wheel deliberately excludes them (ADR-185 §6 acceptance, ruvnet/RuView#1412), so the import raises ImportError.","triggerScenarios":"`import wifi_densepose.meridian` or `from wifi_densepose.meridian import HardwareNormalizer` on a prebuilt binary wheel install.","commonSituations":"Cross-hardware normalization / domain-adaptation work deployed from PyPI wheels; fresh checkouts using wheels; CI without a maturin build step.","solutions":["Build from source with the feature: `maturin build --release --features meridian` (or `--features sota`) and pip-install the wheel","Feature-detect with `hasattr(wifi_densepose._native, \"HardwareNormalizer\")` before importing the submodule","Track ruvnet/RuView#1412 for wheel enablement; note training-tier types (DomainFactorizer etc.) are out of scope per the module docstring"],"exampleFix":"# before\nfrom wifi_densepose.meridian import HardwareNormalizer  # ImportError on wheels\n\n# after\nfrom wifi_densepose import _native\n\nif not hasattr(_native, \"HardwareNormalizer\"):\n    raise SystemExit(\"build with: maturin build --release --features meridian\")\nfrom wifi_densepose.meridian import HardwareNormalizer","handlingStrategy":"validation","validationCode":"from wifi_densepose import _native\n\nMERIDIAN_AVAILABLE = hasattr(_native, \"HardwareNormalizer\")\nif not MERIDIAN_AVAILABLE:\n    raise SystemExit(\"build with: maturin build --release --features meridian\")\nfrom wifi_densepose.meridian import HardwareNormalizer","typeGuard":null,"tryCatchPattern":"try:\n    from wifi_densepose import meridian\nexcept ImportError as e:\n    if \"not in the binary wheels yet\" in str(e):\n        log.warning(\"meridian unavailable: build with --features meridian\")\n        meridian = None\n    else:\n        raise","preventionTips":["Feature-detect hasattr(_native, 'HardwareNormalizer') before importing the submodule","Note the ADR-185 scope: training-tier types are absent even with the feature","Standardize one maturin build command (or --features sota) across the team"],"tags":["python","rust","maturin","feature-flags","build","import","domain-adaptation"],"backgroundTag":null,"analyzedSha":"4685618388a5e49fad5b3005806f3bdd6a7c25c3","analyzedAt":"2026-08-16T06:09:40.886Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}