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.
- passagemath_graphs-10.6.1rc1.dist-info/METADATA +292 -0
- passagemath_graphs-10.6.1rc1.dist-info/RECORD +260 -0
- passagemath_graphs-10.6.1rc1.dist-info/WHEEL +5 -0
- passagemath_graphs-10.6.1rc1.dist-info/top_level.txt +2 -0
- passagemath_graphs.libs/libgcc_s-69c45f16.so.1 +0 -0
- passagemath_graphs.libs/libgmp-8e78bd9b.so.10.5.0 +0 -0
- passagemath_graphs.libs/libstdc++-1f1a71be.so.6.0.33 +0 -0
- sage/all__sagemath_graphs.py +39 -0
- sage/combinat/abstract_tree.py +2723 -0
- sage/combinat/all__sagemath_graphs.py +34 -0
- sage/combinat/binary_tree.py +5306 -0
- sage/combinat/cluster_algebra_quiver/all.py +22 -0
- sage/combinat/cluster_algebra_quiver/cluster_seed.py +5208 -0
- sage/combinat/cluster_algebra_quiver/interact.py +124 -0
- sage/combinat/cluster_algebra_quiver/mutation_class.py +625 -0
- sage/combinat/cluster_algebra_quiver/mutation_type.py +1555 -0
- sage/combinat/cluster_algebra_quiver/quiver.py +2290 -0
- sage/combinat/cluster_algebra_quiver/quiver_mutation_type.py +2468 -0
- sage/combinat/designs/MOLS_handbook_data.py +570 -0
- sage/combinat/designs/all.py +58 -0
- sage/combinat/designs/bibd.py +1655 -0
- sage/combinat/designs/block_design.py +1071 -0
- sage/combinat/designs/covering_array.py +269 -0
- sage/combinat/designs/covering_design.py +530 -0
- sage/combinat/designs/database.py +5615 -0
- sage/combinat/designs/design_catalog.py +122 -0
- sage/combinat/designs/designs_pyx.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/combinat/designs/designs_pyx.pxd +21 -0
- sage/combinat/designs/designs_pyx.pyx +993 -0
- sage/combinat/designs/difference_family.py +3951 -0
- sage/combinat/designs/difference_matrices.py +279 -0
- sage/combinat/designs/evenly_distributed_sets.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/combinat/designs/evenly_distributed_sets.pyx +661 -0
- sage/combinat/designs/ext_rep.py +1064 -0
- sage/combinat/designs/gen_quadrangles_with_spread.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/combinat/designs/gen_quadrangles_with_spread.pyx +339 -0
- sage/combinat/designs/group_divisible_designs.py +361 -0
- sage/combinat/designs/incidence_structures.py +2357 -0
- sage/combinat/designs/latin_squares.py +581 -0
- sage/combinat/designs/orthogonal_arrays.py +2244 -0
- sage/combinat/designs/orthogonal_arrays_build_recursive.py +1780 -0
- sage/combinat/designs/orthogonal_arrays_find_recursive.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/combinat/designs/orthogonal_arrays_find_recursive.pyx +967 -0
- sage/combinat/designs/resolvable_bibd.py +815 -0
- sage/combinat/designs/steiner_quadruple_systems.py +1306 -0
- sage/combinat/designs/subhypergraph_search.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/combinat/designs/subhypergraph_search.pyx +530 -0
- sage/combinat/designs/twographs.py +306 -0
- sage/combinat/finite_state_machine.py +14874 -0
- sage/combinat/finite_state_machine_generators.py +2006 -0
- sage/combinat/graph_path.py +448 -0
- sage/combinat/interval_posets.py +3908 -0
- sage/combinat/nu_tamari_lattice.py +269 -0
- sage/combinat/ordered_tree.py +1446 -0
- sage/combinat/posets/all.py +46 -0
- sage/combinat/posets/bubble_shuffle.py +247 -0
- sage/combinat/posets/cartesian_product.py +493 -0
- sage/combinat/posets/d_complete.py +182 -0
- sage/combinat/posets/elements.py +273 -0
- sage/combinat/posets/forest.py +30 -0
- sage/combinat/posets/hasse_cython.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/combinat/posets/hasse_cython.pyx +174 -0
- sage/combinat/posets/hasse_diagram.py +3672 -0
- sage/combinat/posets/hochschild_lattice.py +158 -0
- sage/combinat/posets/incidence_algebras.py +794 -0
- sage/combinat/posets/lattices.py +5117 -0
- sage/combinat/posets/linear_extension_iterator.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/combinat/posets/linear_extension_iterator.pyx +292 -0
- sage/combinat/posets/linear_extensions.py +1037 -0
- sage/combinat/posets/mobile.py +275 -0
- sage/combinat/posets/moebius_algebra.py +776 -0
- sage/combinat/posets/poset_examples.py +2178 -0
- sage/combinat/posets/posets.py +9360 -0
- sage/combinat/rooted_tree.py +1070 -0
- sage/combinat/shard_order.py +239 -0
- sage/combinat/tamari_lattices.py +384 -0
- sage/combinat/yang_baxter_graph.py +923 -0
- sage/databases/all__sagemath_graphs.py +1 -0
- sage/databases/knotinfo_db.py +1231 -0
- sage/ext_data/all__sagemath_graphs.py +1 -0
- sage/ext_data/graphs/graph_plot_js.html +330 -0
- sage/ext_data/kenzo/CP2.txt +45 -0
- sage/ext_data/kenzo/CP3.txt +349 -0
- sage/ext_data/kenzo/CP4.txt +4774 -0
- sage/ext_data/kenzo/README.txt +49 -0
- sage/ext_data/kenzo/S4.txt +20 -0
- sage/graphs/all.py +42 -0
- sage/graphs/asteroidal_triples.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/asteroidal_triples.pyx +320 -0
- sage/graphs/base/all.py +1 -0
- sage/graphs/base/boost_graph.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/base/boost_graph.pxd +106 -0
- sage/graphs/base/boost_graph.pyx +3045 -0
- sage/graphs/base/c_graph.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/base/c_graph.pxd +106 -0
- sage/graphs/base/c_graph.pyx +5096 -0
- sage/graphs/base/dense_graph.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/base/dense_graph.pxd +28 -0
- sage/graphs/base/dense_graph.pyx +801 -0
- sage/graphs/base/graph_backends.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/base/graph_backends.pxd +5 -0
- sage/graphs/base/graph_backends.pyx +797 -0
- sage/graphs/base/overview.py +85 -0
- sage/graphs/base/sparse_graph.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/base/sparse_graph.pxd +90 -0
- sage/graphs/base/sparse_graph.pyx +1653 -0
- sage/graphs/base/static_dense_graph.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/base/static_dense_graph.pxd +5 -0
- sage/graphs/base/static_dense_graph.pyx +1032 -0
- sage/graphs/base/static_sparse_backend.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/base/static_sparse_backend.pxd +27 -0
- sage/graphs/base/static_sparse_backend.pyx +1583 -0
- sage/graphs/base/static_sparse_graph.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/base/static_sparse_graph.pxd +37 -0
- sage/graphs/base/static_sparse_graph.pyx +1375 -0
- sage/graphs/bipartite_graph.py +2732 -0
- sage/graphs/centrality.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/centrality.pyx +1038 -0
- sage/graphs/cographs.py +519 -0
- sage/graphs/comparability.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/comparability.pyx +851 -0
- sage/graphs/connectivity.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/connectivity.pxd +157 -0
- sage/graphs/connectivity.pyx +4813 -0
- sage/graphs/convexity_properties.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/convexity_properties.pxd +16 -0
- sage/graphs/convexity_properties.pyx +870 -0
- sage/graphs/digraph.py +4754 -0
- sage/graphs/digraph_generators.py +1993 -0
- sage/graphs/distances_all_pairs.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/distances_all_pairs.pxd +12 -0
- sage/graphs/distances_all_pairs.pyx +2938 -0
- sage/graphs/domination.py +1363 -0
- sage/graphs/dot2tex_utils.py +100 -0
- sage/graphs/edge_connectivity.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/edge_connectivity.pyx +1215 -0
- sage/graphs/generators/all.py +1 -0
- sage/graphs/generators/basic.py +1769 -0
- sage/graphs/generators/chessboard.py +538 -0
- sage/graphs/generators/classical_geometries.py +1611 -0
- sage/graphs/generators/degree_sequence.py +235 -0
- sage/graphs/generators/distance_regular.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/generators/distance_regular.pyx +2846 -0
- sage/graphs/generators/families.py +4759 -0
- sage/graphs/generators/intersection.py +565 -0
- sage/graphs/generators/platonic_solids.py +262 -0
- sage/graphs/generators/random.py +2623 -0
- sage/graphs/generators/smallgraphs.py +5741 -0
- sage/graphs/generators/world_map.py +724 -0
- sage/graphs/generic_graph.py +26867 -0
- sage/graphs/generic_graph_pyx.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/generic_graph_pyx.pxd +34 -0
- sage/graphs/generic_graph_pyx.pyx +1673 -0
- sage/graphs/genus.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/genus.pyx +622 -0
- sage/graphs/graph.py +9645 -0
- sage/graphs/graph_coloring.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/graph_coloring.pyx +2284 -0
- sage/graphs/graph_database.py +1177 -0
- sage/graphs/graph_decompositions/all.py +1 -0
- sage/graphs/graph_decompositions/bandwidth.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/graph_decompositions/bandwidth.pyx +428 -0
- sage/graphs/graph_decompositions/clique_separators.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/graph_decompositions/clique_separators.pyx +616 -0
- sage/graphs/graph_decompositions/cutwidth.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/graph_decompositions/cutwidth.pyx +753 -0
- sage/graphs/graph_decompositions/fast_digraph.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/graph_decompositions/fast_digraph.pxd +13 -0
- sage/graphs/graph_decompositions/fast_digraph.pyx +212 -0
- sage/graphs/graph_decompositions/graph_products.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/graph_decompositions/graph_products.pyx +508 -0
- sage/graphs/graph_decompositions/modular_decomposition.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/graph_decompositions/modular_decomposition.pxd +27 -0
- sage/graphs/graph_decompositions/modular_decomposition.pyx +1536 -0
- sage/graphs/graph_decompositions/slice_decomposition.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/graph_decompositions/slice_decomposition.pxd +18 -0
- sage/graphs/graph_decompositions/slice_decomposition.pyx +1106 -0
- sage/graphs/graph_decompositions/tree_decomposition.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/graph_decompositions/tree_decomposition.pxd +17 -0
- sage/graphs/graph_decompositions/tree_decomposition.pyx +1996 -0
- sage/graphs/graph_decompositions/vertex_separation.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/graph_decompositions/vertex_separation.pxd +5 -0
- sage/graphs/graph_decompositions/vertex_separation.pyx +1963 -0
- sage/graphs/graph_editor.py +82 -0
- sage/graphs/graph_generators.py +3314 -0
- sage/graphs/graph_generators_pyx.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/graph_generators_pyx.pyx +95 -0
- sage/graphs/graph_input.py +812 -0
- sage/graphs/graph_latex.py +2064 -0
- sage/graphs/graph_list.py +410 -0
- sage/graphs/graph_plot.py +1756 -0
- sage/graphs/graph_plot_js.py +338 -0
- sage/graphs/hyperbolicity.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/hyperbolicity.pyx +1704 -0
- sage/graphs/hypergraph_generators.py +364 -0
- sage/graphs/independent_sets.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/independent_sets.pxd +13 -0
- sage/graphs/independent_sets.pyx +402 -0
- sage/graphs/isgci.py +1033 -0
- sage/graphs/isoperimetric_inequalities.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/isoperimetric_inequalities.pyx +489 -0
- sage/graphs/line_graph.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/line_graph.pyx +743 -0
- sage/graphs/lovasz_theta.py +77 -0
- sage/graphs/matching.py +1633 -0
- sage/graphs/matching_covered_graph.py +3590 -0
- sage/graphs/orientations.py +1489 -0
- sage/graphs/partial_cube.py +459 -0
- sage/graphs/path_enumeration.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/path_enumeration.pyx +2040 -0
- sage/graphs/pq_trees.py +1129 -0
- sage/graphs/print_graphs.py +201 -0
- sage/graphs/schnyder.py +865 -0
- sage/graphs/spanning_tree.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/spanning_tree.pyx +1457 -0
- sage/graphs/strongly_regular_db.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/strongly_regular_db.pyx +3340 -0
- sage/graphs/traversals.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/traversals.pxd +9 -0
- sage/graphs/traversals.pyx +1872 -0
- sage/graphs/trees.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/trees.pxd +15 -0
- sage/graphs/trees.pyx +310 -0
- sage/graphs/tutte_polynomial.py +713 -0
- sage/graphs/views.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/views.pyx +794 -0
- sage/graphs/weakly_chordal.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/weakly_chordal.pyx +604 -0
- sage/groups/all__sagemath_graphs.py +1 -0
- sage/groups/perm_gps/all__sagemath_graphs.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_graphs.py +1 -0
- sage/groups/perm_gps/partn_ref/refinement_graphs.cpython-310-aarch64-linux-gnu.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_graphs.pxd +38 -0
- sage/groups/perm_gps/partn_ref/refinement_graphs.pyx +1666 -0
- sage/knots/all.py +6 -0
- sage/knots/free_knotinfo_monoid.py +507 -0
- sage/knots/gauss_code.py +291 -0
- sage/knots/knot.py +682 -0
- sage/knots/knot_table.py +284 -0
- sage/knots/knotinfo.py +2900 -0
- sage/knots/link.py +4715 -0
- sage/sandpiles/all.py +13 -0
- sage/sandpiles/examples.py +225 -0
- sage/sandpiles/sandpile.py +6365 -0
- sage/topology/all.py +22 -0
- sage/topology/cell_complex.py +1214 -0
- sage/topology/cubical_complex.py +1976 -0
- sage/topology/delta_complex.py +1806 -0
- sage/topology/filtered_simplicial_complex.py +744 -0
- sage/topology/moment_angle_complex.py +823 -0
- sage/topology/simplicial_complex.py +5160 -0
- sage/topology/simplicial_complex_catalog.py +92 -0
- sage/topology/simplicial_complex_examples.py +1680 -0
- sage/topology/simplicial_complex_homset.py +205 -0
- sage/topology/simplicial_complex_morphism.py +836 -0
- sage/topology/simplicial_set.py +4102 -0
- sage/topology/simplicial_set_catalog.py +55 -0
- sage/topology/simplicial_set_constructions.py +2954 -0
- sage/topology/simplicial_set_examples.py +865 -0
- 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()
|