Example #1
0
    def set_edge_attrs_subgraph_dependent_on_nodes(graph, start_nodes, attrs):
        dependent_nodes = GraphAlgorithms.dependent_nodes(graph, start_nodes)

        for edge in graph.edges():
            if edge.get_from_node() in dependent_nodes and edge.get_to_node() in dependent_nodes:
                if isinstance(edge, AttributedEdge):
                    edge.set_attrs(attrs)
                else:
                    raise ValueError("Trying to set attributes on non-attributed edge")
Example #2
0
 def transitive_closure_from_graph(graph):
     accessibility_matrix = GraphAlgorithms.accessibility_matrix_from_graph(graph)
     #result_graph = MutableAttributeGraph(nodes=graph.nodes_raw())
     result = set()
     for from_node, to_nodes in accessibility_matrix.iteritems():
         for to_node in to_nodes:
             if from_node != to_node:
                 # TODO Muss ich hier eine AttributedEdge nehmen, tut es nicht auch eine SimpleEdge?
                 result.add(AttributedEdge(from_node=from_node, to_node=to_node))
     return result
Example #3
0
    def process(self, show=False):
        self._parser = config_dependency_parser()
        self._parser.process()
        dep_filter = config_dependency_filter(
            config=config_dependency_filter_config)
        self._parser.output(dep_filter)

        decorator_conf = DecoratorSet(
            node_tooltip_decorators=[NodeGroupDecorator()],
            edge_tooltip_decorators=[EdgeGroupDecorator()])
        basename = self.__generic_files_tools.get_module_link_deps_basename(
        ) + '-sub-custom'
        outputter = config_dependency_filter_outputter(decorator_conf)

        graph = dep_filter.graph()
        # TODO Momentan nur ein Test!
        #start_nodes = ['osapi', 'prio4dyn', 'dyn', 'prid4dynmfc', 'bib']
        if config_basic.get_system() == 'prins':
            start_nodes = set(ifilter(is_prins_classic,
                                      graph.node_names())) - set(['osapi'])
            description = GraphDescriptionImpl(
                description=
                "subgraph: modules independent of legacy PRINS (link deps)")
        elif config_basic.get_system() == 'revengtools':
            start_nodes = set(
                ifilter(
                    lambda x: x.startswith(('infrastructure', 'cpp', 'python',
                                            'systems', 'commons.graph')),
                    graph.node_names()))
            description = GraphDescriptionImpl(
                description="subgraph: generic core")
        else:
            raise RuntimeError("Unknown system %s" % config_basic.get_system())
        GraphAlgorithms.remove_subgraph_dependent_on_nodes(graph, start_nodes)

        description.set_basename(basename)
        description.set_section('subgraph')

        DependencyFilterOutputterTools.output_detail_and_overview_graph(
            graph, outputter, description=description)
Example #4
0
 def __init__(self,
              graph=None,
              accessibility_matrix=None,
              weight_function=None):
     assert len(filter(
         None, (graph, accessibility_matrix
                ))) == 1, "Either graph or accessiblity_matrix must be set"
     if accessibility_matrix:
         self.__accessibility_matrix = accessibility_matrix
     else:
         self.__accessibility_matrix = GraphAlgorithms.accessibility_matrix_from_graph(
             graph)
     self.__weight_function = weight_function
     assert weight_function == None, "TODO using a weight function support is not yet implemented"
Example #5
0
 def __init__(self,
              file_dependencies,
              file_to_module_map,
              use_transitive_closure=True,
              module_name_filter=lambda module: module):
     if use_transitive_closure:
         unique_file_dependencies = set(
             (src, dst) for (src, dst) in file_dependencies)
         self.__reverse_file_dependencies = SetValuedDictTools.convert_from_itemiterator(
             (target, source)
             for (source, target) in GraphAlgorithms.transitive_closure(
                 unique_file_dependencies))
     else:
         self.__reverse_file_dependencies = SetValuedDictTools.convert_from_itemiterator(
             (target, source) for (source, target) in file_dependencies)
     self.__target_files_to_referencing_modules_map = dict()
     self.__files_to_modules_raw = dict(file_to_module_map)
     self.__module_name_filter = module_name_filter
Example #6
0
 def _create_accessibility_matrix(self, graph):
     self.__accessibility_matrix = GraphAlgorithms.accessibility_matrix_from_graph(
         graph, inverse=False)
Example #7
0
 def attach_graph(self, graph):
     BaseGraphElementDecorator.attach_graph(self, graph)
     start_nodes = self.get_start_nodes()
     self.__subgraph_nodes = GraphAlgorithms.dependent_nodes(
         graph, start_nodes)
Example #8
0
    def set_node_attrs_subgraph_dependent_on_nodes(graph, start_nodes, attrs):
        dependent_nodes = GraphAlgorithms.dependent_nodes(graph, start_nodes)

        for node in dependent_nodes:
            graph.set_node_attrs(node, attrs)
Example #9
0
 def test_dependent_nodes_1_1(self):
     result = GraphAlgorithms.dependent_nodes(GraphConversions.edge_list_to_pygraph(edge_list=self.INPUT_EDGES_1), start_nodes=[1])
     self.assertEquals(set([1]), result)
     
Example #10
0
 def test_remove_branches_1_4(self):
     result = GraphAlgorithms.remove_branches(cut_nodes=[1], edges=self.INPUT_EDGES_1, target_nodes=[5])
     self.assertEquals(set([(4, 5), (3, 4), (2, 5), (2, 3), (2, 4)]), set(result))
Example #11
0
 def test_cut_branches_1_3(self):
     result = GraphAlgorithms.cut_branches(cut_obj_ids=[4], edges=self.INPUT_EDGES_1)
     self.assertEquals(set([(1,2), (2,3), (3,4), (2, 4), (2, 5)]), set(result))
Example #12
0
 def test_cut_branches_1_1(self):
     result = GraphAlgorithms.cut_branches(cut_obj_ids=[], edges=self.INPUT_EDGES_1)
     self.assertEquals(set(self.INPUT_EDGES_1), set(result))