Skip to main content

A library for reading, editing, and writing MCNP input files

Project description

MontePy

MontePY: a cute snek on a red over white circle

license JOSS article status pyOpenSci Peer-Reviewed Project Status: Active – The project has reached a stable, usable state and is being actively developed.

Coverage Status Testing status Docs Deployment

PyPI version Conda Version PyPI pyversions

DOI

MontePy is the most user-friendly Python library for reading, editing, and writing MCNP input files.

Installing

Simply run:

pip install montepy

For more complicated setups see the Installing section in the user guide.

User Documentation

MontePy has a website documenting how to work with MCNP in python with MontePy. The website contains a user's guide for getting started, a developer's guide covering the design and approach of MontePy, instructions for contributing, and the Python API documentation.

Features

Here is a quick example showing multiple tasks in MontePy:

import montepy
# read in file
problem = montepy.read_input("tests/inputs/test.imcnp")
  
# set photon importance for multiple cells
importances = {1: 0.005,
   2: 0.1,
   3: 1.0,
   99: 1.235
}
for cell_num, importance in importances.items():
   problem.cells[cell_num].importance.photon = importance

#create a universe and fill another cell with it
universe = montepy.Universe(123)
problem.universes.append(universe)
# add all cells with numbers between 1 and 4
universe.claim(problem.cells[1:5])
# fill cell 99 with universe 123
problem.cells[99].fill.universe = universe

# update all surfaces numbers by adding 1000 to them
for surface in problem.surfaces:
   surface.number += 1000
# all cells using these surfaces will be automatically updated as well

#write out an updated file
problem.write_problem("foo_update.imcnp")

For more examples see the getting started guide.

Use Cases

Here are some possible use cases for MontePy:

  • Automated updating of an MCNP input file, or MCNP deck, for reactor reconfiguration, fuel shuffling, etc.
  • Parameterizing an MCNP input file to check for explore the parametric space of your MCNP modeling problem
  • Updating an MCNP model with the results from another code, such as depletion results from ORIGEN.
  • To convert an MCNP model to another Monte Carlo code like OpenMC, SERPENT, etc.

Limitations

Here a few of the known bugs and limitations:

  • Cannot handle vertical input mode.
  • Does not support editing tallies in a user-friendly way.
  • Does not support editing source definition in a user-friendly way.
  • Cannot parse all valid material definitions. There is a known bug (#182) that MontePy can only parse materials where all keyword-value pairs show up after the nuclide definitions. For example:
    • M1 1001.80c 1.0 plib=80p can be parsed.
    • M1 plib=80p 1001.80c 1.0 cannot be parsed; despite it being a valid input.

Current Development Priorities

Here are the rough development priorities for adding new features to MontePy:

  1. Improve performance for the intial loading of models.
  2. Implement support for tallies.
  3. Implement support for source definitions.

If you have a specific feature priority that you would be willing to collaborate on you can open an issue or email us at mgale@montepy.org.

Alternatives

There are some python packages that offer some of the same features as MontePy, but don't offer the same level of robustness, ease of installation, and user friendliness.

Many of the competitors do not offer the robustness that MontePy does because, they do not utilize context-free parsing (as of 2024). These packages are:

The only other libraries that do utilize context-free parsing that we are aware of are:

MontePy differs from MCNPy by being:

  • On PyPI and conda-forge, and able to be installed via pip or conda
  • Only requiring a Python interpreter and not a Java virtual machine
  • Allowing contributions from anyone with a public GitHub account

MontePy differs from mckit by being:

  • Thoroughly documented
  • Object-oriented

For only writing, or templating an input file there are also some great tools out there. These packages don't provide the same functionality as MontePy inherently, but could be the right tool for the job depending on the user's needs.

Another honorable mention that doesn't replicate the features of MontePy, but could be a great supplement to MontePy for defining materials, performing activations, etc. is PyNE --- the Nuclear Engineering Toolkit.

Bugs, Requests and Development

So MontePy doesn't do what you want? Add an issue here with the "feature request" tag. The system is very modular and you should be able to develop it pretty quickly. Read the developer's guide for more details. If you have any questions feel free to ask @micahgale.

Citation

You can cite MontePy as:

Gale et al., (2025). MontePy: a Python library for reading, editing, and writing MCNP input files. Journal of Open Source Software, 10(108), 7951, https://doi.org/10.21105/joss.07951

Finally: make objects, not regexes!

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

montepy-1.1.1.tar.gz (239.3 kB view details)

Uploaded Source

Built Distribution

montepy-1.1.1-py3-none-any.whl (170.0 kB view details)

Uploaded Python 3

File details

Details for the file montepy-1.1.1.tar.gz.

File metadata

  • Download URL: montepy-1.1.1.tar.gz
  • Upload date:
  • Size: 239.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for montepy-1.1.1.tar.gz
Algorithm Hash digest
SHA256 0198a91c39d1c77a8e948a5f84107218b29bf28c05c2546b4093861af599b400
MD5 17d65df641d3bc77aa75e6a80a493e59
BLAKE2b-256 570766bf6b7b3b76c5dd5fcb1f10a55b208cbec957f26047cfe5512140e83153

See more details on using hashes here.

Provenance

The following attestation bundles were made for montepy-1.1.1.tar.gz:

Publisher: deploy.yml on idaholab/MontePy

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

File details

Details for the file montepy-1.1.1-py3-none-any.whl.

File metadata

  • Download URL: montepy-1.1.1-py3-none-any.whl
  • Upload date:
  • Size: 170.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for montepy-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cf1b9a1e22deb29a2e365d3573cca45f6d85f0557db8ec6910c4a6bec05aeb2c
MD5 983973806719db7fe94672a59487b9f2
BLAKE2b-256 ea6e0a328bc7bbd72d198a33dd578b5c5c5d189457a7c9fae32c68161a26c218

See more details on using hashes here.

Provenance

The following attestation bundles were made for montepy-1.1.1-py3-none-any.whl:

Publisher: deploy.yml on idaholab/MontePy

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 Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page