Skip to main content

rgpot

img

codecov

rgpot is a potential-energy library and Cap'n Proto RPC server for atomistic simulation codes. It gives clients one geometry carrier, one result carrier, and one extensible backend-configuration carrier:

  • ForceInput: positions, atomic numbers, box, and unit strings
  • PotentialResult: energy plus flat force array
  • PotentialConfig: backend setup, with arms such as none, nwchem, and cpmd

XC response kernels (rgpot::XcKernel, meson -Dwith_xckernel=true) are in-process only. They are not a Potential, and there is no PotentialConfig.xckernel arm: operands are collocation plus named Libxc arrays, not ForceInput. See docs/xckernel.md. pylibxc is not on PyPI (pylibxc2 is an unrelated stub); use the conda-forge libxc package via pixi install -e xckernel.

D3Pot and D4Pot (meson -Dwith_dftd3 / -Dwith_dftd4) are in-process Potential summands: construct them and evaluate ForceInput to energy and forces. There is no PotentialConfig.d3 or PotentialConfig.d4 arm. A DFT host sums XcKernel + VV10 + D4 itself; dispersion is not folded into the XC kernel.

ExprPot (meson -Dwith_expr=true) compiles a Lepton energy string over named child Potential objects. The parser is vendored OpenMM Lepton; there is no pixi muparser feature and no PotentialConfig.expr arm.

In-process LJPot vs pyeonclient Matter on the same LJ fixture is scripts/time_lj_rgpot_vs_pyeonclient.py (rg.terra). On rg.terra (2026-09-04, 1e6 calls) A (LJPot::operator()) was 31-33 ns/call and B (in-process pyeonclient Matter.forces, not potserv) was 687 to 791 ns/call. XcKernel is not a Potential and is not part of that race. See docs/orgmode/howto/exprpot.org.

The public wire schema lives in CppCore/rgpot/rpc/Potentials.capnp and is shared by the C++ server, Python integration tests, and the Rust core crate. Native rgpot units are eV and Angstrom. RPC clients may request compatible units through ForceInput.lengthUnit and ForceInput.energyUnit.

Python (PyPI)

Install the manylinux wheel (nanobind abi3, Python >= 3.12 for the stable ABI extension; requires-python is >= 3.10 for pure metadata):

pip install rgpot
# Metatomic path (engine libs resolve from these packages at runtime):
pip install 'rgpot[metatomic]'
# or: pip install torch metatomic-torch metatensor-torch metatensor-core vesin

The PyPI wheel compiles ExprPot (vendored Lepton), D3Pot, D4Pot, and XcKernel. s-dftd3 / dftd4 are linked and vendored; no conda install is required at pip install time. Lennard-Jones needs only numpy. Metatomic uses dlopen of a bundled engine:

  • layout: rgpot/lib/torch-X.Y/libmetatomic_engine.so
  • picker: installed torch major (same multi-ABI idea as metatomic-torch)
  • supported torch majors: 2.7 and newer (wheels ship 2.7–2.13 engines)
  • torch 2.6 and older are not supported for Metatomic dlopen
import numpy as np
import rgpot

print(rgpot.__version__)
print(rgpot.has_expr, rgpot.has_dftd3, rgpot.has_dftd4, rgpot.has_xckernel)
print(rgpot.available_metatomic_engine_abis())  # e.g. 2.7 .. 2.13
# energy, forces, variance = rgpot.LJPot()(positions, atom_types, box)
# energy, forces, variance = rgpot.D3Pot()(positions, atom_types, box)
# energy, forces, variance = rgpot.ExprPot(
#     "0.5*lj + d3", {"lj": "lj", "d3": "d3"})(positions, atom_types, box)
# print(rgpot.XcKernel.catalog())
# energy, forces, variance = rgpot.evaluate_metatomic(
#     positions, atom_types, box, model_path="model.pt")

See https://pypi.org/project/rgpot/.

Build And Test

Meson is the primary build path. Use the rpctest environment when running the RPC integration scripts because they need pycapnp.

pixi shell -e rpctest
meson setup bbdir -Dwith_tests=true -Dwith_rpc=true --buildtype=debug
meson compile -C bbdir
meson test -C bbdir --print-errorlogs
python tests/rpc_integ.py --server-bin ./bbdir/CppCore/potserv

