"""@package docstring B-ASIC Operation Module. TODO: More info. """ from typing import Set from collections import deque from b_asic.operation import Operation def breadth_first_search(start: Operation) -> Operation: """Use breadth first search to traverse the operation tree.""" visited: Set[Operation] = {start} queue = deque([start]) while queue: operation = queue.popleft() yield operation for n_operation in operation.neighbours: if n_operation not in visited: visited.add(n_operation) queue.append(n_operation)