def stack(geometries: List[Geometry], dim: Shape): """ Stacks `geometries` along `dim`. The size of `dim` is ignored. """ if all(type(g) == type(geometries[0]) and not isinstance(g, GridCell) for g in geometries): attrs = variable_attributes(geometries[0]) new_attributes = {a: math.stack([getattr(g, a) for g in geometries], dim) for a in attrs} return copy_with(geometries[0], **new_attributes) return GeometryStack(math.layout(geometries, dim))
def test_iterate_layout(self): a = [dict(a=1), dict(b=2)] t = math.layout(a, channel('outer,dict')) total = [] for d in t: total.append(d) self.assertEqual(total, [1, 2])
def test_layout_dict_conflict(self): a = [dict(a=1), dict(b=2)] t = math.layout(a, channel('outer,dict')) self.assertEqual(None, t.shape.get_item_names('dict')) self.assertEqual(a, t.native()) self.assertEqual([1, 2], t.dict[0].native()) self.assertEqual(2, t.dict[0].outer[1].native())
def test_layout_tree(self): a = [['a', 'b1'], 'b2', 'c'] t = math.layout(a, channel(outer='list,b2,c', inner=None)) self.assertEqual(a, t.native()) self.assertEqual(['a', 'b1'], t.outer['list'].native()) self.assertEqual('a', t.outer['list'].inner[0].native()) self.assertEqual(['a', 'b', 'c'], t.inner[0].native()) self.assertEqual('a', t.inner[0].outer['list'].native())
def test_layout_dict(self): a = {'a': 'text', 'b': [0, 1]} t = math.layout(a, channel('dict,inner')) self.assertEqual(a, t.native()) self.assertEqual(('a', 'b'), t.shape.get_item_names('dict')) self.assertEqual(a, t.native()) self.assertEqual('text', t.dict['a'].native()) self.assertEqual('e', t.dict['a'].inner[1].native()) self.assertEqual(1, t.dict['b'].inner[1].native()) self.assertEqual(('e', 1), t.inner[1].native())
def test_default_backend_layout(self): self.assertIsNone(math.layout(None).default_backend)
def test_layout_None(self): none = math.layout(None) self.assertEqual(None, none.native()) l = math.layout([None, None], channel('v')) self.assertEqual(None, none.v[0].native())
def test_layout_size(self): a = [['a', 'b1'], 'b2', 'c'] t = math.layout(a, channel(outer='list,b2,c', inner=None)) self.assertEqual(3, t.shape.get_size('outer')) self.assertEqual(2, t.outer['list'].shape.get_size('inner')) self.assertEqual(1, t.outer['c'].shape.get_size('inner'))
def test_layout_list(self): a = ['a', 'b', 'c'] t = math.layout(a, channel(letters=a)) self.assertEqual(a, t.native()) self.assertEqual('a', t.letters['a'].native()) self.assertEqual('a', t.letters['b, a'].letters['a'].native())
def test_layout_single(self): a = object() t = math.layout(a) self.assertEqual(a, t.native())