Returns a copy of the graph G with the nodes relabeled using consecutive integers. Parameters ---------- G : graph A easygraph graph first_label : int, optional (default=0) An integer specifying the starting offset in numbering nodes. The new integer labels
(
G, first_label=0, ordering="default", label_attribute=None
)
| 46 | |
| 47 | |
| 48 | def convert_node_labels_to_integers( |
| 49 | G, first_label=0, ordering="default", label_attribute=None |
| 50 | ): |
| 51 | """Returns a copy of the graph G with the nodes relabeled using |
| 52 | consecutive integers. |
| 53 | |
| 54 | Parameters |
| 55 | ---------- |
| 56 | G : graph |
| 57 | A easygraph graph |
| 58 | |
| 59 | first_label : int, optional (default=0) |
| 60 | An integer specifying the starting offset in numbering nodes. |
| 61 | The new integer labels are numbered first_label, ..., n-1+first_label. |
| 62 | |
| 63 | ordering : string |
| 64 | "default" : inherit node ordering from G.nodes |
| 65 | "sorted" : inherit node ordering from sorted(G.nodes) |
| 66 | "increasing degree" : nodes are sorted by increasing degree |
| 67 | "decreasing degree" : nodes are sorted by decreasing degree |
| 68 | |
| 69 | label_attribute : string, optional (default=None) |
| 70 | Name of node attribute to store old label. If None no attribute |
| 71 | is created. |
| 72 | |
| 73 | Notes |
| 74 | ----- |
| 75 | Node and edge attribute data are copied to the new (relabeled) graph. |
| 76 | |
| 77 | There is no guarantee that the relabeling of nodes to integers will |
| 78 | give the same two integers for two (even identical graphs). |
| 79 | Use the `ordering` argument to try to preserve the order. |
| 80 | |
| 81 | See Also |
| 82 | -------- |
| 83 | relabel_nodes |
| 84 | """ |
| 85 | N = G.number_of_nodes() + first_label |
| 86 | if ordering == "default": |
| 87 | mapping = dict(zip(G.nodes, range(first_label, N))) |
| 88 | elif ordering == "sorted": |
| 89 | nlist = sorted(G.nodes) |
| 90 | mapping = dict(zip(nlist, range(first_label, N))) |
| 91 | elif ordering == "increasing degree": |
| 92 | dv_pairs = [(d, n) for (n, d) in G.degree()] |
| 93 | dv_pairs.sort() # in-place sort from lowest to highest degree |
| 94 | mapping = dict(zip([n for d, n in dv_pairs], range(first_label, N))) |
| 95 | elif ordering == "decreasing degree": |
| 96 | dv_pairs = [(d, n) for (n, d) in G.degree()] |
| 97 | dv_pairs.sort() # in-place sort from lowest to highest degree |
| 98 | dv_pairs.reverse() |
| 99 | mapping = dict(zip([n for d, n in dv_pairs], range(first_label, N))) |
| 100 | else: |
| 101 | raise eg.EasyGraphError(f"Unknown node ordering: {ordering}") |
| 102 | H = relabel_nodes(G, mapping) |
| 103 | # create node attribute with the old label |
| 104 | if label_attribute is not None: |
| 105 | eg.set_node_attributes(H, {v: k for k, v in mapping.items()}, label_attribute) |
nothing calls this directly
no test coverage detected