Setting the Backend#
GWPopulation provides a unified interface to a number of numpy/scipy like APIs.
The backend can be set using gwpopulation.set_backend(backend), where
backend is one of numpy, cupy, jax.
Downstream packages can automatically track the active backend using entry_points.
With this set up, packages can use xp and scs in specified modules.
Additionally, users can provide a full arbitrary scipy object to be used if anything beyond
scipy.special is needed.
An example of how to set numpy, scipy.special, and the toeplitz function
from scipy.linalg via the setup.cfg file is shown below.
Specification using pyproject.toml and setup.py follows slightly
different syntax documentation for which can be found online.
[options.entry_points]
gwpopulation.xp =
mypackage_foo = mypackage.foo
gwpopulation.scs =
mypackage_foo = mypackage.foo
mypackage_bar = mypackage.bar
gwpopulation.other =
mypackage_baz_toeplitz = mypackage.baz:scipy.linalg.toeplitz
Note
Each module that wants to use the GWPopulation backend must be specified independently
for the automatic propagation to work.
If there is a backend that you would like to use that is not currently supported, please open an issue.