def incoming_edge_map_from_dep_map()

in uberpoet/dotreader.py [0:0]


    def incoming_edge_map_from_dep_map(dep_map):
        # type: (Dict[str, List[str]]) -> Dict[str, List[str]]
        """Converts a outgoing edge map into it's inverse, a {destination:[origins]} incoming edge map."""
        incoming = defaultdict(list)
        for node, outgoing in dep_map.iteritems():
            for out in outgoing:
                incoming[out] += [node]

        # Roots wont show up in the incoming list in the above for loop
        roots = set(dep_map.keys()) - set(incoming.keys())
        for root in roots:
            incoming[root] = []

        return dict(incoming)