123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- 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():
- # Tests cases when swaps are impossible, either too few edges exist, or self loops/cycles are unavoidable
- # TODO: Rewrite function to explicitly check for impossible swaps and raise error
- 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():
- # Testing ui==xi in connected_double_edge_swap
- 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():
- # Testing ui==xi in connected_double_edge_swap with 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)
|