Potential energy surfaces for atomistic simulation (LJ + Metatomic multi-ABI dlopen; nanobind abi3)
Project description
rgpot
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 stringsPotentialResult: energy plus flat force arrayPotentialConfig: backend setup, with arms such asnone,nwchem, andcpmd
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
Lennard-Jones needs only numpy. Metatomic uses dlopen of a bundled
engine:
- layout:
rgpot/lib/torch-X.Y/libmetatomic_engine.so - picker: installed
torchmajor (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.available_metatomic_engine_abis()) # e.g. 2.7 .. 2.13
# 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 |
MetatomicPot |
Metatomic:<model_path> |
Enable with -Dwith_metatomic=true; use pixi env metatomicbld. Pip engines: torch 2.7+ |
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 |
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.cpmdcarriesCPMDParamsforCPMDPotPotentialConfig.nwchemcarriesNWChemParamsforNWChemPot- geometry still arrives through
ForceInputon everycalculate()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:
- Build
libcpmdc.soin the splitcpmdcrepository (or use the in-treelibcpmdc_fake_engine.sofrom a-Dwith_tests=truebuild for CI). - Start
potserv <port> CPMDwithCPMDC_LIBRARY,RGPOT_CPMDC_ENGINE, orRGPOT_CPMD_ENGINEpointing at that shared library. - Send
configure(PotentialConfig.cpmd)once for method setup. - Send
ForceInputon eachcalculate()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:
- Build
libnwchemc.soin the splitnwchemcrepository (orlibnwchemc_fake_engine.sofrom a tests build). - Start
potserv <port> NWChemwith the library env vars above. configure(PotentialConfig.nwchem)once, thencalculate(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).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rgpot-2.5.1.tar.gz.
File metadata
- Download URL: rgpot-2.5.1.tar.gz
- Upload date:
- Size: 1.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a6654573775ea9bd1a6aca2ccc6005f238fb8a93185e48c2a1528aad1789ee89
|
|
| MD5 |
44072f43fdd711c2c17faaaa6c1c0392
|
|
| BLAKE2b-256 |
c16b8f580e66b6a4aba839ec24ec99893b56d5563fbf95a7854422b8ddbef4d4
|
File details
Details for the file rgpot-2.5.1-cp312-abi3-manylinux_2_39_x86_64.whl.
File metadata
- Download URL: rgpot-2.5.1-cp312-abi3-manylinux_2_39_x86_64.whl
- Upload date:
- Size: 426.4 kB
- Tags: CPython 3.12+, manylinux: glibc 2.39+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
944367cb90b7e3e528ec76aa3f08a338d75565c2bd9e3bc181f5c52b041dc4b6
|
|
| MD5 |
4dbd3e568c723eb4656d1e525e7264bf
|
|
| BLAKE2b-256 |
85bf1aa230355c0a498e939c37749a97b2f8827871916bf2669dcb8e8a367cb9
|