def create(source_set, sink_set, layout, connections): def ensure_uniform(l): assert min(l) == max(l) return l[0] sorted_sources = sorted(source_set) flat_sources = list(flatten(sorted_sources)) nesting = convert_to_nested_indices(sorted_sources) # get buffer type for hub and assert its uniform structs = [ BufferStructure.from_layout(get_by_path(layout, s)) for s in flat_sources ] btype = ensure_uniform([s.buffer_type for s in structs]) # max context size context_size = max([s.context_size for s in structs]) hub = Hub(flat_sources, nesting, sorted(sink_set), btype, context_size) hub.setup(connections) hub.sizes = [structs[i].feature_size for i in hub.perm] hub.size = sum(hub.sizes) hub.is_backward_only = ensure_uniform( [structs[i].is_backward_only for i in hub.perm]) return hub
def create(source_set, sink_set, layout, connections): def ensure_uniform(l): assert min(l) == max(l) return l[0] sorted_sources = sorted(source_set) flat_sources = list(flatten(sorted_sources)) nesting = convert_to_nested_indices(sorted_sources) # get buffer type for hub and assert its uniform structs = [BufferStructure.from_layout(get_by_path(layout, s)) for s in flat_sources] btype = ensure_uniform([s.buffer_type for s in structs]) # max context size context_size = max([s.context_size for s in structs]) hub = Hub(flat_sources, nesting, sorted(sink_set), btype, context_size) hub.setup(connections) hub.sizes = [structs[i].feature_size for i in hub.perm] hub.size = sum(hub.sizes) hub.is_backward_only = ensure_uniform([structs[i].is_backward_only for i in hub.perm]) return hub
def test_convert_to_nested_indices(): assert list(convert_to_nested_indices( ['a', ('b', 'c', 'a'), 'b', ['c', ('c', 'c'), 'b']])) == \ [0, [1, 2, 3], 4, [5, [6, 7], 8]]