CMake is supported as well:

cmake -B build \
  -DRGPOT_BUILD_TESTS=ON \
  -DRGPOT_BUILD_EXAMPLES=ON \
  -DRGPOT_WITH_RPC=ON
cmake --build build
ctest --test-dir build --output-on-failure

For client-only consumers that only need the Cap'n Proto schema and generated RPC client types:

cmake -B build_client \
  -DRGPOT_RPC_CLIENT_ONLY=ON \
  -DRGPOT_BUILD_TESTS=ON
cmake --build build_client
ctest --test-dir build_client --output-on-failure

Backends

Backend Server selector Build / runtime notes
LJ LJ Built-in 12-6 Lennard-Jones reference potential
CuH2Pot CuH2 Built-in Cu-H EAM potential
XTBPot XTB, GFNFF, GFN0xTB, GFN1xTB Enable with -Dwith_xtb=true; use pixi env xtbbld or tbbld; linked XTBPot + dlopen libxtb_engine.so (see docs/xtb_backends.md)
TBLitePot TBLite, TBLiteGFN1, TBLiteIPEA1 Enable with -Dwith_tblite=true; use pixi env tblitebld or tbbld
D3Pot D3 In-process Potential summand. Enable with -Dwith_dftd3=true; use pixi env dftd3 or dftd. BJ/zero damping, functional key, explicit ATM flag. No PotentialConfig.d3. Goldens: meson test --suite dftd
D4Pot D4 In-process Potential summand. Enable with -Dwith_dftd4=true; use pixi env dftd4 or dftd. Functional key, charge, explicit ATM/many-body flag. No PotentialConfig.d4. Goldens: meson test --suite dftd
ExprPot in-process Enable with -Dwith_expr=true. Vendored OpenMM Lepton (no pixi muparser). Named Potential children; construct-time fail-closed names. No PotentialConfig.expr.
MetatomicPot Metatomic:<model_path> Enable with -Dwith_metatomic=true; use pixi env metatomicbld. Pip engines: torch 2.7+
UmaPot Uma:<model_path>, Uma:<model_path>:omol Enable with -Dwith_metatomic=true. AOTInductor .pt2 plus vesin neighbor lists; charge/spin are per-call tensor inputs
NWChemPot NWChem Frontend always builds; load libnwchemc from the split nwchemc project at runtime
CPMDPot CPMD Frontend always builds; load libcpmdc from the split cpmdc project at runtime
UmaPot Uma:<model.pt2> UMA / OMol AOTInductor .pt2. Vesin neighbors, one package per composition. See CppCore/rgpot/UmaPot/README.md.
SkalaPot Skala Skala XC on NWChem DFT via libnwchemc.
MOPACPot MOPAC Frontend always builds; load libmopacc from the split mopacc project at runtime (OpenMOPAC). Packed params. Default model AM1.

Copyable construct-and-evaluate (meson -Dwith_expr=true). PotentialHandle::from_impl / rgpot_potential_new_eindir wraps that one ExprPot as one eindir objective for rgmin, rgsaddle, and anneal.

#include "rgpot/ExprPot/ExprPot.hpp"
#include "rgpot/LennardJones/LJPot.hpp"
#include "rgpot/Morse/MorsePot.hpp"
#include "rgpot/types/AtomMatrix.hpp"

#include <array>
#include <memory>
#include <vector>

int main() {
  std::vector<rgpot::ExprPot::Term> terms;
  terms.emplace_back("lj", std::make_unique<rgpot::LJPot>());
  terms.emplace_back("morse", std::make_unique<rgpot::MorsePot>());
  rgpot::ExprPot pot("0.5*lj + morse", std::move(terms));

  rgpot::types::AtomMatrix positions{{1.0, 2.0, 3.0}, {1.5, 2.5, 3.5}};
  std::vector<int> atomTypes{0, 0};
  std::array<std::array<double, 3>, 3> box{{
      {15.0, 0.0, 0.0},
      {0.0, 20.0, 0.0},
      {0.0, 0.0, 30.0},
  }};
  auto [energy, forces, variance] = pot(positions, atomTypes, box);
  (void)forces;
  (void)variance;
  (void)energy;
}

