Nucleide
Nucleide is a modern Rust toolkit for nuclear-engineering workflow glue: legacy transport-code I/O, nuclide identification, materials, CRAM depletion, and enrichment analytics — exposed through a typed Python API.
The project is a fresh Rust implementation of capabilities pioneered by
PyNE, focused on memory safety, fast builds,
and pip install-able wheels. Scope is intentionally narrow today and will
expand as more parsers and workflow pieces land.
Installation
pip install nucleide
Prebuilt wheels cover Linux, macOS, and Windows for Python >= 3.10 (abi3). To build from source instead, see the Development section below.
Why
Nuclear-engineering workflows spend most of their time moving data between
codes rather than solving transport itself. The established tooling for that
glue layer carries a heavy build chain (CMake + Fortran + Cython) and
hand-written parsers that are hard to extend and harder to embed. Nucleide
rebuilds the high-value subset in memory-safe Rust with one-command
pip install wheels, keeping Python as the user-facing API.
Features
| Area | Capabilities |
|---|---|
Nuclide core (nucleide-nuclei) |
Canonical nucid representation, particle registry, reaction-name registry (labels, MT mapping, hashes), name-dialect conversions (ZZAAAMM, ZAID/MCNP, Serpent, FLUKA, NIST, CINDER, ALARA, SZA, ARMI/MCC3), AME2020 masses (incl. isomer masses), natural abundances, half-lives, screening cross sections / scattering lengths / prompt decay energies (generated from ENDF/B + NIST), ENDF/B-VIII.0 decay branches, free-form name normalization, dose factors |
Materials (nucleide-material) |
Compositions, mixing arithmetic, unit conversions, DOE/PNNL Materials Compendium loading, materials XML export, activity/decay-heat/dose-per-gram analytics, label-collision checks and conservation audits |
MCNP I/O (nucleide-mcnp-io) |
xsdir, meshtal, SSW/SURFSRC, PTRAC, WWINP, MCTAL readers; NumPy result_array() / totals_array() meshtal bridge; material extraction from input decks; full-deck parse/edit/write round-trip (cells, surfaces, materials); L3 semantic views (MODE/TRn/universes/lattices/FILL/tallies) with validation; mesh-to-geometry deck generation |
Serpent I/O (nucleide-serpent-io) |
_res.m, _dep.m, _det.m readers producing structured records |
FLUKA I/O (nucleide-fluka-io) |
USRBIN tally reader, material/compound card generation |
ALARA I/O (nucleide-alara-io) |
Deck/flux/matlib-elelib-WDR/output/photon/schedule-expansion glue; solver out of scope |
Depletion (nucleide-depletion) |
CRAM (orders 16/48) matrix exponential, analytic Bateman fast path (method= selector with CRAM-48 fallback), depletion-chain XML parsing, Predictor/CECM/CF4 time-series integrators with activity/decay-heat observables, unit-aware decay inventories, cumulative decays and chain-lineage queries |
Enrichment (nucleide-enrichment) |
Multicomponent cascade solver (numeric), SWU closed-form helpers |
Variance reduction (nucleide-vr-tools) |
MAGIC weight-window generation, mesh source sampling with alias tables |
CCCC I/O (nucleide-cccc-io) |
ISOTXS/RTFLUX text-subset parsers + PARTISN deck writer (no solver) |
FISPACT I/O (nucleide-fispact-io) |
FISPACT-II inventory output parser reusing the ALARA response frame (output-only) |
ORIGEN I/O (nucleide-origen-io) |
Scoped ORIGEN 2.2 TAPE5 input-echo, TAPE6 inventory, and TAPE9 decay readers |
R2S (nucleide-r2s) |
Scoped R2S workflow builder: zone-to-flux linking, schedule expansion, uniform-split photon assembly, ARMI database-snapshot adapter |
Emit (nucleide-emit) |
Single-material emission to MCNP/Serpent/FLUKA/ALARA/PARTISN cards with mass-drift report, plus an ARMI blueprint-key bridge |
| Python bindings | PyO3 extension module behind a typed pure-Python facade (nucleide._internal, .pyi stubs, py.typed) |
Out of scope
Transport solvers, Fortran discrete-ordinates ports, ENSDF evaluators, MOAB-dependent
meshing, and GUIs. Nucleide complements transport codes; it does not replace them.
Layout
nucleide/
├── crates/
│ ├── nuclei/ # nuclide ids, naming conventions, physical data
│ ├── material/ # compositions, mixing, libraries, XML export
│ ├── mcnp-io/ # xsdir/meshtal/SSW/MCTAL/PTRAC/WWINP
│ ├── serpent-io/ # res/dep/det readers
│ ├── fluka-io/ # usrbin reader, material cards
│ ├── alara-io/ # ALARA deck/flux/libs/output/photon/schedule glue (no solver)
│ ├── cccc-io/ # ISOTXS/RTFLUX text-subset parsers + PARTISN writer (no solver)
│ ├── fispact-io/ # FISPACT-II inventory output parser (output-only)
│ ├── origen-io/ # scoped ORIGEN TAPE5/6/9 readers
│ ├── r2s/ # scoped R2S workflow builder (uniform-split photon approximation)
│ ├── vr-tools/ # MAGIC weight windows, source sampling
│ ├── enrichment/ # cascades, SWU
│ ├── depletion/ # CRAM + chain files
│ ├── emit/ # five-dialect card emission + mass-drift reports
│ └── linalg/ # isolation facade over the linear-algebra backend
├── bindings/python/ # PyO3 crate -> nucleide._internal
├── python/nucleide/ # typed pure-Python facade (maturin mixed layout)
├── fixtures/ # golden-byte test data
├── validation/ # cross-code validation harness vs PyNE/OpenMC
└── tests/ # Python-side tests
Development
git clone https://github.com/nukehub-dev/nucleide.git
cd nucleide
# Rust side
cargo test # workspace unit tests
cargo clippy --all-targets -- -D warnings
# Python side (needs: rustup, pip install maturin)
pip install maturin pytest pytest-cov ruff mypy
maturin develop # build + install into current venv
pytest tests/
# Lint / type-check / format the Python surface
ruff format python tests
ruff check python tests
mypy # strict type-check against .pyi stubs
# Rust coverage (needs llvm-tools-preview component)
cargo llvm-cov --workspace # or --lcov for CI upload
Tooling
| Layer | Format | Lint | Types | Coverage |
|---|---|---|---|---|
| Rust | rustfmt (cargo fmt) |
clippy -D warnings |
— | cargo-llvm-cov (CI) |
| Python | ruff format | ruff check | mypy --strict via .pyi stubs |
pytest-cov |
Wheels are built with maturin (PyO3 mixed layout). One wheel serves all Python >= 3.10 via abi3 — the same stack used by pydantic-core, polars, and ruff.
Validation strategy
- Parsers are validated against golden-byte fixtures in
fixtures/; parser output must match recorded snapshots before any release. - Numeric kernels (CRAM, cascade solving) are checked against published
analytic vectors and cross-code results on shared inputs; the runnable
cross-code harness in
validation/compares Nucleide against PyNE and OpenMC and commits its measured results. - Behavioral compatibility with legacy tool output is asserted wherever a fixture exists, so downstream workflows see identical data.
Criterion benchmarks (cargo bench) cover the numeric kernels and parsers.
Citing
If you use Nucleide in research, see
CITATION.cff
and the JOSS paper draft in
paper.md.
Status
Pre-alpha. APIs may change without notice.
Documentation
Additional tutorials, reference pages, and developer guides live in the
docs/ tree.
Acknowledgments
Nucleide is a fresh Rust implementation of workflow-glue capabilities pioneered
by PyNE ("Python for Nuclear Engineering",
BSD-3-Clause). Some reference data and golden test fixtures — notably the
DOE/PNNL Materials Compendium — are vendored directly from PyNE; see
fixtures/data/MaterialsCompendium.LICENSE for its terms.
License
Metadata
Release files for nucleide 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| nucleide-0.4.0.tar.gz | 555.3 kB | Details |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nucleide-0.4.0-cp310-abi3-win_amd64.whl | CPython 3.10 | abi3 | Windows x86-64 | Details |
| nucleide-0.4.0-cp310-abi3-manylinux_2_39_x86_64.whl | CPython 3.10 | abi3 | Linux glibc 2.39+ x86-64 | Details |
| nucleide-0.4.0-cp310-abi3-macosx_11_0_arm64.whl | CPython 3.10 | abi3 | macOS 11.0+ ARM64 | Details |
Total release size: 5.5 MB
Release files / nucleide-0.4.0.tar.gz
| Download URL | nucleide-0.4.0.tar.gz |
|---|---|
| Size | 555.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
828fa7ab73de33b3293b6320614eed5fad778b8fd5ea567f0866b5da5769b626
|
|
BLAKE2b-256 checksum How to use checksums |
74cc1948cbfac7442af5341f924e55f564e9d43e77dc5cb90ca25f627464ef7e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
maturin/1.15.0
|
Release files / nucleide-0.4.0-cp310-abi3-win_amd64.whl
| Download URL | nucleide-0.4.0-cp310-abi3-win_amd64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.10 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
4279a5f71a4add37589901bbe8296a3ee2ef9ad26a3792fbff4a4a59a900db41
|
|
BLAKE2b-256 checksum How to use checksums |
0fa01f98488983e60bfff9022f417e567ed3b60f4b18538d2bb8843b25932552
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
maturin/1.15.0
|
Release files / nucleide-0.4.0-cp310-abi3-manylinux_2_39_x86_64.whl
| Download URL | nucleide-0.4.0-cp310-abi3-manylinux_2_39_x86_64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.10 Linux glibc 2.39+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
1f87690fb70380394a167fa3ff8f0d4b374b9ea3e1d33d8622de165c37071f1a
|
|
BLAKE2b-256 checksum How to use checksums |
150fb751631b3eeedb27ed2bb6c44e9e9eb3864b7594a8b14774320b5d61b8eb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
maturin/1.15.0
|
Release files / nucleide-0.4.0-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | nucleide-0.4.0-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
e71f641d34d1d95f7f1d910316bae636832aafc7e26bac0559397d472f70fc1e
|
|
BLAKE2b-256 checksum How to use checksums |
029f819e4b64c7d36981c01dc5821204649756117d3b5e1c5227759082c50c68
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
maturin/1.15.0
|