Project status¶
sedumipy ports SeDuMi’s ~96 .m files and ~54 MEX .c files to a
MATLAB/Octave-free C library + Python package. As of this writing:
Phase |
What |
Status |
|---|---|---|
Phase 0 |
Octave-based golden reference harness |
Done |
Phase 1 |
C kernels: drop MEX, build standalone libsedumi.so |
Done |
Phase 2 |
ctypes Python bindings over libsedumi.so |
Done |
Phase 3 |
Interior-point solver logic (LP + SOCP + PSD) |
Done |
Phase 4 |
High-level API + .mat/SDPA I/O |
Done |
Phase 5 |
Verification against published benchmarks |
Done |
Phase 6 |
Packaging: Linux/macOS/Windows wheels build in CI, published to PyPI |
Done |
Scope. LP (K.l), second-order cone (SOCP, K.q/K.r), and
semidefinite (SDP, K.s) problems are fully ported and verified
against original Octave/SeDuMi output on both synthetic fixtures
and published SDPLIB/DIMACS benchmark problems (Usage’s
Benchmarks section). Dense-column preconditioning is implemented.
The test suite compares against Octave-generated oracle fixtures with
numpy.testing.assert_allclose – rtol between 1e-12 and 1e-10 for
the individual C kernels, and 1e-5 for whole end-to-end solves, where the
interior-point iteration accumulates rounding. Integer-valued results
(orderings, permutations, sparsity patterns) are compared exactly. Several
individual kernels were confirmed bit-identical to the MEX build during
development – see DEVLOG.md – but that is a development
observation, not what CI asserts: the tolerances above are what has to
hold across the four BLAS implementations CI covers (reference Netlib,
OpenBLAS, and scipy-openblas64 – a pip-installable, prebuilt ILP64
OpenBLAS, see below – on Linux; OpenBLAS on Windows; Accelerate on
macOS).
Not ported (deliberately out of scope, no effect on the returned
(x, y, info)): pars.vplot’s v-plot, pars.stopat’s interactive
debug break, the optional pre-solve rank/infeasibility diagnostic, and
the DIMACS error-measures block (info.err). Complex Hermitian PSD
problems (K.scomplex/K.ycomplex) are also out of scope. (Console
progress output itself is ported – see Usage’s fid option.)
Packaging. A wheel with libsedumi.so bundled builds and installs
correctly (verified in an isolated virtualenv with no access to the
source tree). cibuildwheel builds run in CI
(.github/workflows/wheels.yml) on all three platforms. Linux and
Windows link scipy-openblas64 – a pip-installable,
prebuilt ILP64 OpenBLAS, pinned to an exact version, the same package
numpy/scipy themselves build against – as their BLAS; macOS keeps
linking the system Accelerate framework unconditionally, since it never
had the other two’s build/install problem for scipy-openblas64 to solve
(see tools/build_libsedumi.sh’s Darwin case for the full reasoning):
Linux: manylinux containers;
auditwheelvendors the resultinglibscipy_openblas64_.sointo the wheel.macOS: no vendoring needed – Accelerate is a system framework present on every Mac, not a bundled shared library, and no Homebrew dependency either.
Windows: built with an MSYS2 MinGW64 toolchain (
mingw-w64-x86_64-gcc) rather than MSVC –libsedumi.dllis a plain ctypes-loaded DLL, not a CPython extension, so it doesn’t need to be built with the same compiler as Python itself.tools/repair_windows_wheel.py(delvewheel repair --analyze-existingunder the hood) bundles the resultinglibscipy_openblas64_.dlland mingw-runtime dependencies into the wheel. This path has only been exercised on GitHub Actions’ hosted Windows runner, not hand-verified on a real Windows machine.
Published to PyPI on release via Trusted Publishing – see RELEASING.md for how a release is cut.
For the full phase-by-phase history and the porting workflow, see Contributing. For known bugs found and fixed along the way and the session-by-session history of how this status was reached, see DEVLOG.md.