Coverage for src/abcd_graph/graph/core/abcd_objects/utils.py: 100%
27 statements
« prev ^ index » next coverage.py v7.5.3, created at 2024-11-16 15:48 +0100
« prev ^ index » next coverage.py v7.5.3, created at 2024-11-16 15:48 +0100
1import random
3from abcd_graph.graph.core.abcd_objects.edge import Edge
6def build_recycle_list(adj_matrix: dict["Edge", int]) -> list["Edge"]:
7 return [edge for edge in adj_matrix.keys() if adj_matrix[edge] > 1 or edge.is_loop]
10def choose_other_edge(adj_matrix: dict["Edge", int], edge: "Edge") -> "Edge":
11 edges = list(adj_matrix.keys())
12 other_edge = random.choice(edges)
13 while other_edge == edge:
14 other_edge = random.choice(edges)
16 return other_edge
19def rewire_edge(adj_matrix: dict["Edge", int], edge: "Edge", other_edge: "Edge") -> None:
20 if edge not in adj_matrix:
21 return
22 adj_matrix[edge] -= 1
24 if adj_matrix[edge] == 0:
25 del adj_matrix[edge]
27 adj_matrix[other_edge] -= 1
28 if adj_matrix[other_edge] == 0:
29 del adj_matrix[other_edge]
31 new_edge = Edge(edge.v1, other_edge.v1)
33 if new_edge in adj_matrix:
34 adj_matrix[new_edge] += 1
35 else:
36 adj_matrix[new_edge] = 1
38 new_edge = Edge(edge.v2, other_edge.v2)
40 if new_edge in adj_matrix:
41 adj_matrix[new_edge] += 1
42 else:
43 adj_matrix[new_edge] = 1