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}))
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 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})
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()
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
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()
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}))
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}))