BITS for GAPS
Bayesian Information-Theoretic Sampling for hierarchical GAussian Process Surrogates.
Graphical abstract from the paper (© 2026 The Authors, CC BY 4.0).
A framework for information-theoretic sequential experimental design with Bayesian hierarchical Gaussian-process surrogates. Prior physical knowledge is encoded through priors on the GP hyperparameters; sampling is guided by maximizing the predictive differential entropy, so hyperparameter uncertainty (not just predictive variance) drives data acquisition.
Reference: K. D. Jones and A. W. Dowling, "BITS for GAPS: Bayesian Information-Theoretic Sampling for hierarchical GAussian Process Surrogates," Computers & Chemical Engineering 211 (2026) 109650. https://doi.org/10.1016/j.compchemeng.2026.109650
The paper is bundled in this repository so you can read the method alongside the code:
paper/bits_for_gaps_paper.pdf. It is redistributed under
CC BY 4.0 (© 2026 The Authors, published by
Elsevier Ltd); the DOI above is the canonical citation.
Install
pip install bits_for_gaps
The core library is pure Python (GPflow / TensorFlow / NumPy / SciPy) with no Julia
dependency. Julia + Clapeyron are only needed for the vle_distillation example, which
isn't part of the PyPI package -- see "From source" below.
Supports Python 3.9-3.12. Python 3.13+ isn't available: this package depends on
GPflow, and GPflow requires numpy<2 in every release -- no NumPy 1.x publishes a
Python 3.13 wheel. That's an upstream constraint, not something this package can work
around; see docs/installation.md for the full explanation.
macOS note: set export PYTHON_JULIACALL_HANDLE_SIGNALS=yes before importing
juliacall, or Julia crashes with a bus error (SIGBUS).
From source (for examples/, paper/, and development)
git clone https://github.com/dowlinglab/bits_for_gaps
cd bits_for_gaps
conda env create -f environment.yml
conda activate bits_for_gaps
pip install -e ".[dev]" # core + test tools
# pip install -e ".[dev,vle]" # add the Julia/Clapeyron VLE example backend
Layout
src/bits_for_gaps/ the library (algorithm)
examples/ worked examples (incl. the paper's VLE/distillation case study)
paper/ scripts + reference metrics to reproduce the published figures
tests/ unit / integration / regression tests
docs/ Sphinx documentation (ReadTheDocs)
Quick test
pytest -q
To measure coverage locally (scoped to src/bits_for_gaps -- examples/, paper/,
and tests/ are repo-only and excluded from the denominator):
pytest --cov=bits_for_gaps --cov-report=term-missing
Provenance
The research code behind the paper was originally developed in a private repository over the
course of the study. It was then migrated here and reorganized into an installable, tested
package: the algorithm was separated from the vapor–liquid-equilibrium case study, generalized
to arbitrary input dimension, and covered by a test suite. That private repository holds only
the development history — nothing you need to use this package or to reproduce the paper's
figures is missing from this repository. The data the figure scripts read is committed here
under paper/data/ (see paper/REPRODUCTION.md).
Docs
Full docs (installation, a pure-Python quickstart, theory notes, the VLE example, reproducing the paper's figures, and the API reference): https://bits-for-gaps.readthedocs.io
To build and browse locally instead:
pip install -e ".[docs]"
sphinx-build -W docs docs/_build/html
open docs/_build/html/index.html # or your platform's equivalent
Metadata
Release files for bits-for-gaps 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| bits_for_gaps-0.2.0.tar.gz | 36.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bits_for_gaps-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 73.3 kB
Release files / bits_for_gaps-0.2.0.tar.gz
| Download URL | bits_for_gaps-0.2.0.tar.gz |
|---|---|
| Size | 36.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
190e674326c7c33aece9b19efab06a25fd47e1c180f34f529b29175feb84f728
|
|
BLAKE2b-256 checksum How to use checksums |
93ff096ad7a58a4133d87b1c69bb949543500de87675be2cfbdabd5b1a91c465
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 7, 2026.
Transparency logRelease files / bits_for_gaps-0.2.0-py3-none-any.whl
| Download URL | bits_for_gaps-0.2.0-py3-none-any.whl |
|---|---|
| Size | 36.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1ed9149f122e9f83628c0c9bddd0b1c7462ada9a067947b28db1d43e5749edf1
|
|
BLAKE2b-256 checksum How to use checksums |
f7688d978155b8c2760bde40855c0c035fae19c30499b33365a8371f1bac9f08
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 7, 2026.
Transparency log