test_smallworld.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import pytest
  2. pytest.importorskip("numpy")
  3. import random
  4. import networkx as nx
  5. from networkx import lattice_reference, omega, random_reference, sigma
  6. rng = 42
  7. def test_random_reference():
  8. G = nx.connected_watts_strogatz_graph(50, 6, 0.1, seed=rng)
  9. Gr = random_reference(G, niter=1, seed=rng)
  10. C = nx.average_clustering(G)
  11. Cr = nx.average_clustering(Gr)
  12. assert C > Cr
  13. with pytest.raises(nx.NetworkXError):
  14. next(random_reference(nx.Graph()))
  15. with pytest.raises(nx.NetworkXNotImplemented):
  16. next(random_reference(nx.DiGraph()))
  17. H = nx.Graph(((0, 1), (2, 3)))
  18. Hl = random_reference(H, niter=1, seed=rng)
  19. def test_lattice_reference():
  20. G = nx.connected_watts_strogatz_graph(50, 6, 1, seed=rng)
  21. Gl = lattice_reference(G, niter=1, seed=rng)
  22. L = nx.average_shortest_path_length(G)
  23. Ll = nx.average_shortest_path_length(Gl)
  24. assert Ll > L
  25. pytest.raises(nx.NetworkXError, lattice_reference, nx.Graph())
  26. pytest.raises(nx.NetworkXNotImplemented, lattice_reference, nx.DiGraph())
  27. H = nx.Graph(((0, 1), (2, 3)))
  28. Hl = lattice_reference(H, niter=1)
  29. def test_sigma():
  30. Gs = nx.connected_watts_strogatz_graph(50, 6, 0.1, seed=rng)
  31. Gr = nx.connected_watts_strogatz_graph(50, 6, 1, seed=rng)
  32. sigmas = sigma(Gs, niter=1, nrand=2, seed=rng)
  33. sigmar = sigma(Gr, niter=1, nrand=2, seed=rng)
  34. assert sigmar < sigmas
  35. def test_omega():
  36. Gl = nx.connected_watts_strogatz_graph(50, 6, 0, seed=rng)
  37. Gr = nx.connected_watts_strogatz_graph(50, 6, 1, seed=rng)
  38. Gs = nx.connected_watts_strogatz_graph(50, 6, 0.1, seed=rng)
  39. omegal = omega(Gl, niter=1, nrand=1, seed=rng)
  40. omegar = omega(Gr, niter=1, nrand=1, seed=rng)
  41. omegas = omega(Gs, niter=1, nrand=1, seed=rng)
  42. assert omegal < omegas and omegas < omegar
  43. # Test that omega lies within the [-1, 1] bounds
  44. G_barbell = nx.barbell_graph(5, 1)
  45. G_karate = nx.karate_club_graph()
  46. omega_barbell = nx.omega(G_barbell)
  47. omega_karate = nx.omega(G_karate, nrand=2)
  48. omegas = (omegal, omegar, omegas, omega_barbell, omega_karate)
  49. for o in omegas:
  50. assert -1 <= o <= 1
  51. @pytest.mark.parametrize("f", (nx.random_reference, nx.lattice_reference))
  52. def test_graph_no_edges(f):
  53. G = nx.Graph()
  54. G.add_nodes_from([0, 1, 2, 3])
  55. with pytest.raises(nx.NetworkXError, match="Graph has fewer that 2 edges"):
  56. f(G)