test_small.py 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. import pytest
  2. import networkx as nx
  3. from networkx.algorithms.isomorphism.isomorph import graph_could_be_isomorphic
  4. is_isomorphic = graph_could_be_isomorphic
  5. """Generators - Small
  6. =====================
  7. Some small graphs
  8. """
  9. null = nx.null_graph()
  10. class TestGeneratorsSmall:
  11. def test__LCF_graph(self):
  12. # If n<=0, then return the null_graph
  13. G = nx.LCF_graph(-10, [1, 2], 100)
  14. assert is_isomorphic(G, null)
  15. G = nx.LCF_graph(0, [1, 2], 3)
  16. assert is_isomorphic(G, null)
  17. G = nx.LCF_graph(0, [1, 2], 10)
  18. assert is_isomorphic(G, null)
  19. # Test that LCF(n,[],0) == cycle_graph(n)
  20. for a, b, c in [(5, [], 0), (10, [], 0), (5, [], 1), (10, [], 10)]:
  21. G = nx.LCF_graph(a, b, c)
  22. assert is_isomorphic(G, nx.cycle_graph(a))
  23. # Generate the utility graph K_{3,3}
  24. G = nx.LCF_graph(6, [3, -3], 3)
  25. utility_graph = nx.complete_bipartite_graph(3, 3)
  26. assert is_isomorphic(G, utility_graph)
  27. def test_properties_named_small_graphs(self):
  28. G = nx.bull_graph()
  29. assert sorted(G) == list(range(5))
  30. assert G.number_of_edges() == 5
  31. assert sorted(d for n, d in G.degree()) == [1, 1, 2, 3, 3]
  32. assert nx.diameter(G) == 3
  33. assert nx.radius(G) == 2
  34. G = nx.chvatal_graph()
  35. assert sorted(G) == list(range(12))
  36. assert G.number_of_edges() == 24
  37. assert [d for n, d in G.degree()] == 12 * [4]
  38. assert nx.diameter(G) == 2
  39. assert nx.radius(G) == 2
  40. G = nx.cubical_graph()
  41. assert sorted(G) == list(range(8))
  42. assert G.number_of_edges() == 12
  43. assert [d for n, d in G.degree()] == 8 * [3]
  44. assert nx.diameter(G) == 3
  45. assert nx.radius(G) == 3
  46. G = nx.desargues_graph()
  47. assert sorted(G) == list(range(20))
  48. assert G.number_of_edges() == 30
  49. assert [d for n, d in G.degree()] == 20 * [3]
  50. G = nx.diamond_graph()
  51. assert sorted(G) == list(range(4))
  52. assert sorted(d for n, d in G.degree()) == [2, 2, 3, 3]
  53. assert nx.diameter(G) == 2
  54. assert nx.radius(G) == 1
  55. G = nx.dodecahedral_graph()
  56. assert sorted(G) == list(range(20))
  57. assert G.number_of_edges() == 30
  58. assert [d for n, d in G.degree()] == 20 * [3]
  59. assert nx.diameter(G) == 5
  60. assert nx.radius(G) == 5
  61. G = nx.frucht_graph()
  62. assert sorted(G) == list(range(12))
  63. assert G.number_of_edges() == 18
  64. assert [d for n, d in G.degree()] == 12 * [3]
  65. assert nx.diameter(G) == 4
  66. assert nx.radius(G) == 3
  67. G = nx.heawood_graph()
  68. assert sorted(G) == list(range(14))
  69. assert G.number_of_edges() == 21
  70. assert [d for n, d in G.degree()] == 14 * [3]
  71. assert nx.diameter(G) == 3
  72. assert nx.radius(G) == 3
  73. G = nx.hoffman_singleton_graph()
  74. assert sorted(G) == list(range(50))
  75. assert G.number_of_edges() == 175
  76. assert [d for n, d in G.degree()] == 50 * [7]
  77. assert nx.diameter(G) == 2
  78. assert nx.radius(G) == 2
  79. G = nx.house_graph()
  80. assert sorted(G) == list(range(5))
  81. assert G.number_of_edges() == 6
  82. assert sorted(d for n, d in G.degree()) == [2, 2, 2, 3, 3]
  83. assert nx.diameter(G) == 2
  84. assert nx.radius(G) == 2
  85. G = nx.house_x_graph()
  86. assert sorted(G) == list(range(5))
  87. assert G.number_of_edges() == 8
  88. assert sorted(d for n, d in G.degree()) == [2, 3, 3, 4, 4]
  89. assert nx.diameter(G) == 2
  90. assert nx.radius(G) == 1
  91. G = nx.icosahedral_graph()
  92. assert sorted(G) == list(range(12))
  93. assert G.number_of_edges() == 30
  94. assert [d for n, d in G.degree()] == [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
  95. assert nx.diameter(G) == 3
  96. assert nx.radius(G) == 3
  97. G = nx.krackhardt_kite_graph()
  98. assert sorted(G) == list(range(10))
  99. assert G.number_of_edges() == 18
  100. assert sorted(d for n, d in G.degree()) == [1, 2, 3, 3, 3, 4, 4, 5, 5, 6]
  101. G = nx.moebius_kantor_graph()
  102. assert sorted(G) == list(range(16))
  103. assert G.number_of_edges() == 24
  104. assert [d for n, d in G.degree()] == 16 * [3]
  105. assert nx.diameter(G) == 4
  106. G = nx.octahedral_graph()
  107. assert sorted(G) == list(range(6))
  108. assert G.number_of_edges() == 12
  109. assert [d for n, d in G.degree()] == 6 * [4]
  110. assert nx.diameter(G) == 2
  111. assert nx.radius(G) == 2
  112. G = nx.pappus_graph()
  113. assert sorted(G) == list(range(18))
  114. assert G.number_of_edges() == 27
  115. assert [d for n, d in G.degree()] == 18 * [3]
  116. assert nx.diameter(G) == 4
  117. G = nx.petersen_graph()
  118. assert sorted(G) == list(range(10))
  119. assert G.number_of_edges() == 15
  120. assert [d for n, d in G.degree()] == 10 * [3]
  121. assert nx.diameter(G) == 2
  122. assert nx.radius(G) == 2
  123. G = nx.sedgewick_maze_graph()
  124. assert sorted(G) == list(range(8))
  125. assert G.number_of_edges() == 10
  126. assert sorted(d for n, d in G.degree()) == [1, 2, 2, 2, 3, 3, 3, 4]
  127. G = nx.tetrahedral_graph()
  128. assert sorted(G) == list(range(4))
  129. assert G.number_of_edges() == 6
  130. assert [d for n, d in G.degree()] == [3, 3, 3, 3]
  131. assert nx.diameter(G) == 1
  132. assert nx.radius(G) == 1
  133. G = nx.truncated_cube_graph()
  134. assert sorted(G) == list(range(24))
  135. assert G.number_of_edges() == 36
  136. assert [d for n, d in G.degree()] == 24 * [3]
  137. G = nx.truncated_tetrahedron_graph()
  138. assert sorted(G) == list(range(12))
  139. assert G.number_of_edges() == 18
  140. assert [d for n, d in G.degree()] == 12 * [3]
  141. G = nx.tutte_graph()
  142. assert sorted(G) == list(range(46))
  143. assert G.number_of_edges() == 69
  144. assert [d for n, d in G.degree()] == 46 * [3]
  145. # Test create_using with directed or multigraphs on small graphs
  146. pytest.raises(nx.NetworkXError, nx.tutte_graph, create_using=nx.DiGraph)
  147. MG = nx.tutte_graph(create_using=nx.MultiGraph)
  148. assert sorted(MG.edges()) == sorted(G.edges())
  149. @pytest.mark.parametrize(
  150. "fn",
  151. (
  152. nx.bull_graph,
  153. nx.chvatal_graph,
  154. nx.cubical_graph,
  155. nx.diamond_graph,
  156. nx.house_graph,
  157. nx.house_x_graph,
  158. nx.icosahedral_graph,
  159. nx.krackhardt_kite_graph,
  160. nx.octahedral_graph,
  161. nx.petersen_graph,
  162. nx.truncated_cube_graph,
  163. nx.tutte_graph,
  164. ),
  165. )
  166. @pytest.mark.parametrize(
  167. "create_using", (nx.DiGraph, nx.MultiDiGraph, nx.DiGraph([(0, 1)]))
  168. )
  169. def tests_raises_with_directed_create_using(fn, create_using):
  170. with pytest.raises(nx.NetworkXError, match="Directed Graph not supported"):
  171. fn(create_using=create_using)