import pytest pytest.importorskip("numpy") pytest.importorskip("scipy") import networkx as nx from networkx.algorithms.centrality.subgraph_alg import ( estrada_index, communicability_betweenness_centrality, subgraph_centrality, subgraph_centrality_exp, ) class TestSubgraph: def test_subgraph_centrality(self): answer = {0: 1.5430806348152433, 1: 1.5430806348152433} result = subgraph_centrality(nx.path_graph(2)) for k, v in result.items(): assert answer[k] == pytest.approx(result[k], abs=1e-7) answer1 = { "1": 1.6445956054135658, "Albert": 2.4368257358712189, "Aric": 2.4368257358712193, "Dan": 3.1306328496328168, "Franck": 2.3876142275231915, } G1 = nx.Graph( [ ("Franck", "Aric"), ("Aric", "Dan"), ("Dan", "Albert"), ("Albert", "Franck"), ("Dan", "1"), ("Franck", "Albert"), ] ) result1 = subgraph_centrality(G1) for k, v in result1.items(): assert answer1[k] == pytest.approx(result1[k], abs=1e-7) result1 = subgraph_centrality_exp(G1) for k, v in result1.items(): assert answer1[k] == pytest.approx(result1[k], abs=1e-7) def test_subgraph_centrality_big_graph(self): g199 = nx.complete_graph(199) g200 = nx.complete_graph(200) comm199 = nx.subgraph_centrality(g199) comm199_exp = nx.subgraph_centrality_exp(g199) comm200 = nx.subgraph_centrality(g200) comm200_exp = nx.subgraph_centrality_exp(g200) def test_communicability_betweenness_centrality_small(self): result = communicability_betweenness_centrality(nx.path_graph(2)) assert result == {0: 0, 1: 0} result = communicability_betweenness_centrality(nx.path_graph(1)) assert result == {0: 0} result = communicability_betweenness_centrality(nx.path_graph(0)) assert result == {} answer = {0: 0.1411224421177313, 1: 1.0, 2: 0.1411224421177313} result = communicability_betweenness_centrality(nx.path_graph(3)) for k, v in result.items(): assert answer[k] == pytest.approx(result[k], abs=1e-7) result = communicability_betweenness_centrality(nx.complete_graph(3)) for k, v in result.items(): assert 0.49786143366223296 == pytest.approx(result[k], abs=1e-7) def test_communicability_betweenness_centrality(self): answer = { 0: 0.07017447951484615, 1: 0.71565598701107991, 2: 0.71565598701107991, 3: 0.07017447951484615, } result = communicability_betweenness_centrality(nx.path_graph(4)) for k, v in result.items(): assert answer[k] == pytest.approx(result[k], abs=1e-7) answer1 = { "1": 0.060039074193949521, "Albert": 0.315470761661372, "Aric": 0.31547076166137211, "Dan": 0.68297778678316201, "Franck": 0.21977926617449497, } G1 = nx.Graph( [ ("Franck", "Aric"), ("Aric", "Dan"), ("Dan", "Albert"), ("Albert", "Franck"), ("Dan", "1"), ("Franck", "Albert"), ] ) result1 = communicability_betweenness_centrality(G1) for k, v in result1.items(): assert answer1[k] == pytest.approx(result1[k], abs=1e-7) def test_estrada_index(self): answer = 1041.2470334195475 result = estrada_index(nx.karate_club_graph()) assert answer == pytest.approx(result, abs=1e-7)