def inplace_transitive_reduction(g): closure = lazydict(set, ((s,ts.copy()) for s,ts in g.items())) inplace_transitive_closure(closure) for s,ts in g.items(): for t1 in ts.copy(): if any(t2 != t1 and t1 in closure[t2] for t2 in ts): ts.remove(t1)
def to_mutable_graph(dumps, successor_function=None, vertex_filter=lambda x: True): successor_function = successor_function or Successors(dumps) return lazydict( set, ( (v, set(x for x in successor_function(dumps, v) if vertex_filter(x) and x != v)) # filter out self-loops for v in dumps if vertex_filter(v) ), )
def read_dumps(dump_dir = None): if dump_dir is None: ryppl = Path('/Users/dave/src/ryppl') dump_dir = ryppl / 'feeds' / 'dumps' all_dumps = lazydict(lambda:Element('__NOT_WHAT_YOURE_LOOKING_FOR__')) for cmake_dump_file in glob.glob(dump_dir/'*.xml'): cmake_dump = ElementTree() cmake_dump.parse(cmake_dump_file) camel_name = Path(cmake_dump_file).namebase all_dumps[camel_name] = cmake_dump return all_dumps