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 SPEC 0 — Minimum Supported Dependencies

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.3.0.tar.gz (247.6 kB view details)

Uploaded Source

Built Distribution

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

montepy-1.3.0-py3-none-any.whl (178.0 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for montepy-1.3.0.tar.gz
Algorithm Hash digest
SHA256 8415ed5661642ff609dfff0ab0d7223c07faa811f00f4c3da58e37b838630b4f
MD5 9793eb2040ac36578918fede384e3f69
BLAKE2b-256 ba0e4a40fe437e9dd33f97989f439b04f510ad10df71bb9cd496239fddae6185

See more details on using hashes here.

Provenance

The following attestation bundles were made for montepy-1.3.0.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.3.0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for montepy-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b12abae6ee60b0c1284f64e9f5d2a3d0c34530cd91d4436338659116e3b7f9ff
MD5 241db8a5b6d9d594c20534643d7edad9
BLAKE2b-256 92245de96b2e92bfc4a6b2a384511726c3afd98daa3eb7f2589ce152c9f0446e

See more details on using hashes here.

Provenance

The following attestation bundles were made for montepy-1.3.0-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 Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page