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:

# Showcase notebook (interactive) — a tour of the whole API. The [notebook]
# extra pulls in jupyterlab/ipykernel/nbconvert:
uv run --with "./crates/migjorn-py[notebook]" \
  jupyter lab crates/migjorn-py/examples/showcase.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/showcase.ipynb

# Universe split/merge example (a PEP 723 script — carries its own deps):
uv run crates/migjorn-py/examples/universe_compose.py

uv run compiles the extension via maturin into an isolated environment automatically.

Rebuild gotcha. uv keys its build cache on crates/migjorn-py alone, so edits to the Rust core (crates/migjorn/) do not invalidate it — you can silently keep running an old extension. Neither --refresh nor uv cache clean migjorn helps. Force a rebuild with:

rm -rf ~/.cache/uv/archive-v0 ~/.cache/uv/sdists-v9

Also delete any stale python/migjorn/_migjorn.abi3.so left by an earlier maturin develop: it lives in the packaged python-source dir and shadows freshly built extensions.

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.4.tar.gz (135.2 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.4-cp39-abi3-win_amd64.whl (369.1 kB view details)

Uploaded CPython 3.9+Windows x86-64

migjorn-0.2.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (487.5 kB view details)

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

migjorn-0.2.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (476.9 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

migjorn-0.2.4-cp39-abi3-macosx_11_0_arm64.whl (444.1 kB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

migjorn-0.2.4-cp39-abi3-macosx_10_12_x86_64.whl (460.9 kB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: migjorn-0.2.4.tar.gz
  • Upload date:
  • Size: 135.2 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.4.tar.gz
Algorithm Hash digest
SHA256 0782f1127ffd28874c4cffea7c5be390f22734e97bf9e5389dc71dc209998766
MD5 8463f7a8eceb2b6671186e378849a9bd
BLAKE2b-256 2ea7d11045f1ee99c3fb1c21f8987e69a2715310020bb76e68898e62e8104ba0

See more details on using hashes here.

Provenance

The following attestation bundles were made for migjorn-0.2.4.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.4-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: migjorn-0.2.4-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 369.1 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.4-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 65465c3947a22af94755f3a8d5ca8033c8c373b4e1e6ad1e675440a8f95282e0
MD5 bf08b4983fb045347a4a5c8b1f54ba88
BLAKE2b-256 4fdf7cb809a806be78356cd91849aaffc2acda1d914bacf5c33a64a43815cb9d

See more details on using hashes here.

Provenance

The following attestation bundles were made for migjorn-0.2.4-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.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for migjorn-0.2.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 206c07b3f4295a723d27aec4c7b13119c3a1bff0b5d85a774e4715b26f758464
MD5 ceeada83ad0ae9d07232fd80220e4109
BLAKE2b-256 2b8c8a26dee6ac9a13674f46804a0d43c0461560dbf9d3c9c80b88b310080370

See more details on using hashes here.

Provenance

The following attestation bundles were made for migjorn-0.2.4-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.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for migjorn-0.2.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 611f071e5f2eb62644f58b638dbc5067e58d5d65c4fa26217aa2c7011d37bdbb
MD5 85c10324c799be398748852816652918
BLAKE2b-256 01064be0787c05fcc938c39f26922f306f42c22c5815f51784674b5f808ee1d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for migjorn-0.2.4-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.4-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for migjorn-0.2.4-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5f1d11d3dcf4477670e13c08c7be6d94f6abcdd16d970de61454a3309a9e4c1c
MD5 da543efcebb7e3caf21f7a8c0d55dc92
BLAKE2b-256 6f2f4f1907a342654ad3472d63e0d8168304b729ae3650da1e93f35e17dc3996

See more details on using hashes here.

Provenance

The following attestation bundles were made for migjorn-0.2.4-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.4-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for migjorn-0.2.4-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d7b92454523cf01be54433b245e7a09312831aaf63db1ab5949511068cddc749
MD5 f9243c2f9d528788efa3e34cd2411ca0
BLAKE2b-256 a572892045a2aece0e82fa7bf688304ea0eb709eab8541acddadcc9f4fe609f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for migjorn-0.2.4-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