|
| 1 | +# kore |
| 2 | + |
| 3 | +`kore` is a portable Schrödinger-Poisson pseudo-spectral kernel for research workloads, with one validated Rust core exposed through Rust, Python, and C surfaces. |
| 4 | + |
| 5 | +## Overview |
| 6 | + |
| 7 | +`kore` packages a reusable numerical kernel for Schrödinger-Poisson simulations around a Rust implementation that also supports Python and C integration. It is aimed at researchers and scientific developers who want one computational core that can move cleanly between prototyping, scripting, and systems integration. |
| 8 | + |
| 9 | +## Why kore |
| 10 | + |
| 11 | +Research code often starts in notebooks, grows into scripts, and eventually needs a stable systems boundary. `kore` is designed to keep that path straightforward: one kernel, portable interfaces, checkpoint/resume support, and a layout that serves both exploratory and production-adjacent research workflows. |
| 12 | + |
| 13 | +## Features |
| 14 | + |
| 15 | +- Portable Rust core for Schrödinger-Poisson research workloads |
| 16 | +- `pykore` Python bindings with NumPy `complex128` in-place stepping |
| 17 | +- Stable C ABI with generated header for non-Rust environments |
| 18 | +- Optional HDF5 checkpoint support for resumable simulation runs |
| 19 | +- CI-verified build, test, lint, header drift, and packaging workflows |
| 20 | + |
| 21 | +## Installation |
| 22 | + |
| 23 | +Installation depends on which surface you want to use. |
| 24 | + |
| 25 | +- Rust users can build the crate with Cargo |
| 26 | +- Python users can install the bindings with `pip install pykore` |
| 27 | +- C and mixed-language users can link against the generated C ABI artifacts |
| 28 | + |
| 29 | +The core crate builds without HDF5 by default. Checkpointing is available through the optional `checkpoint-hdf5` feature. |
| 30 | + |
| 31 | +## Quick Start |
| 32 | + |
| 33 | +The fastest way to get started is to choose the surface that matches your workflow. |
| 34 | + |
| 35 | +```bash |
| 36 | +pip install pykore |
| 37 | +``` |
| 38 | + |
| 39 | +```python |
| 40 | +import numpy as np |
| 41 | +import pykore |
| 42 | + |
| 43 | +grid = pykore.Grid((64, 64, 64), (1.0, 1.0, 1.0)) |
| 44 | +config = pykore.Config(dt=0.01, poisson_scale=1.0) |
| 45 | +state = pykore.State(np.zeros((64, 64, 64), dtype=np.complex128)) |
| 46 | +kernel = pykore.Kernel(grid, config) |
| 47 | +print(kernel.diagnostics(state)) |
| 48 | +``` |
| 49 | + |
| 50 | +## Python |
| 51 | + |
| 52 | +The Python surface is published as `pykore` on PyPI and is designed for NumPy-first scientific workflows. It exposes `Grid`, `Config`, `State`, `Kernel`, `Diagnostics`, and `DiagnosticsSummary` while keeping the compute path in Rust. |
| 53 | + |
| 54 | +## C ABI |
| 55 | + |
| 56 | +The C ABI provides a stable interoperability layer for consumers outside Rust. The generated header is checked in as `include/kore.h`, and the ABI is verified with strict C11 smoke builds and header drift checks. |
| 57 | + |
| 58 | +## HDF5 Checkpoints |
| 59 | + |
| 60 | +`kore` includes optional HDF5 checkpoint support for workflows that need to persist and resume simulation state. |
| 61 | + |
| 62 | +```bash |
| 63 | +cargo test --features checkpoint-hdf5 |
| 64 | +``` |
| 65 | + |
| 66 | +The checkpoint layer is versioned, shared across surfaces, and designed to reconstruct runs from stored grid/state data. |
| 67 | + |
| 68 | +## Paper |
| 69 | + |
| 70 | +The current project paper is available in this repository as [`paper.pdf`](paper.pdf). |
| 71 | + |
| 72 | +## Status |
| 73 | + |
| 74 | +`kore` is under active development and currently includes: |
| 75 | + |
| 76 | +- Rust CPU kernel |
| 77 | +- C ABI |
| 78 | +- `pykore` Python bindings |
| 79 | +- optional HDF5 checkpointing |
| 80 | +- PyPI publication workflow and package release path |
| 81 | + |
| 82 | +## License |
| 83 | + |
| 84 | +Licensed under either `MIT` or `Apache-2.0`. See `LICENSE-MIT` and `LICENSE-APACHE`. |
0 commit comments