Get and install solprop#
You need Python 3.14 or newer and an environment in which you can install Python
packages. On the four platforms with prebuilt wheels, install solprop together with its
compiled native backend, the fastest way to run it; elsewhere, solprop’s included CPU
backends run every model, and the native backend can be built from source and added
later without changing the physical model. The installation commands
bring in the dependencies: NumPy, SciPy, Matplotlib, h5py, Numba, pyFFTW (FFTW
transforms for the Numba backend), optmat with its
gas extra (the
curated material library every built-in gas, solid, Raman response and ionisation
rate comes from, with its equations of state through CoolProp), threadpoolctl (BLAS
thread control), jaxtyping (array annotations) and tqdm (progress bars). solprop
keeps no material data of its own: see materials for
how model data are selected.
Installing solprop#
Install solprop from the Python Package Index, with its native backend. With uv (recommended):
uv venv --python 3.14
uv pip install "solprop[native]"
source .venv/bin/activate # on Windows: .venv\Scripts\activate
or with pip into an existing Python 3.14 environment:
python -m pip install "solprop[native]"
The native extra adds solprop-native, the compiled native backend, at solprop’s own
version. It is a precompiled wheel on four platforms:
platform |
system |
|---|---|
osx-arm64 |
macOS on Apple silicon |
linux-64 |
Linux on x86-64 |
linux-aarch64 |
Linux on aarch64 |
win-64 |
Windows on x86-64 |
With it installed, backend="auto" uses the native backend
(The native backend describes what it runs).
Processor requirements. The wheels are compiled for a minimum processor:
platform |
minimum processor |
|---|---|
osx-arm64 |
any Apple silicon Mac (M1 or newer) |
linux-64, win-64 |
x86-64-v3: AVX2, FMA and BMI2, that is Intel Haswell (2013) or AMD Excavator (2015) and newer |
linux-aarch64 |
Arm Neoverse N1 (Armv8.2-A with dot product and half precision): AWS Graviton2, Ampere Altra and newer |
Low-power Intel Atom, Celeron and Pentium chips without AVX are below x86-64-v3 even
when recent, as are older cluster nodes. On such a processor the native package refuses
to load, naming the features it lacks, before any of its compiled code runs.
backend="auto" then uses the numba_cpu backend instead and warns once, saying so;
every model still runs, at the included backend’s speed. An explicit
backend="native" raises the refusal. To use the native backend on such a machine,
build it from source for it (Building the native backend),
and please open an issue so that the
maintainers know such processors are in use.
Other platforms. Install solprop alone, uv pip install solprop or
python -m pip install solprop. This gives two backends, the NumPy reference backend and
the compiled Numba CPU backend (see Choosing a backend),
which run every model; consult backend support when
choosing a representation or response, since some combinations require a particular
backend. The native backend can then be built from source.
GPUs and source builds. For an NVIDIA GPU (CUDA) or an AMD GPU (HIP), and on any platform without a wheel, build the native backend from source: Building the native backend gives the requirements and the commands. A source build can also be compiled for the machine that runs it, which is a few per cent faster than the wheel.
For the development version, install from the repository instead
(python -m pip install "git+https://github.com/LupoLab/solprop.git"); to work on
solprop itself, use the contributor setup.
Checking the installation#
Use Python in the activated environment, or a notebook kernel using that same interpreter. Run the following code; it prints the package versions and the backends available to this interpreter.
import optmat
import solprop
from solprop.backends.registry import available, resolve_name
print("solprop", solprop.__version__, "with optmat", optmat.__version__)
print("backends:", available(), "- auto means", resolve_name("auto"))
available() lists the backends that are installed and resolve_name("auto") names the
one a run uses by default: native when the native backend is installed. The first run
of the numba_cpu backend compiles its
kernels. This can make the first calculation slower than subsequent runs; many
compiled kernels are cached on disk. Measure performance after that initial setup.
Make a first short run#
This small linear-envelope calculation checks that propagation and output work. The nonlinear coefficient is zero and the dispersion coefficients are zero, so the pulse should keep its energy. The propagation is only 1 mm; it is an installation check, not a demonstration of nonlinear dynamics.
import numpy as np
from solprop.driver import prop_gnlse
from solprop.processing import energy
run = prop_gnlse(
0.0,
1e-3,
[0.0, 0.0, 0.0],
lambda0=800e-9,
fwhm=50e-15,
energy=1e-9,
trange=400e-15,
wavelength_limits=(600e-9, 1.2e-6),
shock=False,
n_save=3,
progress="none",
)
energies = energy(run, modes="sum")
print("saved positions (m):", run["z"])
print("input and exit energy (nJ):", energies[[0, -1]] * 1e9)
assert np.isclose(energies[-1], energies[0], rtol=1e-8, atol=0.0)
An approximately 1 nJ input and exit confirm this check. Continue with what solprop can do and choosing a spatial description, then run the dispersive-wave lesson for a complete physical example. For package import or backend errors, check that the interpreter is the one in which you installed solprop and inspect backend selection.
Platforms#
solprop is developed and tested on macOS (Apple silicon), Linux (x86-64) and Windows
(x86-64). Single runs and scans work on all three with the included backends. The native
backend has wheels for the four platforms above, builds from source on Linux and macOS,
and builds for GPUs on Linux. The Queue and Slurm scan executors need a POSIX system and refuse to start
on Windows; Local and Pool run there. On Windows a scan’s readers take its lock one
at a time, where POSIX lets them read together, so concurrent reads of one scan file
wait for each other.
The precompiled native wheels and the solprop[native] extra were proposed and qualified by
SEP 29.