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,269 @@
|
|
1
|
+
# sage_setup: distribution = sagemath-graphs
|
2
|
+
# sage.doctest: needs sage.combinat
|
3
|
+
r"""
|
4
|
+
`\nu`-Tamari lattice
|
5
|
+
|
6
|
+
A class of the `\nu`-Tamari lattice, and `(\delta,\nu)`-Tamari lattice (or alt
|
7
|
+
`\nu`-Tamari lattices), see [PRV2017]_ and [CC2023]_ for details.
|
8
|
+
|
9
|
+
These lattices depend on a parameter `\nu` where `\nu` is a path of North
|
10
|
+
and East steps. The alt `\nu`-Tamari lattice depends on an additional parameter
|
11
|
+
`\delta`, which is an increment vector with respect to `\nu`.
|
12
|
+
|
13
|
+
The elements are :func:`\nu-Dyck paths<sage.combinat.nu_dyck_word.NuDyckWord>`
|
14
|
+
which are weakly above `\nu`.
|
15
|
+
|
16
|
+
To use the provided functionality, you should import `\nu`-Tamari lattices by
|
17
|
+
typing::
|
18
|
+
|
19
|
+
sage: from sage.combinat.nu_tamari_lattice import NuTamariLattice, AltNuTamariLattice
|
20
|
+
|
21
|
+
Then, ::
|
22
|
+
|
23
|
+
sage: NuTamariLattice([1,1,1,0,0,1,1,0])
|
24
|
+
Finite lattice containing 6 elements
|
25
|
+
sage: NuTamariLattice([0,0,0,1,1,0,0,1])
|
26
|
+
Finite lattice containing 40 elements
|
27
|
+
sage: AltNuTamariLattice([0,0,0,1,1,0,0,1])
|
28
|
+
Finite lattice containing 40 elements
|
29
|
+
sage: AltNuTamariLattice([0,0,0,1,1,0,0,1], [0,1,0])
|
30
|
+
Finite lattice containing 40 elements
|
31
|
+
|
32
|
+
|
33
|
+
The classical **Tamari lattices** and the **Generalized Tamari lattices** are
|
34
|
+
special cases of this construction and are also available with this poset::
|
35
|
+
|
36
|
+
sage: NuTamariLattice([1,0,1,0,1,0])
|
37
|
+
Finite lattice containing 5 elements
|
38
|
+
|
39
|
+
sage: NuTamariLattice([1,0,0,1,0,0,1,0,0])
|
40
|
+
Finite lattice containing 12 elements
|
41
|
+
|
42
|
+
.. SEEALSO::
|
43
|
+
|
44
|
+
For more detailed information see :meth:`NuTamariLattice` and
|
45
|
+
:meth:`AltNuTamariLattice`. For more
|
46
|
+
information on the standard Tamari lattice see
|
47
|
+
:meth:`sage.combinat.tamari_lattices.TamariLattice`,
|
48
|
+
:meth:`sage.combinat.tamari_lattices.GeneralizedTamariLattice`
|
49
|
+
|
50
|
+
AUTHORS:
|
51
|
+
|
52
|
+
- Aram Dermenjian (2020-09-26): initial version
|
53
|
+
|
54
|
+
- Clément Chenevière (2024-02-01): added the alt `\nu`-Tamari lattices
|
55
|
+
"""
|
56
|
+
# ****************************************************************************
|
57
|
+
# Copyright (C) 2020-2020 Aram Dermenjian <aram.dermenjian@gmail.com>
|
58
|
+
#
|
59
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
60
|
+
#
|
61
|
+
# This code is distributed in the hope that it will be useful,
|
62
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
63
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
64
|
+
# General Public License for more details.
|
65
|
+
#
|
66
|
+
# The full text of the GPL is available at:
|
67
|
+
#
|
68
|
+
# https://www.gnu.org/licenses/
|
69
|
+
# ****************************************************************************
|
70
|
+
from sage.combinat.nu_dyck_word import NuDyckWords, NuDyckWord
|
71
|
+
from sage.combinat.posets.lattices import LatticePoset
|
72
|
+
|
73
|
+
|
74
|
+
def NuTamariLattice(nu):
|
75
|
+
r"""
|
76
|
+
Return the `\nu`-Tamari lattice.
|
77
|
+
|
78
|
+
INPUT:
|
79
|
+
|
80
|
+
- `\nu` -- list of 0s and 1s or a string of 0s and 1s
|
81
|
+
|
82
|
+
OUTPUT: a finite lattice
|
83
|
+
|
84
|
+
The elements of the lattice are
|
85
|
+
:func:`\nu-Dyck paths<sage.combinat.nu_dyck_word.NuDyckWord>` weakly above
|
86
|
+
`\nu`.
|
87
|
+
|
88
|
+
The usual :wikipedia:`Tamari lattice<Tamari_lattice>` is the special case
|
89
|
+
where `\nu = (NE)^h` where `h` is the height.
|
90
|
+
|
91
|
+
Other special cases give the `m`-Tamari lattices studied in [BMFPR]_.
|
92
|
+
|
93
|
+
EXAMPLES::
|
94
|
+
|
95
|
+
sage: from sage.combinat.nu_tamari_lattice import NuTamariLattice
|
96
|
+
sage: NuTamariLattice([1,0,1,0,0,1,0])
|
97
|
+
Finite lattice containing 7 elements
|
98
|
+
sage: NuTamariLattice([1,0,1,0,1,0])
|
99
|
+
Finite lattice containing 5 elements
|
100
|
+
sage: NuTamariLattice([1,0,1,0,1,0,1,0])
|
101
|
+
Finite lattice containing 14 elements
|
102
|
+
sage: NuTamariLattice([1,0,1,0,1,0,0,0,1])
|
103
|
+
Finite lattice containing 24 elements
|
104
|
+
"""
|
105
|
+
NDW = NuDyckWords(nu)
|
106
|
+
covers = []
|
107
|
+
elements = []
|
108
|
+
height = NDW[0].height()
|
109
|
+
for ndw in NDW:
|
110
|
+
elements.append(ndw)
|
111
|
+
for i in range(1, height + 1):
|
112
|
+
new_ndw = ndw.mutate(i)
|
113
|
+
if new_ndw is not None:
|
114
|
+
covers.append([ndw, new_ndw])
|
115
|
+
return LatticePoset([elements, covers])
|
116
|
+
|
117
|
+
|
118
|
+
def delta_swap(p, k, delta):
|
119
|
+
r"""
|
120
|
+
Perform a covering move in the `(\delta,\nu)`-Tamari lattice (or alt
|
121
|
+
`\nu`-Tamari lattice, see [CC2023]_).
|
122
|
+
|
123
|
+
The letter at position `k` is a North step of the `\nu`-Dyck word `p`, and
|
124
|
+
must be preceded by an East step.
|
125
|
+
|
126
|
+
The vector `\delta = (\delta_1, \dots, \delta_n)` is an increment vector
|
127
|
+
with respect to the path `\nu`, that is to say `\delta_i \leq \nu_i`, where
|
128
|
+
`\nu_i` is the number of East steps following the `i`-th North step of
|
129
|
+
`\nu`.
|
130
|
+
|
131
|
+
INPUT:
|
132
|
+
|
133
|
+
- ``p`` -- a `\nu`-Dyck word
|
134
|
+
|
135
|
+
- ``k`` -- integer between `0` and ``p.length()-1``
|
136
|
+
|
137
|
+
- ``delta`` -- list of nonnegative integers of length ``p.height()``
|
138
|
+
|
139
|
+
OUTPUT: a `\nu`-Dyck word
|
140
|
+
|
141
|
+
EXAMPLES::
|
142
|
+
|
143
|
+
sage: from sage.combinat.nu_tamari_lattice import delta_swap
|
144
|
+
sage: delta_swap(NuDyckWord('0101', '0101'), 3, delta = [1, 0])
|
145
|
+
[0, 1, 1, 0]
|
146
|
+
sage: delta_swap(NuDyckWord('1001110100', '0100010111'), 3, [3, 1, 0, 0, 0])
|
147
|
+
[1, 0, 1, 1, 1, 0, 0, 1, 0, 0]
|
148
|
+
sage: delta_swap(NuDyckWord('10100101000', '01001000110'), 2, [2, 3, 0, 1])
|
149
|
+
[1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0]
|
150
|
+
sage: delta_swap(NuDyckWord('10100101000', '01001000110'), 2, [1, 1, 0, 0])
|
151
|
+
[1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0]
|
152
|
+
|
153
|
+
|
154
|
+
TESTS::
|
155
|
+
|
156
|
+
sage: delta_swap(NuDyckWord('10011101000', '01000101110'), 0, [3, 1, 0, 0, 1])
|
157
|
+
Traceback (most recent call last):
|
158
|
+
...
|
159
|
+
ValueError: there is no such covering move
|
160
|
+
sage: delta_swap(NuDyckWord('10011101000', '01000101110'), 1, [3, 1, 0, 0, 1])
|
161
|
+
Traceback (most recent call last):
|
162
|
+
...
|
163
|
+
ValueError: there is no such covering move
|
164
|
+
sage: delta_swap(NuDyckWord('10011101000', '01000101110'), 11, [3, 1, 0, 0, 1])
|
165
|
+
Traceback (most recent call last):
|
166
|
+
...
|
167
|
+
ValueError: the index is greater than the length of the path
|
168
|
+
"""
|
169
|
+
if k >= p.length():
|
170
|
+
raise ValueError("the index is greater than the length of the path")
|
171
|
+
# if delta is None:
|
172
|
+
# delta = [len(_) for _ in str(p._nu).split(sep='1')[1:]]
|
173
|
+
if k == 0 or p[k - 1] == 1:
|
174
|
+
raise ValueError("there is no such covering move")
|
175
|
+
found = False
|
176
|
+
i = p[:k].count(1)
|
177
|
+
j = k
|
178
|
+
alt = 0
|
179
|
+
while not found and j <= p.length() - 1:
|
180
|
+
if p[j]:
|
181
|
+
alt += delta[i]
|
182
|
+
i += 1
|
183
|
+
else:
|
184
|
+
alt -= 1
|
185
|
+
if alt == 0:
|
186
|
+
found = True
|
187
|
+
j += 1
|
188
|
+
q = p[:k - 1] + p[k:j] + [p[k - 1]] + p[j:]
|
189
|
+
return NuDyckWord(q, p._nu)
|
190
|
+
|
191
|
+
|
192
|
+
def AltNuTamariLattice(nu, delta=None):
|
193
|
+
r"""
|
194
|
+
Return the `(\delta,\nu)`-Tamari lattice (or alt `\nu`-Tamari lattice).
|
195
|
+
|
196
|
+
For more information, see [CC2023]_.
|
197
|
+
|
198
|
+
The path `\nu` is a path of North steps (represented as `1` s) and East
|
199
|
+
steps (represented as `0` s).
|
200
|
+
|
201
|
+
The vector `\delta = (\delta_1, \dots, \delta_n)` is an increment vector
|
202
|
+
with respect to the path `\nu`, that is to say `\delta_i \leq \nu_i`, where
|
203
|
+
`\nu_i` is the number of `0` s following the `i`-th `1` of `\nu`. If not
|
204
|
+
provided, `\delta` is set by default to produce the classical `\nu`-Tamari
|
205
|
+
lattice.
|
206
|
+
|
207
|
+
INPUT:
|
208
|
+
|
209
|
+
- `\nu` -- list of 0s and 1s or a string of 0s and 1s
|
210
|
+
|
211
|
+
- `\delta` -- list of nonnegative integers
|
212
|
+
|
213
|
+
OUTPUT: a finite lattice
|
214
|
+
|
215
|
+
EXAMPLES::
|
216
|
+
|
217
|
+
sage: from sage.combinat.nu_tamari_lattice import AltNuTamariLattice, NuTamariLattice
|
218
|
+
sage: AltNuTamariLattice('01001', [0, 0])
|
219
|
+
Finite lattice containing 7 elements
|
220
|
+
sage: AltNuTamariLattice('01001', [1, 0])
|
221
|
+
Finite lattice containing 7 elements
|
222
|
+
sage: AltNuTamariLattice('01001') == AltNuTamariLattice('01001', [2, 0])
|
223
|
+
True
|
224
|
+
sage: nu = '00100100101'; P = AltNuTamariLattice(nu); Q = NuTamariLattice(nu); P == Q
|
225
|
+
True
|
226
|
+
|
227
|
+
TESTS::
|
228
|
+
|
229
|
+
sage: AltNuTamariLattice('012', [0,0])
|
230
|
+
Traceback (most recent call last):
|
231
|
+
...
|
232
|
+
ValueError: nu must be a list or a string of 0s and 1s
|
233
|
+
sage: AltNuTamariLattice([0,10,0,11], [2,0,0])
|
234
|
+
Traceback (most recent call last):
|
235
|
+
...
|
236
|
+
ValueError: nu must be a list or a string of 0s and 1s
|
237
|
+
sage: AltNuTamariLattice('01001', [0, 1, 0])
|
238
|
+
Traceback (most recent call last):
|
239
|
+
...
|
240
|
+
ValueError: delta is not a valid increment vector
|
241
|
+
sage: AltNuTamariLattice('0100101', [3, 0, 0])
|
242
|
+
Traceback (most recent call last):
|
243
|
+
...
|
244
|
+
ValueError: delta is not a valid increment vector
|
245
|
+
|
246
|
+
REFERENCES:
|
247
|
+
|
248
|
+
- [PRV2017]_
|
249
|
+
|
250
|
+
- [CC2023]_
|
251
|
+
"""
|
252
|
+
if not ((isinstance(nu, (list, tuple)) and all(x in [0, 1] for x in nu)) or
|
253
|
+
(isinstance(nu, str) and all(x in ['0', '1'] for x in nu))):
|
254
|
+
raise ValueError("nu must be a list or a string of 0s and 1s")
|
255
|
+
nu = [int(a) for a in nu]
|
256
|
+
# transforms nu in a sequence of 0s and 1s if it is a list
|
257
|
+
nu = ''.join(str(a) for a in nu)
|
258
|
+
# produces delta if delta is None, and check that delta is valid otherwise
|
259
|
+
deltamax = [len(a) for a in nu.split(sep='1')[1:]]
|
260
|
+
if delta is None:
|
261
|
+
delta = deltamax
|
262
|
+
elif len(delta) != len(deltamax) or any(delta[i] > deltamax[i] for i in range(len(delta))):
|
263
|
+
raise ValueError("delta is not a valid increment vector")
|
264
|
+
|
265
|
+
def covers(p):
|
266
|
+
return [delta_swap(p, k, delta=delta) for k in range(1, p.length())
|
267
|
+
if not p[k - 1] and p[k]]
|
268
|
+
return LatticePoset({p: covers(p) for p in NuDyckWords(nu)},
|
269
|
+
check=False)
|