'Return a partial dependency graph starting with the specified node.
Return a subset of the dependency graph consisting of the specified
node and all those that require it only.'

def __getitem__(self, last):

    if (last not in self._graph):
        raise KeyError
    def get_edges(key):
        def requirer_edges(rqr):
            return itertools.chain([(rqr, key)], get_edges(rqr))
        edge_lists = six.moves.map(requirer_edges, self._graph[key].required_by())
        return itertools.chain.from_iterable(edge_lists)
    if self._graph[last].stem():
        edges = [(last, None)]
    else:
        edges = get_edges(last)
    return Dependencies(edges)
