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)