pyeonclient (nanobind client bindings)¶
pyeonclient exposes the eOn C++ client core to Python with
nanobind only (no pybind11).
Type |
Role |
|---|---|
|
|
|
forcefield factory |
|
structure, energy/forces, |
ABI¶
Stable ABI (abi3) for normal CPython ≥ 3.12.
Free-threaded (
NB_FREE_THREADED) when the build interpreter hasPy_GIL_DISABLED(CPython ≥ 3.13t). There is no stable ABI for free-threaded CPython yet (nanobind / PEP 803); the build picks free-threaded and skips abi3 in that case.
Build¶
meson setup build -Dwith_pyeonclient=true
meson compile -C build
Requires nanobind>=2.2 on the build Python (pixi.toml pins it).
Tests¶
pytest tests/test_pyeonclient_matter.py -v
Server bridge¶
from eon import pyeonclient_bridge as br
# br.to_matter(structure, pot, params)
# br.from_matter(matter)
Why not pybind11 embed for ASE?¶
pybind11 was used only so standalone eonclient could embed a Python
interpreter and call ASE calculators. nanobind does not ship a first-class
embed.h API; the modern polarity is inverted:
Mode |
Who owns Python |
ASE / Matter |
|---|---|---|
Server + pyeonclient |
Python process |
Matter in-process; ASE calculators can live as Python objects (no C++ embed) |
Standalone eonclient |
C++ process |
Prefer C++ pots, or |
client/NbGuard.h initializes the interpreter with Py_InitializeEx (no
pybind11). ASE pot migration to nanobind marshalling is follow-on work; new
code should not add pybind11 surfaces.
Matter through-and-through¶
explorer / AKMC
│ Structure (server)
▼
communicator type = local_lib | inprocess
│ structure_to_matter
▼
pyeonclient.Matter.relax() # (more Job types as bound)
│ matter_to_structure
▼
results (Structure + results.dat fields)
File-based local / cluster remain for HPC; geometry on disk is still
readcon .con when those paths are used.
PyPI¶
See pyeonclient-pypi for the standalone package and wheel matrix.