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,364 @@
|
|
1
|
+
# sage_setup: distribution = sagemath-graphs
|
2
|
+
r"""
|
3
|
+
Hypergraph generators
|
4
|
+
|
5
|
+
This module implements generators of hypergraphs. All hypergraphs can be built
|
6
|
+
through the ``hypergraphs`` object. For instance, to build a complete 3-uniform
|
7
|
+
hypergraph on 5 points, one can do::
|
8
|
+
|
9
|
+
sage: H = hypergraphs.CompleteUniform(5, 3)
|
10
|
+
|
11
|
+
To enumerate hypergraphs with certain properties up to isomorphism, one can use
|
12
|
+
method :meth:`~nauty`, which calls Brendan McKay's Nauty
|
13
|
+
(`<http://cs.anu.edu.au/~bdm/nauty/>`_)::
|
14
|
+
|
15
|
+
sage: list(hypergraphs.nauty(2, 2, connected=True)) # needs nauty
|
16
|
+
[((0,), (0, 1))]
|
17
|
+
|
18
|
+
|
19
|
+
**This module contains the following hypergraph generators**
|
20
|
+
|
21
|
+
.. csv-table::
|
22
|
+
:class: contentstable
|
23
|
+
:widths: 30, 70
|
24
|
+
:delim: |
|
25
|
+
|
26
|
+
:meth:`~HypergraphGenerators.nauty` | Enumerate hypergraphs up to isomorphism using Nauty.
|
27
|
+
:meth:`~HypergraphGenerators.CompleteUniform` | Return the complete `k`-uniform hypergraph on `n` points.
|
28
|
+
:meth:`~HypergraphGenerators.UniformRandomUniform` | Return a uniformly sampled `k`-uniform hypergraph on `n` points with `m` hyperedges.
|
29
|
+
|
30
|
+
|
31
|
+
Functions and methods
|
32
|
+
---------------------
|
33
|
+
"""
|
34
|
+
|
35
|
+
|
36
|
+
class HypergraphGenerators:
|
37
|
+
r"""
|
38
|
+
A class consisting of constructors for common hypergraphs.
|
39
|
+
"""
|
40
|
+
|
41
|
+
def nauty(self, number_of_sets, number_of_vertices,
|
42
|
+
multiple_sets=False,
|
43
|
+
vertex_min_degree=None, vertex_max_degree=None,
|
44
|
+
set_max_size=None, set_min_size=None,
|
45
|
+
regular=False, uniform=False,
|
46
|
+
max_intersection=None,
|
47
|
+
connected=False,
|
48
|
+
debug=False, options=''):
|
49
|
+
r"""
|
50
|
+
Enumerate hypergraphs up to isomorphism using Nauty.
|
51
|
+
|
52
|
+
INPUT:
|
53
|
+
|
54
|
+
- ``number_of_sets`` -- integer; at most 64 minus ``number_of_vertices``
|
55
|
+
|
56
|
+
- ``number_of_vertices`` -- integer; at most 30
|
57
|
+
|
58
|
+
- ``multiple_sets`` -- boolean (default: ``False``); whether to allow
|
59
|
+
several sets of the hypergraph to be equal
|
60
|
+
|
61
|
+
- ``vertex_min_degree``, ``vertex_max_degree`` -- integers (default:
|
62
|
+
``None``); define the maximum and minimum degree of an element from
|
63
|
+
the ground set (i.e. the number of sets which contain it)
|
64
|
+
|
65
|
+
- ``set_min_size``, ``set_max_size`` -- integers (default: ``None``);
|
66
|
+
define the maximum and minimum size of a set
|
67
|
+
|
68
|
+
- ``regular`` -- integer (default: ``False``); if set to an integer
|
69
|
+
value `k`, requires the hypergraphs to be `k`-regular. It is actually
|
70
|
+
a shortcut for the corresponding min/max values.
|
71
|
+
|
72
|
+
- ``uniform`` -- integer (default: ``False``); if set to an integer
|
73
|
+
value `k`, requires the hypergraphs to be `k`-uniform. It is actually
|
74
|
+
a shortcut for the corresponding min/max values.
|
75
|
+
|
76
|
+
- ``max_intersection`` -- integer (default: ``None``); constraints the
|
77
|
+
maximum cardinality of the intersection of two sets from the
|
78
|
+
hypergraphs
|
79
|
+
|
80
|
+
- ``connected`` -- boolean (default: ``False``); whether to require the
|
81
|
+
hypergraphs to be connected
|
82
|
+
|
83
|
+
- ``debug`` -- boolean (default: ``False``); if ``True`` the first line
|
84
|
+
of genbgL's output to standard error is captured and the first call to
|
85
|
+
the generator's ``next()`` function will return this line as a string.
|
86
|
+
A line leading with ">A" indicates a successful initiation of the
|
87
|
+
program with some information on the arguments, while a line beginning
|
88
|
+
with ">E" indicates an error with the input.
|
89
|
+
|
90
|
+
- ``options`` -- string (default: ``''``); anything else that should
|
91
|
+
be forwarded as input to Nauty's genbgL. See its documentation for more
|
92
|
+
information : `<http://cs.anu.edu.au/~bdm/nauty/>`_.
|
93
|
+
|
94
|
+
.. NOTE::
|
95
|
+
|
96
|
+
For genbgL the *first class* elements are vertices, and *second
|
97
|
+
class* elements are the hypergraph's sets.
|
98
|
+
|
99
|
+
OUTPUT: a tuple of tuples
|
100
|
+
|
101
|
+
EXAMPLES:
|
102
|
+
|
103
|
+
Small hypergraphs::
|
104
|
+
|
105
|
+
sage: list(hypergraphs.nauty(4, 2)) # needs nauty
|
106
|
+
[((), (0,), (1,), (0, 1))]
|
107
|
+
|
108
|
+
Only connected ones::
|
109
|
+
|
110
|
+
sage: list(hypergraphs.nauty(2, 2, connected=True)) # needs nauty
|
111
|
+
[((0,), (0, 1))]
|
112
|
+
|
113
|
+
Non-empty sets only::
|
114
|
+
|
115
|
+
sage: list(hypergraphs.nauty(3, 2, set_min_size=1)) # needs nauty
|
116
|
+
[((0,), (1,), (0, 1))]
|
117
|
+
|
118
|
+
The Fano Plane, as the only 3-uniform hypergraph with 7 sets and 7
|
119
|
+
vertices::
|
120
|
+
|
121
|
+
sage: fano = next(hypergraphs.nauty(7, 7, uniform=3, max_intersection=1)) # needs nauty
|
122
|
+
sage: print(fano) # needs nauty
|
123
|
+
((0, 1, 2), (0, 3, 4), (0, 5, 6), (1, 3, 5), (2, 4, 5), (2, 3, 6), (1, 4, 6))
|
124
|
+
|
125
|
+
The Fano Plane, as the only 3-regular hypergraph with 7 sets and 7
|
126
|
+
vertices::
|
127
|
+
|
128
|
+
sage: fano = next(hypergraphs.nauty(7, 7, regular=3, max_intersection=1)) # needs nauty
|
129
|
+
sage: print(fano) # needs nauty
|
130
|
+
((0, 1, 2), (0, 3, 4), (0, 5, 6), (1, 3, 5), (2, 4, 5), (2, 3, 6), (1, 4, 6))
|
131
|
+
|
132
|
+
TESTS::
|
133
|
+
|
134
|
+
sage: len(list(hypergraphs.nauty(20, 20, uniform=2, regular=2, # needs nauty
|
135
|
+
....: max_intersection=1)))
|
136
|
+
49
|
137
|
+
sage: list(hypergraphs.nauty(40, 40, uniform=2, regular=2,max_intersection=1))
|
138
|
+
Traceback (most recent call last):
|
139
|
+
...
|
140
|
+
ValueError: cannot have more than 30 vertices
|
141
|
+
sage: list(hypergraphs.nauty(40, 30, uniform=2, regular=2,max_intersection=1))
|
142
|
+
Traceback (most recent call last):
|
143
|
+
...
|
144
|
+
ValueError: cannot have more than 64 sets+vertices
|
145
|
+
"""
|
146
|
+
if number_of_vertices > 30:
|
147
|
+
raise ValueError("cannot have more than 30 vertices")
|
148
|
+
if number_of_sets + number_of_vertices > 64:
|
149
|
+
raise ValueError("cannot have more than 64 sets+vertices")
|
150
|
+
|
151
|
+
import subprocess
|
152
|
+
import shlex
|
153
|
+
from sage.features.nauty import NautyExecutable
|
154
|
+
genbgL_path = NautyExecutable("genbgL").absolute_filename()
|
155
|
+
|
156
|
+
nauty_input = options
|
157
|
+
|
158
|
+
if connected:
|
159
|
+
nauty_input += " -c"
|
160
|
+
|
161
|
+
if not multiple_sets:
|
162
|
+
nauty_input += " -z"
|
163
|
+
|
164
|
+
if max_intersection is not None:
|
165
|
+
nauty_input += " -Z" + str(max_intersection)
|
166
|
+
|
167
|
+
# degrees and sizes
|
168
|
+
if regular is not False:
|
169
|
+
vertex_max_degree = vertex_min_degree = regular
|
170
|
+
if vertex_max_degree is None:
|
171
|
+
vertex_max_degree = number_of_sets
|
172
|
+
if vertex_min_degree is None:
|
173
|
+
vertex_min_degree = 0
|
174
|
+
|
175
|
+
if uniform is not False:
|
176
|
+
set_max_size = set_min_size = uniform
|
177
|
+
if set_max_size is None:
|
178
|
+
set_max_size = number_of_vertices
|
179
|
+
if set_min_size is None:
|
180
|
+
set_min_size = 0
|
181
|
+
|
182
|
+
nauty_input += " -d" + str(vertex_min_degree) + ":" + str(set_min_size)
|
183
|
+
nauty_input += " -D" + str(vertex_max_degree) + ":" + str(set_max_size)
|
184
|
+
|
185
|
+
nauty_input += " " + str(number_of_vertices) + " " + str(number_of_sets) + " "
|
186
|
+
|
187
|
+
sp = subprocess.Popen(shlex.quote(genbgL_path) + " {0}".format(nauty_input), shell=True,
|
188
|
+
stdin=subprocess.PIPE, stdout=subprocess.PIPE,
|
189
|
+
stderr=subprocess.PIPE, close_fds=True)
|
190
|
+
|
191
|
+
if debug:
|
192
|
+
yield sp.stderr.readline()
|
193
|
+
|
194
|
+
gen = sp.stdout
|
195
|
+
total = number_of_sets + number_of_vertices
|
196
|
+
from sage.graphs.graph import Graph
|
197
|
+
while True:
|
198
|
+
try:
|
199
|
+
s = next(gen)
|
200
|
+
except StopIteration:
|
201
|
+
# Exhausted list of graphs from nauty geng
|
202
|
+
return
|
203
|
+
|
204
|
+
G = Graph(s[:-1], format='graph6')
|
205
|
+
|
206
|
+
yield tuple(tuple(G.neighbor_iterator(v)) for v in range(number_of_vertices, total))
|
207
|
+
|
208
|
+
def CompleteUniform(self, n, k):
|
209
|
+
r"""
|
210
|
+
Return the complete `k`-uniform hypergraph on `n` points.
|
211
|
+
|
212
|
+
INPUT:
|
213
|
+
|
214
|
+
- ``k``, ``n`` -- nonnegative integers with `k\leq n`
|
215
|
+
|
216
|
+
EXAMPLES::
|
217
|
+
|
218
|
+
sage: h = hypergraphs.CompleteUniform(5, 2); h
|
219
|
+
Incidence structure with 5 points and 10 blocks
|
220
|
+
sage: len(h.packing()) # needs sage.numerical.mip
|
221
|
+
2
|
222
|
+
"""
|
223
|
+
from sage.combinat.designs.incidence_structures import IncidenceStructure
|
224
|
+
from itertools import combinations
|
225
|
+
return IncidenceStructure(points=n, blocks=list(combinations(range(n), k)))
|
226
|
+
|
227
|
+
def UniformRandomUniform(self, n, k, m):
|
228
|
+
r"""
|
229
|
+
Return a uniformly sampled `k`-uniform hypergraph on `n` points with
|
230
|
+
`m` hyperedges.
|
231
|
+
|
232
|
+
- ``n`` -- number of nodes of the graph
|
233
|
+
|
234
|
+
- ``k`` -- uniformity
|
235
|
+
|
236
|
+
- ``m`` -- number of edges
|
237
|
+
|
238
|
+
EXAMPLES::
|
239
|
+
|
240
|
+
sage: H = hypergraphs.UniformRandomUniform(52, 3, 17)
|
241
|
+
sage: H
|
242
|
+
Incidence structure with 52 points and 17 blocks
|
243
|
+
sage: H.is_connected()
|
244
|
+
False
|
245
|
+
|
246
|
+
TESTS::
|
247
|
+
|
248
|
+
sage: hypergraphs.UniformRandomUniform(-52, 3, 17)
|
249
|
+
Traceback (most recent call last):
|
250
|
+
...
|
251
|
+
ValueError: number of vertices should be nonnegative
|
252
|
+
sage: hypergraphs.UniformRandomUniform(52.9, 3, 17)
|
253
|
+
Traceback (most recent call last):
|
254
|
+
...
|
255
|
+
ValueError: number of vertices should be an integer
|
256
|
+
sage: hypergraphs.UniformRandomUniform(52, -3, 17)
|
257
|
+
Traceback (most recent call last):
|
258
|
+
...
|
259
|
+
ValueError: the uniformity should be nonnegative
|
260
|
+
sage: hypergraphs.UniformRandomUniform(52, I, 17) # needs sage.symbolic
|
261
|
+
Traceback (most recent call last):
|
262
|
+
...
|
263
|
+
ValueError: the uniformity should be an integer
|
264
|
+
"""
|
265
|
+
from sage.rings.integer import Integer
|
266
|
+
from sage.combinat.subset import Subsets
|
267
|
+
from sage.misc.prandom import sample
|
268
|
+
|
269
|
+
# Construct the vertex set
|
270
|
+
if n < 0:
|
271
|
+
raise ValueError("number of vertices should be nonnegative")
|
272
|
+
try:
|
273
|
+
nverts = Integer(n)
|
274
|
+
except TypeError:
|
275
|
+
raise ValueError("number of vertices should be an integer")
|
276
|
+
vertices = list(range(nverts))
|
277
|
+
|
278
|
+
# Construct the edge set
|
279
|
+
if k < 0:
|
280
|
+
raise ValueError("the uniformity should be nonnegative")
|
281
|
+
try:
|
282
|
+
uniformity = Integer(k)
|
283
|
+
except TypeError:
|
284
|
+
raise ValueError("the uniformity should be an integer")
|
285
|
+
all_edges = Subsets(vertices, uniformity)
|
286
|
+
try:
|
287
|
+
edges = [all_edges[t] for t in sample(range(len(all_edges)), m)]
|
288
|
+
except OverflowError:
|
289
|
+
raise OverflowError("binomial({}, {}) too large to be treated".format(n, k))
|
290
|
+
except ValueError:
|
291
|
+
raise ValueError("number of edges m must be between 0 and binomial({}, {})".format(n, k))
|
292
|
+
|
293
|
+
from sage.combinat.designs.incidence_structures import IncidenceStructure
|
294
|
+
return IncidenceStructure(points=vertices, blocks=edges)
|
295
|
+
|
296
|
+
def BinomialRandomUniform(self, n, k, p):
|
297
|
+
r"""
|
298
|
+
Return a random `k`-uniform hypergraph on `n` points, in which each
|
299
|
+
edge is inserted independently with probability `p`.
|
300
|
+
|
301
|
+
- ``n`` -- number of nodes of the graph
|
302
|
+
|
303
|
+
- ``k`` -- uniformity
|
304
|
+
|
305
|
+
- ``p`` -- probability of an edge
|
306
|
+
|
307
|
+
EXAMPLES::
|
308
|
+
|
309
|
+
sage: hypergraphs.BinomialRandomUniform(50, 3, 1).num_blocks() # needs numpy
|
310
|
+
19600
|
311
|
+
sage: hypergraphs.BinomialRandomUniform(50, 3, 0).num_blocks() # needs numpy
|
312
|
+
0
|
313
|
+
|
314
|
+
TESTS::
|
315
|
+
|
316
|
+
sage: # needs numpy
|
317
|
+
sage: hypergraphs.BinomialRandomUniform(50, 3, -0.1)
|
318
|
+
Traceback (most recent call last):
|
319
|
+
...
|
320
|
+
ValueError: edge probability should be in [0,1]
|
321
|
+
sage: hypergraphs.BinomialRandomUniform(50, 3, 1.1)
|
322
|
+
Traceback (most recent call last):
|
323
|
+
...
|
324
|
+
ValueError: edge probability should be in [0,1]
|
325
|
+
sage: hypergraphs.BinomialRandomUniform(-50, 3, 0.17)
|
326
|
+
Traceback (most recent call last):
|
327
|
+
...
|
328
|
+
ValueError: number of vertices should be nonnegative
|
329
|
+
sage: hypergraphs.BinomialRandomUniform(50.9, 3, 0.17)
|
330
|
+
Traceback (most recent call last):
|
331
|
+
...
|
332
|
+
ValueError: number of vertices should be an integer
|
333
|
+
sage: hypergraphs.BinomialRandomUniform(50, -3, 0.17)
|
334
|
+
Traceback (most recent call last):
|
335
|
+
...
|
336
|
+
ValueError: the uniformity should be nonnegative
|
337
|
+
sage: hypergraphs.BinomialRandomUniform(50, I, 0.17)
|
338
|
+
Traceback (most recent call last):
|
339
|
+
...
|
340
|
+
ValueError: the uniformity should be an integer
|
341
|
+
"""
|
342
|
+
from sage.rings.integer import Integer
|
343
|
+
if n < 0:
|
344
|
+
raise ValueError("number of vertices should be nonnegative")
|
345
|
+
try:
|
346
|
+
nverts = Integer(n)
|
347
|
+
except TypeError:
|
348
|
+
raise ValueError("number of vertices should be an integer")
|
349
|
+
if k < 0:
|
350
|
+
raise ValueError("the uniformity should be nonnegative")
|
351
|
+
try:
|
352
|
+
uniformity = Integer(k)
|
353
|
+
except TypeError:
|
354
|
+
raise ValueError("the uniformity should be an integer")
|
355
|
+
if not 0 <= p <= 1:
|
356
|
+
raise ValueError("edge probability should be in [0,1]")
|
357
|
+
|
358
|
+
import numpy.random as nrn
|
359
|
+
from sage.arith.misc import binomial
|
360
|
+
m = nrn.binomial(binomial(nverts, uniformity), p)
|
361
|
+
return hypergraphs.UniformRandomUniform(n, k, m)
|
362
|
+
|
363
|
+
|
364
|
+
hypergraphs = HypergraphGenerators()
|
Binary file
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# sage_setup: distribution = sagemath-graphs
|
2
|
+
from libc.stdint cimport uint32_t, uint64_t
|
3
|
+
from sage.data_structures.binary_matrix cimport *
|
4
|
+
|
5
|
+
|
6
|
+
cdef class IndependentSets:
|
7
|
+
cdef binary_matrix_t g
|
8
|
+
cdef list vertices
|
9
|
+
cdef dict vertex_to_int
|
10
|
+
cdef int n
|
11
|
+
cdef int i
|
12
|
+
cdef int count_only
|
13
|
+
cdef int maximal
|