From 6e0b614177ebfe7c921c2fbbe661b53a8a88c0f7 Mon Sep 17 00:00:00 2001 From: "Micah D. Gale" Date: Tue, 17 Sep 2024 11:46:58 -0500 Subject: [PATCH] Added default_libraries to material class. --- montepy/data_inputs/material.py | 52 ++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/montepy/data_inputs/material.py b/montepy/data_inputs/material.py index aa4e6d6f..843804a6 100644 --- a/montepy/data_inputs/material.py +++ b/montepy/data_inputs/material.py @@ -5,7 +5,7 @@ import math from montepy.data_inputs import data_input, thermal_scattering -from montepy.data_inputs.nuclide import Nuclide +from montepy.data_inputs.nuclide import Library, Nucleus, Nuclide from montepy.data_inputs.element import Element from montepy.data_inputs.material_component import MaterialComponent from montepy.input_parser import syntax_node @@ -14,6 +14,7 @@ from montepy.numbered_mcnp_object import Numbered_MCNP_Object from montepy.errors import * from montepy.utilities import * +from montepy.particle import LibraryType import re import warnings @@ -31,6 +32,37 @@ def _number_validator(self, number): self._problem.materials.check_number(number) +class _DefaultLibraries: + + __slots__ = "_libraries" + + def __init__(self): + self._libraries = {} + + def __getitem__(self, key): + key = self._validate_key(key) + return self._libraries[key] + + def __setitem__(self, key, value): + key = self._validate_key(key) + if not isinstance(value, Library): + raise TypeError("") + self._libraries[key] = value + + def __delitem__(self, key): + key = self._validate_key(key) + del self._libraries[key] + + def __str__(self): + return str(self._libraries) + + @staticmethod + def _validate_key(key): + if not isinstance(key, LibraryType): + raise TypeError("") + return key + + class Material(data_input.DataInputAbstract, Numbered_MCNP_Object): """ A class to represent an MCNP material. @@ -48,6 +80,7 @@ def __init__(self, input=None): self._number = self._generate_default_node(int, -1) self._elements = set() self._nuclei = set() + self._default_libs = _DefaultLibraries() super().__init__(input) if input: num = self._input_number @@ -85,6 +118,16 @@ def __init__(self, input=None): self._elements.add(isotope.element) self._nuclei.add(isotope.nucleus) self._components.append((isotope, fraction)) + self._grab_defaults() + + def _grab_defaults(self): + if "parameters" not in self._tree: + return + params = self._tree["parameters"] + for param, value in params.nodes.items(): + lib_type = LibraryType(param.upper()) + self._default_libs[lib_type] = Library(value["data"].value) + # TODO update in update_values for default_libraries @make_prop_val_node("_old_number") def old_number(self): @@ -130,6 +173,13 @@ def material_components(self): See for more information """ ) + @make_prop_pointer("_default_libs") + def default_libraries(self): + """ + TODO + """ + pass + def __getitem__(self, idx): """ """ if not isinstance(idx, (int, slice)):