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