示例#1
0
 def types_of_all_modules(self, node):
     if isinstance(node, NodeGroup):
         modules = self._graph().node_attr(node, NodeAttributes.GROUPED_NODES)
         types = CollectionTools.union_all(self.types_of_single_module(module) for module in modules)
     else:
         types = self.types_of_single_module(node)
     return types
示例#2
0
 def nodes_in_edge_list(edge_list):
     """
     >>> sorted(GraphConversions.nodes_in_edge_list([('a', 'b'), ('b', 'c')]))        
     ['a', 'b', 'c']
     """
     nodes = CollectionTools.union_all(
         ((source for (source, _target) in edge_list),
          (target for (_source, target) in edge_list)))
     return nodes
示例#3
0
    def __copy_edges_and_node(self, nodes, edges, do_deepcopy):
        if edges != None:
            if do_deepcopy:
                self.__edges = deepcopy(set(edges))
            else:
                self.__edges = edges
            #self.__edges = set([AttributedEdge(source, target) for (source, target) in edges])
            if nodes == None:
                self.__nodes = dict()
                for node in CollectionTools.union_all(edge.node_set() for edge in self.__edges):
                    self.__nodes[node] = dict()

        if nodes != None:
            if do_deepcopy:
                self.__nodes = deepcopy(nodes)
            else:
                self.__nodes = nodes
            if edges == None:
                self.__edges = set()
示例#4
0
 def get_scc_merged_graph(self):
     result_graph = MutableAttributeGraph()
     for node in self.__base_graph.node_names_iter():
         if self.__scc_helper.get_scc_number_of_node(node) == None:
             result_graph.add_node(node)
             result_graph.set_node_attrs(node, self.__base_graph.node_attrs(node))
             result_graph.set_node_attrs(node, {NodeAttributes.LABEL: ""})
     for scc in self.__scc_helper.get_sccs_iter():
         node_name = self.get_scc_node_name(scc)
         result_graph.add_node(node_name)
         all_base_nodes = CollectionTools.union_all(self.__get_grouped_nodes(node) 
                                                    for node in scc)
         result_graph.set_node_attrs(node_name, {NodeAttributes.GROUPED_NODES: all_base_nodes, NodeAttributes.LABEL: ""})
         
     for edge in self.__base_graph.edges():
         source = self.get_node_name(edge.get_from_node())
         target = self.get_node_name(edge.get_to_node())
         if source != target:
             result_graph.add_edge(source, target)
     return result_graph
示例#5
0
    def dependent_nodes(graph, start_nodes):
        """
        >>> graph = GraphConversions.edge_list_to_pygraph([('a', 'b'), ('b', 'c'), ('a', 'c')])
        >>> sorted(GraphAlgorithms.dependent_nodes(graph, ['c']))
        ['a', 'b', 'c']
        """
        if isinstance(graph, BasicGraph):
            accessibility_matrix = GraphAlgorithms.accessibility_matrix_from_graph(
                graph, inverse=True)
        elif isinstance(graph, digraph):
            accessibility_matrix = accessibility(graph.reverse())
        else:
            raise TypeError("%s is not a known graph type", graph)
#        dependent_nodes = set()
#        for start_node in start_nodes:
#            if start_node in accessibility_matrix:
#                dependent_nodes.update(accessibility_matrix[start_node])
#        return dependent_nodes

# TODO ist das effizienter als
        return CollectionTools.union_all(accessibility_matrix[start_node]
                                         for start_node in start_nodes
                                         if start_node in accessibility_matrix)
示例#6
0
 def get_skip_module_types_as_source(self):
     return CollectionTools.union_all((PhysicalModuleTypeConstants.WRAPPER_MODULE_TYPES,
                                       PhysicalModuleTypeConstants.IRRELEVANT_MODULE_TYPES))
示例#7
0
 def get_skip_module_types_as_source(self):
     return CollectionTools.union_all((PhysicalModuleTypeConstants.IMPLEMENTATION_MODULE_TYPES,
                                       PhysicalModuleTypeConstants.INTERFACE_MODULE_TYPES,
                                       PhysicalModuleTypeConstants.IRRELEVANT_MODULE_TYPES))
示例#8
0
 def nodes_raw(self):
     if self.__nodes == None:
         self.__nodes = frozenset(CollectionTools.union_all(graph.nodes_raw()
                                                            for graph in self.__graphs))
     return self.__nodes
示例#9
0
 def connected_nodes(self):
     return CollectionTools.union_all(edge.node_set() for edge in self._edges())
 def node_group_prefixes(self):
     return CollectionTools.union_all(
         (BaseSuffixModuleGrouper.node_group_prefixes(self),
          set(self.defined_module_group_suffixes.values())))