Contributing

New contributor? Read CONTRIBUTING.md in the repository root first. It has the current phase-by-phase status, the porting workflow this project follows (how a single .m file gets ported and verified against a real Octave oracle), known scope limitations, and coding/naming conventions. The detailed, session-by- session history of bugs found and fixed during porting – and how packaging/benchmarking/performance work actually got done – lives separately in DEVLOG.md.

Development setup

git clone --recurse-submodules https://github.com/napinoco/sedumipy.git
cd sedumipy
python -m venv .venv
.venv/bin/pip install -e .[test]
.venv/bin/python -m pytest tests/ -q

Regenerating oracle fixtures (only needed when changing what a module is checked against, not for routine development) requires a real Octave build of upstream SeDuMi under vendor/sedumi-upstream/ – see CONTRIBUTING.md section 6.

Building the documentation

Building the docs alone does not require a C compiler or BLAS/LAPACK, libsedumi.so, or a full sedumipy install (docs/conf.py puts src/ on sys.path directly and mocks the sedumipy._native import); docs/requirements.txt lists exactly what building the docs needs:

.venv/bin/pip install -r docs/requirements.txt
.venv/bin/sphinx-build -b html docs docs/_build/html

pip install -e .[docs] also works if you already have a full dev install (Installation), and additionally makes the docs extra available for other tooling that expects it.

Docs are published to GitHub Pages automatically on every push to main that touches docs/, src/sedumipy/, or pyproject.toml (see .github/workflows/docs.yml); there’s no manual publish step.

A handful of ported docstrings use */' in ways that read as unterminated RST emphasis to docutils (e.g. a bare apostrophe in “A*x=b”-style math or a MATLAB-style K.q cross-reference). These show up as harmless WARNING: Inline emphasis/strong start-string without end-string lines during the build; the docs build (both locally and in CI) does not use -W, so they don’t fail it. Fixing a docstring’s RST escaping is welcome but optional – don’t reflow a carefully-written docstring’s wording just to silence one.