Пример #1
0
 def template_x_and_y_test_comp1(self, x: int, y: int, algorithm):
     graph1 = rnr_graph()
     graph2 = rnr_graph()
     for i in range(1, x + 1):
         graph1.add_node(lr_node(1, i))
     for i in range(1, y + 1):
         graph2.add_node(lr_node(1, i))
     i = min(x, y)
     self.template_test(graph1, graph2, i, algorithm)
     if x != y:
         self.template_test(graph2, graph1, i, algorithm)
    def convert(self, workflow: Workflow) -> GraphWithRepetitiveNodesWithRoot:
        graph = rnr_graph()
        from collections import defaultdict
        number_of_blocks = defaultdict(int)

        for block in workflow:
            number_of_blocks[block] += 1
            graph.add_node(lr_node(self.block_id(block), number_of_blocks[block]))

        for (from_block, from_num, _), a2 in workflow.items():
            for to_block, to_num, _ in a2:
                graph.add_edge_exp(lr_node(self.block_id(from_block), from_num),
                                   lr_node(self.block_id(to_block), to_num))

        for (from_block, from_num), a2 in workflow.items_by_exc():
            for to_block, to_num in a2:
                graph.add_edge_exp(lr_node(self.block_id(from_block), from_num),
                                   lr_node(self.block_id(to_block), to_num))

        return graph
Пример #3
0
 def __init__(self, graph: GraphWithRepetitiveNodesWithRoot):
     self.len = len(list(graph)) + 1
     self.nodes = [lr_node(1, 0)] + sorted(list(graph),
                                           key=lambda x:
                                           (x.Label, x.Number))
     self.edges = {(self.nodes.index(v), self.nodes.index(u))
                   for v in graph
                   for u in graph.get_list_of_adjacent_nodes(v)}
     self._label = defaultdict(list)
     for i in self:
         self._label[self.nodes[i].Label].append(i)
     self._incoming = [None] * self.len
     for i in self:
         self._incoming[i] = [v for (v, u) in self.edges if u == i]
     self._outcoming = [None] * self.len
     for i in self:
         self._outcoming[i] = [u for (v, u) in self.edges if v == i]
    def convert(self, workflow: Workflow) -> GraphWithRepetitiveNodesWithRoot:
        graph = rnr_graph()

        from collections import defaultdict
        number_of_blocks = defaultdict(int)

        for block in workflow:
            number_of_blocks[block] += 1
            block_node = lr_node(self.block_id(block), number_of_blocks[block])
            graph.add_node(block_node)

            for nest in block.operation.inputs:
                nest_node = lr_node(self.input_nest_id(block, nest),
                                    number_of_blocks[block])
                graph.add_node(nest_node)
                graph.add_edge_exp(nest_node, block_node)

            for nest in block.operation.outputs:
                nest_node = lr_node(self.output_nest_id(block, nest),
                                    number_of_blocks[block])
                graph.add_node(nest_node)
                graph.add_edge_exp(block_node, nest_node)

        for (from_block, from_num, output_nest), a2 in workflow.items():
            for to_block, to_num, input_nest in a2:
                graph.add_edge_exp(
                    lr_node(self.output_nest_id(from_block, output_nest),
                            from_num),
                    lr_node(self.input_nest_id(to_block, input_nest), to_num))

        for (from_block, from_num), a2 in workflow.items_by_exc():
            for to_block, to_num in a2:
                graph.add_edge_exp(
                    lr_node(self.block_id(from_block), from_num),
                    lr_node(self.block_id(to_block), to_num))

        return graph
Пример #5
0
 def test_three_and_three_but_diff_numbers(self, _, algorithm: GraphDiffAlgorithm):
     graph1 = rnr_graph().add_node(lr_node(1, 1)).add_node(lr_node(1, 2)).add_node(lr_node(1, 3))
     graph2 = rnr_graph().add_node(lr_node(1, 1)).add_node(lr_node(1, 3)).add_node(lr_node(1, 3))
     graph1.add_edge(lr_node(1, 1), lr_node(1, 2)).add_edge(lr_node(1, 3), lr_node(1, 2))
     graph2.add_edge(lr_node(1, 1), lr_node(1, 3)).add_edge(lr_node(1, 2), lr_node(1, 3))
     self.template_test(graph1, graph2, 4, algorithm)
     self.template_test(graph2, graph1, 4, algorithm)
Пример #6
0
 def test_three_and_three_with_dif_labels_and_edges_to_center(self, _, algorithm):
     graph1 = rnr_graph().add_node(lr_node(1, 1)).add_node(lr_node(2, 1)).add_node(lr_node(3, 1))
     graph2 = rnr_graph().add_node(lr_node(1, 1)).add_node(lr_node(2, 1)).add_node(lr_node(3, 1))
     graph1.add_edge(lr_node(1, 1), lr_node(2, 1)).add_edge(lr_node(3, 1), lr_node(2, 1))
     graph2.add_edge(lr_node(1, 1), lr_node(2, 1)).add_edge(lr_node(3, 1), lr_node(2, 1))
     self.template_test(graph1, graph2, 4, algorithm)
     self.template_test(graph2, graph1, 4, algorithm)
Пример #7
0
 def test_three_and_three_with_dif_labels(self, _, algorithm):
     graph1 = rnr_graph().add_node(lr_node(1, 1)).add_node(lr_node(2, 1)).add_node(lr_node(3, 1))
     graph2 = rnr_graph().add_node(lr_node(1, 1)).add_node(lr_node(2, 1)).add_node(lr_node(3, 1))
     self.template_test(graph1, graph2, 3, algorithm)
     self.template_test(graph2, graph1, 3, algorithm)
Пример #8
0
 def test_two_with_edge_and_two_with_edge(self, _, algorithm):
     graph1 = rnr_graph().add_edge(lr_node(1, 2), lr_node(1, 1))
     graph2 = rnr_graph().add_edge(lr_node(1, 2), lr_node(1, 1))
     self.template_test(graph1, graph2, 2, algorithm)
     self.template_test(graph2, graph1, 2, algorithm)
Пример #9
0
 def test_add_edge_exp(self):
     self.assertFalse(lr_node(1, 1) in self.test_graph)
     self.assertFalse(lr_node(1, 2) in self.test_graph)
     self.assertRaises(GraphWithRepetitiveNodesKeyError, self.test_graph.add_edge_exp, lr_node(1, 1), lr_node(1, 2))
Пример #10
0
 def test_add_edge(self):
     self.assertFalse(lr_node(1, 1) in self.test_graph)
     self.assertFalse(lr_node(1, 2) in self.test_graph)
     self.test_graph.add_edge(lr_node(1, 1), lr_node(1, 2))
     self.assertTrue(lr_node(1, 1) in self.test_graph)
     self.assertTrue(lr_node(1, 2) in self.test_graph)
Пример #11
0
 def map_from_2(self, node):
     return self._graph_map_2_to_1[
         node] if node in self._graph_map_2_to_1.keys() else lr_node(
             node.Label, 0)
Пример #12
0
 def map_from_1(self, node):
     return self._graph_map_1_to_2[
         node] if node in self._graph_map_1_to_2.keys() else lr_node(
             node.Label, 0)