Fix: materials, plots, and tallies cannot be passed as lists (#3513)

Co-authored-by: Paul Romano <paul.k.romano@gmail.com>
This commit is contained in:
Rémi Delaporte-Mathurin 2025-07-29 05:34:03 -04:00 committed by GitHub
parent 6b672f772f
commit 836bc487cf
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 25 additions and 6 deletions

View file

@ -70,7 +70,7 @@ class Model:
def __init__(
self,
geometry: openmc.Geometry | None = None,
materials: openmc.Materials = None,
materials: openmc.Materials | None = None,
settings: openmc.Settings | None = None,
tallies: openmc.Tallies | None = None,
plots: openmc.Plots | None = None,
@ -82,7 +82,7 @@ class Model:
self.plots = openmc.Plots() if plots is None else plots
@property
def geometry(self) -> openmc.Geometry | None:
def geometry(self) -> openmc.Geometry:
return self._geometry
@geometry.setter
@ -91,7 +91,7 @@ class Model:
self._geometry = geometry
@property
def materials(self) -> openmc.Materials | None:
def materials(self) -> openmc.Materials:
return self._materials
@materials.setter
@ -100,12 +100,14 @@ class Model:
if isinstance(materials, openmc.Materials):
self._materials = materials
else:
if not hasattr(self, '_materials'):
self._materials = openmc.Materials()
del self._materials[:]
for mat in materials:
self._materials.append(mat)
@property
def settings(self) -> openmc.Settings | None:
def settings(self) -> openmc.Settings:
return self._settings
@settings.setter
@ -114,7 +116,7 @@ class Model:
self._settings = settings
@property
def tallies(self) -> openmc.Tallies | None:
def tallies(self) -> openmc.Tallies:
return self._tallies
@tallies.setter
@ -123,12 +125,14 @@ class Model:
if isinstance(tallies, openmc.Tallies):
self._tallies = tallies
else:
if not hasattr(self, '_tallies'):
self._tallies = openmc.Tallies()
del self._tallies[:]
for tally in tallies:
self._tallies.append(tally)
@property
def plots(self) -> openmc.Plots | None:
def plots(self) -> openmc.Plots:
return self._plots
@plots.setter
@ -137,6 +141,8 @@ class Model:
if isinstance(plots, openmc.Plots):
self._plots = plots
else:
if not hasattr(self, '_plots'):
self._plots = openmc.Plots()
del self._plots[:]
for plot in plots:
self._plots.append(plot)

View file

@ -892,3 +892,16 @@ def test_id_map_aligned_model():
assert tr_cell == 20, f"Expected cell ID 20 at top-right corner, got {tr_cell}"
assert tr_instance == 3, f"Expected cell instance 3 at top-right corner, got {tr_instance}"
assert tr_material == 5, f"Expected material ID 5 at top-right corner, got {tr_material}"
def test_setter_from_list():
mat = openmc.Material()
model = openmc.Model(materials=[mat])
assert isinstance(model.materials, openmc.Materials)
tally = openmc.Tally()
model = openmc.Model(tallies=[tally])
assert isinstance(model.tallies, openmc.Tallies)
plot = openmc.Plot()
model = openmc.Model(plots=[plot])
assert isinstance(model.plots, openmc.Plots)