Testing#

Every pull request runs the full test suite on Linux, on Python 3.11 and 3.14, with and without the optional extras. It also builds and installs the wheel, builds this website, and reruns every notebook, which must reproduce the outputs the website shows. NumPy in float64 is the reference: the PyTorch paths must match its results and repeat exactly.

Each release’s pull request into main runs a quality gate that fits the nine supported methods to data with known graphs, seven of them to the Sachs data too, and the release merges only when every method passes. The publish reuses that run when the tagged commit has the same files as the commit the gate checked, and runs the gate again when it does not. Every pull request also checks the published benchmarks: a method fails when its reference package has fewer errors at any size, unless a cited source shows that Andrey follows the method’s paper or that the reference has a defect.

Platform

What is tested

Linux x86_64

everything above, on every pull request

macOS arm64

install, import, the command line, PC and GES fits, worker processes, and the unit tests with PyTorch on the CPU

Windows x86_64

install, import, the command line, PC and GES fits, and worker processes, on the CPU

GPUs#

No hosted runner has a GPU, so the CUDA and MPS paths are checked on our own machines: a parity suite compares each device with NumPy, CUDA in float64 to about 1e-9 and MPS in float32 to 1e-3. To run it on a machine with a GPU and a GPU build of PyTorch:

ANDREY_DEVICE=cuda ANDREY_REQUIRE_GPU=1 CUBLAS_WORKSPACE_CONFIG=:4096:8 uv run pytest tests/gpu -ra

ANDREY_REQUIRE_GPU=1 makes the suite fail, instead of skip, when no GPU is present. Use ANDREY_DEVICE=mps on an Apple GPU.