def remove_edges_from(self, ebunch): #TODO: check if this try/except consumes generator try: ebunch = unwrap_edges(ebunch) except AttributeError: pass # don't need to unwrap self._graph.remove_edges_from(ebunch)
def split(OverlayGraph, edges, retain = []): try: retain.lower() #TODO: find more efficient operation to test if string-like retain = [retain] # was a string, put into list except AttributeError: pass # already a list graph = unwrap_graph(OverlayGraph) edges = list(unwrap_edges(edges)) edges_to_add = [] added_nodes = [] for (src, dst) in edges: cd_id = "cd_%s_%s" % (src, dst) interfaces = graph[src][dst]["_interfaces"] data = dict( (key, graph[src][dst][key]) for key in retain) #TODO: check how this behaves for directed graphs src_data = data.copy() if src in interfaces: src_int_id = interfaces[src] src_data['_interfaces'] = {src: src_int_id} dst_data = data.copy() if dst in interfaces: dst_int_id = interfaces[dst] dst_data['_interfaces'] = {dst: dst_int_id} edges_to_add.append( (src, cd_id, src_data)) edges_to_add.append( (dst, cd_id, dst_data)) added_nodes.append(cd_id) graph.remove_edges_from(edges) graph.add_edges_from(edges_to_add) return wrap_nodes(OverlayGraph, added_nodes)
def split(NmGraph, edges, retain = [], id_prepend = ""): try: retain.lower() #TODO: find more efficient operation to test if string-like retain = [retain] # was a string, put into list except AttributeError: pass # already a list graph = unwrap_graph(NmGraph) edges = list(unwrap_edges(edges)) edges_to_add = [] added_nodes = [] for (src, dst) in edges: if graph.is_directed(): new_id = "%s%s_%s" % (id_prepend, src, dst) else: try: if float(src) < float(dst): (node_a, node_b) = (src, dst) # numeric ordering else: (node_a, node_b) = (dst, src) # numeric ordering except ValueError: # not numeric, use string sort (node_a, node_b) = sorted([src, dst]) # use sorted for consistency new_id = "%s%s_%s" % (id_prepend, node_a, node_b) interfaces = graph[src][dst]["_interfaces"] data = dict( (key, graph[src][dst][key]) for key in retain) #TODO: check how this behaves for directed graphs src_data = data.copy() if src in interfaces: src_int_id = interfaces[src] src_data['_interfaces'] = {src: src_int_id} dst_data = data.copy() if dst in interfaces: dst_int_id = interfaces[dst] dst_data['_interfaces'] = {dst: dst_int_id} edges_to_add.append( (src, new_id, src_data)) edges_to_add.append( (dst, new_id, dst_data)) added_nodes.append(new_id) graph.remove_edges_from(edges) graph.add_edges_from(edges_to_add) return wrap_nodes(NmGraph, added_nodes)
def split(OverlayGraph, edges, retain = [], id_prepend = ""): try: retain.lower() #TODO: find more efficient operation to test if string-like retain = [retain] # was a string, put into list except AttributeError: pass # already a list graph = unwrap_graph(OverlayGraph) edges = list(unwrap_edges(edges)) edges_to_add = [] added_nodes = [] for (src, dst) in edges: if graph.is_directed(): new_id = "%s%s_%s" % (id_prepend, src, dst) else: try: if float(src) < float(dst): (node_a, node_b) = (src, dst) # numeric ordering else: (node_a, node_b) = (dst, src) # numeric ordering except ValueError: # not numeric, use string sort (node_a, node_b) = sorted([src, dst]) # use sorted for consistency new_id = "%s%s_%s" % (id_prepend, node_a, node_b) interfaces = graph[src][dst]["_interfaces"] data = dict( (key, graph[src][dst][key]) for key in retain) #TODO: check how this behaves for directed graphs src_data = data.copy() if src in interfaces: src_int_id = interfaces[src] src_data['_interfaces'] = {src: src_int_id} dst_data = data.copy() if dst in interfaces: dst_int_id = interfaces[dst] dst_data['_interfaces'] = {dst: dst_int_id} edges_to_add.append( (src, new_id, src_data)) edges_to_add.append( (dst, new_id, dst_data)) added_nodes.append(new_id) graph.remove_edges_from(edges) graph.add_edges_from(edges_to_add) return wrap_nodes(OverlayGraph, added_nodes)
def split(overlay_graph, edges, retain = []): try: retain.lower() #TODO: find more efficient operation to test if string-like retain = [retain] # was a string, put into list except AttributeError: pass # already a list graph = unwrap_graph(overlay_graph) edges = list(unwrap_edges(edges)) edges_to_add = [] added_nodes = [] for (src, dst) in edges: cd_id = "cd_%s_%s" % (src, dst) data = dict( (key, graph[src][dst][key]) for key in retain) edges_to_add.append( (src, cd_id, data)) edges_to_add.append( (dst, cd_id, data)) added_nodes.append(cd_id) graph.remove_edges_from(edges) graph.add_edges_from(edges_to_add) return wrap_nodes(overlay_graph, added_nodes)
def split(overlay_graph, edges, retain=[]): try: retain.lower() retain = [retain] # was a string, put into list except AttributeError: pass # already a list graph = unwrap_graph(overlay_graph) edges = list(unwrap_edges(edges)) edges_to_add = [] added_nodes = [] for (src, dst) in edges: cd_id = "cd_%s_%s" % (src, dst) data = dict((key, graph[src][dst][key]) for key in retain) edges_to_add.append((src, cd_id, data)) edges_to_add.append((dst, cd_id, data)) added_nodes.append(cd_id) graph.remove_edges_from(edges) graph.add_edges_from(edges_to_add) return wrap_nodes(overlay_graph, added_nodes)