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.1.tar.gz (103.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.1-cp39-abi3-win_amd64.whl (318.8 kB view details)

Uploaded CPython 3.9+Windows x86-64

migjorn-0.2.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (438.7 kB view details)

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

migjorn-0.2.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (432.4 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

migjorn-0.2.1-cp39-abi3-macosx_11_0_arm64.whl (404.3 kB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

migjorn-0.2.1-cp39-abi3-macosx_10_12_x86_64.whl (417.3 kB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: migjorn-0.2.1.tar.gz
  • Upload date:
  • Size: 103.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.1.tar.gz
Algorithm Hash digest
SHA256 20a9d7bdae8773640f11d176e6b4a155d0b7a7e73f0241ba0f0caf00b5eff63b
MD5 163a42a65879cebe82653e4514f09490
BLAKE2b-256 4378e64f01a823a59042462caafb0e91e75a9580c618ee230dc90e89c57f9a05

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: migjorn-0.2.1-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 318.8 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.1-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 1381610d53d089971ea1126b1a07f3b53cdcf0253b3e74cd5f3a88d9c19d84de
MD5 5973f186c38261cf1d81ef3e13c949ec
BLAKE2b-256 5b183deab0e8f6cac7347abbddc5baea66e53824ba92e51cad7385ce70430954

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for migjorn-0.2.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2b378c11ca9b3071502b859390c35c5665560b0d62149a1eeac09322379f6f28
MD5 3bb8f9da4fead5e3bd74890cd2a18c8d
BLAKE2b-256 0e8f16a6b287687bbd8e3b332bb10e2ae9ab53e675e552c3d5ad580ff2509d9a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for migjorn-0.2.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e9dd92e82c9679610c9acbfc41cab1774e0def1efa75d1ea221e2604ab358401
MD5 001772731106f1cdfc33d647f9149b92
BLAKE2b-256 761f630959238890fd02bbc9c58e36d28289e12e35aa428848c1c14c6a4bf900

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for migjorn-0.2.1-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ade400b6d38c1c7f1830e8eb85aa12ba7d4b92054c09c2e3601aaad4d0035ac2
MD5 5019375ef1a4aaace8ccf1f902d7acf2
BLAKE2b-256 eb7e59988ffc34c893b721e71e5b5cc2e5ed2eecb470cca624c022a72b394647

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for migjorn-0.2.1-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c578ae2783f5aa511d43d21ad7660dec34b4e99ae0f9cd90ccc731be21180979
MD5 3a66e8cbe82d12bb0c7da0648f2707dc
BLAKE2b-256 7357c0d5835b82397a47c571b2c033aeac3a3f303bbf9a54e5499a019185e655

See more details on using hashes here.

Provenance

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