def test_intermediate_inputs_and_outputs(self): """ restrict blocks with inputs and outputs which are intermediates """ code = "c = a + b\n" \ "d = c * 3\n" \ "e = a * c\n" \ "f = d + e\n" \ "g = e + c\n" \ "h = a * 3" block = Block(code) sub_block = block.restrict(inputs=('c'), outputs=('e', 'g')) self.assertEqual(sub_block.inputs, set(['a', 'c'])) self.assertEqual(sub_block.outputs, set(['e', 'g'])) context = {'a': 1, 'b': 2} block.execute(context) self.assertEqual(context['c'], 3) self.assertEqual(context['e'], 3) self.assertEqual(context['g'], 6) context = {'a': 1, 'c': 10} sub_block.execute(context) self.assertEqual(context['c'], 10) self.assertEqual(context['e'], 10) self.assertEqual(context['g'], 20)
def test_intermediate_inputs_with_highly_connected_graph(self): """ restrict blocks with inputs which are intermediates on a highly connected graph""" code = "c = a + b\n" \ "d = c * 3\n" \ "e = a * c\n" \ "f = d + e\n" \ "g = e + c\n" \ "h = a * 3" block = Block(code) sub_block = block.restrict(inputs=('c')) self.assertEqual(sub_block.inputs, set(['a', 'c'])) self.assertEqual(sub_block.outputs, set(['d', 'e', 'f', 'g'])) context = {'a': 1, 'b': 2} block.execute(context) self.assertEqual(context['c'], 3) self.assertEqual(context['d'], 9) self.assertEqual(context['e'], 3) self.assertEqual(context['f'], 12) self.assertEqual(context['g'], 6) context = {'a': 1, 'c': 10} sub_block.execute(context) self.assertEqual(context['c'], 10) self.assertEqual(context['d'], 30) self.assertEqual(context['e'], 10) self.assertEqual(context['f'], 40) self.assertEqual(context['g'], 20)
def test_intermediate_inputs(self): """ restrict blocks with inputs which are intermediates """ block = Block('c = a + b\n'\ 'd = c * 3') sub_block = block.restrict(inputs=('c')) self.assertEqual(sub_block.inputs, set(['c'])) self.assertEqual(sub_block.outputs, set(['d'])) context = {'a': 1, 'b': 2} block.execute(context) self.assertEqual(context['c'], 3) self.assertEqual(context['d'], 9) context = {'c': 10} sub_block.execute(context) self.assertEqual(context['c'], 10) self.assertEqual(context['d'], 30) context = {'d': 15} sub_block = block.restrict(inputs=('d')) self.assertEqual(sub_block.inputs, set([])) self.assertEqual(sub_block.outputs, set([])) sub_block.execute(context) self.assertEqual(context['d'], 15)
def test_intermediate_inputs_and_outputs(self): """ restrict blocks with inputs and outputs which are intermediates """ code = "c = a + b\n" \ "d = c * 3\n" \ "e = a * c\n" \ "f = d + e\n" \ "g = e + c\n" \ "h = a * 3" block = Block(code) sub_block = block.restrict(inputs=('c'), outputs=('e', 'g')) self.assertEqual(sub_block.inputs, set(['a', 'c'])) self.assertEqual(sub_block.outputs, set(['e', 'g'])) context = {'a':1, 'b':2} block.execute(context) self.assertEqual(context['c'], 3) self.assertEqual(context['e'], 3) self.assertEqual(context['g'], 6) context = {'a':1, 'c':10} sub_block.execute(context) self.assertEqual(context['c'], 10) self.assertEqual(context['e'], 10) self.assertEqual(context['g'], 20)
def test_intermediate_inputs_with_highly_connected_graph(self): """ restrict blocks with inputs which are intermediates on a highly connected graph""" code = "c = a + b\n" \ "d = c * 3\n" \ "e = a * c\n" \ "f = d + e\n" \ "g = e + c\n" \ "h = a * 3" block = Block(code) sub_block = block.restrict(inputs=('c')) self.assertEqual(sub_block.inputs, set(['a', 'c'])) self.assertEqual(sub_block.outputs, set(['d', 'e', 'f', 'g'])) context = {'a':1, 'b':2} block.execute(context) self.assertEqual(context['c'], 3) self.assertEqual(context['d'], 9) self.assertEqual(context['e'], 3) self.assertEqual(context['f'], 12) self.assertEqual(context['g'], 6) context = {'a':1, 'c':10} sub_block.execute(context) self.assertEqual(context['c'], 10) self.assertEqual(context['d'], 30) self.assertEqual(context['e'], 10) self.assertEqual(context['f'], 40) self.assertEqual(context['g'], 20)
def test_intermediate_inputs(self): """ restrict blocks with inputs which are intermediates """ block = Block('c = a + b\n'\ 'd = c * 3') sub_block = block.restrict(inputs=('c')) self.assertEqual(sub_block.inputs, set(['c'])) self.assertEqual(sub_block.outputs, set(['d'])) context = {'a':1, 'b':2} block.execute(context) self.assertEqual(context['c'], 3) self.assertEqual(context['d'], 9) context = {'c':10} sub_block.execute(context) self.assertEqual(context['c'], 10) self.assertEqual(context['d'], 30) context = {'d':15} sub_block = block.restrict(inputs=('d')) self.assertEqual(sub_block.inputs, set([])) self.assertEqual(sub_block.outputs, set([])) sub_block.execute(context) self.assertEqual(context['d'], 15)