When the build also has -Dwith_dftd3=true, swap the Morse child for D3Pot and the string "0.5*lj + d3".

Example server commands:

./bbdir/CppCore/potserv 12345 LJ
./bbdir/CppCore/potserv 12345 Metatomic:CppCore/tests/data/lj38/lennard-jones.pt
CPMDC_LIBRARY=/path/to/libcpmdc.so ./bbdir/CppCore/potserv 12345 CPMD
NWCHEMC_LIBRARY=/path/to/libnwchemc.so ./bbdir/CppCore/potserv 12345 NWChem

CPMD And NWChem Configuration

CPMD and NWChem do not use ad hoc rgpot config files. They use the PotentialConfig union over RPC:

  • PotentialConfig.cpmd carries CPMDParams for CPMDPot
  • PotentialConfig.nwchem carries NWChemParams for NWChemPot
  • geometry still arrives through ForceInput on every calculate() call

For CPMD, tests/cpmd_params.py contains pycapnp helpers for building CPMDParams and PotentialConfig.cpmd messages. The helper covers scalar fields, raw inputBlocks, and every structured CPMDInputSection arm. See CppCore/rgpot/CPMDPot/README.md for the engine lookup order and schema field mapping.

The CPMD runtime path is:

  1. Build libcpmdc.so in the split cpmdc repository (or use the in-tree libcpmdc_fake_engine.so from a -Dwith_tests=true build for CI).
  2. Start potserv <port> CPMD with CPMDC_LIBRARY, RGPOT_CPMDC_ENGINE, or RGPOT_CPMD_ENGINE pointing at that shared library.
  3. Send configure(PotentialConfig.cpmd) once for method setup.
  4. Send ForceInput on each calculate() call for geometry and requested output units.

For NWChem, tests/nwchem_params.py builds NWChemParams / PotentialConfig.nwchem. Engine lookup order is NWCHEMC_LIBRARY, RGPOT_NWCHEMC_ENGINE, RGPOT_NWCHEM_ENGINE, then enginePath on params. See CppCore/rgpot/NWChemPot/README.md. The NWChem runtime path mirrors CPMD:

  1. Build libnwchemc.so in the split nwchemc repository (or libnwchemc_fake_engine.so from a tests build).
  2. Start potserv <port> NWChem with the library env vars above.
  3. configure(PotentialConfig.nwchem) once, then calculate(ForceInput).

potctl drives the same Potential Cap'n Proto RPC against potserv (bridge stress and CI legs pass the potential name such as NWChem or CPMD).

Developer Tasks

Hooks use prek through prek.toml. Common commands:

pixi r prek-install
pixi r prek
pixi r rust-test
pixi r -e rpctest python tests/test_cpmd_params.py
pixi r -e rpctest python tests/test_nwchem_params.py
pixi r -e rpctest python tests/test_rpc_integ_cpmd.py
pixi r -e rpctest python tests/test_rpc_integ_nwchem.py
# Full RPC + C ABI E2E (point env at built fake engines + potserv)
export RGPOT_POTSERV=/path/to/bbdir/CppCore/potserv
export NWCHEMC_LIBRARY=/path/to/bbdir/CppCore/libnwchemc_fake_engine.so
export RGPOT_CPMD_ENGINE=/path/to/bbdir/CppCore/libcpmdc_fake_engine.so
pixi r -e rpctest python tests/test_rpc_e2e_c_abi.py
pixi r -e rpctest python tests/rpc_integ.py \
  --server-bin ./bbdir/CppCore/potserv \
  --nwchem-smoke \
  --cpmd-smoke

The root README is generated from readme_src.org. Project documentation sources live under docs/orgmode/.

License

MIT, with backend-specific notes: some potentials are adapted from eOn under BSD-3-Clause terms. The unit expression parser in CppCore/rgpot/units.cc is derived from metatomic-torch (BSD-3-Clause, metatensor developers).

Metadata

