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 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
Example #3
0
    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
Example #4
0
 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
Example #5
0
    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
Example #6
0
    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"))
Example #7
0
    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
Example #8
0
    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")
Example #10
0
    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)
Example #11
0
    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")