passagemath-graphs 10.6.1rc1__cp310-cp310-musllinux_1_2_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (260) hide show
  1. passagemath_graphs-10.6.1rc1.dist-info/METADATA +292 -0
  2. passagemath_graphs-10.6.1rc1.dist-info/RECORD +260 -0
  3. passagemath_graphs-10.6.1rc1.dist-info/WHEEL +5 -0
  4. passagemath_graphs-10.6.1rc1.dist-info/top_level.txt +2 -0
  5. passagemath_graphs.libs/libgcc_s-69c45f16.so.1 +0 -0
  6. passagemath_graphs.libs/libgmp-8e78bd9b.so.10.5.0 +0 -0
  7. passagemath_graphs.libs/libstdc++-1f1a71be.so.6.0.33 +0 -0
  8. sage/all__sagemath_graphs.py +39 -0
  9. sage/combinat/abstract_tree.py +2723 -0
  10. sage/combinat/all__sagemath_graphs.py +34 -0
  11. sage/combinat/binary_tree.py +5306 -0
  12. sage/combinat/cluster_algebra_quiver/all.py +22 -0
  13. sage/combinat/cluster_algebra_quiver/cluster_seed.py +5208 -0
  14. sage/combinat/cluster_algebra_quiver/interact.py +124 -0
  15. sage/combinat/cluster_algebra_quiver/mutation_class.py +625 -0
  16. sage/combinat/cluster_algebra_quiver/mutation_type.py +1555 -0
  17. sage/combinat/cluster_algebra_quiver/quiver.py +2290 -0
  18. sage/combinat/cluster_algebra_quiver/quiver_mutation_type.py +2468 -0
  19. sage/combinat/designs/MOLS_handbook_data.py +570 -0
  20. sage/combinat/designs/all.py +58 -0
  21. sage/combinat/designs/bibd.py +1655 -0
  22. sage/combinat/designs/block_design.py +1071 -0
  23. sage/combinat/designs/covering_array.py +269 -0
  24. sage/combinat/designs/covering_design.py +530 -0
  25. sage/combinat/designs/database.py +5615 -0
  26. sage/combinat/designs/design_catalog.py +122 -0
  27. sage/combinat/designs/designs_pyx.cpython-310-aarch64-linux-gnu.so +0 -0
  28. sage/combinat/designs/designs_pyx.pxd +21 -0
  29. sage/combinat/designs/designs_pyx.pyx +993 -0
  30. sage/combinat/designs/difference_family.py +3951 -0
  31. sage/combinat/designs/difference_matrices.py +279 -0
  32. sage/combinat/designs/evenly_distributed_sets.cpython-310-aarch64-linux-gnu.so +0 -0
  33. sage/combinat/designs/evenly_distributed_sets.pyx +661 -0
  34. sage/combinat/designs/ext_rep.py +1064 -0
  35. sage/combinat/designs/gen_quadrangles_with_spread.cpython-310-aarch64-linux-gnu.so +0 -0
  36. sage/combinat/designs/gen_quadrangles_with_spread.pyx +339 -0
  37. sage/combinat/designs/group_divisible_designs.py +361 -0
  38. sage/combinat/designs/incidence_structures.py +2357 -0
  39. sage/combinat/designs/latin_squares.py +581 -0
  40. sage/combinat/designs/orthogonal_arrays.py +2244 -0
  41. sage/combinat/designs/orthogonal_arrays_build_recursive.py +1780 -0
  42. sage/combinat/designs/orthogonal_arrays_find_recursive.cpython-310-aarch64-linux-gnu.so +0 -0
  43. sage/combinat/designs/orthogonal_arrays_find_recursive.pyx +967 -0
  44. sage/combinat/designs/resolvable_bibd.py +815 -0
  45. sage/combinat/designs/steiner_quadruple_systems.py +1306 -0
  46. sage/combinat/designs/subhypergraph_search.cpython-310-aarch64-linux-gnu.so +0 -0
  47. sage/combinat/designs/subhypergraph_search.pyx +530 -0
  48. sage/combinat/designs/twographs.py +306 -0
  49. sage/combinat/finite_state_machine.py +14874 -0
  50. sage/combinat/finite_state_machine_generators.py +2006 -0
  51. sage/combinat/graph_path.py +448 -0
  52. sage/combinat/interval_posets.py +3908 -0
  53. sage/combinat/nu_tamari_lattice.py +269 -0
  54. sage/combinat/ordered_tree.py +1446 -0
  55. sage/combinat/posets/all.py +46 -0
  56. sage/combinat/posets/bubble_shuffle.py +247 -0
  57. sage/combinat/posets/cartesian_product.py +493 -0
  58. sage/combinat/posets/d_complete.py +182 -0
  59. sage/combinat/posets/elements.py +273 -0
  60. sage/combinat/posets/forest.py +30 -0
  61. sage/combinat/posets/hasse_cython.cpython-310-aarch64-linux-gnu.so +0 -0
  62. sage/combinat/posets/hasse_cython.pyx +174 -0
  63. sage/combinat/posets/hasse_diagram.py +3672 -0
  64. sage/combinat/posets/hochschild_lattice.py +158 -0
  65. sage/combinat/posets/incidence_algebras.py +794 -0
  66. sage/combinat/posets/lattices.py +5117 -0
  67. sage/combinat/posets/linear_extension_iterator.cpython-310-aarch64-linux-gnu.so +0 -0
  68. sage/combinat/posets/linear_extension_iterator.pyx +292 -0
  69. sage/combinat/posets/linear_extensions.py +1037 -0
  70. sage/combinat/posets/mobile.py +275 -0
  71. sage/combinat/posets/moebius_algebra.py +776 -0
  72. sage/combinat/posets/poset_examples.py +2178 -0
  73. sage/combinat/posets/posets.py +9360 -0
  74. sage/combinat/rooted_tree.py +1070 -0
  75. sage/combinat/shard_order.py +239 -0
  76. sage/combinat/tamari_lattices.py +384 -0
  77. sage/combinat/yang_baxter_graph.py +923 -0
  78. sage/databases/all__sagemath_graphs.py +1 -0
  79. sage/databases/knotinfo_db.py +1231 -0
  80. sage/ext_data/all__sagemath_graphs.py +1 -0
  81. sage/ext_data/graphs/graph_plot_js.html +330 -0
  82. sage/ext_data/kenzo/CP2.txt +45 -0
  83. sage/ext_data/kenzo/CP3.txt +349 -0
  84. sage/ext_data/kenzo/CP4.txt +4774 -0
  85. sage/ext_data/kenzo/README.txt +49 -0
  86. sage/ext_data/kenzo/S4.txt +20 -0
  87. sage/graphs/all.py +42 -0
  88. sage/graphs/asteroidal_triples.cpython-310-aarch64-linux-gnu.so +0 -0
  89. sage/graphs/asteroidal_triples.pyx +320 -0
  90. sage/graphs/base/all.py +1 -0
  91. sage/graphs/base/boost_graph.cpython-310-aarch64-linux-gnu.so +0 -0
  92. sage/graphs/base/boost_graph.pxd +106 -0
  93. sage/graphs/base/boost_graph.pyx +3045 -0
  94. sage/graphs/base/c_graph.cpython-310-aarch64-linux-gnu.so +0 -0
  95. sage/graphs/base/c_graph.pxd +106 -0
  96. sage/graphs/base/c_graph.pyx +5096 -0
  97. sage/graphs/base/dense_graph.cpython-310-aarch64-linux-gnu.so +0 -0
  98. sage/graphs/base/dense_graph.pxd +28 -0
  99. sage/graphs/base/dense_graph.pyx +801 -0
  100. sage/graphs/base/graph_backends.cpython-310-aarch64-linux-gnu.so +0 -0
  101. sage/graphs/base/graph_backends.pxd +5 -0
  102. sage/graphs/base/graph_backends.pyx +797 -0
  103. sage/graphs/base/overview.py +85 -0
  104. sage/graphs/base/sparse_graph.cpython-310-aarch64-linux-gnu.so +0 -0
  105. sage/graphs/base/sparse_graph.pxd +90 -0
  106. sage/graphs/base/sparse_graph.pyx +1653 -0
  107. sage/graphs/base/static_dense_graph.cpython-310-aarch64-linux-gnu.so +0 -0
  108. sage/graphs/base/static_dense_graph.pxd +5 -0
  109. sage/graphs/base/static_dense_graph.pyx +1032 -0
  110. sage/graphs/base/static_sparse_backend.cpython-310-aarch64-linux-gnu.so +0 -0
  111. sage/graphs/base/static_sparse_backend.pxd +27 -0
  112. sage/graphs/base/static_sparse_backend.pyx +1583 -0
  113. sage/graphs/base/static_sparse_graph.cpython-310-aarch64-linux-gnu.so +0 -0
  114. sage/graphs/base/static_sparse_graph.pxd +37 -0
  115. sage/graphs/base/static_sparse_graph.pyx +1375 -0
  116. sage/graphs/bipartite_graph.py +2732 -0
  117. sage/graphs/centrality.cpython-310-aarch64-linux-gnu.so +0 -0
  118. sage/graphs/centrality.pyx +1038 -0
  119. sage/graphs/cographs.py +519 -0
  120. sage/graphs/comparability.cpython-310-aarch64-linux-gnu.so +0 -0
  121. sage/graphs/comparability.pyx +851 -0
  122. sage/graphs/connectivity.cpython-310-aarch64-linux-gnu.so +0 -0
  123. sage/graphs/connectivity.pxd +157 -0
  124. sage/graphs/connectivity.pyx +4813 -0
  125. sage/graphs/convexity_properties.cpython-310-aarch64-linux-gnu.so +0 -0
  126. sage/graphs/convexity_properties.pxd +16 -0
  127. sage/graphs/convexity_properties.pyx +870 -0
  128. sage/graphs/digraph.py +4754 -0
  129. sage/graphs/digraph_generators.py +1993 -0
  130. sage/graphs/distances_all_pairs.cpython-310-aarch64-linux-gnu.so +0 -0
  131. sage/graphs/distances_all_pairs.pxd +12 -0
  132. sage/graphs/distances_all_pairs.pyx +2938 -0
  133. sage/graphs/domination.py +1363 -0
  134. sage/graphs/dot2tex_utils.py +100 -0
  135. sage/graphs/edge_connectivity.cpython-310-aarch64-linux-gnu.so +0 -0
  136. sage/graphs/edge_connectivity.pyx +1215 -0
  137. sage/graphs/generators/all.py +1 -0
  138. sage/graphs/generators/basic.py +1769 -0
  139. sage/graphs/generators/chessboard.py +538 -0
  140. sage/graphs/generators/classical_geometries.py +1611 -0
  141. sage/graphs/generators/degree_sequence.py +235 -0
  142. sage/graphs/generators/distance_regular.cpython-310-aarch64-linux-gnu.so +0 -0
  143. sage/graphs/generators/distance_regular.pyx +2846 -0
  144. sage/graphs/generators/families.py +4759 -0
  145. sage/graphs/generators/intersection.py +565 -0
  146. sage/graphs/generators/platonic_solids.py +262 -0
  147. sage/graphs/generators/random.py +2623 -0
  148. sage/graphs/generators/smallgraphs.py +5741 -0
  149. sage/graphs/generators/world_map.py +724 -0
  150. sage/graphs/generic_graph.py +26867 -0
  151. sage/graphs/generic_graph_pyx.cpython-310-aarch64-linux-gnu.so +0 -0
  152. sage/graphs/generic_graph_pyx.pxd +34 -0
  153. sage/graphs/generic_graph_pyx.pyx +1673 -0
  154. sage/graphs/genus.cpython-310-aarch64-linux-gnu.so +0 -0
  155. sage/graphs/genus.pyx +622 -0
  156. sage/graphs/graph.py +9645 -0
  157. sage/graphs/graph_coloring.cpython-310-aarch64-linux-gnu.so +0 -0
  158. sage/graphs/graph_coloring.pyx +2284 -0
  159. sage/graphs/graph_database.py +1177 -0
  160. sage/graphs/graph_decompositions/all.py +1 -0
  161. sage/graphs/graph_decompositions/bandwidth.cpython-310-aarch64-linux-gnu.so +0 -0
  162. sage/graphs/graph_decompositions/bandwidth.pyx +428 -0
  163. sage/graphs/graph_decompositions/clique_separators.cpython-310-aarch64-linux-gnu.so +0 -0
  164. sage/graphs/graph_decompositions/clique_separators.pyx +616 -0
  165. sage/graphs/graph_decompositions/cutwidth.cpython-310-aarch64-linux-gnu.so +0 -0
  166. sage/graphs/graph_decompositions/cutwidth.pyx +753 -0
  167. sage/graphs/graph_decompositions/fast_digraph.cpython-310-aarch64-linux-gnu.so +0 -0
  168. sage/graphs/graph_decompositions/fast_digraph.pxd +13 -0
  169. sage/graphs/graph_decompositions/fast_digraph.pyx +212 -0
  170. sage/graphs/graph_decompositions/graph_products.cpython-310-aarch64-linux-gnu.so +0 -0
  171. sage/graphs/graph_decompositions/graph_products.pyx +508 -0
  172. sage/graphs/graph_decompositions/modular_decomposition.cpython-310-aarch64-linux-gnu.so +0 -0
  173. sage/graphs/graph_decompositions/modular_decomposition.pxd +27 -0
  174. sage/graphs/graph_decompositions/modular_decomposition.pyx +1536 -0
  175. sage/graphs/graph_decompositions/slice_decomposition.cpython-310-aarch64-linux-gnu.so +0 -0
  176. sage/graphs/graph_decompositions/slice_decomposition.pxd +18 -0
  177. sage/graphs/graph_decompositions/slice_decomposition.pyx +1106 -0
  178. sage/graphs/graph_decompositions/tree_decomposition.cpython-310-aarch64-linux-gnu.so +0 -0
  179. sage/graphs/graph_decompositions/tree_decomposition.pxd +17 -0
  180. sage/graphs/graph_decompositions/tree_decomposition.pyx +1996 -0
  181. sage/graphs/graph_decompositions/vertex_separation.cpython-310-aarch64-linux-gnu.so +0 -0
  182. sage/graphs/graph_decompositions/vertex_separation.pxd +5 -0
  183. sage/graphs/graph_decompositions/vertex_separation.pyx +1963 -0
  184. sage/graphs/graph_editor.py +82 -0
  185. sage/graphs/graph_generators.py +3314 -0
  186. sage/graphs/graph_generators_pyx.cpython-310-aarch64-linux-gnu.so +0 -0
  187. sage/graphs/graph_generators_pyx.pyx +95 -0
  188. sage/graphs/graph_input.py +812 -0
  189. sage/graphs/graph_latex.py +2064 -0
  190. sage/graphs/graph_list.py +410 -0
  191. sage/graphs/graph_plot.py +1756 -0
  192. sage/graphs/graph_plot_js.py +338 -0
  193. sage/graphs/hyperbolicity.cpython-310-aarch64-linux-gnu.so +0 -0
  194. sage/graphs/hyperbolicity.pyx +1704 -0
  195. sage/graphs/hypergraph_generators.py +364 -0
  196. sage/graphs/independent_sets.cpython-310-aarch64-linux-gnu.so +0 -0
  197. sage/graphs/independent_sets.pxd +13 -0
  198. sage/graphs/independent_sets.pyx +402 -0
  199. sage/graphs/isgci.py +1033 -0
  200. sage/graphs/isoperimetric_inequalities.cpython-310-aarch64-linux-gnu.so +0 -0
  201. sage/graphs/isoperimetric_inequalities.pyx +489 -0
  202. sage/graphs/line_graph.cpython-310-aarch64-linux-gnu.so +0 -0
  203. sage/graphs/line_graph.pyx +743 -0
  204. sage/graphs/lovasz_theta.py +77 -0
  205. sage/graphs/matching.py +1633 -0
  206. sage/graphs/matching_covered_graph.py +3590 -0
  207. sage/graphs/orientations.py +1489 -0
  208. sage/graphs/partial_cube.py +459 -0
  209. sage/graphs/path_enumeration.cpython-310-aarch64-linux-gnu.so +0 -0
  210. sage/graphs/path_enumeration.pyx +2040 -0
  211. sage/graphs/pq_trees.py +1129 -0
  212. sage/graphs/print_graphs.py +201 -0
  213. sage/graphs/schnyder.py +865 -0
  214. sage/graphs/spanning_tree.cpython-310-aarch64-linux-gnu.so +0 -0
  215. sage/graphs/spanning_tree.pyx +1457 -0
  216. sage/graphs/strongly_regular_db.cpython-310-aarch64-linux-gnu.so +0 -0
  217. sage/graphs/strongly_regular_db.pyx +3340 -0
  218. sage/graphs/traversals.cpython-310-aarch64-linux-gnu.so +0 -0
  219. sage/graphs/traversals.pxd +9 -0
  220. sage/graphs/traversals.pyx +1872 -0
  221. sage/graphs/trees.cpython-310-aarch64-linux-gnu.so +0 -0
  222. sage/graphs/trees.pxd +15 -0
  223. sage/graphs/trees.pyx +310 -0
  224. sage/graphs/tutte_polynomial.py +713 -0
  225. sage/graphs/views.cpython-310-aarch64-linux-gnu.so +0 -0
  226. sage/graphs/views.pyx +794 -0
  227. sage/graphs/weakly_chordal.cpython-310-aarch64-linux-gnu.so +0 -0
  228. sage/graphs/weakly_chordal.pyx +604 -0
  229. sage/groups/all__sagemath_graphs.py +1 -0
  230. sage/groups/perm_gps/all__sagemath_graphs.py +1 -0
  231. sage/groups/perm_gps/partn_ref/all__sagemath_graphs.py +1 -0
  232. sage/groups/perm_gps/partn_ref/refinement_graphs.cpython-310-aarch64-linux-gnu.so +0 -0
  233. sage/groups/perm_gps/partn_ref/refinement_graphs.pxd +38 -0
  234. sage/groups/perm_gps/partn_ref/refinement_graphs.pyx +1666 -0
  235. sage/knots/all.py +6 -0
  236. sage/knots/free_knotinfo_monoid.py +507 -0
  237. sage/knots/gauss_code.py +291 -0
  238. sage/knots/knot.py +682 -0
  239. sage/knots/knot_table.py +284 -0
  240. sage/knots/knotinfo.py +2900 -0
  241. sage/knots/link.py +4715 -0
  242. sage/sandpiles/all.py +13 -0
  243. sage/sandpiles/examples.py +225 -0
  244. sage/sandpiles/sandpile.py +6365 -0
  245. sage/topology/all.py +22 -0
  246. sage/topology/cell_complex.py +1214 -0
  247. sage/topology/cubical_complex.py +1976 -0
  248. sage/topology/delta_complex.py +1806 -0
  249. sage/topology/filtered_simplicial_complex.py +744 -0
  250. sage/topology/moment_angle_complex.py +823 -0
  251. sage/topology/simplicial_complex.py +5160 -0
  252. sage/topology/simplicial_complex_catalog.py +92 -0
  253. sage/topology/simplicial_complex_examples.py +1680 -0
  254. sage/topology/simplicial_complex_homset.py +205 -0
  255. sage/topology/simplicial_complex_morphism.py +836 -0
  256. sage/topology/simplicial_set.py +4102 -0
  257. sage/topology/simplicial_set_catalog.py +55 -0
  258. sage/topology/simplicial_set_constructions.py +2954 -0
  259. sage/topology/simplicial_set_examples.py +865 -0
  260. sage/topology/simplicial_set_morphism.py +1464 -0
