Skip to main content

A fast, lossless MCNP input parser with whole-geometry editing.

Project description

migjorn (Python)

Fast, lossless MCNP input parsing with whole-geometry editing, backed by a Rust core.

Run the examples with uv (no manual build)

uv builds the Rust extension for you. From the repository root:

# Script tour — one command, builds + runs:
uv run crates/migjorn-py/examples/migjorn_demo.py

# Notebook (interactive) — the [notebook] extra pulls in jupyterlab/ipykernel/nbconvert:
uv run --with "./crates/migjorn-py[notebook]" \
  jupyter lab crates/migjorn-py/examples/migjorn_demo.ipynb

# Notebook (execute headless, refresh outputs in place):
uv run --with "./crates/migjorn-py[notebook]" \
  jupyter nbconvert --to notebook --execute --inplace \
  crates/migjorn-py/examples/migjorn_demo.ipynb

The script carries its dependency (the local migjorn package) as inline PEP 723 metadata, so uv run compiles the extension via maturin into an isolated environment automatically.

Use in an IDE (VS Code / Jupyter kernel)

To run the notebook against a persistent, selectable interpreter (rather than uv's ephemeral uv run environments), create a .venv that contains both migjorn and ipykernel. From this directory (crates/migjorn-py):

uv sync --no-editable --extra notebook

This builds the extension and installs the notebook stack (jupyterlab, ipykernel, nbconvert) into crates/migjorn-py/.venv. Then, in your IDE, select the kernel / interpreter:

crates/migjorn-py/.venv/Scripts/python.exe      # Windows
crates/migjorn-py/.venv/bin/python              # macOS / Linux

A kernel without ipykernel (e.g. a bare uv venv, or uv sync without --extra notebook) will fail to start for the notebook — that missing package is the usual cause. After changing the Rust code, re-run uv sync --no-editable --extra notebook (or maturin develop) to rebuild.

Why --no-editable? An editable install points a .pth at the external python/ source dir; Pylance often won't follow that to find the stubs, so you get no autocomplete/typing. A non-editable install places migjorn/__init__.pyi and py.typed physically in site-packages, which every type checker resolves. (Trade-off: after editing the code you must re-sync to pick up changes.)

Install (development, without uv)

pip install maturin
cd crates/migjorn-py
maturin develop --release

To build a wheel: maturin build --release (produces an abi3 wheel that works on CPython 3.9+).

To build a Windows wheel on Linux, use maturin build --release --target x86_64-pc-windows-msvc -m crates/migjorn-py/Cargo.toml -i python3.12.

Quick start

import migjorn

model = migjorn.parse(open("model.mcnp").read())
# or: model = migjorn.Model.from_file("model.mcnp")

print(model)                      # Model(cells=..., surfaces=..., ...)
print(model.num_cells, model.num_surfaces)

# Look up by number (fast; uses an id index).
s = model.surface(113)
print(s.id, s.kind, s.coeffs)    # 113 'PX' [-10.0]

c = model.cell(800)
print(c.material, c.density, c.signed_surfaces)

# --- In-place value edits (write straight through, lossless elsewhere) ------
c.material = 124                  # replace the material
c.density  = -7.93               # replace the density

# Assigning a material to a *void* cell just works: it gains a placeholder
# density of 0.0 (never raises, so it's safe in a loop). Set the real density
# next; assigning material 0 makes the cell void again and drops the density.
void = model.cell(2)
void.material = 5                    # 5 0 ...   (placeholder density 0.0)
void.density  = -2.0                # 5 -2.0 ...
void.material = 0                    # 0 ...     (void again, density dropped)

# Diagnostics (empty on a clean parse).
for d in model.diagnostics:
    print(d.severity, d.message)

# --- Whole-geometry renumbering -------------------------------------------
# Definitions AND every reference are updated consistently.

model.offset_surfaces(1_000_000)          # fast: shift all surface numbers
model.renumber_cells(lambda n: n + 500)   # callable: once per distinct cell id
model.renumber_surfaces({1: 100, 2: 200}) # or an explicit dict

# Lossless re-emission: only edited numbers change; comments/spacing preserved.
model.save("model_renumbered.mcnp")
text = str(model)                         # or model.to_source()

Type checking / IDE support

The package is typed (PEP 561): the compiled extension is the private migjorn._migjorn submodule, wrapped by the migjorn package which ships type stubs (python/migjorn/__init__.pyi) and a py.typed marker. Pylance, pyright, and mypy pick these up automatically once the wheel is installed — no more "unknown import"/"untyped" warnings. When you change the bindings in src/lib.rs, update python/migjorn/__init__.pyi to match.

Notes

  • model.cells / model.surfaces / model.materials / model.transforms / model.data_cards return full lists. For very large models prefer the id lookups (model.cell(id), model.surface(id)) and the num_* counts.
  • Everything is documented inline: help(migjorn.Model), help(migjorn.Surface).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

migjorn-0.2.2.tar.gz (115.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

migjorn-0.2.2-cp39-abi3-win_amd64.whl (354.4 kB view details)

Uploaded CPython 3.9+Windows x86-64

migjorn-0.2.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (470.5 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

migjorn-0.2.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (463.1 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

migjorn-0.2.2-cp39-abi3-macosx_11_0_arm64.whl (434.2 kB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

migjorn-0.2.2-cp39-abi3-macosx_10_12_x86_64.whl (449.8 kB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file migjorn-0.2.2.tar.gz.

File metadata

  • Download URL: migjorn-0.2.2.tar.gz
  • Upload date:
  • Size: 115.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for migjorn-0.2.2.tar.gz
Algorithm Hash digest
SHA256 c20bbf4fde84bb4acdcf529863e8362874deaabdf74365438cdaa7380b66ba89
MD5 60c41010920e55898ab3ed29dd73eece
BLAKE2b-256 26438a8edbdf5a9b5a8654318a5924e3300141042611ecaf3369d35e4c97dcdb

See more details on using hashes here.

Provenance

The following attestation bundles were made for migjorn-0.2.2.tar.gz:

Publisher: release.yml on AlvaroCubi/migjorn

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file migjorn-0.2.2-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: migjorn-0.2.2-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 354.4 kB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for migjorn-0.2.2-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 560cb51e0c039fe4df4a47e263c8fabf6ab2305e1e1cb6bd7caccc7832a96f41
MD5 6e0560c154e9fbf5f0e897f351a2abb7
BLAKE2b-256 277b4f24373ed2e6cff7944a8a5d93f80035a4a4894a5d9a540630d6d9d5fd62

See more details on using hashes here.

Provenance

The following attestation bundles were made for migjorn-0.2.2-cp39-abi3-win_amd64.whl:

Publisher: release.yml on AlvaroCubi/migjorn

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file migjorn-0.2.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for migjorn-0.2.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d8d6737ba3316d8c4106781b5f312527b3eabe2b3383a02d36a161e809e9f2af
MD5 58e115d198b3b6a1ca9ff5641296c347
BLAKE2b-256 1bbd0b554a525fbf8138d1e4c5cabdbe64ee3812231ebe60ce0a8fe076e19318

See more details on using hashes here.

Provenance

The following attestation bundles were made for migjorn-0.2.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on AlvaroCubi/migjorn

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file migjorn-0.2.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for migjorn-0.2.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 aa7cb767b57a0a9503459893355eb03f6a0de3f5c43658066df6a3cdbd0ef748
MD5 a07e32d3ecf9fe49c5f938f3e5c7306e
BLAKE2b-256 2ca65562dfad5e78ec1e5078fc43e4913ae312fd27661acea1ce5ee1465b2d35

See more details on using hashes here.

Provenance

The following attestation bundles were made for migjorn-0.2.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on AlvaroCubi/migjorn

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file migjorn-0.2.2-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for migjorn-0.2.2-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b63e7e9023b86497911c3e543e46b6930ba9c916ed9b10225b2e283157917f93
MD5 e3ac761a8432c0da1e96495885aca612
BLAKE2b-256 490ba5d00d424c93352114f4de31d0e5c71541b870c1aef2c6c3687419f92a0c

See more details on using hashes here.

Provenance

The following attestation bundles were made for migjorn-0.2.2-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on AlvaroCubi/migjorn

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file migjorn-0.2.2-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for migjorn-0.2.2-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d245d70b227bb423081fba6793979b9acbc8ca0d68fe63192ab35d76d175d401
MD5 60ccf034e410062891d8aeefc9c3066b
BLAKE2b-256 01a969366d6cd2ab1d834d9eb2356ee6943e2928f737ea2a4f785ed973f574b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for migjorn-0.2.2-cp39-abi3-macosx_10_12_x86_64.whl:

Publisher: release.yml on AlvaroCubi/migjorn

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page