==================== Crate ``rgpot_core`` ==================== .. rust:crate:: rgpot_core :index: 0 **rgpot-core** Rust core library for rgpot: RPC-based distributed potential energy surface calculations. This crate follows the `metatensor `_ architecture pattern: a Rust core that defines fundamental types, exposed via a stable C ABI (auto-generated by `cbindgen `_), with hand-written C++ RAII wrappers on top. **Module Overview** ============= ====================================================== Module Purpose ============= ====================================================== ``types`` ``#[repr(C)]`` data structures for force/energy I/O ``tensor`` DLPack tensor helpers: create, free, validate ``status`` Status codes, thread-local error message, panic safety ``potential`` Callback-based potential dispatch (opaque handle) ``c_api`` ``extern "C"`` entry points collected by cbindgen ``rpc`` Cap'n Proto RPC client and server (feature-gated) ============= ====================================================== **Design Principles** 1. **C ABI is the contract.** Every public type is ``#[repr(C)]`` and every public function is ``extern "C"``. The generated ``rgpot.h`` header is the single source of truth for all language bindings. 2. **Panic safety at every boundary.** All ``extern "C"`` functions wrap their body in ``status::catch_unwind``, converting panics to ``status::rgpot_status_t::RGPOT_INTERNAL_ERROR`` and storing a human-readable message retrievable via ``status::rgpot_last_error``. 3. **Callback-based dispatch.** C++ potentials register themselves as function pointer callbacks. The Rust core never depends on concrete C++ types — only on the callback signature. 4. **Feature-gated optional layers.** RPC (``rpc`` feature) and caching (``cache`` feature) are opt-in, keeping the core dependency-free. **Quick Example (Rust-side)** The core types use DLPack tensors for device-agnostic data exchange. See ``tensor`` for helpers to create DLPack tensors from raw pointers. .. rubric:: Modules .. toctree:: :maxdepth: 1 types tensor status potential c_api Potentials_capnp rpc .. rust:use:: rgpot_core :used_name: self .. rust:use:: rgpot_core :used_name: crate