@@ -0,0 +1,410 @@
1
+ # sage_setup: distribution = sagemath-graphs
2
+ r"""
3
+ Lists of graphs
4
+
5
+ AUTHORS:
6
+
7
+ - Robert L. Miller (2007-02-10): initial version
8
+
9
+ - Emily A. Kirkman (2007-02-13): added show functions
10
+ (to_graphics_array and show_graphs)
11
+ """
12
+
13
+ # ****************************************************************************
14
+ # Copyright (C) 2007 Robert L. Miller <rlmillster@gmail.com>
15
+ # and Emily A. Kirkman
16
+ #
17
+ # Distributed under the terms of the GNU General Public License (GPL)
18
+ # http://www.gnu.org/licenses/
19
+ # ****************************************************************************
20
+
21
+
22
+ def from_whatever(data, immutable=False):
23
+ r"""
24
+ Return a list of Sage Graphs, given a list of whatever kind of data.
25
+
26
+ INPUT:
27
+
28
+ - ``data`` -- can be a string, a list/iterable of strings, or a readable
29
+ file-like object
30
+
31
+ - ``immutable`` -- boolean (default: ``False``); whether to return immutable
32
+ or mutable graphs
33
+
34
+ EXAMPLES::
35
+
36
+ sage: l = ['N@@?N@UGAGG?gGlKCMO', ':P_`cBaC_ACd`C_@BC`ABDHaEH_@BF_@CHIK_@BCEHKL_BIKM_BFGHI']
37
+ sage: graphs_list.from_whatever(l)
38
+ [Graph on 15 vertices, Looped multi-graph on 17 vertices]
39
+ sage: graphs_list.from_whatever('\n'.join(l))
40
+ [Graph on 15 vertices, Looped multi-graph on 17 vertices]
41
+
42
+ This example happens to be a mix a sparse and non-sparse graphs, so we don't
43
+ explicitly put a ``.g6`` or ``.s6`` extension, which implies just one or the
44
+ other::
45
+
46
+ sage: filename = tmp_filename()
47
+ sage: with open(filename, 'w') as fobj:
48
+ ....: _ = fobj.write('\n'.join(l))
49
+ sage: with open(filename) as fobj:
50
+ ....: graphs_list.from_whatever(fobj)
51
+ [Graph on 15 vertices, Looped multi-graph on 17 vertices]
52
+
53
+ Check the behaviour of parameter ``immutable``::
54
+
55
+ sage: with open(filename) as fobj:
56
+ ....: any(g.is_immutable() for g in graphs_list.from_whatever(fobj))
57
+ False
58
+ sage: with open(filename) as fobj:
59
+ ....: all(g.is_immutable() for g in graphs_list.from_whatever(fobj, immutable=True))
60
+ True
61
+ """
62
+ return _from_whatever(data, immutable=immutable)
63
+
64
+
65
+ def _from_whatever(data, fmt=None, immutable=False):
66
+ """
67
+ Implementation details of :func:`from_whatever`.
68
+
69
+ INPUT:
70
+
71
+ - ``data`` -- can be a string, a list/iterable of strings, or a readable
72
+ file-like object
73
+
74
+ - ``fmt`` -- string (default: ``None``); format of ``data``. It can be
75
+ either ``'graph6'``, ``sparse6``, or ``None``, with the latter case
76
+ indicating that the ``Graph`` constructor should determine this for
77
+ itself
78
+
79
+ - ``immutable`` -- boolean (default: ``False``); whether to return immutable
80
+ or mutable graphs
81
+
82
+ EXAMPLES::
83
+
84
+ sage: l = ['N@@?N@UGAGG?gGlKCMO', ':P_`cBaC_ACd`C_@BC`ABDHaEH_@BF_@CHIK_@BCEHKL_BIKM_BFGHI']
85
+ sage: graphs_list.from_whatever(l)
86
+ [Graph on 15 vertices, Looped multi-graph on 17 vertices]
87
+
88
+ Check the behaviour of parameter ``immutable``::
89
+
90
+ sage: any(g.is_immutable() for g in graphs_list.from_whatever(l))
91
+ False
92
+ sage: all(g.is_immutable() for g in graphs_list.from_whatever(l, immutable=True))
93
+ True
94
+ """
95
+ from sage.graphs.graph import Graph
96
+
97
+ if isinstance(data, str):
98
+ lines = data.splitlines()
99
+ else:
100
+ from sage.misc.misc import try_read
101
+
102
+ lines = try_read(data, splitlines=True)
103
+
104
+ if lines is not None and fmt is None:
105
+ # In this case the format should be 'forced' by the filename
106
+ if hasattr(data, 'name'):
107
+ if data.name.endswith('.g6'):
108
+ fmt = 'graph6'
109
+ elif data.name.endswith('.s6'):
110
+ fmt = 'sparse6'
111
+ else:
112
+ try:
113
+ lines = iter(data)
114
+ except TypeError:
115
+ raise TypeError(
116
+ "must be a string, an iterable of strings, or a readable "
117
+ "file-like object")
118
+
119
+ if fmt == 'graph6':
120
+ kwargs = {'format': fmt}
121
+ elif fmt == 'sparse6':
122
+ kwargs = {'format': fmt, 'sparse': True} # probably implied?
123
+ else:
124
+ kwargs = {} # We let Graph guess
125
+
126
+ out = []
127
+ for line in lines:
128
+ if not isinstance(line, str):
129
+ raise TypeError("must be an iterable of strings")
130
+ line = line.strip()
131
+ if not line:
132
+ continue
133
+
134
+ if '\n' in line:
135
+ out.append(_from_whatever(line.splitlines(), fmt=fmt,
136
+ immutable=immutable))
137
+ else:
138
+ out.append(Graph(line, immutable=immutable, **kwargs))
139
+
140
+ return out
141
+
142
+
143
+ def from_graph6(data, immutable=False):
144
+ """
145
+ Return a list of Sage Graphs, given a list of graph6 data.
146
+
147
+ INPUT:
148
+
149
+ - ``data`` -- can be a string, a list of strings, or a file stream
150
+
151
+ - ``immutable`` -- boolean (default: ``False``); whether to return immutable
152
+ or mutable graphs
153
+
154
+ EXAMPLES::
155
+
156
+ sage: l = ['N@@?N@UGAGG?gGlKCMO', 'XsGGWOW?CC?C@HQKHqOjYKC_uHWGX?P?~TqIKA`OA@SAOEcEA??']
157
+ sage: graphs_list.from_graph6(l)
158
+ [Graph on 15 vertices, Graph on 25 vertices]
159
+
160
+ Check the behaviour of parameter ``immutable``::
161
+
162
+ sage: any(g.is_immutable() for g in graphs_list.from_graph6(l))
163
+ False
164
+ sage: all(g.is_immutable() for g in graphs_list.from_graph6(l, immutable=True))
165
+ True
166
+ """
167
+ return _from_whatever(data, fmt='graph6', immutable=immutable)
168
+
169
+
170
+ def from_sparse6(data, immutable=False):
171
+ """
172
+ Return a list of Sage Graphs, given a list of sparse6 data.
173
+
174
+ INPUT:
175
+
176
+ - ``data`` -- can be a string, a list of strings, or a file stream
177
+
178
+ - ``immutable`` -- boolean (default: ``False``); whether to return immutable
179
+ or mutable graphs
180
+
181
+ EXAMPLES::
182
+
183
+ sage: g1 = ':P_`cBaC_ACd`C_@BC`ABDHaEH_@BF_@CHIK_@BCEHKL_BIKM_BFGHI'
184
+ sage: g2 = ':f`??KO?B_OOSCGE_?OWONDBO?GOJBDO?_SSJdApcOIG`?og_UKEbg?_SKF'
185
+ sage: g2 += 'q@[CCBA`p?oYMFp@gw]Qaa@xEMHDb@hMCBCbQ@ECHEcAKKQKFPOwo[PIDQ'
186
+ sage: g2 += '{KIHEcQPOkVKEW_WMNKqPWwcRKOOWSKIGCqhWt??___WMJFCahWzEBa`xO'
187
+ sage: g2 += 'u[MpPPKqYNoOOOKHHDBPs|??__gWMKEcAHKgTLErqA?A@a@G{kVLErs?GD'
188
+ sage: g2 += 'BA@XCs\\NggWSOJIDbHh@?A@aF'
189
+ sage: graphs_list.from_sparse6([g1, g2])
190
+ [Looped multi-graph on 17 vertices, Looped multi-graph on 39 vertices]
191
+
192
+ Check the behaviour of parameter ``immutable``::
193
+
194
+ sage: any(g.is_immutable() for g in graphs_list.from_sparse6([g1, g2]))
195
+ False
196
+ sage: all(g.is_immutable() for g in graphs_list.from_sparse6([g1, g2], immutable=True))
197
+ True
198
+ """
199
+ return _from_whatever(data, fmt='sparse6', immutable=immutable)
200
+
201
+
202
+ def to_graph6(graphs, file=None, output_list=False):
203
+ r"""
204
+ Convert a list of Sage graphs to a single string of graph6 graphs.
205
+
206
+ If ``file`` is specified, then the string will be written quietly to the
207
+ file. If ``output_list`` is ``True``, then a list of strings will be
208
+ returned, one string per graph.
209
+
210
+ INPUT:
211
+
212
+ - ``graphs`` -- a Python list of Sage Graphs
213
+
214
+ - ``file`` -- (optional) a file stream to write to (must be in 'w' mode)
215
+
216
+ - ``output_list`` -- boolean (default: ``False``); whether to return a
217
+ string (when set to ``True``) or a list of strings. This parameter is
218
+ ignored if file gets specified
219
+
220
+ EXAMPLES::
221
+
222
+ sage: l = [graphs.DodecahedralGraph(), graphs.PetersenGraph()]
223
+ sage: graphs_list.to_graph6(l)
224
+ 'ShCHGD@?K?_@?@?C_GGG@??cG?G?GK_?C\nIheA@GUAo\n'
225
+ """
226
+ return _to_graph6(graphs, file=file, output_list=output_list)
227
+
228
+
229
+ def to_sparse6(graphs, file=None, output_list=False):
230
+ r"""
231
+ Convert a list of Sage graphs to a single string of sparse6 graphs.
232
+
233
+ If ``file`` is specified, then the string will be written quietly to the
234
+ file. If ``output_list`` is ``True``, then a list of strings will be
235
+ returned, one string per graph.
236
+
237
+ INPUT:
238
+
239
+ - ``graphs`` -- a Python list of Sage Graphs
240
+
241
+ - ``file`` -- (optional) a file stream to write to (must be in 'w' mode)
242
+
243
+ - ``output_list`` -- boolean (default: ``False``); whether to return a
244
+ string (when set to ``True``) or a list of strings. This parameter is
245
+ ignored if file gets specified
246
+
247
+ EXAMPLES::
248
+
249
+ sage: l = [graphs.DodecahedralGraph(), graphs.PetersenGraph()]
250
+ sage: graphs_list.to_sparse6(l)
251
+ ':S_`abcaDe`Fg_HijhKfLdMkNcOjP_BQ\n:I`ES@obGkqegW~\n'
252
+ """
253
+ return _to_graph6(graphs, file=file, output_list=output_list, sparse=True)
254
+
255
+
256
+ def _to_graph6(graphs, file=None, output_list=False, sparse=False):
257
+ r"""
258
+ Internal implementation of :func:`to_graph6` and :func:`to_sparse6`.
259
+
260
+ EXAMPLES::
261
+
262
+ sage: l = [graphs.DodecahedralGraph(), graphs.PetersenGraph()]
263
+ sage: graphs_list._to_graph6(l, sparse=False)
264
+ 'ShCHGD@?K?_@?@?C_GGG@??cG?G?GK_?C\nIheA@GUAo\n'
265
+ sage: graphs_list._to_graph6(l, sparse=True)
266
+ ':S_`abcaDe`Fg_HijhKfLdMkNcOjP_BQ\n:I`ES@obGkqegW~\n'
267
+ """
268
+ if sparse:
269
+ method = 'sparse6_string'
270
+ else:
271
+ method = 'graph6_string'
272
+
273
+ strs = [getattr(g, method)() for g in graphs]
274
+
275
+ if file or not output_list:
276
+ strs = '\n'.join(strs) + '\n'
277
+
278
+ if file is None:
279
+ return strs
280
+
281
+ file.write(strs)
282
+ file.flush()
283
+
284
+
285
+ def to_graphics_array(graph_list, **kwds):
286
+ """
287
+ Draw all graphs in a graphics array.
288
+
289
+ INPUT:
290
+
291
+ - ``graph_list`` -- a Python list of Sage Graphs
292
+
293
+ GRAPH PLOTTING:
294
+
295
+ Defaults to circular layout for graphs. This allows for a nicer display in a
296
+ small area and takes much less time to compute than the spring- layout
297
+ algorithm for many graphs.
298
+
299
+ EXAMPLES::
300
+
301
+ sage: glist = []
302
+ sage: for i in range(999):
303
+ ....: glist.append(graphs.RandomGNP(6, .45))
304
+ sage: garray = graphs_list.to_graphics_array(glist) # needs sage.plot
305
+ sage: garray.nrows(), garray.ncols() # needs sage.plot
306
+ (250, 4)
307
+
308
+ See the .plot() or .show() documentation for an individual graph for
309
+ options, all of which are available from :func:`to_graphics_array`::
310
+
311
+ sage: glist = []
312
+ sage: for _ in range(10): # needs networkx
313
+ ....: glist.append(graphs.RandomLobster(41, .3, .4))
314
+ sage: graphs_list.to_graphics_array(glist, layout='spring', vertex_size=20) # needs networkx sage.plot
315
+ Graphics Array of size 3 x 4
316
+ """
317
+ from sage.graphs import graph
318
+ plist = []
319
+ for graph_i in graph_list:
320
+ if isinstance(graph_i, graph.GenericGraph):
321
+ pos = graph_i.get_pos()
322
+ if pos is None:
323
+ if 'layout' not in kwds:
324
+ kwds['layout'] = 'circular'
325
+ if 'vertex_size' not in kwds:
326
+ kwds['vertex_size'] = 50
327
+ if 'vertex_labels' not in kwds:
328
+ kwds['vertex_labels'] = False
329
+ kwds['graph_border'] = True
330
+ plist.append(graph_i.plot(**kwds))
331
+ else:
332
+ plist.append(graph_i.plot(pos=pos, vertex_size=50,
333
+ vertex_labels=False,
334
+ graph_border=True))
335
+ else:
336
+ raise TypeError('param list must be a list of Sage (di)graphs.')
337
+ from sage.plot.plot import graphics_array
338
+ return graphics_array(plist, ncols=4)
339
+
340
+
341
+ def show_graphs(graph_list, **kwds):
342
+ """
343
+ Show a maximum of 20 graphs from ``graph_list`` in a sage graphics array.
344
+
345
+ If more than 20 graphs are given in the list argument, then it will display
346
+ one graphics array after another with each containing at most 20 graphs.
347
+
348
+ Note that to save the image output from the notebook, you must save each
349
+ graphics array individually. (There will be a small space between graphics
350
+ arrays).
351
+
352
+ INPUT:
353
+
354
+ - ``graph_list`` -- a Python list of Sage Graphs
355
+
356
+ GRAPH PLOTTING: Defaults to circular layout for graphs. This allows for a
357
+ nicer display in a small area and takes much less time to compute than the
358
+ spring-layout algorithm for many graphs.
359
+
360
+ EXAMPLES: Create a list of graphs::
361
+
362
+ sage: glist = []
363
+ sage: glist.append(graphs.CompleteGraph(6))
364
+ sage: glist.append(graphs.CompleteBipartiteGraph(4, 5))
365
+ sage: glist.append(graphs.BarbellGraph(7, 4))
366
+ sage: glist.append(graphs.CycleGraph(15))
367
+ sage: glist.append(graphs.DiamondGraph())
368
+ sage: glist.append(graphs.GemGraph())
369
+ sage: glist.append(graphs.DartGraph())
370
+ sage: glist.append(graphs.ForkGraph())
371
+ sage: glist.append(graphs.HouseGraph())
372
+ sage: glist.append(graphs.HouseXGraph())
373
+ sage: glist.append(graphs.KrackhardtKiteGraph())
374
+ sage: glist.append(graphs.LadderGraph(5))
375
+ sage: glist.append(graphs.LollipopGraph(5, 6))
376
+ sage: glist.append(graphs.PathGraph(15))
377
+ sage: glist.append(graphs.PetersenGraph())
378
+ sage: glist.append(graphs.StarGraph(17))
379
+ sage: glist.append(graphs.WheelGraph(9))
380
+
381
+ Check that length is <= 20::
382
+
383
+ sage: len(glist)
384
+ 17
385
+
386
+ Show the graphs in a graphics array::
387
+
388
+ sage: graphs_list.show_graphs(glist) # needs sage.plot
389
+
390
+ Example where more than one graphics array is used::
391
+
392
+ sage: # needs database_graphs
393
+ sage: gq = GraphQuery(display_cols=['graph6'], num_vertices=5)
394
+ sage: g = gq.get_graphs_list()
395
+ sage: len(g)
396
+ 34
397
+ sage: graphs_list.show_graphs(g) # needs sage.plot
398
+
399
+ See the .plot() or .show() documentation for an individual graph for
400
+ options, all of which are available from :func:`to_graphics_array`::
401
+
402
+ sage: glist = []
403
+ sage: for _ in range(10): # needs networkx
404
+ ....: glist.append(graphs.RandomLobster(41, .3, .4))
405
+ sage: graphs_list.show_graphs(glist, layout='spring', vertex_size=20) # needs sage.plot
406
+ """
407
+ graph_list = list(graph_list)
408
+ for i in range(len(graph_list) // 20 + 1):
409
+ graph_slice = graph_list[20 * i: 20 * (i + 1)]
410
+ to_graphics_array(graph_slice, **kwds).show()