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: .. list-table:: :header-rows: 1 * - 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 (:doc:`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 :doc:`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; ``auditwheel`` vendors the resulting ``libscipy_openblas64_.so`` into 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.dll`` is 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-existing`` under the hood) bundles the resulting ``libscipy_openblas64_.dll`` and 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 :doc:`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 `_.