passagemath-combinat 10.6.42__cp314-cp314-musllinux_1_2_x86_64.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 (400) hide show
  1. passagemath_combinat/__init__.py +3 -0
  2. passagemath_combinat-10.6.42.dist-info/METADATA +160 -0
  3. passagemath_combinat-10.6.42.dist-info/RECORD +400 -0
  4. passagemath_combinat-10.6.42.dist-info/WHEEL +5 -0
  5. passagemath_combinat-10.6.42.dist-info/top_level.txt +3 -0
  6. passagemath_combinat.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
  7. passagemath_combinat.libs/libsymmetrica-81fe8739.so.3.0.0 +0 -0
  8. sage/algebras/affine_nil_temperley_lieb.py +263 -0
  9. sage/algebras/all.py +24 -0
  10. sage/algebras/all__sagemath_combinat.py +35 -0
  11. sage/algebras/askey_wilson.py +935 -0
  12. sage/algebras/associated_graded.py +345 -0
  13. sage/algebras/cellular_basis.py +350 -0
  14. sage/algebras/cluster_algebra.py +2766 -0
  15. sage/algebras/down_up_algebra.py +860 -0
  16. sage/algebras/free_algebra.py +1698 -0
  17. sage/algebras/free_algebra_element.py +345 -0
  18. sage/algebras/free_algebra_quotient.py +405 -0
  19. sage/algebras/free_algebra_quotient_element.py +295 -0
  20. sage/algebras/free_zinbiel_algebra.py +885 -0
  21. sage/algebras/hall_algebra.py +783 -0
  22. sage/algebras/hecke_algebras/all.py +4 -0
  23. sage/algebras/hecke_algebras/ariki_koike_algebra.py +1796 -0
  24. sage/algebras/hecke_algebras/ariki_koike_specht_modules.py +475 -0
  25. sage/algebras/hecke_algebras/cubic_hecke_algebra.py +3520 -0
  26. sage/algebras/hecke_algebras/cubic_hecke_base_ring.py +1473 -0
  27. sage/algebras/hecke_algebras/cubic_hecke_matrix_rep.py +1079 -0
  28. sage/algebras/iwahori_hecke_algebra.py +3095 -0
  29. sage/algebras/jordan_algebra.py +1773 -0
  30. sage/algebras/lie_conformal_algebras/abelian_lie_conformal_algebra.py +113 -0
  31. sage/algebras/lie_conformal_algebras/affine_lie_conformal_algebra.py +156 -0
  32. sage/algebras/lie_conformal_algebras/all.py +18 -0
  33. sage/algebras/lie_conformal_algebras/bosonic_ghosts_lie_conformal_algebra.py +134 -0
  34. sage/algebras/lie_conformal_algebras/examples.py +43 -0
  35. sage/algebras/lie_conformal_algebras/fermionic_ghosts_lie_conformal_algebra.py +131 -0
  36. sage/algebras/lie_conformal_algebras/finitely_freely_generated_lca.py +139 -0
  37. sage/algebras/lie_conformal_algebras/free_bosons_lie_conformal_algebra.py +174 -0
  38. sage/algebras/lie_conformal_algebras/free_fermions_lie_conformal_algebra.py +167 -0
  39. sage/algebras/lie_conformal_algebras/freely_generated_lie_conformal_algebra.py +107 -0
  40. sage/algebras/lie_conformal_algebras/graded_lie_conformal_algebra.py +135 -0
  41. sage/algebras/lie_conformal_algebras/lie_conformal_algebra.py +353 -0
  42. sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py +236 -0
  43. sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_basis.py +78 -0
  44. sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_structure_coefs.py +328 -0
  45. sage/algebras/lie_conformal_algebras/n2_lie_conformal_algebra.py +117 -0
  46. sage/algebras/lie_conformal_algebras/neveu_schwarz_lie_conformal_algebra.py +86 -0
  47. sage/algebras/lie_conformal_algebras/virasoro_lie_conformal_algebra.py +82 -0
  48. sage/algebras/lie_conformal_algebras/weyl_lie_conformal_algebra.py +205 -0
  49. sage/algebras/nil_coxeter_algebra.py +191 -0
  50. sage/algebras/q_commuting_polynomials.py +673 -0
  51. sage/algebras/q_system.py +608 -0
  52. sage/algebras/quantum_clifford.py +959 -0
  53. sage/algebras/quantum_groups/ace_quantum_onsager.py +693 -0
  54. sage/algebras/quantum_groups/all.py +9 -0
  55. sage/algebras/quantum_groups/fock_space.py +2219 -0
  56. sage/algebras/quantum_groups/q_numbers.py +207 -0
  57. sage/algebras/quantum_groups/quantum_group_gap.py +2695 -0
  58. sage/algebras/quantum_groups/representations.py +591 -0
  59. sage/algebras/quantum_matrix_coordinate_algebra.py +1006 -0
  60. sage/algebras/quantum_oscillator.py +623 -0
  61. sage/algebras/quaternion_algebra.py +20 -0
  62. sage/algebras/quaternion_algebra_element.py +55 -0
  63. sage/algebras/rational_cherednik_algebra.py +525 -0
  64. sage/algebras/schur_algebra.py +670 -0
  65. sage/algebras/shuffle_algebra.py +1011 -0
  66. sage/algebras/splitting_algebra.py +779 -0
  67. sage/algebras/tensor_algebra.py +709 -0
  68. sage/algebras/yangian.py +1082 -0
  69. sage/algebras/yokonuma_hecke_algebra.py +1018 -0
  70. sage/all__sagemath_combinat.py +35 -0
  71. sage/combinat/SJT.py +255 -0
  72. sage/combinat/affine_permutation.py +2405 -0
  73. sage/combinat/algebraic_combinatorics.py +55 -0
  74. sage/combinat/all.py +53 -0
  75. sage/combinat/all__sagemath_combinat.py +195 -0
  76. sage/combinat/alternating_sign_matrix.py +2063 -0
  77. sage/combinat/baxter_permutations.py +346 -0
  78. sage/combinat/bijectionist.py +3220 -0
  79. sage/combinat/binary_recurrence_sequences.py +1180 -0
  80. sage/combinat/blob_algebra.py +685 -0
  81. sage/combinat/catalog_partitions.py +27 -0
  82. sage/combinat/chas/all.py +23 -0
  83. sage/combinat/chas/fsym.py +1180 -0
  84. sage/combinat/chas/wqsym.py +2601 -0
  85. sage/combinat/cluster_complex.py +326 -0
  86. sage/combinat/colored_permutations.py +2039 -0
  87. sage/combinat/colored_permutations_representations.py +964 -0
  88. sage/combinat/composition_signed.py +142 -0
  89. sage/combinat/composition_tableau.py +855 -0
  90. sage/combinat/constellation.py +1729 -0
  91. sage/combinat/core.py +751 -0
  92. sage/combinat/counting.py +12 -0
  93. sage/combinat/crystals/affine.py +742 -0
  94. sage/combinat/crystals/affine_factorization.py +518 -0
  95. sage/combinat/crystals/affinization.py +331 -0
  96. sage/combinat/crystals/alcove_path.py +2013 -0
  97. sage/combinat/crystals/all.py +22 -0
  98. sage/combinat/crystals/bkk_crystals.py +141 -0
  99. sage/combinat/crystals/catalog.py +115 -0
  100. sage/combinat/crystals/catalog_elementary_crystals.py +18 -0
  101. sage/combinat/crystals/catalog_infinity_crystals.py +33 -0
  102. sage/combinat/crystals/catalog_kirillov_reshetikhin.py +18 -0
  103. sage/combinat/crystals/crystals.py +257 -0
  104. sage/combinat/crystals/direct_sum.py +260 -0
  105. sage/combinat/crystals/elementary_crystals.py +1251 -0
  106. sage/combinat/crystals/fast_crystals.py +441 -0
  107. sage/combinat/crystals/fully_commutative_stable_grothendieck.py +1205 -0
  108. sage/combinat/crystals/generalized_young_walls.py +1076 -0
  109. sage/combinat/crystals/highest_weight_crystals.py +436 -0
  110. sage/combinat/crystals/induced_structure.py +695 -0
  111. sage/combinat/crystals/infinity_crystals.py +730 -0
  112. sage/combinat/crystals/kac_modules.py +863 -0
  113. sage/combinat/crystals/kirillov_reshetikhin.py +4196 -0
  114. sage/combinat/crystals/kyoto_path_model.py +497 -0
  115. sage/combinat/crystals/letters.cpython-314-x86_64-linux-musl.so +0 -0
  116. sage/combinat/crystals/letters.pxd +79 -0
  117. sage/combinat/crystals/letters.pyx +3056 -0
  118. sage/combinat/crystals/littelmann_path.py +1518 -0
  119. sage/combinat/crystals/monomial_crystals.py +1262 -0
  120. sage/combinat/crystals/multisegments.py +462 -0
  121. sage/combinat/crystals/mv_polytopes.py +467 -0
  122. sage/combinat/crystals/pbw_crystal.py +511 -0
  123. sage/combinat/crystals/pbw_datum.cpython-314-x86_64-linux-musl.so +0 -0
  124. sage/combinat/crystals/pbw_datum.pxd +4 -0
  125. sage/combinat/crystals/pbw_datum.pyx +487 -0
  126. sage/combinat/crystals/polyhedral_realization.py +372 -0
  127. sage/combinat/crystals/spins.cpython-314-x86_64-linux-musl.so +0 -0
  128. sage/combinat/crystals/spins.pxd +21 -0
  129. sage/combinat/crystals/spins.pyx +756 -0
  130. sage/combinat/crystals/star_crystal.py +290 -0
  131. sage/combinat/crystals/subcrystal.py +464 -0
  132. sage/combinat/crystals/tensor_product.py +1177 -0
  133. sage/combinat/crystals/tensor_product_element.cpython-314-x86_64-linux-musl.so +0 -0
  134. sage/combinat/crystals/tensor_product_element.pxd +35 -0
  135. sage/combinat/crystals/tensor_product_element.pyx +1870 -0
  136. sage/combinat/crystals/virtual_crystal.py +420 -0
  137. sage/combinat/cyclic_sieving_phenomenon.py +204 -0
  138. sage/combinat/debruijn_sequence.cpython-314-x86_64-linux-musl.so +0 -0
  139. sage/combinat/debruijn_sequence.pyx +355 -0
  140. sage/combinat/decorated_permutation.py +270 -0
  141. sage/combinat/degree_sequences.cpython-314-x86_64-linux-musl.so +0 -0
  142. sage/combinat/degree_sequences.pyx +588 -0
  143. sage/combinat/derangements.py +527 -0
  144. sage/combinat/descent_algebra.py +1008 -0
  145. sage/combinat/diagram.py +1551 -0
  146. sage/combinat/diagram_algebras.py +5886 -0
  147. sage/combinat/dyck_word.py +4349 -0
  148. sage/combinat/e_one_star.py +1623 -0
  149. sage/combinat/enumerated_sets.py +123 -0
  150. sage/combinat/expnums.cpython-314-x86_64-linux-musl.so +0 -0
  151. sage/combinat/expnums.pyx +148 -0
  152. sage/combinat/fast_vector_partitions.cpython-314-x86_64-linux-musl.so +0 -0
  153. sage/combinat/fast_vector_partitions.pyx +346 -0
  154. sage/combinat/fqsym.py +1977 -0
  155. sage/combinat/free_dendriform_algebra.py +954 -0
  156. sage/combinat/free_prelie_algebra.py +1141 -0
  157. sage/combinat/fully_commutative_elements.py +1077 -0
  158. sage/combinat/fully_packed_loop.py +1523 -0
  159. sage/combinat/gelfand_tsetlin_patterns.py +1409 -0
  160. sage/combinat/gray_codes.py +311 -0
  161. sage/combinat/grossman_larson_algebras.py +667 -0
  162. sage/combinat/growth.py +4352 -0
  163. sage/combinat/hall_polynomial.py +188 -0
  164. sage/combinat/hillman_grassl.py +866 -0
  165. sage/combinat/integer_matrices.py +329 -0
  166. sage/combinat/integer_vectors_mod_permgroup.py +1238 -0
  167. sage/combinat/k_tableau.py +4564 -0
  168. sage/combinat/kazhdan_lusztig.py +215 -0
  169. sage/combinat/key_polynomial.py +885 -0
  170. sage/combinat/knutson_tao_puzzles.py +2286 -0
  171. sage/combinat/lr_tableau.py +311 -0
  172. sage/combinat/matrices/all.py +24 -0
  173. sage/combinat/matrices/hadamard_matrix.py +3790 -0
  174. sage/combinat/matrices/latin.py +2912 -0
  175. sage/combinat/misc.py +401 -0
  176. sage/combinat/multiset_partition_into_sets_ordered.py +3541 -0
  177. sage/combinat/ncsf_qsym/all.py +21 -0
  178. sage/combinat/ncsf_qsym/combinatorics.py +317 -0
  179. sage/combinat/ncsf_qsym/generic_basis_code.py +1427 -0
  180. sage/combinat/ncsf_qsym/ncsf.py +5637 -0
  181. sage/combinat/ncsf_qsym/qsym.py +4053 -0
  182. sage/combinat/ncsf_qsym/tutorial.py +447 -0
  183. sage/combinat/ncsym/all.py +21 -0
  184. sage/combinat/ncsym/bases.py +855 -0
  185. sage/combinat/ncsym/dual.py +593 -0
  186. sage/combinat/ncsym/ncsym.py +2076 -0
  187. sage/combinat/necklace.py +551 -0
  188. sage/combinat/non_decreasing_parking_function.py +634 -0
  189. sage/combinat/nu_dyck_word.py +1474 -0
  190. sage/combinat/output.py +861 -0
  191. sage/combinat/parallelogram_polyomino.py +4326 -0
  192. sage/combinat/parking_functions.py +1602 -0
  193. sage/combinat/partition_algebra.py +1998 -0
  194. sage/combinat/partition_kleshchev.py +1982 -0
  195. sage/combinat/partition_shifting_algebras.py +584 -0
  196. sage/combinat/partition_tuple.py +3114 -0
  197. sage/combinat/path_tableaux/all.py +13 -0
  198. sage/combinat/path_tableaux/catalog.py +29 -0
  199. sage/combinat/path_tableaux/dyck_path.py +380 -0
  200. sage/combinat/path_tableaux/frieze.py +476 -0
  201. sage/combinat/path_tableaux/path_tableau.py +728 -0
  202. sage/combinat/path_tableaux/semistandard.py +510 -0
  203. sage/combinat/perfect_matching.py +779 -0
  204. sage/combinat/plane_partition.py +3300 -0
  205. sage/combinat/q_bernoulli.cpython-314-x86_64-linux-musl.so +0 -0
  206. sage/combinat/q_bernoulli.pyx +128 -0
  207. sage/combinat/quickref.py +81 -0
  208. sage/combinat/recognizable_series.py +2051 -0
  209. sage/combinat/regular_sequence.py +4316 -0
  210. sage/combinat/regular_sequence_bounded.py +543 -0
  211. sage/combinat/restricted_growth.py +81 -0
  212. sage/combinat/ribbon.py +20 -0
  213. sage/combinat/ribbon_shaped_tableau.py +489 -0
  214. sage/combinat/ribbon_tableau.py +1180 -0
  215. sage/combinat/rigged_configurations/all.py +46 -0
  216. sage/combinat/rigged_configurations/bij_abstract_class.py +548 -0
  217. sage/combinat/rigged_configurations/bij_infinity.py +370 -0
  218. sage/combinat/rigged_configurations/bij_type_A.py +163 -0
  219. sage/combinat/rigged_configurations/bij_type_A2_dual.py +338 -0
  220. sage/combinat/rigged_configurations/bij_type_A2_even.py +218 -0
  221. sage/combinat/rigged_configurations/bij_type_A2_odd.py +199 -0
  222. sage/combinat/rigged_configurations/bij_type_B.py +900 -0
  223. sage/combinat/rigged_configurations/bij_type_C.py +267 -0
  224. sage/combinat/rigged_configurations/bij_type_D.py +771 -0
  225. sage/combinat/rigged_configurations/bij_type_D_tri.py +392 -0
  226. sage/combinat/rigged_configurations/bij_type_D_twisted.py +576 -0
  227. sage/combinat/rigged_configurations/bij_type_E67.py +402 -0
  228. sage/combinat/rigged_configurations/bijection.py +143 -0
  229. sage/combinat/rigged_configurations/kleber_tree.py +1475 -0
  230. sage/combinat/rigged_configurations/kr_tableaux.py +1898 -0
  231. sage/combinat/rigged_configurations/rc_crystal.py +461 -0
  232. sage/combinat/rigged_configurations/rc_infinity.py +540 -0
  233. sage/combinat/rigged_configurations/rigged_configuration_element.py +2403 -0
  234. sage/combinat/rigged_configurations/rigged_configurations.py +1918 -0
  235. sage/combinat/rigged_configurations/rigged_partition.cpython-314-x86_64-linux-musl.so +0 -0
  236. sage/combinat/rigged_configurations/rigged_partition.pxd +15 -0
  237. sage/combinat/rigged_configurations/rigged_partition.pyx +680 -0
  238. sage/combinat/rigged_configurations/tensor_product_kr_tableaux.py +499 -0
  239. sage/combinat/rigged_configurations/tensor_product_kr_tableaux_element.py +428 -0
  240. sage/combinat/rsk.py +3438 -0
  241. sage/combinat/schubert_polynomial.py +508 -0
  242. sage/combinat/set_partition.py +3318 -0
  243. sage/combinat/set_partition_iterator.cpython-314-x86_64-linux-musl.so +0 -0
  244. sage/combinat/set_partition_iterator.pyx +136 -0
  245. sage/combinat/set_partition_ordered.py +1590 -0
  246. sage/combinat/sf/abreu_nigro.py +346 -0
  247. sage/combinat/sf/all.py +52 -0
  248. sage/combinat/sf/character.py +576 -0
  249. sage/combinat/sf/classical.py +319 -0
  250. sage/combinat/sf/dual.py +996 -0
  251. sage/combinat/sf/elementary.py +549 -0
  252. sage/combinat/sf/hall_littlewood.py +1028 -0
  253. sage/combinat/sf/hecke.py +336 -0
  254. sage/combinat/sf/homogeneous.py +464 -0
  255. sage/combinat/sf/jack.py +1428 -0
  256. sage/combinat/sf/k_dual.py +1458 -0
  257. sage/combinat/sf/kfpoly.py +447 -0
  258. sage/combinat/sf/llt.py +789 -0
  259. sage/combinat/sf/macdonald.py +2019 -0
  260. sage/combinat/sf/monomial.py +525 -0
  261. sage/combinat/sf/multiplicative.py +113 -0
  262. sage/combinat/sf/new_kschur.py +1786 -0
  263. sage/combinat/sf/ns_macdonald.py +964 -0
  264. sage/combinat/sf/orthogonal.py +246 -0
  265. sage/combinat/sf/orthotriang.py +355 -0
  266. sage/combinat/sf/powersum.py +963 -0
  267. sage/combinat/sf/schur.py +880 -0
  268. sage/combinat/sf/sf.py +1653 -0
  269. sage/combinat/sf/sfa.py +7053 -0
  270. sage/combinat/sf/symplectic.py +253 -0
  271. sage/combinat/sf/witt.py +721 -0
  272. sage/combinat/shifted_primed_tableau.py +2735 -0
  273. sage/combinat/shuffle.py +830 -0
  274. sage/combinat/sidon_sets.py +146 -0
  275. sage/combinat/similarity_class_type.py +1721 -0
  276. sage/combinat/sine_gordon.py +618 -0
  277. sage/combinat/six_vertex_model.py +784 -0
  278. sage/combinat/skew_partition.py +2053 -0
  279. sage/combinat/skew_tableau.py +2989 -0
  280. sage/combinat/sloane_functions.py +8935 -0
  281. sage/combinat/specht_module.py +1403 -0
  282. sage/combinat/species/all.py +48 -0
  283. sage/combinat/species/characteristic_species.py +321 -0
  284. sage/combinat/species/composition_species.py +273 -0
  285. sage/combinat/species/cycle_species.py +284 -0
  286. sage/combinat/species/empty_species.py +155 -0
  287. sage/combinat/species/functorial_composition_species.py +148 -0
  288. sage/combinat/species/generating_series.py +673 -0
  289. sage/combinat/species/library.py +148 -0
  290. sage/combinat/species/linear_order_species.py +169 -0
  291. sage/combinat/species/misc.py +83 -0
  292. sage/combinat/species/partition_species.py +290 -0
  293. sage/combinat/species/permutation_species.py +268 -0
  294. sage/combinat/species/product_species.py +423 -0
  295. sage/combinat/species/recursive_species.py +476 -0
  296. sage/combinat/species/set_species.py +192 -0
  297. sage/combinat/species/species.py +820 -0
  298. sage/combinat/species/structure.py +539 -0
  299. sage/combinat/species/subset_species.py +243 -0
  300. sage/combinat/species/sum_species.py +225 -0
  301. sage/combinat/subword.py +564 -0
  302. sage/combinat/subword_complex.py +2122 -0
  303. sage/combinat/subword_complex_c.cpython-314-x86_64-linux-musl.so +0 -0
  304. sage/combinat/subword_complex_c.pyx +119 -0
  305. sage/combinat/super_tableau.py +821 -0
  306. sage/combinat/superpartition.py +1154 -0
  307. sage/combinat/symmetric_group_algebra.py +3774 -0
  308. sage/combinat/symmetric_group_representations.py +1830 -0
  309. sage/combinat/t_sequences.py +877 -0
  310. sage/combinat/tableau.py +9506 -0
  311. sage/combinat/tableau_residues.py +860 -0
  312. sage/combinat/tableau_tuple.py +5353 -0
  313. sage/combinat/tiling.py +2432 -0
  314. sage/combinat/triangles_FHM.py +777 -0
  315. sage/combinat/tutorial.py +1857 -0
  316. sage/combinat/vector_partition.py +337 -0
  317. sage/combinat/words/abstract_word.py +1722 -0
  318. sage/combinat/words/all.py +59 -0
  319. sage/combinat/words/alphabet.py +268 -0
  320. sage/combinat/words/finite_word.py +7201 -0
  321. sage/combinat/words/infinite_word.py +113 -0
  322. sage/combinat/words/lyndon_word.py +652 -0
  323. sage/combinat/words/morphic.py +351 -0
  324. sage/combinat/words/morphism.py +3878 -0
  325. sage/combinat/words/paths.py +2932 -0
  326. sage/combinat/words/shuffle_product.py +278 -0
  327. sage/combinat/words/suffix_trees.py +1873 -0
  328. sage/combinat/words/word.py +769 -0
  329. sage/combinat/words/word_char.cpython-314-x86_64-linux-musl.so +0 -0
  330. sage/combinat/words/word_char.pyx +847 -0
  331. sage/combinat/words/word_datatypes.cpython-314-x86_64-linux-musl.so +0 -0
  332. sage/combinat/words/word_datatypes.pxd +4 -0
  333. sage/combinat/words/word_datatypes.pyx +1067 -0
  334. sage/combinat/words/word_generators.py +2026 -0
  335. sage/combinat/words/word_infinite_datatypes.py +1218 -0
  336. sage/combinat/words/word_options.py +99 -0
  337. sage/combinat/words/words.py +2396 -0
  338. sage/data_structures/all__sagemath_combinat.py +1 -0
  339. sage/databases/all__sagemath_combinat.py +13 -0
  340. sage/databases/findstat.py +4897 -0
  341. sage/databases/oeis.py +2058 -0
  342. sage/databases/sloane.py +393 -0
  343. sage/dynamics/all__sagemath_combinat.py +14 -0
  344. sage/dynamics/cellular_automata/all.py +7 -0
  345. sage/dynamics/cellular_automata/catalog.py +34 -0
  346. sage/dynamics/cellular_automata/elementary.py +612 -0
  347. sage/dynamics/cellular_automata/glca.py +477 -0
  348. sage/dynamics/cellular_automata/solitons.py +1463 -0
  349. sage/dynamics/finite_dynamical_system.py +1249 -0
  350. sage/dynamics/finite_dynamical_system_catalog.py +382 -0
  351. sage/games/all.py +7 -0
  352. sage/games/hexad.py +704 -0
  353. sage/games/quantumino.py +591 -0
  354. sage/games/sudoku.py +889 -0
  355. sage/games/sudoku_backtrack.cpython-314-x86_64-linux-musl.so +0 -0
  356. sage/games/sudoku_backtrack.pyx +189 -0
  357. sage/groups/all__sagemath_combinat.py +1 -0
  358. sage/groups/indexed_free_group.py +489 -0
  359. sage/libs/all__sagemath_combinat.py +6 -0
  360. sage/libs/lrcalc/__init__.py +1 -0
  361. sage/libs/lrcalc/lrcalc.py +525 -0
  362. sage/libs/symmetrica/__init__.py +7 -0
  363. sage/libs/symmetrica/all.py +101 -0
  364. sage/libs/symmetrica/kostka.pxi +168 -0
  365. sage/libs/symmetrica/part.pxi +193 -0
  366. sage/libs/symmetrica/plet.pxi +42 -0
  367. sage/libs/symmetrica/sab.pxi +196 -0
  368. sage/libs/symmetrica/sb.pxi +332 -0
  369. sage/libs/symmetrica/sc.pxi +192 -0
  370. sage/libs/symmetrica/schur.pxi +956 -0
  371. sage/libs/symmetrica/symmetrica.cpython-314-x86_64-linux-musl.so +0 -0
  372. sage/libs/symmetrica/symmetrica.pxi +1172 -0
  373. sage/libs/symmetrica/symmetrica.pyx +39 -0
  374. sage/monoids/all.py +13 -0
  375. sage/monoids/automatic_semigroup.py +1054 -0
  376. sage/monoids/free_abelian_monoid.py +315 -0
  377. sage/monoids/free_abelian_monoid_element.cpython-314-x86_64-linux-musl.so +0 -0
  378. sage/monoids/free_abelian_monoid_element.pxd +16 -0
  379. sage/monoids/free_abelian_monoid_element.pyx +397 -0
  380. sage/monoids/free_monoid.py +335 -0
  381. sage/monoids/free_monoid_element.py +431 -0
  382. sage/monoids/hecke_monoid.py +65 -0
  383. sage/monoids/string_monoid.py +817 -0
  384. sage/monoids/string_monoid_element.py +547 -0
  385. sage/monoids/string_ops.py +143 -0
  386. sage/monoids/trace_monoid.py +972 -0
  387. sage/rings/all__sagemath_combinat.py +2 -0
  388. sage/sat/all.py +4 -0
  389. sage/sat/boolean_polynomials.py +405 -0
  390. sage/sat/converters/__init__.py +6 -0
  391. sage/sat/converters/anf2cnf.py +14 -0
  392. sage/sat/converters/polybori.py +611 -0
  393. sage/sat/solvers/__init__.py +5 -0
  394. sage/sat/solvers/cryptominisat.py +287 -0
  395. sage/sat/solvers/dimacs.py +783 -0
  396. sage/sat/solvers/picosat.py +228 -0
  397. sage/sat/solvers/sat_lp.py +156 -0
  398. sage/sat/solvers/satsolver.cpython-314-x86_64-linux-musl.so +0 -0
  399. sage/sat/solvers/satsolver.pxd +3 -0
  400. sage/sat/solvers/satsolver.pyx +405 -0
