Packaging Finesse

Finesse is currently packaged for pip and conda. Finesse requires the following system dependencies in addition to those for pip found in requirements.txt:

  • Python 3.8 or higher

  • SuiteSparse 4.0 or higher

Python 3.8 is a hard requirement due to the use of positional-only arguments, walrus operators, the use of functools.singledispatchmethod and the requirement for dict to be reversible in the code.

Pip

Python wheels are built for most Linux platforms (so-called manylinux wheels). This procedure is automated as part of the CI pipeline (see .gitlab-ci.yml in the source), but it is quite simple. The Red Hat based Docker image manylinux2014 provided by PyPA is used. The only upstream dependency is currently suitesparse-devel which provides the KLU C headers used by Finesse’s simulation module.

The procedure for building a bdist_wheel for the manylinux target is:

$ yum install -y suitesparse-devel
$ /path/to/pip install -r requirements-build.txt
$ /path/to/pip wheel . --no-deps -w wheelhouse
$ auditwheel repair wheelhouse/*.whl

These commands should be run from the source code root on the Docker image. The /path/to/pip parts should be replaced by the path to pip for the Python version being targeted.

Conda

Todo

Create and document the packaging procedure for Conda.

The conda environment is defined in environment.yml for most platforms but environment-win.yml for Windows.