import networkx as nx import pytest def test_random_partition_graph(): G = nx.random_partition_graph([3, 3, 3], 1, 0, seed=42) C = G.graph['partition'] assert C == [set([0, 1, 2]), set([3, 4, 5]), set([6, 7, 8])] assert len(G) == 9 assert len(list(G.edges())) == 9 G = nx.random_partition_graph([3, 3, 3], 0, 1) C = G.graph['partition'] assert C == [set([0, 1, 2]), set([3, 4, 5]), set([6, 7, 8])] assert len(G) == 9 assert len(list(G.edges())) == 27 G = nx.random_partition_graph([3, 3, 3], 1, 0, directed=True) C = G.graph['partition'] assert C == [set([0, 1, 2]), set([3, 4, 5]), set([6, 7, 8])] assert len(G) == 9 assert len(list(G.edges())) == 18 G = nx.random_partition_graph([3, 3, 3], 0, 1, directed=True) C = G.graph['partition'] assert C == [set([0, 1, 2]), set([3, 4, 5]), set([6, 7, 8])] assert len(G) == 9 assert len(list(G.edges())) == 54 G = nx.random_partition_graph([1, 2, 3, 4, 5], 0.5, 0.1) C = G.graph['partition'] assert C == [set([0]), set([1, 2]), set([3, 4, 5]), set([6, 7, 8, 9]), set([10, 11, 12, 13, 14])] assert len(G) == 15 rpg = nx.random_partition_graph pytest.raises(nx.NetworkXError, rpg, [1, 2, 3], 1.1, 0.1) pytest.raises(nx.NetworkXError, rpg, [1, 2, 3], -0.1, 0.1) pytest.raises(nx.NetworkXError, rpg, [1, 2, 3], 0.1, 1.1) pytest.raises(nx.NetworkXError, rpg, [1, 2, 3], 0.1, -0.1) def test_planted_partition_graph(): G = nx.planted_partition_graph(4, 3, 1, 0, seed=42) C = G.graph['partition'] assert len(C) == 4 assert len(G) == 12 assert len(list(G.edges())) == 12 G = nx.planted_partition_graph(4, 3, 0, 1) C = G.graph['partition'] assert len(C) == 4 assert len(G) == 12 assert len(list(G.edges())) == 54 G = nx.planted_partition_graph(10, 4, .5, .1, seed=42) C = G.graph['partition'] assert len(C) == 10 assert len(G) == 40 G = nx.planted_partition_graph(4, 3, 1, 0, directed=True) C = G.graph['partition'] assert len(C) == 4 assert len(G) == 12 assert len(list(G.edges())) == 24 G = nx.planted_partition_graph(4, 3, 0, 1, directed=True) C = G.graph['partition'] assert len(C) == 4 assert len(G) == 12 assert len(list(G.edges())) == 108 G = nx.planted_partition_graph(10, 4, .5, .1, seed=42, directed=True) C = G.graph['partition'] assert len(C) == 10 assert len(G) == 40 ppg = nx.planted_partition_graph pytest.raises(nx.NetworkXError, ppg, 3, 3, 1.1, 0.1) pytest.raises(nx.NetworkXError, ppg, 3, 3, -0.1, 0.1) pytest.raises(nx.NetworkXError, ppg, 3, 3, 0.1, 1.1) pytest.raises(nx.NetworkXError, ppg, 3, 3, 0.1, -0.1) def test_relaxed_caveman_graph(): G = nx.relaxed_caveman_graph(4, 3, 0) assert len(G) == 12 G = nx.relaxed_caveman_graph(4, 3, 1) assert len(G) == 12 G = nx.relaxed_caveman_graph(4, 3, 0.5) assert len(G) == 12 G = nx.relaxed_caveman_graph(4, 3, 0.5, seed=42) assert len(G) == 12 def test_connected_caveman_graph(): G = nx.connected_caveman_graph(4, 3) assert len(G) == 12 G = nx.connected_caveman_graph(1, 5) K5 = nx.complete_graph(5) K5.remove_edge(3, 4) assert nx.is_isomorphic(G, K5) def test_caveman_graph(): G = nx.caveman_graph(4, 3) assert len(G) == 12 G = nx.caveman_graph(1, 5) K5 = nx.complete_graph(5) assert nx.is_isomorphic(G, K5) def test_gaussian_random_partition_graph(): G = nx.gaussian_random_partition_graph(100, 10, 10, 0.3, 0.01) assert len(G) == 100 G = nx.gaussian_random_partition_graph(100, 10, 10, 0.3, 0.01, directed=True) assert len(G) == 100 G = nx.gaussian_random_partition_graph(100, 10, 10, 0.3, 0.01, directed=False, seed=42) assert len(G) == 100 G = nx.gaussian_random_partition_graph(100, 10, 10, 0.3, 0.01, directed=True, seed=42) assert len(G) == 100 pytest.raises(nx.NetworkXError, nx.gaussian_random_partition_graph, 100, 101, 10, 1, 0) def test_ring_of_cliques(): for i in range(2, 20, 3): for j in range(2, 20, 3): G = nx.ring_of_cliques(i, j) assert G.number_of_nodes() == i * j if i != 2 or j != 1: expected_num_edges = i * (((j * (j - 1)) // 2) + 1) else: # the edge that already exists cannot be duplicated expected_num_edges = i * (((j * (j - 1)) // 2) + 1) - 1 assert G.number_of_edges() == expected_num_edges pytest.raises(nx.NetworkXError, nx.ring_of_cliques, 1, 5) pytest.raises(nx.NetworkXError, nx.ring_of_cliques, 3, 0) def test_windmill_graph(): for n in range(2, 20, 3): for k in range(2, 20, 3): G = nx.windmill_graph(n, k) assert G.number_of_nodes() == (k - 1) * n + 1 assert G.number_of_edges() == n * k * (k - 1) / 2 assert G.degree(0) == G.number_of_nodes() - 1 for i in range(1, G.number_of_nodes()): assert G.degree(i) == k - 1 pytest.raises(nx.NetworkXError, nx.ring_of_cliques, 1, 3) pytest.raises(nx.NetworkXError, nx.ring_of_cliques, 15, 0) def test_stochastic_block_model(): sizes = [75, 75, 300] probs = [[0.25, 0.05, 0.02], [0.05, 0.35, 0.07], [0.02, 0.07, 0.40]] G = nx.stochastic_block_model(sizes, probs, seed=0) C = G.graph['partition'] assert len(C) == 3 assert len(G) == 450 assert G.size() == 22160 GG = nx.stochastic_block_model(sizes, probs, range(450), seed=0) assert G.nodes == GG.nodes # Test Exceptions sbm = nx.stochastic_block_model badnodelist = list(range(400)) # not enough nodes to match sizes badprobs1 = [[0.25, 0.05, 1.02], [0.05, 0.35, 0.07], [0.02, 0.07, 0.40]] badprobs2 = [[0.25, 0.05, 0.02], [0.05, -0.35, 0.07], [0.02, 0.07, 0.40]] probs_rect1 = [[0.25, 0.05, 0.02], [0.05, -0.35, 0.07]] probs_rect2 = [[0.25, 0.05], [0.05, -0.35], [0.02, 0.07]] asymprobs = [[0.25, 0.05, 0.01], [0.05, -0.35, 0.07], [0.02, 0.07, 0.40]] pytest.raises(nx.NetworkXException, sbm, sizes, badprobs1) pytest.raises(nx.NetworkXException, sbm, sizes, badprobs2) pytest.raises(nx.NetworkXException, sbm, sizes, probs_rect1, directed=True) pytest.raises(nx.NetworkXException, sbm, sizes, probs_rect2, directed=True) pytest.raises(nx.NetworkXException, sbm, sizes, asymprobs, directed=False) pytest.raises(nx.NetworkXException, sbm, sizes, probs, badnodelist) nodelist = [0] + list(range(449)) # repeated node name in nodelist pytest.raises(nx.NetworkXException, sbm, sizes, probs, nodelist) # Extra keyword arguments test GG = nx.stochastic_block_model(sizes, probs, seed=0, selfloops=True) assert G.nodes == GG.nodes GG = nx.stochastic_block_model(sizes, probs, selfloops=True, directed=True) assert G.nodes == GG.nodes GG = nx.stochastic_block_model(sizes, probs, seed=0, sparse=False) assert G.nodes == GG.nodes def test_generator(): n = 250 tau1 = 3 tau2 = 1.5 mu = 0.1 G = nx.LFR_benchmark_graph(n, tau1, tau2, mu, average_degree=5, min_community=20, seed=10) assert len(G) == 250 C = {frozenset(G.nodes[v]['community']) for v in G} assert nx.community.is_partition(G.nodes(), C) def test_invalid_tau1(): with pytest.raises(nx.NetworkXError): n = 100 tau1 = 2 tau2 = 1 mu = 0.1 nx.LFR_benchmark_graph(n, tau1, tau2, mu, min_degree=2) def test_invalid_tau2(): with pytest.raises(nx.NetworkXError): n = 100 tau1 = 1 tau2 = 2 mu = 0.1 nx.LFR_benchmark_graph(n, tau1, tau2, mu, min_degree=2) def test_mu_too_large(): with pytest.raises(nx.NetworkXError): n = 100 tau1 = 2 tau2 = 2 mu = 1.1 nx.LFR_benchmark_graph(n, tau1, tau2, mu, min_degree=2) def test_mu_too_small(): with pytest.raises(nx.NetworkXError): n = 100 tau1 = 2 tau2 = 2 mu = -1 nx.LFR_benchmark_graph(n, tau1, tau2, mu, min_degree=2) def test_both_degrees_none(): with pytest.raises(nx.NetworkXError): n = 100 tau1 = 2 tau2 = 2 mu = -1 nx.LFR_benchmark_graph(n, tau1, tau2, mu) def test_neither_degrees_none(): with pytest.raises(nx.NetworkXError): n = 100 tau1 = 2 tau2 = 2 mu = -1 nx.LFR_benchmark_graph(n, tau1, tau2, mu, min_degree=2, average_degree=5)