def retrieve_iteration_tree(node, mode='normal'): """Return a list of all :class:`Iteration` sub-trees rooted in ``node``. For example, given the Iteration tree: .. code-block:: c Iteration i expr0 Iteration j Iteraion k expr1 Iteration p expr2 Return the list: :: [(Iteration i, Iteration j, Iteration k), (Iteration i, Iteration p)] :param node: The searched Iteration/Expression tree. :param mode: Accepted values are 'normal' (default) and 'superset', in which case iteration trees that are subset of larger iteration trees are dropped. """ assert mode in ('normal', 'superset') trees = [IterationTree(i) for i in FindSections().visit(node) if i] if mode == 'normal': return trees else: match = [] for i in trees: if any(set(i).issubset(set(j)) for j in trees if i != j): continue match.append(i) return IterationTree(match)
def retrieve_iteration_tree(node, mode='normal'): """ A list with all :class:`Iteration` sub-trees within an IET. Examples -------- Given the Iteration tree: .. code-block:: c Iteration i expr0 Iteration j Iteraion k expr1 Iteration p expr2 Return the list: :: [(Iteration i, Iteration j, Iteration k), (Iteration i, Iteration p)] Parameters ---------- iet : Node The searched Iteration/Expression tree. mode : str, optional - ``normal`` - ``superset``: Iteration trees that are subset of larger iteration trees are dropped. """ assert mode in ('normal', 'superset') trees = [IterationTree(i) for i in FindSections().visit(node) if i] if mode == 'normal': return trees else: match = [] for i in trees: if any(set(i).issubset(set(j)) for j in trees if i != j): continue match.append(i) return IterationTree(match)