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,235 @@
|
|
1
|
+
# sage_setup: distribution = sagemath-graphs
|
2
|
+
r"""
|
3
|
+
Graphs with a given degree sequence
|
4
|
+
|
5
|
+
The methods defined here appear in :mod:`sage.graphs.graph_generators`.
|
6
|
+
"""
|
7
|
+
|
8
|
+
# ****************************************************************************
|
9
|
+
# Copyright (C) 2006 Robert L. Miller <rlmillster@gmail.com>
|
10
|
+
# Emily A. Kirkman
|
11
|
+
# 2009 Michael C. Yurko <myurko@gmail.com>
|
12
|
+
#
|
13
|
+
# This program is free software: you can redistribute it and/or modify
|
14
|
+
# it under the terms of the GNU General Public License as published by
|
15
|
+
# the Free Software Foundation, either version 2 of the License, or
|
16
|
+
# (at your option) any later version.
|
17
|
+
# https://www.gnu.org/licenses/
|
18
|
+
# ****************************************************************************
|
19
|
+
|
20
|
+
import sys
|
21
|
+
from sage.graphs.graph import Graph
|
22
|
+
from sage.misc.randstate import current_randstate
|
23
|
+
|
24
|
+
|
25
|
+
def DegreeSequence(deg_sequence):
|
26
|
+
"""
|
27
|
+
Return a graph with the given degree sequence.
|
28
|
+
|
29
|
+
This method raises a NetworkX error if the proposed degree sequence cannot
|
30
|
+
be that of a graph.
|
31
|
+
|
32
|
+
Graph returned is the one returned by the Havel-Hakimi algorithm, which
|
33
|
+
constructs a simple graph by connecting vertices of highest degree to other
|
34
|
+
vertices of highest degree, resorting the remaining vertices by degree and
|
35
|
+
repeating the process. See Theorem 1.4 in [CL1996]_.
|
36
|
+
|
37
|
+
INPUT:
|
38
|
+
|
39
|
+
- ``deg_sequence`` -- list of integers with each entry corresponding to the
|
40
|
+
degree of a different vertex
|
41
|
+
|
42
|
+
EXAMPLES::
|
43
|
+
|
44
|
+
sage: G = graphs.DegreeSequence([3,3,3,3]) # needs networkx
|
45
|
+
sage: G.edges(sort=True, labels=False) # needs networkx
|
46
|
+
[(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)]
|
47
|
+
sage: G.show() # long time # needs networkx sage.plot
|
48
|
+
|
49
|
+
::
|
50
|
+
|
51
|
+
sage: G = graphs.DegreeSequence([3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]) # needs networkx
|
52
|
+
sage: G.show() # long time # needs networkx sage.plot
|
53
|
+
|
54
|
+
::
|
55
|
+
|
56
|
+
sage: G = graphs.DegreeSequence([4,4,4,4,4,4,4,4]) # needs networkx
|
57
|
+
sage: G.show() # long time # needs networkx sage.plot
|
58
|
+
|
59
|
+
::
|
60
|
+
|
61
|
+
sage: G = graphs.DegreeSequence([1,2,3,4,3,4,3,2,3,2,1]) # needs networkx
|
62
|
+
sage: G.show() # long time # needs networkx sage.plot
|
63
|
+
"""
|
64
|
+
import networkx
|
65
|
+
return Graph(networkx.havel_hakimi_graph([int(i) for i in deg_sequence]))
|
66
|
+
|
67
|
+
|
68
|
+
def DegreeSequenceBipartite(s1, s2):
|
69
|
+
r"""
|
70
|
+
Return a bipartite graph whose two sets have the given degree sequences.
|
71
|
+
|
72
|
+
Given two different sequences of degrees `s_1` and `s_2`, this functions
|
73
|
+
returns ( if possible ) a bipartite graph on sets `A` and `B` such that the
|
74
|
+
vertices in `A` have `s_1` as their degree sequence, while `s_2` is the
|
75
|
+
degree sequence of the vertices in `B`.
|
76
|
+
|
77
|
+
INPUT:
|
78
|
+
|
79
|
+
- ``s_1`` -- list of integers corresponding to the degree sequence of the
|
80
|
+
first set of vertices
|
81
|
+
|
82
|
+
- ``s_2`` -- list of integers corresponding to the degree sequence of the
|
83
|
+
second set of vertices
|
84
|
+
|
85
|
+
ALGORITHM:
|
86
|
+
|
87
|
+
This function works through the computation of the matrix given by the
|
88
|
+
Gale-Ryser theorem, which is in this case the adjacency matrix of the
|
89
|
+
bipartite graph.
|
90
|
+
|
91
|
+
EXAMPLES:
|
92
|
+
|
93
|
+
If we are given as sequences ``[2,2,2,2,2]`` and ``[5,5]`` we are given as
|
94
|
+
expected the complete bipartite graph `K_{2,5}`::
|
95
|
+
|
96
|
+
sage: g = graphs.DegreeSequenceBipartite([2,2,2,2,2],[5,5]) # needs sage.combinat sage.modules
|
97
|
+
sage: g.is_isomorphic(graphs.CompleteBipartiteGraph(5,2)) # needs sage.combinat sage.modules
|
98
|
+
True
|
99
|
+
|
100
|
+
Some sequences being incompatible if, for example, their sums are different,
|
101
|
+
the functions raises a :exc:`ValueError` when no graph corresponding
|
102
|
+
to the degree sequences exists::
|
103
|
+
|
104
|
+
sage: g = graphs.DegreeSequenceBipartite([2,2,2,2,1],[5,5]) # needs sage.combinat sage.modules
|
105
|
+
Traceback (most recent call last):
|
106
|
+
...
|
107
|
+
ValueError: there exists no bipartite graph corresponding to the given degree sequences
|
108
|
+
|
109
|
+
TESTS:
|
110
|
+
|
111
|
+
:issue:`12155`::
|
112
|
+
|
113
|
+
sage: graphs.DegreeSequenceBipartite([2,2,2,2,2],[5,5]).complement() # needs sage.combinat sage.modules
|
114
|
+
Graph on 7 vertices
|
115
|
+
"""
|
116
|
+
from sage.combinat.integer_vector import gale_ryser_theorem
|
117
|
+
from sage.graphs.bipartite_graph import BipartiteGraph
|
118
|
+
|
119
|
+
s1 = sorted(s1, reverse=True)
|
120
|
+
s2 = sorted(s2, reverse=True)
|
121
|
+
|
122
|
+
m = gale_ryser_theorem(s1, s2)
|
123
|
+
|
124
|
+
if m is False:
|
125
|
+
raise ValueError("there exists no bipartite graph corresponding to "
|
126
|
+
"the given degree sequences")
|
127
|
+
return Graph(BipartiteGraph(m))
|
128
|
+
|
129
|
+
|
130
|
+
def DegreeSequenceConfigurationModel(deg_sequence, seed=None):
|
131
|
+
"""
|
132
|
+
Return a random pseudograph with the given degree sequence.
|
133
|
+
|
134
|
+
This method raises a NetworkX error if the proposed degree sequence cannot
|
135
|
+
be that of a graph with multiple edges and loops.
|
136
|
+
|
137
|
+
One requirement is that the sum of the degrees must be even, since every
|
138
|
+
edge must be incident with two vertices.
|
139
|
+
|
140
|
+
INPUT:
|
141
|
+
|
142
|
+
- ``deg_sequence`` -- list of integers with each entry corresponding to the
|
143
|
+
expected degree of a different vertex
|
144
|
+
|
145
|
+
- ``seed`` -- (optional) a ``random.Random`` seed or a Python ``int`` for
|
146
|
+
the random number generator
|
147
|
+
|
148
|
+
EXAMPLES::
|
149
|
+
|
150
|
+
sage: G = graphs.DegreeSequenceConfigurationModel([1,1]) # needs networkx
|
151
|
+
sage: G.adjacency_matrix() # needs networkx sage.modules
|
152
|
+
[0 1]
|
153
|
+
[1 0]
|
154
|
+
|
155
|
+
The output is allowed to contain both loops and multiple edges::
|
156
|
+
|
157
|
+
sage: # needs networkx
|
158
|
+
sage: deg_sequence = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
|
159
|
+
sage: G = graphs.DegreeSequenceConfigurationModel(deg_sequence)
|
160
|
+
sage: G.order(), G.size()
|
161
|
+
(20, 30)
|
162
|
+
sage: G.has_loops() or G.has_multiple_edges() # random
|
163
|
+
True
|
164
|
+
sage: G.show() # long time # needs sage.plot
|
165
|
+
|
166
|
+
REFERENCE:
|
167
|
+
|
168
|
+
[New2003]_
|
169
|
+
"""
|
170
|
+
if seed is None:
|
171
|
+
seed = int(current_randstate().long_seed() % sys.maxsize)
|
172
|
+
import networkx
|
173
|
+
deg_sequence = [int(i) for i in deg_sequence]
|
174
|
+
return Graph(networkx.configuration_model(deg_sequence, seed=seed),
|
175
|
+
loops=True, multiedges=True, sparse=True)
|
176
|
+
|
177
|
+
|
178
|
+
def DegreeSequenceTree(deg_sequence):
|
179
|
+
"""
|
180
|
+
Return a tree with the given degree sequence.
|
181
|
+
|
182
|
+
This method raises a NetworkX error if the proposed degree sequence cannot
|
183
|
+
be that of a tree.
|
184
|
+
|
185
|
+
Since every tree has one more vertex than edge, the degree sequence
|
186
|
+
must satisfy ``len(deg_sequence) - sum(deg_sequence)/2 == 1``.
|
187
|
+
|
188
|
+
INPUT:
|
189
|
+
|
190
|
+
- ``deg_sequence`` -- list of integers with each entry corresponding to the
|
191
|
+
expected degree of a different vertex
|
192
|
+
|
193
|
+
EXAMPLES::
|
194
|
+
|
195
|
+
sage: G = graphs.DegreeSequenceTree([3,1,3,3,1,1,1,2,1]); G # needs networkx
|
196
|
+
Graph on 9 vertices
|
197
|
+
sage: G.show() # long time # needs networkx sage.plot
|
198
|
+
"""
|
199
|
+
import networkx
|
200
|
+
return Graph(networkx.degree_sequence_tree([int(i) for i in deg_sequence]))
|
201
|
+
|
202
|
+
|
203
|
+
def DegreeSequenceExpected(deg_sequence, seed=None):
|
204
|
+
"""
|
205
|
+
Return a random graph with expected given degree sequence.
|
206
|
+
|
207
|
+
This method raises a NetworkX error if the proposed degree sequence cannot
|
208
|
+
be that of a graph.
|
209
|
+
|
210
|
+
One requirement is that the sum of the degrees must be even, since every
|
211
|
+
edge must be incident with two vertices.
|
212
|
+
|
213
|
+
INPUT:
|
214
|
+
|
215
|
+
- ``deg_sequence`` -- list of integers with each entry corresponding to the
|
216
|
+
expected degree of a different vertex
|
217
|
+
|
218
|
+
- ``seed`` -- (optional) a ``random.Random`` seed or a Python ``int`` for
|
219
|
+
the random number generator
|
220
|
+
|
221
|
+
EXAMPLES::
|
222
|
+
|
223
|
+
sage: G = graphs.DegreeSequenceExpected([1,2,3,2,3]); G # needs networkx
|
224
|
+
Looped graph on 5 vertices
|
225
|
+
sage: G.show() # long time # needs networkx sage.plot
|
226
|
+
|
227
|
+
REFERENCE:
|
228
|
+
|
229
|
+
[CL2002]_
|
230
|
+
"""
|
231
|
+
if seed is None:
|
232
|
+
seed = int(current_randstate().long_seed() % sys.maxsize)
|
233
|
+
import networkx
|
234
|
+
deg_sequence = [int(i) for i in deg_sequence]
|
235
|
+
return Graph(networkx.expected_degree_graph(deg_sequence, seed=seed), loops=True)
|
Binary file
|