test_communicability.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. from collections import defaultdict
  2. import pytest
  3. pytest.importorskip("numpy")
  4. pytest.importorskip("scipy")
  5. import networkx as nx
  6. from networkx.algorithms.communicability_alg import communicability, communicability_exp
  7. class TestCommunicability:
  8. def test_communicability(self):
  9. answer = {
  10. 0: {0: 1.5430806348152435, 1: 1.1752011936438012},
  11. 1: {0: 1.1752011936438012, 1: 1.5430806348152435},
  12. }
  13. # answer={(0, 0): 1.5430806348152435,
  14. # (0, 1): 1.1752011936438012,
  15. # (1, 0): 1.1752011936438012,
  16. # (1, 1): 1.5430806348152435}
  17. result = communicability(nx.path_graph(2))
  18. for k1, val in result.items():
  19. for k2 in val:
  20. assert answer[k1][k2] == pytest.approx(result[k1][k2], abs=1e-7)
  21. def test_communicability2(self):
  22. answer_orig = {
  23. ("1", "1"): 1.6445956054135658,
  24. ("1", "Albert"): 0.7430186221096251,
  25. ("1", "Aric"): 0.7430186221096251,
  26. ("1", "Dan"): 1.6208126320442937,
  27. ("1", "Franck"): 0.42639707170035257,
  28. ("Albert", "1"): 0.7430186221096251,
  29. ("Albert", "Albert"): 2.4368257358712189,
  30. ("Albert", "Aric"): 1.4368257358712191,
  31. ("Albert", "Dan"): 2.0472097037446453,
  32. ("Albert", "Franck"): 1.8340111678944691,
  33. ("Aric", "1"): 0.7430186221096251,
  34. ("Aric", "Albert"): 1.4368257358712191,
  35. ("Aric", "Aric"): 2.4368257358712193,
  36. ("Aric", "Dan"): 2.0472097037446457,
  37. ("Aric", "Franck"): 1.8340111678944691,
  38. ("Dan", "1"): 1.6208126320442937,
  39. ("Dan", "Albert"): 2.0472097037446453,
  40. ("Dan", "Aric"): 2.0472097037446457,
  41. ("Dan", "Dan"): 3.1306328496328168,
  42. ("Dan", "Franck"): 1.4860372442192515,
  43. ("Franck", "1"): 0.42639707170035257,
  44. ("Franck", "Albert"): 1.8340111678944691,
  45. ("Franck", "Aric"): 1.8340111678944691,
  46. ("Franck", "Dan"): 1.4860372442192515,
  47. ("Franck", "Franck"): 2.3876142275231915,
  48. }
  49. answer = defaultdict(dict)
  50. for (k1, k2), v in answer_orig.items():
  51. answer[k1][k2] = v
  52. G1 = nx.Graph(
  53. [
  54. ("Franck", "Aric"),
  55. ("Aric", "Dan"),
  56. ("Dan", "Albert"),
  57. ("Albert", "Franck"),
  58. ("Dan", "1"),
  59. ("Franck", "Albert"),
  60. ]
  61. )
  62. result = communicability(G1)
  63. for k1, val in result.items():
  64. for k2 in val:
  65. assert answer[k1][k2] == pytest.approx(result[k1][k2], abs=1e-7)
  66. result = communicability_exp(G1)
  67. for k1, val in result.items():
  68. for k2 in val:
  69. assert answer[k1][k2] == pytest.approx(result[k1][k2], abs=1e-7)