@@ -0,0 +1,721 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.modules
3
+ """
4
+ Witt symmetric functions
5
+ """
6
+ # ****************************************************************************
7
+ # Copyright (C) 2007 Mike Hansen <mhansen@gmail.com>
8
+ # 2012 Mike Zabrocki <mike.zabrocki@gmail.com>
9
+ # 2013 Darij Grinberg <darijgrinberg@gmail.com>
10
+ # 2024 Travis Scrimshaw <tcscrims at gmail.com>
11
+ #
12
+ # Distributed under the terms of the GNU General Public License (GPL)
13
+ #
14
+ # This code is distributed in the hope that it will be useful,
15
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
+ # General Public License for more details.
18
+ #
19
+ # The full text of the GPL is available at:
20
+ #
21
+ # https://www.gnu.org/licenses/
22
+ # ****************************************************************************
23
+ from sage.arith.misc import divisors
24
+ from sage.combinat.integer_lists.invlex import IntegerListsLex
25
+ from sage.combinat.partitions import ZS1_iterator
26
+ from sage.misc.cachefunc import cached_method
27
+
28
+ from . import multiplicative
29
+
30
+
31
+ class SymmetricFunctionAlgebra_witt(multiplicative.SymmetricFunctionAlgebra_multiplicative):
32
+ r"""
33
+ The Witt symmetric function basis (or Witt basis, to be short).
34
+
35
+ The Witt basis of the ring of symmetric functions is
36
+ denoted by `(x_{\lambda})` in [HazWitt1]_, section 9.63, and by
37
+ `(q_{\lambda})` in [DoranIV1996]_. We will denote this basis by
38
+ `(w_{\lambda})` (which is precisely how it is denoted in
39
+ [GriRei18]_, Exercise 2.9.3(d)). It is a multiplicative basis
40
+ (meaning that `w_{\emptyset} = 1` and that every partition
41
+ `\lambda` satisfies
42
+ `w_{\lambda} = w_{\lambda_1} w_{\lambda_2} w_{\lambda_3} \cdots`,
43
+ where `w_i` means `w_{(i)}` for every nonnegative integer `i`).
44
+
45
+ This basis can be defined in various ways. Probably the most
46
+ well-known one is using the equation
47
+
48
+ .. MATH::
49
+
50
+ \prod_{d=1}^{\infty} (1 - w_d t^d)^{-1} = \sum_{n=0}^{\infty} h_n t^n
51
+
52
+ where `t` is a formal variable and `h_n` are the complete
53
+ homogeneous symmetric functions, extended to `0` by `h_0 = 1`.
54
+ This equation allows one to uniquely determine the functions
55
+ `w_1, w_2, w_3, \ldots` by recursion; one consequently extends the
56
+ definition to all `w_{\lambda}` by requiring multiplicativity.
57
+
58
+ A way to rewrite the above equation without power series is:
59
+
60
+ .. MATH::
61
+
62
+ h_n = \sum_{\lambda \vdash n} w_{\lambda}
63
+
64
+ for all nonnegative integers `n`, where `\lambda \vdash n` means
65
+ that `\lambda` is a partition of `n`.
66
+
67
+ A similar equation (which is easily seen to be equivalent to the
68
+ former) is
69
+
70
+ .. MATH::
71
+
72
+ e_n = \sum_{\lambda} (-1)^{n - \ell(\lambda)} w_{\lambda},
73
+
74
+ with the sum running only over *strict* partitions `\lambda` of
75
+ `n` this time. This equation can also be used to recursively
76
+ define the `w_n`. Furthermore, every positive integer `n`
77
+ satisfies
78
+
79
+ .. MATH::
80
+
81
+ p_n = \sum_{d\mid n} d w_d^{n/d},
82
+
83
+ and this can be used to define the `w_n` recursively over any
84
+ ring which is torsion-free as a `\ZZ`-module. While these
85
+ equations all yield easy formulas for classical bases of the
86
+ ring of symmetric functions in terms of the Witt symmetric
87
+ functions, it seems difficult to obtain explicit formulas in
88
+ the other direction.
89
+
90
+ The Witt symmetric functions owe their name to the fact that
91
+ the ring of symmetric functions can be viewed as the coordinate
92
+ ring of the group scheme of Witt vectors, and the Witt
93
+ symmetric functions are the functions that send a Witt vector
94
+ to its components (whereas the powersum symmetric functions
95
+ send a Witt vector to its ghost components). Details can be
96
+ found in [HazWitt1]_ or section 3.2 of [BorWi2004]_.
97
+
98
+ INPUT:
99
+
100
+ - ``Sym`` -- an instance of the ring of the symmetric functions
101
+
102
+ REFERENCES:
103
+
104
+ .. [HazWitt1] Michiel Hazewinkel. *Witt vectors. Part 1*.
105
+ :arxiv:`0804.3888v1`
106
+
107
+ .. [DoranIV1996] William F. Doran IV.
108
+ *A Proof of Reutenauer's `-q_{(n)}` Conjecture*.
109
+ Journal of combinatorial theory, Series A 74, pp. 342-344 (1996),
110
+ article no. 0056. :doi:`10.1006/jcta.1996.0056`
111
+
112
+ .. [BorWi2004] James Borger, Ben Wieland.
113
+ *Plethystic algebra*.
114
+ :arxiv:`math/0407227v1`
115
+
116
+ .. [GriRei18]_
117
+
118
+ EXAMPLES:
119
+
120
+ Here are the first few Witt symmetric functions, in various bases::
121
+
122
+ sage: Sym = SymmetricFunctions(QQ)
123
+ sage: w = Sym.w()
124
+ sage: e = Sym.e()
125
+ sage: h = Sym.h()
126
+ sage: p = Sym.p()
127
+ sage: s = Sym.s()
128
+ sage: m = Sym.m()
129
+
130
+ sage: p(w([1]))
131
+ p[1]
132
+ sage: m(w([1]))
133
+ m[1]
134
+ sage: e(w([1]))
135
+ e[1]
136
+ sage: h(w([1]))
137
+ h[1]
138
+ sage: s(w([1]))
139
+ s[1]
140
+
141
+ sage: p(w([2]))
142
+ -1/2*p[1, 1] + 1/2*p[2]
143
+ sage: m(w([2]))
144
+ -m[1, 1]
145
+ sage: e(w([2]))
146
+ -e[2]
147
+ sage: h(w([2]))
148
+ -h[1, 1] + h[2]
149
+ sage: s(w([2]))
150
+ -s[1, 1]
151
+
152
+ sage: p(w([3]))
153
+ -1/3*p[1, 1, 1] + 1/3*p[3]
154
+ sage: m(w([3]))
155
+ -2*m[1, 1, 1] - m[2, 1]
156
+ sage: e(w([3]))
157
+ -e[2, 1] + e[3]
158
+ sage: h(w([3]))
159
+ -h[2, 1] + h[3]
160
+ sage: s(w([3]))
161
+ -s[2, 1]
162
+
163
+ sage: Sym = SymmetricFunctions(ZZ)
164
+ sage: w = Sym.w()
165
+ sage: e = Sym.e()
166
+ sage: h = Sym.h()
167
+ sage: s = Sym.s()
168
+ sage: m = Sym.m()
169
+ sage: p = Sym.p()
170
+ sage: m(w([4]))
171
+ -9*m[1, 1, 1, 1] - 4*m[2, 1, 1] - 2*m[2, 2] - m[3, 1]
172
+ sage: e(w([4]))
173
+ -e[2, 1, 1] + e[3, 1] - e[4]
174
+ sage: h(w([4]))
175
+ -h[1, 1, 1, 1] + 2*h[2, 1, 1] - h[2, 2] - h[3, 1] + h[4]
176
+ sage: s(w([4]))
177
+ -s[1, 1, 1, 1] - s[2, 1, 1] - s[2, 2] - s[3, 1]
178
+
179
+ Some examples of conversions the other way::
180
+
181
+ sage: w(h[3])
182
+ w[1, 1, 1] + w[2, 1] + w[3]
183
+ sage: w(e[3])
184
+ -w[2, 1] + w[3]
185
+ sage: w(m[2,1])
186
+ 2*w[2, 1] - 3*w[3]
187
+ sage: w(p[3])
188
+ w[1, 1, 1] + 3*w[3]
189
+
190
+ Antipodes::
191
+
192
+ sage: w([1]).antipode()
193
+ -w[1]
194
+ sage: w([2]).antipode()
195
+ -w[1, 1] - w[2]
196
+
197
+ The following holds for all odd `i` and is easily proven by
198
+ induction::
199
+
200
+ sage: all(w([i]).antipode() == -w([i]) for i in range(1, 10, 2))
201
+ True
202
+
203
+ The Witt basis does not allow for simple expressions for
204
+ comultiplication and antipode in general (this is related to the
205
+ fact that the sum of two Witt vectors isn't easily described in
206
+ terms of the components). Therefore, a number of computations with
207
+ Witt symmetric functions pass through the complete homogeneous
208
+ symmetric functions by default.
209
+ """
210
+ def __init__(self, Sym):
211
+ r"""
212
+ Initialize ``self``.
213
+
214
+ TESTS::
215
+
216
+ sage: w = SymmetricFunctions(QQ).w()
217
+ sage: TestSuite(w).run(skip=['_test_associativity', '_test_distributivity', '_test_prod'])
218
+ sage: TestSuite(w).run(elements=[w[1,1]+w[2], w[1]+2*w[1,1]])
219
+ """
220
+ multiplicative.SymmetricFunctionAlgebra_multiplicative.__init__(self, Sym, "Witt", 'w')
221
+
222
+ self._h = Sym.h()
223
+ self.register_coercion(self._h._module_morphism(self._h_to_w_on_basis, codomain=self))
224
+ self._h.register_coercion(self._module_morphism(self._w_to_h_on_basis, codomain=self._h))
225
+
226
+ self._e = Sym.e()
227
+ self.register_coercion(self._e._module_morphism(self._e_to_w_on_basis, codomain=self))
228
+ self._e.register_coercion(self._module_morphism(self._w_to_e_on_basis, codomain=self._e))
229
+
230
+ self._p = Sym.p()
231
+ self.register_coercion(self._p._module_morphism(self._p_to_w_on_basis, codomain=self))
232
+ self._p.register_coercion(self._module_morphism(self._w_to_p_on_basis, codomain=self._p))
233
+
234
+ @cached_method
235
+ def _h_to_w_on_basis(self, lam):
236
+ r"""
237
+ Return the complete homogeneous symmetric function ``h[lam]``
238
+ expanded in the Witt basis, where ``lam`` is a partition.
239
+
240
+ INPUT:
241
+
242
+ - ``lam`` -- a partition
243
+
244
+ OUTPUT: the expansion of ``h[lam]`` in the Witt basis ``self``
245
+
246
+ EXAMPLES::
247
+
248
+ sage: Sym = SymmetricFunctions(QQ)
249
+ sage: h = Sym.homogeneous()
250
+ sage: w = Sym.w()
251
+ sage: w._h_to_w_on_basis(Partition([]))
252
+ w[]
253
+ sage: w._h_to_w_on_basis(Partition([4,2,1]))
254
+ w[1, 1, 1, 1, 1, 1, 1] + 2*w[2, 1, 1, 1, 1, 1] + 2*w[2, 2, 1, 1, 1]
255
+ + w[2, 2, 2, 1] + w[3, 1, 1, 1, 1] + w[3, 2, 1, 1]
256
+ + w[4, 1, 1, 1] + w[4, 2, 1]
257
+ sage: h(w._h_to_w_on_basis(Partition([3,1]))) == h[3,1]
258
+ True
259
+ """
260
+ if not lam:
261
+ return self.one()
262
+ P = self._indices
263
+ if len(lam) == 1:
264
+ one = self.base_ring().one()
265
+ n = lam[0]
266
+ return self.element_class(self, {P(mu): one for mu in ZS1_iterator(n)})
267
+ # Multiply by the smallest part to minimize the number of products
268
+ return self._h_to_w_on_basis(P(lam[:-1])) * self._h_to_w_on_basis(P([lam[-1]]))
269
+
270
+ @cached_method
271
+ def _w_to_h_on_basis(self, lam):
272
+ r"""
273
+ Return the Witt symmetric function ``w[lam]`` expanded in the
274
+ complete homogeneous basis, where ``lam`` is a partition.
275
+
276
+ INPUT:
277
+
278
+ - ``lam`` -- a partition
279
+
280
+ OUTPUT:
281
+
282
+ - the expansion of ``w[lam]`` in the complete
283
+ homogeneous basis of ``self.realization_of()``
284
+
285
+ EXAMPLES::
286
+
287
+ sage: Sym = SymmetricFunctions(QQ)
288
+ sage: h = Sym.homogeneous()
289
+ sage: w = Sym.w()
290
+ sage: w._w_to_h_on_basis(Partition([]))
291
+ h[]
292
+ sage: w._w_to_h_on_basis(Partition([4,2,1]))
293
+ h[1, 1, 1, 1, 1, 1, 1] - 3*h[2, 1, 1, 1, 1, 1] + 3*h[2, 2, 1, 1, 1]
294
+ - h[2, 2, 2, 1] + h[3, 1, 1, 1, 1] - h[3, 2, 1, 1]
295
+ - h[4, 1, 1, 1] + h[4, 2, 1]
296
+ sage: w(w._w_to_h_on_basis(Partition([3,1]))) == w[3,1]
297
+ True
298
+ """
299
+ if not lam:
300
+ return self._h.one()
301
+ P = self._indices
302
+ if len(lam) == 1:
303
+ n = lam[0]
304
+ it = ZS1_iterator(n)
305
+ next(it) # skip the first partition, which is [n]
306
+ return self._h[n] - self._h.sum(self._w_to_h_on_basis(P(mu)) for mu in it)
307
+ # Multiply by the smallest part to minimize the number of products
308
+ return self._w_to_h_on_basis(P(lam[:-1])) * self._w_to_h_on_basis(P([lam[-1]]))
309
+
310
+ @cached_method
311
+ def _e_to_w_on_basis(self, lam):
312
+ r"""
313
+ Return the elementary symmetric function ``e[lam]`` expanded in
314
+ the Witt basis, where ``lam`` is a partition.
315
+
316
+ INPUT:
317
+
318
+ - ``lam`` -- a partition
319
+
320
+ OUTPUT: the expansion of ``e[lam]`` in the Witt basis ``self``
321
+
322
+ EXAMPLES::
323
+
324
+ sage: Sym = SymmetricFunctions(QQ)
325
+ sage: e = Sym.elementary()
326
+ sage: w = Sym.w()
327
+ sage: w._e_to_w_on_basis(Partition([]))
328
+ w[]
329
+ sage: w._e_to_w_on_basis(Partition([4,2,1]))
330
+ -w[3, 2, 1, 1] + w[4, 2, 1]
331
+ sage: e(w._e_to_w_on_basis(Partition([3,1]))) == e[3,1]
332
+ True
333
+ """
334
+ if not lam:
335
+ return self.one()
336
+ P = self._indices
337
+ if len(lam) == 1:
338
+ R = self.base_ring()
339
+ n = lam[0]
340
+ index_set = IntegerListsLex(n, min_part=1, max_slope=-1, element_constructor=P)
341
+ return self.element_class(self, {mu: R((-1)**(n-len(mu))) for mu in index_set})
342
+ # Multiply by the smallest part to minimize the number of products
343
+ return self._e_to_w_on_basis(P(lam[:-1])) * self._e_to_w_on_basis(P([lam[-1]]))
344
+
345
+ @cached_method
346
+ def _w_to_e_on_basis(self, lam):
347
+ r"""
348
+ Return the Witt symmetric function ``w[lam]``
349
+ expanded in the elementary symmetric basis, where
350
+ ``lam`` is a partition.
351
+
352
+ INPUT:
353
+
354
+ - ``lam`` -- a partition
355
+
356
+ OUTPUT:
357
+
358
+ - the expansion of ``w[lam]`` in the elementary
359
+ symmetric basis of ``self.realization_of()``
360
+
361
+ EXAMPLES::
362
+
363
+ sage: Sym = SymmetricFunctions(QQ)
364
+ sage: e = Sym.elementary()
365
+ sage: w = Sym.w()
366
+ sage: w._w_to_e_on_basis(Partition([]))
367
+ e[]
368
+ sage: w._w_to_e_on_basis(Partition([4,2,1]))
369
+ e[2, 2, 1, 1, 1] - e[3, 2, 1, 1] + e[4, 2, 1]
370
+ sage: w(w._w_to_e_on_basis(Partition([3,1]))) == w[3,1]
371
+ True
372
+ """
373
+ if not lam:
374
+ return self._e.one()
375
+ P = self._indices
376
+ if len(lam) == 1:
377
+ R = self.base_ring()
378
+ n = lam[0]
379
+ index_set = IntegerListsLex(n, min_part=1, min_length=2, max_slope=-1, element_constructor=P)
380
+ return R((-1)**(n-1)) * self._e[n] + self._e.linear_combination((self._w_to_e_on_basis(mu), R((-1)**len(mu)))
381
+ for mu in index_set)
382
+ # Multiply by the smallest part to minimize the number of products
383
+ return self._w_to_e_on_basis(P(lam[:-1])) * self._w_to_e_on_basis(P([lam[-1]]))
384
+
385
+ @cached_method
386
+ def _p_to_w_on_basis(self, lam):
387
+ r"""
388
+ Return the powersum symmetric function ``p[lam]`` expanded in
389
+ the Witt basis, where ``lam`` is a partition.
390
+
391
+ INPUT:
392
+
393
+ - ``lam`` -- a partition
394
+
395
+ OUTPUT: the expansion of ``p[lam]`` in the Witt basis ``self``
396
+
397
+ EXAMPLES::
398
+
399
+ sage: Sym = SymmetricFunctions(QQ)
400
+ sage: p = Sym.power()
401
+ sage: w = Sym.w()
402
+ sage: w._p_to_w_on_basis(Partition([]))
403
+ w[]
404
+ sage: w._p_to_w_on_basis(Partition([4,2,1]))
405
+ w[1, 1, 1, 1, 1, 1, 1] + 2*w[2, 1, 1, 1, 1, 1] + 2*w[2, 2, 1, 1, 1]
406
+ + 4*w[2, 2, 2, 1] + 4*w[4, 1, 1, 1] + 8*w[4, 2, 1]
407
+ sage: p(w._p_to_w_on_basis(Partition([3,1]))) == p[3,1]
408
+ True
409
+ """
410
+ if not lam:
411
+ return self.one()
412
+ P = self._indices
413
+ if len(lam) == 1:
414
+ R = self.base_ring()
415
+ n = lam[0]
416
+ return self.element_class(self, {P([d] * (n // d)): R(d) for d in divisors(n)})
417
+ # Multiply by the smallest part to minimize the number of products
418
+ return self._p_to_w_on_basis(P(lam[:-1])) * self._p_to_w_on_basis(P([lam[-1]]))
419
+
420
+ @cached_method
421
+ def _w_to_p_on_basis(self, lam):
422
+ r"""
423
+ Return the Witt symmetric function ``w[lam]`` expanded in the
424
+ powersum basis, where ``lam`` is a partition.
425
+
426
+ This assumes that the ``coerce_p`` keyword has been set to ``True`` in
427
+ the initialization of ``self`` (otherwise the cache does not exist).
428
+
429
+ INPUT:
430
+
431
+ - ``lam`` -- a partition
432
+
433
+ OUTPUT:
434
+
435
+ - the expansion of ``w[lam]`` in the powersum
436
+ basis of ``self.realization_of()``
437
+
438
+ EXAMPLES::
439
+
440
+ sage: Sym = SymmetricFunctions(QQ)
441
+ sage: p = Sym.power()
442
+ sage: w = Sym.w()
443
+ sage: w._w_to_p_on_basis(Partition([]))
444
+ p[]
445
+ sage: w._w_to_p_on_basis(Partition([4,2,1]))
446
+ 3/16*p[1, 1, 1, 1, 1, 1, 1] - 5/16*p[2, 1, 1, 1, 1, 1]
447
+ + 3/16*p[2, 2, 1, 1, 1] - 1/16*p[2, 2, 2, 1]
448
+ - 1/8*p[4, 1, 1, 1] + 1/8*p[4, 2, 1]
449
+ sage: w(w._w_to_p_on_basis(Partition([3,1]))) == w[3,1]
450
+ True
451
+ """
452
+ if not lam:
453
+ return self._p.one()
454
+ P = self._indices
455
+ if len(lam) == 1:
456
+ R = self.base_ring()
457
+ n = lam[0]
458
+ return ~R(n) * self._p[n] - self._p.linear_combination((self._w_to_p_on_basis(P([d] * (n // d))), R(d) / R(n))
459
+ for d in divisors(n) if d != n)
460
+ # Multiply by the smallest part to minimize the number of products
461
+ return self._w_to_p_on_basis(P(lam[:-1])) * self._w_to_p_on_basis(P([lam[-1]]))
462
+
463
+ def coproduct(self, elt):
464
+ r"""
465
+ Return the coproduct of the element ``elt``.
466
+
467
+ INPUT:
468
+
469
+ - ``elt`` -- a symmetric function written in this basis
470
+
471
+ OUTPUT:
472
+
473
+ The coproduct acting on ``elt``; the result is an element of the
474
+ tensor squared of the basis ``self``.
475
+
476
+ EXAMPLES::
477
+
478
+ sage: w = SymmetricFunctions(QQ).w()
479
+ sage: w[2].coproduct()
480
+ w[] # w[2] - w[1] # w[1] + w[2] # w[]
481
+ sage: w.coproduct(w[2])
482
+ w[] # w[2] - w[1] # w[1] + w[2] # w[]
483
+ sage: w[2,1].coproduct()
484
+ w[] # w[2, 1] - w[1] # w[1, 1] + w[1] # w[2] - w[1, 1] # w[1] + w[2] # w[1] + w[2, 1] # w[]
485
+ sage: w.coproduct(w[2,1])
486
+ w[] # w[2, 1] - w[1] # w[1, 1] + w[1] # w[2] - w[1, 1] # w[1] + w[2] # w[1] + w[2, 1] # w[]
487
+ """
488
+ from sage.categories.tensor import tensor
489
+ return self.tensor_square().sum(coeff * tensor([self(self._h[x]), self(self._h[y])])
490
+ for ((x, y), coeff) in self._h(elt).coproduct())
491
+
492
+ def verschiebung(self, n):
493
+ r"""
494
+ Return the image of the symmetric function ``self`` under the
495
+ `n`-th Verschiebung operator.
496
+
497
+ The `n`-th Verschiebung operator `\mathbf{V}_n` is defined to be
498
+ the unique algebra endomorphism `V` of the ring of symmetric
499
+ functions that satisfies `V(h_r) = h_{r/n}` for every positive
500
+ integer `r` divisible by `n`, and satisfies `V(h_r) = 0` for
501
+ every positive integer `r` not divisible by `n`. This operator
502
+ `\mathbf{V}_n` is a Hopf algebra endomorphism. For every
503
+ nonnegative integer `r` with `n \mid r`, it satisfies
504
+
505
+ .. MATH::
506
+
507
+ \mathbf{V}_n(h_r) = h_{r/n},
508
+ \quad \mathbf{V}_n(p_r) = n p_{r/n},
509
+ \quad \mathbf{V}_n(e_r) = (-1)^{r - r/n} e_{r/n},
510
+ \quad \mathbf{V}_n(w_r) = w_{r/n},
511
+
512
+ (where `h` is the complete homogeneous basis, `p` is the
513
+ powersum basis, `e` is the elementary basis, and `w` is the
514
+ Witt basis). For every nonnegative integer `r` with `n \nmid r`,
515
+ it satisfes
516
+
517
+ .. MATH::
518
+
519
+ \mathbf{V}_n(h_r) = \mathbf{V}_n(p_r) = \mathbf{V}_n(e_r)
520
+ = \mathbf{V}_n(w_r) = 0.
521
+
522
+ The `n`-th Verschiebung operator is also called the `n`-th
523
+ Verschiebung endomorphism. Its name derives from the Verschiebung
524
+ (German for "shift") endomorphism of the Witt vectors.
525
+
526
+ The `n`-th Verschiebung operator is adjoint to the `n`-th
527
+ Frobenius operator (see :meth:`frobenius` for its definition)
528
+ with respect to the Hall scalar product (:meth:`scalar`).
529
+
530
+ The action of the `n`-th Verschiebung operator on the Schur basis
531
+ can also be computed explicitly. The following (probably clumsier
532
+ than necessary) description can be obtained by solving exercise
533
+ 7.61 in Stanley's [STA]_.
534
+
535
+ Let `\lambda` be a partition. Let `n` be a positive integer. If
536
+ the `n`-core of `\lambda` is nonempty, then
537
+ `\mathbf{V}_n(s_\lambda) = 0`. Otherwise, the following method
538
+ computes `\mathbf{V}_n(s_\lambda)`: Write the partition `\lambda`
539
+ in the form `(\lambda_1, \lambda_2, \ldots, \lambda_{ns})` for some
540
+ nonnegative integer `s`. (If `n` does not divide the length of
541
+ `\lambda`, then this is achieved by adding trailing zeroes to
542
+ `\lambda`.) Set `\beta_i = \lambda_i + ns - i` for every
543
+ `s \in \{ 1, 2, \ldots, ns \}`. Then,
544
+ `(\beta_1, \beta_2, \ldots, \beta_{ns})` is a strictly decreasing
545
+ sequence of nonnegative integers. Stably sort the list
546
+ `(1, 2, \ldots, ns)` in order of (weakly) increasing remainder of
547
+ `-1 - \beta_i` modulo `n`. Let `\xi` be the sign of the
548
+ permutation that is used for this sorting. Let `\psi` be the sign
549
+ of the permutation that is used to stably sort the list
550
+ `(1, 2, \ldots, ns)` in order of (weakly) increasing remainder of
551
+ `i - 1` modulo `n`. (Notice that `\psi = (-1)^{n(n-1)s(s-1)/4}`.)
552
+ Then, `\mathbf{V}_n(s_\lambda) = \xi \psi \prod_{i = 0}^{n - 1}
553
+ s_{\lambda^{(i)}}`, where
554
+ `(\lambda^{(0)}, \lambda^{(1)}, \ldots, \lambda^{(n - 1)})`
555
+ is the `n`-quotient of `\lambda`.
556
+
557
+ INPUT:
558
+
559
+ - ``n`` -- positive integer
560
+
561
+ OUTPUT:
562
+
563
+ The result of applying the `n`-th Verschiebung operator (on the
564
+ ring of symmetric functions) to ``self``.
565
+
566
+ EXAMPLES::
567
+
568
+ sage: Sym = SymmetricFunctions(ZZ)
569
+ sage: w = Sym.w()
570
+ sage: w[3].verschiebung(2)
571
+ 0
572
+ sage: w[4].verschiebung(4)
573
+ w[1]
574
+
575
+ TESTS:
576
+
577
+ Let us check that this method on the Witt basis gives the
578
+ same result as the implementation in sfa.py on the complete
579
+ homogeneous basis::
580
+
581
+ sage: Sym = SymmetricFunctions(QQ)
582
+ sage: w = Sym.w(); h = Sym.h()
583
+ sage: all( w(h(lam)).verschiebung(3) == w(h(lam).verschiebung(3))
584
+ ....: for lam in Partitions(6) )
585
+ True
586
+ sage: all( h(w(lam)).verschiebung(2) == h(w(lam).verschiebung(2))
587
+ ....: for lam in Partitions(4) )
588
+ True
589
+ """
590
+ parent = self.parent()
591
+ w_coords_of_self = self._monomial_coefficients.items()
592
+ P = self._indices
593
+ dct = {P([i // n for i in lam]): coeff
594
+ for lam, coeff in w_coords_of_self
595
+ if all(i % n == 0 for i in lam)}
596
+ return parent._from_dict(dct)
597
+
598
+ def _omega_on_basis(self, lam):
599
+ r"""
600
+ Return the omega involution on the basis element indexed
601
+ by ``lam``.
602
+
603
+ ALGORITHM:
604
+
605
+ We use that `\omega` is an algebra involution to split the
606
+ computation into the even and odd parts. It is easy to prove
607
+ that `\omega w_i = w_i` for odd `i > 0`. For the even parts,
608
+ we convert to the `h` basis and pull back from the `e` basis.
609
+
610
+ EXAMPLES::
611
+
612
+ sage: w = SymmetricFunctions(QQ).w()
613
+ sage: w._omega_on_basis([2])
614
+ -w[1, 1] - w[2]
615
+ sage: w._omega_on_basis([3])
616
+ w[3]
617
+ sage: w._omega_on_basis([2,2])
618
+ w[1, 1, 1, 1] + 2*w[2, 1, 1] + w[2, 2]
619
+ sage: w._omega_on_basis([329,125,2,2,1,1,1,1,1])
620
+ w[329, 125, 1, 1, 1, 1, 1, 1, 1, 1, 1]
621
+ + 2*w[329, 125, 2, 1, 1, 1, 1, 1, 1, 1]
622
+ + w[329, 125, 2, 2, 1, 1, 1, 1, 1]
623
+ sage: w._omega_on_basis([])
624
+ w[]
625
+ """
626
+ lam_even = []
627
+ lam_odd = []
628
+ for i in lam:
629
+ if i % 2:
630
+ lam_odd.append(i)
631
+ else:
632
+ lam_even.append(i)
633
+ if not lam_even:
634
+ if not lam_odd:
635
+ return self.one()
636
+ return self.monomial(self._indices(lam_odd))
637
+ ret_even = self._omega_even(self._indices(lam_even))
638
+ if not lam_odd:
639
+ return ret_even
640
+ return ret_even * self.monomial(self._indices(lam_odd))
641
+
642
+ @cached_method
643
+ def _omega_even(self, lam_even):
644
+ r"""
645
+ Return the omega involution on the basis element given by
646
+ a partition with only even parts.
647
+
648
+ EXAMPLES::
649
+
650
+ sage: w = SymmetricFunctions(QQ).w()
651
+ sage: P = w.indices()
652
+ sage: Sw422 = w._omega_even(P([4,2,2])); Sw422
653
+ -w[1, 1, 1, 1, 1, 1, 1, 1] - 3*w[2, 1, 1, 1, 1, 1, 1]
654
+ - 4*w[2, 2, 1, 1, 1, 1] - 3*w[2, 2, 2, 1, 1] - w[2, 2, 2, 2]
655
+ - w[4, 1, 1, 1, 1] - 2*w[4, 2, 1, 1] - w[4, 2, 2]
656
+ sage: Sw2 = w._omega_even(P([2])); Sw2
657
+ -w[1, 1] - w[2]
658
+ sage: Sw4 = w._omega_even(P([4])); Sw4
659
+ -w[1, 1, 1, 1] - w[2, 1, 1] - w[2, 2] - w[4]
660
+ sage: Sw422 == Sw4 * Sw2^2
661
+ True
662
+ """
663
+ dct = self._h(self.monomial(lam_even)).monomial_coefficients(copy=False)
664
+ eelt = self._e.element_class(self._e, dict(dct.items()))
665
+ return self(eelt)
666
+
667
+ class Element(multiplicative.SymmetricFunctionAlgebra_multiplicative.Element):
668
+ def omega(self):
669
+ r"""
670
+ Return the image of ``self`` under the omega automorphism.
671
+
672
+ The *omega automorphism* is defined to be the unique algebra
673
+ endomorphism `\omega` of the ring of symmetric functions that
674
+ satisfies `\omega(e_k) = h_k` for all positive integers `k`
675
+ (where `e_k` stands for the `k`-th elementary symmetric
676
+ function, and `h_k` stands for the `k`-th complete homogeneous
677
+ symmetric function). It furthermore is a Hopf algebra
678
+ endomorphism and an involution, and it is also known as the
679
+ *omega involution*. It sends the power-sum symmetric function
680
+ `p_k` to `(-1)^{k-1} p_k` for every positive integer `k`.
681
+
682
+ The images of some bases under the omega automorphism are given by
683
+
684
+ .. MATH::
685
+
686
+ \omega(e_{\lambda}) = h_{\lambda}, \qquad
687
+ \omega(h_{\lambda}) = e_{\lambda}, \qquad
688
+ \omega(p_{\lambda}) = (-1)^{|\lambda| - \ell(\lambda)}
689
+ p_{\lambda}, \qquad
690
+ \omega(s_{\lambda}) = s_{\lambda^{\prime}},
691
+
692
+ where `\lambda` is any partition, where `\ell(\lambda)` denotes
693
+ the length (:meth:`~sage.combinat.partition.Partition.length`)
694
+ of the partition `\lambda`, where `\lambda^{\prime}` denotes the
695
+ conjugate partition
696
+ (:meth:`~sage.combinat.partition.Partition.conjugate`) of
697
+ `\lambda`, and where the usual notations for bases are used
698
+ (`e` = elementary, `h` = complete homogeneous, `p` = powersum,
699
+ `s` = Schur).
700
+
701
+ :meth:`omega_involution` is a synonym for the :meth:`omega`
702
+ method.
703
+
704
+ EXAMPLES::
705
+
706
+ sage: Sym = SymmetricFunctions(QQ)
707
+ sage: w = Sym.w()
708
+ sage: a = w([4,3,1,1]); a
709
+ w[4, 3, 1, 1]
710
+ sage: a.omega()
711
+ -w[3, 1, 1, 1, 1, 1, 1] - w[3, 2, 1, 1, 1, 1]
712
+ - w[3, 2, 2, 1, 1] - w[4, 3, 1, 1]
713
+
714
+ sage: h = Sym.h()
715
+ sage: all(w(h(w[la]).omega()) == w[la].omega()
716
+ ....: for n in range(6) for la in Partitions(n))
717
+ True
718
+ """
719
+ P = self.parent()
720
+ return P.linear_combination((P._omega_on_basis(lam), coeff)
721
+ for lam, coeff in self._monomial_coefficients.items())