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,46 @@
1
+ # sage_setup: distribution = sagemath-graphs
2
+ r"""
3
+ Posets
4
+
5
+ Common posets can be accessed through ``posets.<tab>`` and are listed in the
6
+ posets catalog:
7
+
8
+ - :ref:`Catalog of posets and lattices <sage.combinat.posets.poset_examples>`
9
+
10
+ Poset-related classes:
11
+
12
+ - :ref:`sage.combinat.posets.posets`
13
+ - :ref:`sage.combinat.posets.lattices`
14
+
15
+ - :ref:`sage.combinat.posets.linear_extensions`
16
+ - :ref:`sage.combinat.posets.d_complete`
17
+ - :ref:`sage.combinat.posets.forest`
18
+ - :ref:`sage.combinat.posets.mobile`
19
+ - :ref:`sage.combinat.posets.incidence_algebras`
20
+
21
+ - :ref:`sage.combinat.posets.cartesian_product`
22
+
23
+ - :ref:`sage.combinat.posets.moebius_algebra`
24
+
25
+ - :ref:`sage.combinat.tamari_lattices`
26
+ - :ref:`sage.combinat.interval_posets`
27
+ - :ref:`sage.combinat.shard_order`
28
+
29
+ If you are looking for Poset-related :mod:`categories
30
+ <sage.categories.category>`, see
31
+ :class:`~sage.categories.posets.Posets`,
32
+ :class:`~sage.categories.finite_posets.FinitePosets`,
33
+ :class:`~sage.categories.lattice_posets.LatticePosets` and
34
+ :class:`~sage.categories.finite_lattice_posets.FiniteLatticePosets`.
35
+ """
36
+ # install the docstring of this module to the containing package
37
+ from sage.misc.namespace_package import install_doc
38
+ install_doc(__package__, __doc__)
39
+
40
+ from sage.combinat.posets.posets import Poset
41
+
42
+ from sage.combinat.posets.lattices import LatticePoset, MeetSemilattice, JoinSemilattice
43
+
44
+ from sage.combinat.posets.poset_examples import posets, Posets
45
+
46
+ del install_doc
@@ -0,0 +1,247 @@
1
+ # sage_setup: distribution = sagemath-graphs
2
+ # sage.doctest: needs sage.combinat sage.modules
3
+ r"""
4
+ Bubble and Shuffle lattices
5
+
6
+ Shuffle lattices were defined by Greene in [Gre1988]_.
7
+
8
+ Bubble lattices were introduced by McConville and Mühle in [MacCM2022]_.
9
+
10
+ The Bubble lattice `B_{m,n}` and the Shuffle lattice `S_{m,n}` share
11
+ the same underlying set, namely all shuffles of two subwords of the
12
+ two words `X = (x_1,x_2,\ldots,x_{m})` and `Y = (y_1,y_2,\ldots,y_n)`.
13
+
14
+ .. NOTE::
15
+
16
+ In the implementation here, the underlying set is the set of all shuffles
17
+ of subsets of `\{-m,\ldots,-1\}` with subsets of `\{1,\ldots,n\}`.
18
+ """
19
+ from typing import Iterator
20
+
21
+ from sage.combinat.posets.lattices import LatticePoset
22
+ from sage.combinat.subset import subsets
23
+ from sage.graphs.digraph import DiGraph
24
+ from sage.graphs.graph import Graph
25
+ from sage.misc.lazy_import import lazy_import
26
+ from sage.rings.integer import Integer
27
+ from sage.rings.integer_ring import ZZ
28
+
29
+ lazy_import('sage.combinat.shuffle', 'ShuffleProduct')
30
+
31
+
32
+ def bubble_cardinality(m, n) -> Integer:
33
+ r"""
34
+ Return the cardinality of the Bubble lattice `B_{m,n}`.
35
+
36
+ We have
37
+
38
+ .. MATH::
39
+
40
+ |B_{m,n}| = \sum_{i=0}^m \sum_{j=0}^n \binom{i+j}{j} \binom{m}{i} \binom{n}{j}.
41
+
42
+ This is also the cardinality of the Shuffle lattice `S_{m,n}`.
43
+
44
+ INPUT:
45
+
46
+ - ``m`` -- integer
47
+ - ``n`` -- integer
48
+
49
+ EXAMPLES::
50
+
51
+ sage: from sage.combinat.posets.bubble_shuffle import bubble_cardinality
52
+ sage: bubble_cardinality(2,1)
53
+ 12
54
+ """
55
+ return ZZ.sum(ZZ(i + j).binomial(j) * ZZ(m).binomial(i) * ZZ(n).binomial(j)
56
+ for i in range(m + 1) for j in range(n + 1))
57
+
58
+
59
+ def bubble_set(m, n) -> Iterator[tuple[int, ...]]:
60
+ r"""
61
+ Return the underlying set of the Bubble lattice `B_{m,n}`.
62
+
63
+ This is the set of all shuffles of subsets of `\{-m,\ldots,-1\}`
64
+ with subsets of `\{1,\ldots,n\}`.
65
+
66
+ This is also the underlying set of the Shuffle lattice `S_{m,n}`.
67
+
68
+ INPUT:
69
+
70
+ - ``m`` -- integer
71
+ - ``n`` -- integer
72
+
73
+ EXAMPLES::
74
+
75
+ sage: from sage.combinat.posets.bubble_shuffle import bubble_set
76
+ sage: list(bubble_set(2,1))
77
+ [(),
78
+ (1,),
79
+ (-1,),
80
+ (-1, 1),
81
+ (1, -1),
82
+ (-2,),
83
+ (-2, 1),
84
+ (1, -2),
85
+ (-1, -2),
86
+ (-1, -2, 1),
87
+ (1, -1, -2),
88
+ (-1, 1, -2)]
89
+ """
90
+ X = [-i for i in range(1, m + 1)]
91
+ Y = list(range(1, n + 1))
92
+ for subX in subsets(X):
93
+ wX = tuple(subX)
94
+ for subY in subsets(Y):
95
+ for shu in ShuffleProduct(wX, tuple(subY)):
96
+ yield tuple(shu)
97
+
98
+
99
+ def bubble_coverings(m, n, mot, transpose=True) -> Iterator[tuple[int, ...]]:
100
+ """
101
+ Return generating relations of the Bubble lattice `B_{m,n}`.
102
+
103
+ Note that these relations include the cover relations, but not only them.
104
+
105
+ This can also produce covers in the Shuffle lattice `S_{m,n}`.
106
+
107
+ INPUT:
108
+
109
+ - ``m`` -- integer
110
+ - ``n`` -- integer
111
+ - ``mot`` -- element of `B_{m,n}` as a tuple
112
+ - ``transpose`` -- boolean (default: ``True``) whether to return covers
113
+ in the Bubble lattice or in the Shuffle lattice
114
+
115
+ EXAMPLES::
116
+
117
+ sage: from sage.combinat.posets.bubble_shuffle import bubble_coverings
118
+ sage: list(bubble_coverings(2, 1, (-2, 1)))
119
+ [(1,), (1, -2)]
120
+ sage: list(bubble_coverings(2, 1, (-2, 1), False))
121
+ [(1,)]
122
+ """
123
+ # removal of one x
124
+ for j, letter in enumerate(mot):
125
+ if letter < 0:
126
+ yield tuple(mot[:j] + mot[j + 1:])
127
+
128
+ # insertion of one y
129
+ for j in range(len(mot) + 1):
130
+ debut, fin = tuple(mot[:j]), tuple(mot[j:])
131
+ yavant = max((letter for letter in debut if letter > 0), default=0)
132
+ yapres = min((letter for letter in fin if letter > 0), default=n + 1)
133
+ for y in range(yavant + 1, yapres):
134
+ yield debut + (y,) + fin
135
+
136
+ if not transpose:
137
+ return
138
+
139
+ # exchange from xy to yx
140
+ for j in range(len(mot) - 1):
141
+ if mot[j] < 0 and mot[j + 1] > 0:
142
+ mot2 = list(mot)
143
+ mot2[j] = mot[j + 1]
144
+ mot2[j + 1] = mot[j]
145
+ yield tuple(mot2)
146
+
147
+
148
+ def BubblePoset(m, n) -> LatticePoset:
149
+ r"""
150
+ Return the Bubble lattice `B_{m,n}`.
151
+
152
+ Bubble lattices were introduced by McConville and Mühle in [MacCM2022]_.
153
+
154
+ The Bubble lattice `B_{m,n}` and the Shuffle lattice `S_{m,n}` share
155
+ the same underlying set, namely all shuffles of two subwords of the
156
+ two words `X = (x_1,x_2,\ldots,x_{m})` and `Y = (y_1,y_2,\ldots,y_n)`.
157
+
158
+ The Bubble poset is an extension of the Shuffle poset, by adding the
159
+ exchange of adjacent letters from `X` and `Y`, from `xy` to `yx`.
160
+
161
+ .. SEEALSO::
162
+
163
+ :func:`ShufflePoset`, :func:`noncrossing_bipartite_complex`
164
+
165
+ EXAMPLES::
166
+
167
+ sage: P = posets.BubblePoset(2,1); P
168
+ Finite lattice containing 12 elements
169
+ sage: P.zeta_polynomial()
170
+ 1/40*q^5 + 7/24*q^4 + 23/24*q^3 - 7/24*q^2 + 1/60*q
171
+ """
172
+ bubbles = list(bubble_set(m, n))
173
+
174
+ dg = DiGraph([(x, y) for x in bubbles for y in bubble_coverings(m, n, x)])
175
+ # here we have more than just the cover relations
176
+ return LatticePoset(dg)
177
+
178
+
179
+ def ShufflePoset(m, n) -> LatticePoset:
180
+ r"""
181
+ Return the Shuffle lattice `S_{m,n}`.
182
+
183
+ Shuffle lattices were defined by Greene in [Gre1988]_.
184
+
185
+ The Bubble lattice `B_{m,n}` and the Shuffle lattice `S_{m,n}` share
186
+ the same underlying set, namely all shuffles of two subwords of the
187
+ two words `X = (x_1,x_2,\ldots,x_{m})` and `Y = (y_1,y_2,\ldots,y_n)`.
188
+
189
+ The partial order in the Shuffle poset is defined by either inserting a
190
+ letter from `Y` or deleting a letter from `X`.
191
+
192
+ .. SEEALSO:: :func:`BubblePoset`
193
+
194
+ EXAMPLES::
195
+
196
+ sage: P = posets.ShufflePoset(2,1); P
197
+ Finite lattice containing 12 elements
198
+ sage: P.zeta_polynomial()
199
+ 2*q^3 - q^2
200
+ """
201
+ bubbles = list(bubble_set(m, n))
202
+
203
+ dg = DiGraph([(x, y) for x in bubbles
204
+ for y in bubble_coverings(m, n, x, transpose=False)])
205
+ # here we just have the cover relations
206
+ return LatticePoset(dg, cover_relations=True)
207
+
208
+
209
+ def noncrossing_bipartite_complex(m, n):
210
+ """
211
+ Return a simplicial complex related to the Bubble lattice `B_{m,n}`.
212
+
213
+ This is a pure spherical simplicial complex, whose flip graph
214
+ is isomorphic to the Hasse diagram of `B_{m,n}`.
215
+
216
+ .. SEEALSO:: :func:`BubblePoset`
217
+
218
+ EXAMPLES::
219
+
220
+ sage: C = simplicial_complexes.NoncrossingBipartiteComplex(2,1)
221
+ sage: H = C.flip_graph()
222
+ sage: P = posets.BubblePoset(2,1)
223
+ sage: H.is_isomorphic(P.hasse_diagram().to_undirected())
224
+ True
225
+ """
226
+ vertices: list[tuple] = [("x", i) for i in range(1, m + 1)]
227
+ vertices.extend(("y", i) for i in range(1, n + 1))
228
+ vertices.extend(("xy", i, j) for i in range(m + 1) for j in range(n + 1)
229
+ if i or j)
230
+
231
+ def compatible(v: tuple, w: tuple) -> bool:
232
+ if v == w:
233
+ return False
234
+ if v[0] != "xy" and w[0] != "xy":
235
+ return True
236
+ if v[0] == "xy" and w[0] == "xy":
237
+ return not ((w[1] < v[1] and w[2] > v[2])
238
+ or (v[1] < w[1] and v[2] > w[2]))
239
+ if v[0] == "xy":
240
+ if w[0] == "x":
241
+ return v[1] != w[1]
242
+ return v[2] != w[1]
243
+ if v[0] == "x":
244
+ return w[1] != v[1]
245
+ return w[2] != v[1]
246
+
247
+ return Graph([vertices, compatible]).clique_complex()