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,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()
@@ -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