def sorted(self): dag = DAG() imap = dict() vmap = dict() for _ in self.interceptors: k = self.key(_.interceptor) imap[k] = _ vmap[k] = dag.add(k) for k in imap: _ = imap[k] v = vmap[k] if _.before: for o in _.before: o = vmap[self.key(o)] dag.add_edge(v, o) if _.after: for o in _.after: o = vmap[self.key(o)] dag.add_edge(o, v) rs = dag.topologicaly() s = [imap[k].interceptor for k in rs] return s
def test_cicle_detect(self): ''' Tests the verticles order in: C --> A --> B --> D -> C ''' dag = DAG() a = dag.add("A") b = dag.add("B") c = dag.add("C") d = dag.add("D") dag.add_edge(c, a) dag.add_edge(a, b) dag.add_edge(b, d) dag.add_edge(c, d) try: # add cicle at A --> C --> A dag.add_edge(a, c) raise Exception("Cycle not detected") except CycleDetectedException: pass
def test_cicle_detect_tuples(self): ''' Tests the verticles order in: a --> b --> c --> a ''' dag = DAG() a = dag.add(1) b = dag.add((1, 'b', None)) c = dag.add(frozenset((2, 'c'))) dag.add_edge(a, b) dag.add_edge(b, c) try: # add cicle at a --> b --> c --> a dag.add_edge(c, a) dag.add_edge(a, c) raise Exception("Cycle not detected") except CycleDetectedException: pass
def test_simple(self): ''' Tests the verticles order in: C --> A --> B --> D ''' dag = DAG() a = dag.add("A") b = dag.add("B") c = dag.add("C") d = dag.add("D") dag.add_edge(c, a) dag.add_edge(a, b) dag.add_edge(b, d) dag.add_edge(c, d) rs = dag.topologicaly() self.assertTrue(rs.index("C") < rs.index("A")) self.assertTrue(rs.index("A") < rs.index("B")) self.assertTrue(rs.index("B") < rs.index("D")) self.assertTrue(rs.index("C") < rs.index("D"))
''' Created on Oct 3, 2012 @author: Moises P. Sena ''' from sdag2 import DAG dag = DAG() a = dag.add("A") b = dag.add("B") c = dag.add("C") d = dag.add("D") dag.add_edge(c, a) dag.add_edge(a, b) dag.add_edge(b, d) dag.add_edge(c, d) rs = dag.topologicaly() # Order is: C --> A --> B --> D print("Order is: %s" % (" --> ".join(rs))) assert rs.index("C") < rs.index("A") assert rs.index("A") < rs.index("B") assert rs.index("B") < rs.index("D") assert rs.index("C") < rs.index("D")
options.filename = args[0] if len(args) > 1: options.out_filename = args[1] if options.filename in ("STDIN", "-", ""): inf = stdin else: inf = copen(options.filename, "rb") if options.out_filename in ("STDOUT", "-", ""): outf = stdout else: outf = copen(options.out_filename, "wb") dag = DAG() line = inf.readline() i = 0 while line: line = line.strip() i += 1 if not line: stderr.write("[WARN]: Line %s is empty.\n" % i) continue elif line == options.quit_sequence: break parts = split(options.separator, line)
""" Created on Oct 3, 2012 @author: Moises P. Sena """ from sdag2 import DAG dag = DAG() a = dag.add("A") b = dag.add("B") c = dag.add("C") d = dag.add("D") dag.add_edge(c, a) dag.add_edge(a, b) dag.add_edge(b, d) dag.add_edge(c, d) rs = dag.topologicaly() # Order is: C --> A --> B --> D print("Order is: %s" % (" --> ".join(rs))) assert rs.index("C") < rs.index("A") assert rs.index("A") < rs.index("B") assert rs.index("B") < rs.index("D") assert rs.index("C") < rs.index("D")