|
17 | 17 | from .mixin import IDManagerMixin |
18 | 18 | from .surface import Surface |
19 | 19 | from .universe import UniverseBase |
20 | | -from ._xml import get_text |
| 20 | +from ._xml import get_elem_list, get_text |
21 | 21 |
|
22 | 22 |
|
23 | 23 | _FILTER_TYPES = ( |
@@ -259,17 +259,15 @@ def from_xml_element(cls, elem, **kwargs): |
259 | 259 | Filter object |
260 | 260 |
|
261 | 261 | """ |
262 | | - filter_type = elem.get('type') |
263 | | - if filter_type is None: |
264 | | - filter_type = elem.find('type').text |
| 262 | + filter_type = get_text(elem, "type") |
265 | 263 |
|
266 | 264 | # If the filter type matches this class's short_name, then |
267 | 265 | # there is no overridden from_xml_element method |
268 | 266 | if filter_type == cls.short_name.lower(): |
269 | 267 | # Get bins from element -- the default here works for any filters |
270 | 268 | # that just store a list of bins that can be represented as integers |
271 | | - filter_id = int(elem.get('id')) |
272 | | - bins = [int(x) for x in get_text(elem, 'bins').split()] |
| 269 | + filter_id = int(get_text(elem, "id")) |
| 270 | + bins = get_elem_list(elem, "bins", int) or [] |
273 | 271 | return cls(bins, filter_id=filter_id) |
274 | 272 |
|
275 | 273 | # Search through all subclasses and find the one matching the HDF5 |
@@ -701,8 +699,8 @@ def to_xml_element(self): |
701 | 699 |
|
702 | 700 | @classmethod |
703 | 701 | def from_xml_element(cls, elem, **kwargs): |
704 | | - filter_id = int(elem.get('id')) |
705 | | - bins = [int(x) for x in get_text(elem, 'bins').split()] |
| 702 | + filter_id = int(get_text(elem, "id")) |
| 703 | + bins = get_elem_list(elem, "bins", int) or [] |
706 | 704 | cell_instances = list(zip(bins[::2], bins[1::2])) |
707 | 705 | return cls(cell_instances, filter_id=filter_id) |
708 | 706 |
|
@@ -784,8 +782,8 @@ def from_hdf5(cls, group, **kwargs): |
784 | 782 |
|
785 | 783 | @classmethod |
786 | 784 | def from_xml_element(cls, elem, **kwargs): |
787 | | - filter_id = int(elem.get('id')) |
788 | | - bins = get_text(elem, 'bins').split() |
| 785 | + filter_id = int(get_text(elem, "id")) |
| 786 | + bins = get_elem_list(elem, "bins", str) or [] |
789 | 787 | return cls(bins, filter_id=filter_id) |
790 | 788 |
|
791 | 789 |
|
@@ -1004,12 +1002,12 @@ def to_xml_element(self): |
1004 | 1002 | def from_xml_element(cls, elem: ET.Element, **kwargs) -> MeshFilter: |
1005 | 1003 | mesh_id = int(get_text(elem, 'bins')) |
1006 | 1004 | mesh_obj = kwargs['meshes'][mesh_id] |
1007 | | - filter_id = int(elem.get('id')) |
| 1005 | + filter_id = int(get_text(elem, "id")) |
1008 | 1006 | out = cls(mesh_obj, filter_id=filter_id) |
1009 | 1007 |
|
1010 | | - translation = elem.get('translation') |
| 1008 | + translation = get_elem_list(elem, "translation", float) or [] |
1011 | 1009 | if translation: |
1012 | | - out.translation = [float(x) for x in translation.split()] |
| 1010 | + out.translation = translation |
1013 | 1011 | return out |
1014 | 1012 |
|
1015 | 1013 |
|
@@ -1149,16 +1147,16 @@ def to_xml_element(self): |
1149 | 1147 |
|
1150 | 1148 | @classmethod |
1151 | 1149 | def from_xml_element(cls, elem: ET.Element, **kwargs) -> MeshMaterialFilter: |
1152 | | - filter_id = int(elem.get('id')) |
1153 | | - mesh_id = int(elem.get('mesh')) |
| 1150 | + filter_id = int(get_text(elem, "id")) |
| 1151 | + mesh_id = int(get_text(elem, "mesh")) |
1154 | 1152 | mesh_obj = kwargs['meshes'][mesh_id] |
1155 | | - bins = [int(x) for x in get_text(elem, 'bins').split()] |
| 1153 | + bins = get_elem_list(elem, "bins", int) or [] |
1156 | 1154 | bins = list(zip(bins[::2], bins[1::2])) |
1157 | 1155 | out = cls(mesh_obj, bins, filter_id=filter_id) |
1158 | 1156 |
|
1159 | | - translation = elem.get('translation') |
| 1157 | + translation = get_elem_list(elem, "translation", float) or [] |
1160 | 1158 | if translation: |
1161 | | - out.translation = [float(x) for x in translation.split()] |
| 1159 | + out.translation = translation |
1162 | 1160 | return out |
1163 | 1161 |
|
1164 | 1162 | @classmethod |
@@ -1557,8 +1555,8 @@ def to_xml_element(self): |
1557 | 1555 |
|
1558 | 1556 | @classmethod |
1559 | 1557 | def from_xml_element(cls, elem, **kwargs): |
1560 | | - filter_id = int(elem.get('id')) |
1561 | | - bins = [float(x) for x in get_text(elem, 'bins').split()] |
| 1558 | + filter_id = int(get_text(elem, "id")) |
| 1559 | + bins = get_elem_list(elem, "bins", float) or [] |
1562 | 1560 | return cls(bins, filter_id=filter_id) |
1563 | 1561 |
|
1564 | 1562 |
|
@@ -2447,12 +2445,13 @@ def to_xml_element(self): |
2447 | 2445 |
|
2448 | 2446 | @classmethod |
2449 | 2447 | def from_xml_element(cls, elem, **kwargs): |
2450 | | - filter_id = int(elem.get('id')) |
2451 | | - energy = [float(x) for x in get_text(elem, 'energy').split()] |
2452 | | - y = [float(x) for x in get_text(elem, 'y').split()] |
| 2448 | + filter_id = int(get_text(elem, "id")) |
| 2449 | + energy = get_elem_list(elem, "energy", float) or [] |
| 2450 | + y = get_elem_list(elem, "y", float) or [] |
2453 | 2451 | out = cls(energy, y, filter_id=filter_id) |
2454 | | - if elem.find('interpolation') is not None: |
2455 | | - out.interpolation = elem.find('interpolation').text |
| 2452 | + interpolation = get_text(elem, "interpolation") |
| 2453 | + if interpolation is not None: |
| 2454 | + out.interpolation = interpolation |
2456 | 2455 | return out |
2457 | 2456 |
|
2458 | 2457 | def can_merge(self, other): |
|
0 commit comments