diff --git a/tests/test_core.py b/tests/test_core.py index aa0ab1df28954297629fd5f808cddb812e3ee019..be2a588d8dfb8747a35aaf526fd4766767f75bb4 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -147,12 +147,16 @@ class Tensors_Check(AbstractNdarray_Check): merge_list[1].transform(tfields.bases.CYLINDER) merge_list[2].transform(tfields.bases.SPHERICAL) + # add an empty object if specified + empty_objects = getattr(self, "_empty_objects", []) + merge_list.extend(empty_objects) + # merge them and check that the first coord_sys is taken obj = type(self._inst).merged(*merge_list) self.assertTrue(obj.coord_sys == tfields.bases.CARTESIAN) # check that all copies are the same also with new coord_sys - for i in range(len(merge_list)): + for i in range(len(merge_list) - len(empty_objects)): value = np.allclose( merge_list[0], obj[i * len(self._inst) : (i + 1) * len(self._inst)], @@ -161,7 +165,7 @@ class Tensors_Check(AbstractNdarray_Check): self.assertTrue(value) obj_cs = type(self._inst).merged(*merge_list, coord_sys=tfields.bases.CYLINDER) - for i in range(len(merge_list)): + for i in range(len(merge_list) - len(empty_objects)): value = np.allclose( merge_list[1], obj_cs[i * len(self._inst) : (i + 1) * len(self._inst)], @@ -328,6 +332,10 @@ class TensorMaps_Test(TensorFields_Check, unittest.TestCase): for map_tensors, map_fields in zip(self._maps_tensors, self._maps_fields) ] self._inst = tfields.TensorMaps(tensors, *self._fields, maps=self._maps) + self._empty_objects = [ + tfields.TensorMaps([], dim=3), + tfields.TensorMaps([], maps=tfields.Maps([]), dim=3), + ] def test_legacy(self): this_dir = pathlib.Path(__file__).parent diff --git a/tfields/core.py b/tfields/core.py index 4777792f0c2c2e1827750d4b0d91c5e32230015a..9dc9fec6a8120687d6c03cd041336fa37c94c9a4 100644 --- a/tfields/core.py +++ b/tfields/core.py @@ -2583,8 +2583,8 @@ class TensorMaps(TensorFields): dim_maps_dict = {} # {dim: {i: map_} for i, obj in enumerate(objects): - for dimension, map_ in obj.maps.items(): # pylint: disable=invalid-name - map_ = map_ + cum_tensor_lengths[i] # pylint: disable=invalid-name + for dimension, map_ in obj.maps.items(): + map_ = map_ + cum_tensor_lengths[i] if dimension not in dim_maps_dict: dim_maps_dict[dimension] = {} dim_maps_dict[dimension][i] = map_ @@ -2593,7 +2593,11 @@ class TensorMaps(TensorFields): template_maps_list = [[] for i in range(len(objects))] for dimension in sorted(dim_maps_dict): # sort by object index - dim_maps = [dim_maps_dict[dimension][i] for i in range(len(objects))] + dim_maps = [ + dim_maps_dict[dimension][i] + for i in range(len(objects)) + if i in dim_maps_dict[dimension] + ] return_value = TensorFields.merged( *dim_maps, diff --git a/tfields/mesh_3d.py b/tfields/mesh_3d.py index a37cd51a5e336445a068a62312223d6494206db6..d0bdde1cbb9e41c2c70df1c1997ed804b3ae84ec 100644 --- a/tfields/mesh_3d.py +++ b/tfields/mesh_3d.py @@ -1098,7 +1098,7 @@ class Mesh3D(tfields.TensorMaps): Cut with 'return_template=True' will return the exact same mesh but additionally an instruction to conduct the exact same cut fast (template) >>> m_split_2, template = m.cut(cut_expr, at_intersection='split', - ... return_template=True) + ... return_template=True) >>> m_split_template = m.cut(template) >>> assert m_split.equal(m_split_2, equal_nan=True) >>> assert m_split.equal(m_split_template, equal_nan=True)