This fork builds on the original linpde-gp framework in two directions.
Research extensions:
- Helmholtz equation support, including the Helmholtz operator and related components
- An application to in vivo brain magnetic resonance elastography (MRE)
- Additional research modules are in preparation...
Maintenance and reproducibility:
- Updates to the software and submodules for modern dependencies
- A maintained Docker build
The original framework was developed by the author(s) of "Physics-Informed Gaussian Process Regression Generalizes Linear PDE Solvers." If you use this software in your research, we strongly recommend also visiting the original repository.
Each project is self-contained and has its own README with the science, the data it needs, and exact reproduce steps. Start at the front door here (install once), then follow the relevant guide.
| Project | Status | Guide |
|---|---|---|
| Helmholtz equation & Brain MRE — physics-informed GP solver for the inhomogeneous Helmholtz BVP (real & complex, 1D/2D/3D) with FDM/PINN baselines, and its application to in vivo brain magnetic resonance elastography | Open-source | docs/HELMHOLTZ.md |
This project depends on two Git submodules:
| Submodule | Description |
|---|---|
probnum |
Probabilistic numerics library (forked for compatibility) |
Both are fetched automatically when you clone with --recurse-submodules (see below).
Prerequisites: Install Docker (with Docker Compose). On macOS/Windows, Docker Desktop already includes Compose.
Clone with submodules (if you haven't already):
git clone --recurse-submodules https://github.com/bydeng01/linpde-gp.git
cd linpde-gpIf you've already cloned it without submodules, you can fetch them afterward by doing:
cd linpde-gp
git submodule update --init --recursiveStart the container (builds if needed and runs in the background):
./docker-run.sh runOpen a shell inside the running container:
./docker-run.sh shellRun tests:
./docker-run.sh testStart Jupyter Notebook (accessible on your host at http://localhost:8888):
./docker-run.sh jupyterTip: If Jupyter asks for a token, show the container logs to find the URL:
docker-compose logs -f linpde-gp
Stop the container:
./docker-run.sh stopClean up everything (container, image, and volumes like pip cache):
./docker-run.sh clean- Your project directory is mounted into the container at
/app, so local code edits are immediately available inside the container. - Ports
8888(Jupyter) and8000are published by default; adjustdocker-compose.ymlif you need different ports.
Manual Docker Compose equivalents
# Build
docker-compose build
# Run (detached)
docker-compose up -d
# Shell
docker-compose exec linpde-gp /bin/bash
# Stop
docker-compose downIf you prefer to work without Docker, install the submodules as editable packages after cloning:
pip install -e ./probnum
pip install -e ./gp_constr
pip install -e .If you use or refer to the Helmholtz equation module or the brain MRE application in this fork, please cite our paper.
@misc{deng2026operatorinformedgaussianprocessescomplex,
title={Operator-Informed Gaussian Processes for Complex Helmholtz Wavefields: From Synthetic Benchmarks to In Vivo Brain Elastography},
author={Boyuan Deng and Kshitiz Upadhyay and Michael Shields},
year={2026},
eprint={2607.14193},
archivePrefix={arXiv},
primaryClass={stat.ML},
url={https://arxiv.org/abs/2607.14193},
}If you use this software, please cite the original publication:
@misc{Pfoertner2022LinPDEGP,
author = {Pf\"ortner, Marvin and Steinwart, Ingo and Hennig, Philipp and Wenger, Jonathan},
title = {Physics-Informed Gaussian Process Regression Generalizes Linear PDE Solvers},
year = {2022},
publisher = {arXiv},
doi = {10.48550/arxiv.2212.12474},
url = {https://arxiv.org/abs/2212.12474}
}Released under the MIT License.