|
|
import pytest |
|
|
|
|
|
import networkx as nx |
|
|
|
|
|
|
|
|
def test_directed_edge_swap(): |
|
|
graph = nx.path_graph(200, create_using=nx.DiGraph) |
|
|
in_degrees = sorted((n, d) for n, d in graph.in_degree()) |
|
|
out_degrees = sorted((n, d) for n, d in graph.out_degree()) |
|
|
G = nx.directed_edge_swap(graph, nswap=40, max_tries=500, seed=1) |
|
|
assert in_degrees == sorted((n, d) for n, d in G.in_degree()) |
|
|
assert out_degrees == sorted((n, d) for n, d in G.out_degree()) |
|
|
|
|
|
|
|
|
def test_edge_cases_directed_edge_swap(): |
|
|
|
|
|
|
|
|
e = ( |
|
|
"Maximum number of swap attempts \\(11\\) exceeded " |
|
|
"before desired swaps achieved \\(\\d\\)." |
|
|
) |
|
|
graph = nx.DiGraph([(0, 0), (0, 1), (1, 0), (2, 3), (3, 2)]) |
|
|
with pytest.raises(nx.NetworkXAlgorithmError, match=e): |
|
|
nx.directed_edge_swap(graph, nswap=1, max_tries=10, seed=1) |
|
|
|
|
|
|
|
|
def test_double_edge_swap(): |
|
|
graph = nx.barabasi_albert_graph(200, 1) |
|
|
degrees = sorted(d for n, d in graph.degree()) |
|
|
G = nx.double_edge_swap(graph, 40) |
|
|
assert degrees == sorted(d for n, d in graph.degree()) |
|
|
|
|
|
|
|
|
def test_double_edge_swap_seed(): |
|
|
graph = nx.barabasi_albert_graph(200, 1) |
|
|
degrees = sorted(d for n, d in graph.degree()) |
|
|
G = nx.double_edge_swap(graph, 40, seed=1) |
|
|
assert degrees == sorted(d for n, d in graph.degree()) |
|
|
|
|
|
|
|
|
def test_connected_double_edge_swap(): |
|
|
graph = nx.barabasi_albert_graph(200, 1) |
|
|
degrees = sorted(d for n, d in graph.degree()) |
|
|
G = nx.connected_double_edge_swap(graph, 40, seed=1) |
|
|
assert nx.is_connected(graph) |
|
|
assert degrees == sorted(d for n, d in graph.degree()) |
|
|
|
|
|
|
|
|
def test_connected_double_edge_swap_low_window_threshold(): |
|
|
graph = nx.barabasi_albert_graph(200, 1) |
|
|
degrees = sorted(d for n, d in graph.degree()) |
|
|
G = nx.connected_double_edge_swap(graph, 40, _window_threshold=0, seed=1) |
|
|
assert nx.is_connected(graph) |
|
|
assert degrees == sorted(d for n, d in graph.degree()) |
|
|
|
|
|
|
|
|
def test_connected_double_edge_swap_star(): |
|
|
|
|
|
graph = nx.star_graph(40) |
|
|
degrees = sorted(d for n, d in graph.degree()) |
|
|
G = nx.connected_double_edge_swap(graph, 1, seed=4) |
|
|
assert nx.is_connected(graph) |
|
|
assert degrees == sorted(d for n, d in graph.degree()) |
|
|
|
|
|
|
|
|
def test_connected_double_edge_swap_star_low_window_threshold(): |
|
|
|
|
|
graph = nx.star_graph(40) |
|
|
degrees = sorted(d for n, d in graph.degree()) |
|
|
G = nx.connected_double_edge_swap(graph, 1, _window_threshold=0, seed=4) |
|
|
assert nx.is_connected(graph) |
|
|
assert degrees == sorted(d for n, d in graph.degree()) |
|
|
|
|
|
|
|
|
def test_directed_edge_swap_small(): |
|
|
with pytest.raises(nx.NetworkXError): |
|
|
G = nx.directed_edge_swap(nx.path_graph(3, create_using=nx.DiGraph)) |
|
|
|
|
|
|
|
|
def test_directed_edge_swap_tries(): |
|
|
with pytest.raises(nx.NetworkXError): |
|
|
G = nx.directed_edge_swap( |
|
|
nx.path_graph(3, create_using=nx.DiGraph), nswap=1, max_tries=0 |
|
|
) |
|
|
|
|
|
|
|
|
def test_directed_exception_undirected(): |
|
|
graph = nx.Graph([(0, 1), (2, 3)]) |
|
|
with pytest.raises(nx.NetworkXNotImplemented): |
|
|
G = nx.directed_edge_swap(graph) |
|
|
|
|
|
|
|
|
def test_directed_edge_max_tries(): |
|
|
with pytest.raises(nx.NetworkXAlgorithmError): |
|
|
G = nx.directed_edge_swap( |
|
|
nx.complete_graph(4, nx.DiGraph()), nswap=1, max_tries=5 |
|
|
) |
|
|
|
|
|
|
|
|
def test_double_edge_swap_small(): |
|
|
with pytest.raises(nx.NetworkXError): |
|
|
G = nx.double_edge_swap(nx.path_graph(3)) |
|
|
|
|
|
|
|
|
def test_double_edge_swap_tries(): |
|
|
with pytest.raises(nx.NetworkXError): |
|
|
G = nx.double_edge_swap(nx.path_graph(10), nswap=1, max_tries=0) |
|
|
|
|
|
|
|
|
def test_double_edge_directed(): |
|
|
graph = nx.DiGraph([(0, 1), (2, 3)]) |
|
|
with pytest.raises(nx.NetworkXError, match="not defined for directed graphs."): |
|
|
G = nx.double_edge_swap(graph) |
|
|
|
|
|
|
|
|
def test_double_edge_max_tries(): |
|
|
with pytest.raises(nx.NetworkXAlgorithmError): |
|
|
G = nx.double_edge_swap(nx.complete_graph(4), nswap=1, max_tries=5) |
|
|
|
|
|
|
|
|
def test_connected_double_edge_swap_small(): |
|
|
with pytest.raises(nx.NetworkXError): |
|
|
G = nx.connected_double_edge_swap(nx.path_graph(3)) |
|
|
|
|
|
|
|
|
def test_connected_double_edge_swap_not_connected(): |
|
|
with pytest.raises(nx.NetworkXError): |
|
|
G = nx.path_graph(3) |
|
|
nx.add_path(G, [10, 11, 12]) |
|
|
G = nx.connected_double_edge_swap(G) |
|
|
|
|
|
|
|
|
def test_degree_seq_c4(): |
|
|
G = nx.cycle_graph(4) |
|
|
degrees = sorted(d for n, d in G.degree()) |
|
|
G = nx.double_edge_swap(G, 1, 100) |
|
|
assert degrees == sorted(d for n, d in G.degree()) |
|
|
|
|
|
|
|
|
def test_fewer_than_4_nodes(): |
|
|
G = nx.DiGraph() |
|
|
G.add_nodes_from([0, 1, 2]) |
|
|
with pytest.raises(nx.NetworkXError, match=".*fewer than four nodes."): |
|
|
nx.directed_edge_swap(G) |
|
|
|
|
|
|
|
|
def test_less_than_3_edges(): |
|
|
G = nx.DiGraph([(0, 1), (1, 2)]) |
|
|
G.add_nodes_from([3, 4]) |
|
|
with pytest.raises(nx.NetworkXError, match=".*fewer than 3 edges"): |
|
|
nx.directed_edge_swap(G) |
|
|
|
|
|
G = nx.Graph() |
|
|
G.add_nodes_from([0, 1, 2, 3]) |
|
|
with pytest.raises(nx.NetworkXError, match=".*fewer than 2 edges"): |
|
|
nx.double_edge_swap(G) |
|
|
|