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