Release files for rgpot 3.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rgpot 3.3.0
File Size Uploaded
rgpot-3.3.0.tar.gz 37.5 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for rgpot 3.3.0
File
rgpot-3.3.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 abi3 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
rgpot-3.3.0-cp312-abi3-macosx_14_0_arm64.whl CPython 3.12 abi3 macOS 14.0+ ARM64 Details
rgpot-3.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
rgpot-3.3.0-cp311-cp311-macosx_14_0_arm64.whl CPython 3.11 CPython 3.11 macOS 14.0+ ARM64 Details
rgpot-3.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
rgpot-3.3.0-cp310-cp310-macosx_14_0_arm64.whl CPython 3.10 CPython 3.10 macOS 14.0+ ARM64 Details

Total release size: 118.6 MB

Release files / rgpot-3.3.0.tar.gz

Download URL rgpot-3.3.0.tar.gz
Size 37.5 MB
Tags Source
SHA-256 checksum
How to use checksums
d5540f345462cb36a5415cb8d2a9ffe0de4104c8b581ec314d342a557075b9af
BLAKE2b-256 checksum
How to use checksums
be77d5f0cd36ab61608563af581c56ff691d7a0e92d4c3198cd684ce8b531c67
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / rgpot-3.3.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL rgpot-3.3.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 16.9 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
5d8e8684b1096c1f3af1d7b000b8a3c836d046f66dedb7360edb338221bd4498
BLAKE2b-256 checksum
How to use checksums
e2262c56e0e38bff3cab1f3341053c50397aa2e495f222c296dfff59cd0df76d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / rgpot-3.3.0-cp312-abi3-macosx_14_0_arm64.whl

Download URL rgpot-3.3.0-cp312-abi3-macosx_14_0_arm64.whl
Size 10.1 MB
Tags CPython 3.12 abi3 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
feae92ade9423dd6970e9f92ab560eabdf9ed383273981c83e851f2769970d77
BLAKE2b-256 checksum
How to use checksums
d15c025753418ac3ccadc63b796bde02157b6fd0a8c5ee5dae4fc8ecad1bd692
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / rgpot-3.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL rgpot-3.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 16.9 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
571ebb6b922181a8eacc8262657430a7d36702a4b55abbd8295b1cbc8a02bb22
BLAKE2b-256 checksum
How to use checksums
83ba3337a3c28c95c2fb9504bfe2334291f3971cc32613c1dd5c9ee2db3b6420
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / rgpot-3.3.0-cp311-cp311-macosx_14_0_arm64.whl

Download URL rgpot-3.3.0-cp311-cp311-macosx_14_0_arm64.whl
Size 10.1 MB
Tags CPython 3.11 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
94e18d77fec27f8feba07feed28acac8abc8ea03a3a82aa95fa8b8021c75e5ec
BLAKE2b-256 checksum
How to use checksums
cfb19a6717f65b54e9f5da7eb55a77f80e662d0aeb7e6911c7537825a8c32b78
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / rgpot-3.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL rgpot-3.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 16.9 MB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
a237b2ad1c93599bfe58ac8a8b1a7bc1bdfbbb1ec5681b6fb09a475727bbff23
BLAKE2b-256 checksum
How to use checksums
1ed07f2139d1013b1f3c065e6c5ad2310296b19e0e717643074ed26f0aced76a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / rgpot-3.3.0-cp310-cp310-macosx_14_0_arm64.whl

Download URL rgpot-3.3.0-cp310-cp310-macosx_14_0_arm64.whl
Size 10.1 MB
Tags CPython 3.10 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
8a5efaec50dabbd727b9fbad39ece3730e6bf4d187d22f80c4e1add6d447d86d
BLAKE2b-256 checksum
How to use checksums
b7437613eafb2521609c7fa471030a56641f92db6b5383b494ab60bc7d371048
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

3.5.1

7 release files

3.5.0

7 release files

3.4.0

7 release files

This release

3.3.0 This release

7 release files

3.2.0

7 release files

3.1.2

7 release files

3.1.0

7 release files

3.0.2

8 release files

2.5.4

1 release file

2.5.3

1 release file

2.5.2

1 release file

2.5.1

2 release files

2.4.2

2 release files

2.4.1

2 release files

2.4.0

2 release files

2.3.1

2 release files

2.3.0

2 release files

2.2.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page