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
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)))
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