123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- import networkx as nx
- def test_modularity_increase():
- G = nx.LFR_benchmark_graph(
- 250, 3, 1.5, 0.009, average_degree=5, min_community=20, seed=10
- )
- partition = [{u} for u in G.nodes()]
- mod = nx.community.modularity(G, partition)
- partition = nx.community.louvain_communities(G)
- assert nx.community.modularity(G, partition) > mod
- def test_valid_partition():
- G = nx.LFR_benchmark_graph(
- 250, 3, 1.5, 0.009, average_degree=5, min_community=20, seed=10
- )
- H = G.to_directed()
- partition = nx.community.louvain_communities(G)
- partition2 = nx.community.louvain_communities(H)
- assert nx.community.is_partition(G, partition)
- assert nx.community.is_partition(H, partition2)
- def test_karate_club_partition():
- G = nx.karate_club_graph()
- part = [
- {0, 1, 2, 3, 7, 9, 11, 12, 13, 17, 19, 21},
- {16, 4, 5, 6, 10},
- {23, 25, 27, 28, 24, 31},
- {32, 33, 8, 14, 15, 18, 20, 22, 26, 29, 30},
- ]
- partition = nx.community.louvain_communities(G, seed=2, weight=None)
- assert part == partition
- def test_partition_iterator():
- G = nx.path_graph(15)
- parts_iter = nx.community.louvain_partitions(G, seed=42)
- first_part = next(parts_iter)
- first_copy = [s.copy() for s in first_part]
- # gh-5901 reports sets changing after next partition is yielded
- assert first_copy[0] == first_part[0]
- second_part = next(parts_iter)
- assert first_copy[0] == first_part[0]
- def test_directed_partition():
- """
- Test 2 cases that were looping infinitely
- from issues #5175 and #5704
- """
- G = nx.DiGraph()
- H = nx.DiGraph()
- G.add_nodes_from(range(10))
- H.add_nodes_from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
- G_edges = [
- (0, 2),
- (0, 1),
- (1, 0),
- (2, 1),
- (2, 0),
- (3, 4),
- (4, 3),
- (7, 8),
- (8, 7),
- (9, 10),
- (10, 9),
- ]
- H_edges = [
- (1, 2),
- (1, 6),
- (1, 9),
- (2, 3),
- (2, 4),
- (2, 5),
- (3, 4),
- (4, 3),
- (4, 5),
- (5, 4),
- (6, 7),
- (6, 8),
- (9, 10),
- (9, 11),
- (10, 11),
- (11, 10),
- ]
- G.add_edges_from(G_edges)
- H.add_edges_from(H_edges)
- G_expected_partition = [{0, 1, 2}, {3, 4}, {5}, {6}, {8, 7}, {9, 10}]
- G_partition = nx.community.louvain_communities(G, seed=123, weight=None)
- H_expected_partition = [{2, 3, 4, 5}, {8, 1, 6, 7}, {9, 10, 11}]
- H_partition = nx.community.louvain_communities(H, seed=123, weight=None)
- assert G_partition == G_expected_partition
- assert H_partition == H_expected_partition
- def test_none_weight_param():
- G = nx.karate_club_graph()
- nx.set_edge_attributes(
- G, {edge: i * i for i, edge in enumerate(G.edges)}, name="foo"
- )
- part = [
- {0, 1, 2, 3, 7, 9, 11, 12, 13, 17, 19, 21},
- {16, 4, 5, 6, 10},
- {23, 25, 27, 28, 24, 31},
- {32, 33, 8, 14, 15, 18, 20, 22, 26, 29, 30},
- ]
- partition1 = nx.community.louvain_communities(G, weight=None, seed=2)
- partition2 = nx.community.louvain_communities(G, weight="foo", seed=2)
- partition3 = nx.community.louvain_communities(G, weight="weight", seed=2)
- assert part == partition1
- assert part != partition2
- assert part != partition3
- assert partition2 != partition3
- def test_quality():
- G = nx.LFR_benchmark_graph(
- 250, 3, 1.5, 0.009, average_degree=5, min_community=20, seed=10
- )
- H = nx.gn_graph(200, seed=1234)
- I = nx.MultiGraph(G)
- J = nx.MultiDiGraph(H)
- partition = nx.community.louvain_communities(G)
- partition2 = nx.community.louvain_communities(H)
- partition3 = nx.community.louvain_communities(I)
- partition4 = nx.community.louvain_communities(J)
- quality = nx.community.partition_quality(G, partition)[0]
- quality2 = nx.community.partition_quality(H, partition2)[0]
- quality3 = nx.community.partition_quality(I, partition3)[0]
- quality4 = nx.community.partition_quality(J, partition4)[0]
- assert quality >= 0.65
- assert quality2 >= 0.65
- assert quality3 >= 0.65
- assert quality4 >= 0.65
- def test_multigraph():
- G = nx.karate_club_graph()
- H = nx.MultiGraph(G)
- G.add_edge(0, 1, weight=10)
- H.add_edge(0, 1, weight=9)
- G.add_edge(0, 9, foo=20)
- H.add_edge(0, 9, foo=20)
- partition1 = nx.community.louvain_communities(G, seed=1234)
- partition2 = nx.community.louvain_communities(H, seed=1234)
- partition3 = nx.community.louvain_communities(H, weight="foo", seed=1234)
- assert partition1 == partition2 != partition3
- def test_resolution():
- G = nx.LFR_benchmark_graph(
- 250, 3, 1.5, 0.009, average_degree=5, min_community=20, seed=10
- )
- partition1 = nx.community.louvain_communities(G, resolution=0.5, seed=12)
- partition2 = nx.community.louvain_communities(G, seed=12)
- partition3 = nx.community.louvain_communities(G, resolution=2, seed=12)
- assert len(partition1) <= len(partition2) <= len(partition3)
- def test_threshold():
- G = nx.LFR_benchmark_graph(
- 250, 3, 1.5, 0.009, average_degree=5, min_community=20, seed=10
- )
- partition1 = nx.community.louvain_communities(G, threshold=0.3, seed=2)
- partition2 = nx.community.louvain_communities(G, seed=2)
- mod1 = nx.community.modularity(G, partition1)
- mod2 = nx.community.modularity(G, partition2)
- assert mod1 < mod2
|