Skip to content

Split P6 SOTA bindings into separate PyPI packages (aether/mat/meridian) #1412

Description

@proffesor-for-testing

Summary

Ship the P6 SOTA subsystems (AETHER / MAT / MERIDIAN) as separate native PyPI packageswifi-densepose-aether, wifi-densepose-mat, wifi-densepose-meridian — that the wifi-densepose[aether] / [mat] / [meridian] extras depend on. This is the only way to honor the deliberate "small base wheel, opt-in SOTA" design (ADR-117 §5.4) while making the extras actually deliver the bindings.

Why now

A pip extra can only pull Python packages; it cannot enable a Rust cargo feature on an already-built wheel. So today the [aether]/[mat]/[meridian]/[sota] extras are = [] and inert: pip install wifi-densepose[aether] installs the base wheel, which has no P6 bindings, and import wifi_densepose.aether fails.

There are only three ways to resolve that: (A) compile SOTA into the single published wheel — abandons the small-base design and, once mat gains ONNX Runtime as anticipated, silently balloons the published wheel past the 5 MiB budget (which only guards the no-features build); (B) split into separate packages — this issue; (C) keep the base small and make P6 source-build-only for now. C was chosen for the current PR (honest error messages + source-build path via --features); B is the proper fix.

Done looks like

  • pip install wifi-densepose → small base wheel, no SOTA (design preserved; base stays budget-guarded).
  • pip install wifi-densepose[aether] → pulls wifi-densepose-aether, and import wifi_densepose.aether works.
  • Each SOTA package is built only with its own cargo feature, so a heavy dep (e.g. ONNX Runtime landing in mat) grows only wifi-densepose-mat, never the base.
  • Each SOTA package has its own size budget check.

Work items

  • Decide the module-resolution model so wifi_densepose.aether resolves from the separate wifi-densepose-aether package (namespace package, or a re-export shim in the base that imports the sibling package when installed).
  • A pyproject.toml / maturin build per SOTA package, each pinning its cargo feature.
  • Per-package cibuildwheel matrix + PyPI trusted-publishing lane (mirror pip-release.yml).
  • Point the base package's extras at the sibling packages (aether = ["wifi-densepose-aether==<ver>"], …).
  • Per-package wheel-size budget job.
  • Remove the interim source-build-only messaging once the packages publish.

Context: the interim C fix landed on feature/python-sota-modernization — release wheels stay feature-less (small base preserved), the import shims now point users to a source build with --features, and the AETHER parity tests were made arch-portable (tolerance vs a golden vector rather than a non-portable f32 byte hash). This issue tracks the follow-up to actually ship P6 in binary wheels.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions