Пример #1
0
 def test_add(self):
     g = DAG()
     g.add_node(1)
     g.add_node(2)
     g.add_node(3, inputs = {1,2})
     g.add_node(0, outputs={1})
     self.assertEqual(g._head_nodes, g.to_nodes({0,2}))
     self.assertEqual(g._leaf_nodes, g.to_nodes({3}))
Пример #2
0
    def setUp(self):
        self.rootns = ChainMap({'param':4, 'inner': {}})
        empty_nsspec = tuple()
        self.graph = DAG()
        fcall = CallSpec(f, ('param',), 'fresult', ExecModes.SET_UNIQUE,
                         empty_nsspec)
        gcall = CallSpec(g, ('fresult',), 'gresult', ExecModes.SET_UNIQUE,
                         empty_nsspec)
        hcall = CallSpec(h, ('fresult',), 'hresult', ExecModes.SET_UNIQUE,
                         empty_nsspec)
        mcall = CallSpec(m, ('gresult','hresult','param'), 'mresult',
                         ExecModes.SET_UNIQUE, empty_nsspec)

        ncall = CallSpec(n, ('mresult',), 'arr', ExecModes.APPEND_UNORDERED,
                         ('inner',))
        ocall = CallSpec(o, ('mresult',), 'arr', ExecModes.APPEND_UNORDERED,
                         ('inner',))
        pcall = CallSpec(p, ('mresult',), 'arr', ExecModes.APPEND_UNORDERED,
                         (),)

        self.graph.add_node(fcall)
        self.graph.add_node(gcall, inputs={fcall})
        self.graph.add_node(hcall, inputs={fcall})
        self.graph.add_node(mcall, inputs={gcall, hcall})
        self.graph.add_node(ncall, inputs={mcall})

        self.graph.add_node(ocall, inputs={mcall})
        self.graph.add_node(pcall, inputs={mcall})
Пример #3
0
    def setUp(self):
        self.rootns = ChainMap({'param':4, 'inner': {}})
        def nsspec(x, beginning=()):
            ns = namespaces.resolve(self.rootns, beginning)
            default_label =  '_default' + str(x)
            namespaces.push_nslevel(ns, default_label)
            return beginning + (default_label,)

        self.graph = DAG()

        fcall = CallSpec(f, ('param',), 'fresult',
                         nsspec(f))

        gcall = CallSpec(g, ('fresult',), 'gresult',
                         nsspec(g))

        hcall = CallSpec(h, ('fresult',), 'hresult',
                         nsspec(h))

        mcall = CallSpec(m, ('gresult','hresult','param'), 'mresult',
                         nsspec(m))



        self.graph.add_node(fcall)
        self.graph.add_node(gcall, inputs={fcall})
        self.graph.add_node(hcall, inputs={fcall})
        self.graph.add_node(mcall, inputs={gcall, hcall})
Пример #4
0
class TestResourceExecutor( unittest.TestCase, ResourceExecutor):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def setUp(self):
        self.rootns = ChainMap({'param':4, 'inner': {}})
        empty_nsspec = tuple()
        self.graph = DAG()
        fcall = CallSpec(f, ('param',), 'fresult', ExecModes.SET_UNIQUE,
                         empty_nsspec)
        gcall = CallSpec(g, ('fresult',), 'gresult', ExecModes.SET_UNIQUE,
                         empty_nsspec)
        hcall = CallSpec(h, ('fresult',), 'hresult', ExecModes.SET_UNIQUE,
                         empty_nsspec)
        mcall = CallSpec(m, ('gresult','hresult','param'), 'mresult',
                         ExecModes.SET_UNIQUE, empty_nsspec)

        ncall = CallSpec(n, ('mresult',), 'arr', ExecModes.APPEND_UNORDERED,
                         ('inner',))
        ocall = CallSpec(o, ('mresult',), 'arr', ExecModes.APPEND_UNORDERED,
                         ('inner',))
        pcall = CallSpec(p, ('mresult',), 'arr', ExecModes.APPEND_UNORDERED,
                         (),)

        self.graph.add_node(fcall)
        self.graph.add_node(gcall, inputs={fcall})
        self.graph.add_node(hcall, inputs={fcall})
        self.graph.add_node(mcall, inputs={gcall, hcall})
        self.graph.add_node(ncall, inputs={mcall})

        self.graph.add_node(ocall, inputs={mcall})
        self.graph.add_node(pcall, inputs={mcall})

    def _test_ns(self):
        mresult = 'fresult: 4'*10
        namespace = self.rootns
        self.assertEqual(namespace['mresult'], mresult)
        self.assertEqual(set(namespace['arr']),  {mresult, mresult*2,
                         mresult*3})

    def test_seq_execute(self):
        self.execute_sequential()
        self._test_ns()

    def test_parallel_execute(self):
        self.execute_parallel()
        self._test_ns()
Пример #5
0
    def make_diamond():
        g = DAG()
        g.add_node(0)
        g.add_node(1, inputs={0})
        g.add_node(2, inputs={0})
        g.add_node(3, inputs={1,2})

        return g
Пример #6
0
class TestResourceExecutor(unittest.TestCase, ResourceExecutor):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        ResourceExecutor.__init__(self, None, None)

    def setUp(self):
        self.rootns = ChainMap({'param':4, 'inner': {}})
        def nsspec(x, beginning=()):
            ns = namespaces.resolve(self.rootns, beginning)
            default_label =  '_default' + str(x)
            namespaces.push_nslevel(ns, default_label)
            return beginning + (default_label,)

        self.graph = DAG()

        fcall = CallSpec(f, ('param',), 'fresult',
                         nsspec(f))

        gcall = CallSpec(g, ('fresult',), 'gresult',
                         nsspec(g))

        hcall = CallSpec(h, ('fresult',), 'hresult',
                         nsspec(h))

        mcall = CallSpec(m, ('gresult','hresult','param'), 'mresult',
                         nsspec(m))



        self.graph.add_node(fcall)
        self.graph.add_node(gcall, inputs={fcall})
        self.graph.add_node(hcall, inputs={fcall})
        self.graph.add_node(mcall, inputs={gcall, hcall})


    def _test_ns(self):
        mresult = 'fresult: 4'*10
        namespace = self.rootns
        self.assertEqual(namespace['mresult'], mresult)


    def test_seq_execute(self):
        self.execute_sequential()
        self._test_ns()

    def test_parallel_execute(self):
        self.execute_parallel()
        self._test_ns()
Пример #7
0
    def test_add_update(self):
        g = DAG()
        g.add_or_update_node(1)
        g.add_or_update_node(2)
        g.add_or_update_node(3, inputs = {1,2})
        g.add_or_update_node(0, outputs={1})
        self.assertEqual(g._head_nodes, g.to_nodes({0,2}))
        self.assertEqual(g._leaf_nodes, g.to_nodes({3}))

        g.add_or_update_node(0, outputs={1,2,3})
        with self.assertRaises(CycleError):
            g.add_or_update_node(0, inputs={1})

        self.assertEqual(g[0].outputs, g.to_nodes({1,2,3}))
Пример #8
0
    def test_complex(self):
        spec = (
                (1, (2,3,4,5)),
                (2, ()),
                (3, ()),
                (4, ()),
                (5, (2,)),
               )
        g = DAG()
        for val, deps in spec:
            for dep in deps:
                g.add_or_update_node(dep)
            g.add_or_update_node(val, inputs=deps)

        self.assertEqual(g._head_nodes, g.to_nodes({2,3,4}))

        g = DAG()
        for val, deps in spec:
            for dep in deps:
                g.add_or_update_node(dep)
            g.add_or_update_node(val, outputs=deps)

        self.assertEqual(g._leaf_nodes, g.to_nodes({2,3,4}))