from collections import defaultdict import pytest pytest.importorskip("numpy") pytest.importorskip("scipy") import networkx as nx from networkx.algorithms.communicability_alg import communicability, communicability_exp class TestCommunicability: def test_communicability(self): answer = { 0: {0: 1.5430806348152435, 1: 1.1752011936438012}, 1: {0: 1.1752011936438012, 1: 1.5430806348152435}, } # answer={(0, 0): 1.5430806348152435, # (0, 1): 1.1752011936438012, # (1, 0): 1.1752011936438012, # (1, 1): 1.5430806348152435} result = communicability(nx.path_graph(2)) for k1, val in result.items(): for k2 in val: assert answer[k1][k2] == pytest.approx(result[k1][k2], abs=1e-7) def test_communicability2(self): answer_orig = { ("1", "1"): 1.6445956054135658, ("1", "Albert"): 0.7430186221096251, ("1", "Aric"): 0.7430186221096251, ("1", "Dan"): 1.6208126320442937, ("1", "Franck"): 0.42639707170035257, ("Albert", "1"): 0.7430186221096251, ("Albert", "Albert"): 2.4368257358712189, ("Albert", "Aric"): 1.4368257358712191, ("Albert", "Dan"): 2.0472097037446453, ("Albert", "Franck"): 1.8340111678944691, ("Aric", "1"): 0.7430186221096251, ("Aric", "Albert"): 1.4368257358712191, ("Aric", "Aric"): 2.4368257358712193, ("Aric", "Dan"): 2.0472097037446457, ("Aric", "Franck"): 1.8340111678944691, ("Dan", "1"): 1.6208126320442937, ("Dan", "Albert"): 2.0472097037446453, ("Dan", "Aric"): 2.0472097037446457, ("Dan", "Dan"): 3.1306328496328168, ("Dan", "Franck"): 1.4860372442192515, ("Franck", "1"): 0.42639707170035257, ("Franck", "Albert"): 1.8340111678944691, ("Franck", "Aric"): 1.8340111678944691, ("Franck", "Dan"): 1.4860372442192515, ("Franck", "Franck"): 2.3876142275231915, } answer = defaultdict(dict) for (k1, k2), v in answer_orig.items(): answer[k1][k2] = v G1 = nx.Graph( [ ("Franck", "Aric"), ("Aric", "Dan"), ("Dan", "Albert"), ("Albert", "Franck"), ("Dan", "1"), ("Franck", "Albert"), ] ) result = communicability(G1) for k1, val in result.items(): for k2 in val: assert answer[k1][k2] == pytest.approx(result[k1][k2], abs=1e-7) result = communicability_exp(G1) for k1, val in result.items(): for k2 in val: assert answer[k1][k2] == pytest.approx(result[k1][k2], abs=1e-7)