Contributing

SDPA for Python is a fork of SDPAP, SDPA’s official Python wrapper. SDPA Multiprecision is a fork of SDPA-GMP, and adds an Application Binary Interface to allow its usage as a callable library. This project is an effort to maintain both for the Python ecosystem. Below is a non-exhaustive list of opportunities for contributing to one or other other.

Common projects

You can help in improving this documentation.

Additionally, since building from source requires compiling multiple libraries, sometimes issues may arise during compilation in some environments which otherwise do not show up in the CI infrastructure (the Python wheels are built on GitHub runners). If you run into problems building from source, please open an issue in the relevant GitHub repository so it can be investigated.

SDPA for Python (SDPAP) specific projects

SDPAP contains (Python translations of) some routines from SparseCoLO [1] to provide a more general API than SDPA, and also to exploit sparsity in nonlinear matrix inequalities. Currently only a subset of these routines are present in SDPA for Python. If you can help translate other routines, that can extend the abilities of SDPA for Python. The Solver Options contains more information on the unimplemented routines.

SDPA Multiprecision specific projects

SDPA Multiprecision uses MPACK, a multiprecision version of BLAS/LAPACK based on the GNU Multiprecision Library. In future, this may be migrated to use MPLAPACK. Any effort to this end will be appreciated.

Testing

A GitHub Actions pipeline is setup to automatically test the Python code using CVXPY tests (using both SDPA and SDPA Multiprecision backends). Additional tests may be added under the tests folder to test features not otherwise tested by CVXPY tests.

If you want to contribute to SDPA for Python, you can use SparseCoLO as a reference.

[1] Sunyoung Kim, Masakazu Kojima, Martin Mevissen and Makoto Yamashita, “Exploiting sparsity in linear and nonlinear matrix inequalities via positive semidefinite matrix completion,” Mathematical Programming, 129(1), 33–68. https://doi.org/10.1007/s10107-010-0402-6