Yield (power)nodes below given powernode (contained by it,
    or contained by a powernode contained by it, etc).

    >>> sorted(included('p1', {'p1': ('p2', 1), 'p2': (3,), 1: (), 3: ()}), key=str)
    [1, 3, 'p2']
    >>> sorted(included('p1', {'p1': ('p2', 1), 'p2': (3,), 1: (), 3: ()}, nodes_only=True), key=str)
    [1, 3]

def included(powernode:str, inclusions:dict, nodes_only=False) -> iter:
    """Yield (power)nodes below given powernode (contained by it,
    or contained by a powernode contained by it, etc).

    >>> sorted(included('p1', {'p1': ('p2', 1), 'p2': (3,), 1: (), 3: ()}), key=str)
    [1, 3, 'p2']
    >>> sorted(included('p1', {'p1': ('p2', 1), 'p2': (3,), 1: (), 3: ()}, nodes_only=True), key=str)
    [1, 3]

    """
    if nodes_only:
        condition = lambda e: e != powernode and inclusions[e] == ()
    else:
        condition = lambda e: e != powernode
    yield from (elem for elem in utils.walk(powernode, (inclusions,))
                if condition(elem))