Esempio n. 1
0
    def get_random_edges_by_vertices(self, edge_number, node_label=False, open_vertices=None):
        """
            Return n edges of randomly chosen vertices

            Parameters
            ----------
            open_vertices
            edge_number : integer
                The number of links that should be extracted and returned.

            node_label : string/integer, optional (default= no attributes)
               Holds the label of the generated edge.

            Returns
            -------
            el : list
                List that contains random edges.
        """
        if not open_vertices:
            open_vertices = []
        node_label = utils.to_iterable(node_label)
        for v_edge in self._edges:
            vertex = v_edge[0]
            if vertex in open_vertices and vertex not in self._closed_vertices:
                if self._graph.get_node_label(vertex) in node_label or False in node_label:
                    self._open_vertices.remove(vertex)
                    self._closed_vertices.add(vertex)
                    for edge in self._graph.get_vertex_edges(vertex, "out"):
                        yield edge
                        edge_number -= 1
                        if not edge_number:
                            break
                    if not edge_number:
                        break
Esempio n. 2
0
    def get_random_vertices_edges(self, vertices_number, node_label=False):
        """
            Return all edges of n randomly chosen vertices

            Parameters
            ----------
            vertices_number : integer
                The number of vertices that all their links that should be extracted and returned.

            node_label : string/integer, optional (default= no attributes)
               Holds the label of the generated edge.

            Returns
            -------
            el : list
                List that contains random edges.
        """
        node_label = utils.to_iterable(node_label)
        open_vertices = list(self._open_vertices)
        random.shuffle(open_vertices)
        for vertex in open_vertices:
            if self._graph.get_node_label(vertex) in node_label or False in node_label:
                edge_count, temp_edges = 0, []
                for edge in self._graph.get_vertex_edges(vertex, "out"):
                    if edge[1] in self._open_vertices:
                        temp_edges.append(edge)
                        edge_count += 1
                if edge_count > self._vertex_min_edge_number:
                    self._closed_vertices.add(vertex)
                    vertices_number -= 1
                    for edge in temp_edges:
                        yield edge
                if not vertices_number:
                    break
 def get_neighborhoods_subgraph_plus(self, vertices):
     vertices = utils.to_iterable(vertices)
     return self.get_subgraph(
         list(self.get_neighborhoods_plus_union(vertices)))
Esempio n. 4
0
 def transform_edge(self, edge, selection_label):
     if not self._graph.is_directed:
         selection_label = utils.to_iterable(selection_label)
         if self._graph.get_node_label(edge[0]) not in selection_label:
             return edge[1], edge[0]
     return edge