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,549 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.modules
3
+ """
4
+ Elementary symmetric functions
5
+ """
6
+ #*****************************************************************************
7
+ # Copyright (C) 2007 Mike Hansen <mhansen@gmail.com>
8
+ # 2012 Mike Zabrocki <mike.zabrocki@gmail.com>
9
+ # 2012 Anne Schilling <anne@math.ucdavis.edu>
10
+ #
11
+ # Distributed under the terms of the GNU General Public License (GPL)
12
+ #
13
+ # This code is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
+ # General Public License for more details.
17
+ #
18
+ # The full text of the GPL is available at:
19
+ #
20
+ # http://www.gnu.org/licenses/
21
+ #*****************************************************************************
22
+ from sage.arith.misc import binomial, factorial
23
+ from sage.combinat.partition import Partition
24
+ from sage.combinat.sf import classical, multiplicative
25
+ from sage.misc.misc_c import prod
26
+ from sage.rings.infinity import infinity
27
+
28
+ ###################################
29
+ # #
30
+ # Elementary Symmetric Functions #
31
+ # #
32
+ ###################################
33
+
34
+
35
+ class SymmetricFunctionAlgebra_elementary(multiplicative.SymmetricFunctionAlgebra_multiplicative):
36
+ def __init__(self, Sym):
37
+ """
38
+ A class for methods for the elementary basis of the symmetric functions.
39
+
40
+ INPUT:
41
+
42
+ - ``self`` -- an elementary basis of the symmetric functions
43
+ - ``Sym`` -- an instance of the ring of symmetric functions
44
+
45
+ TESTS::
46
+
47
+ sage: e = SymmetricFunctions(QQ).e()
48
+ sage: e == loads(dumps(e))
49
+ True
50
+ sage: TestSuite(e).run(skip=['_test_associativity', '_test_distributivity', '_test_prod'])
51
+ sage: TestSuite(e).run(elements = [e[1,1]+e[2], e[1]+2*e[1,1]])
52
+ """
53
+ classical.SymmetricFunctionAlgebra_classical.__init__(self, Sym, "elementary", 'e')
54
+
55
+ def _dual_basis_default(self):
56
+ """
57
+ Return the default value for ``self.dual_basis()``.
58
+
59
+ This method returns the dual basis to the elementary basis
60
+ with respect to the standard scalar product, that is the
61
+ forgotten basis.
62
+
63
+ EXAMPLES::
64
+
65
+ sage: e = SymmetricFunctions(QQ).e()
66
+ sage: e.dual_basis()
67
+ Symmetric Functions over Rational Field in the forgotten basis
68
+
69
+ TESTS::
70
+
71
+ sage: e._dual_basis_default() is e.dual_basis()
72
+ True
73
+ """
74
+ return self.dual_basis(scalar=None, prefix='f', basis_name='forgotten')
75
+
76
+ def coproduct_on_generators(self, i):
77
+ r"""
78
+ Return the coproduct on ``self[i]``.
79
+
80
+ INPUT:
81
+
82
+ - ``self`` -- an elementary basis of the symmetric functions
83
+ - ``i`` -- nonnegative integer
84
+
85
+ OUTPUT: the coproduct on the elementary generator `e(i)`
86
+
87
+ EXAMPLES::
88
+
89
+ sage: Sym = SymmetricFunctions(QQ)
90
+ sage: e = Sym.elementary()
91
+ sage: e.coproduct_on_generators(2)
92
+ e[] # e[2] + e[1] # e[1] + e[2] # e[]
93
+ sage: e.coproduct_on_generators(0)
94
+ e[] # e[]
95
+ """
96
+ def P(i):
97
+ return Partition([i]) if i else Partition([])
98
+ T = self.tensor_square()
99
+ return T.sum_of_monomials( (P(j), P(i-j)) for j in range(i+1) )
100
+
101
+ def _magma_init_(self, magma):
102
+ """
103
+ Used in converting this ring to the corresponding ring in MAGMA.
104
+
105
+ EXAMPLES::
106
+
107
+ sage: # optional - magma
108
+ sage: E = SymmetricFunctions(QQ).e()
109
+ sage: t = 4*E[3,2]+9
110
+ sage: mt = magma(t); mt
111
+ 9 + 4*$.[3,2]
112
+ sage: mt.sage()
113
+ 9*e[] + 4*e[3, 2]
114
+ """
115
+ B = magma(self.base_ring())
116
+ Bref = B._ref()
117
+ return f"SymmetricFunctionAlgebraElementary({Bref})"
118
+
119
+ class Element(classical.SymmetricFunctionAlgebra_classical.Element):
120
+ def omega(self):
121
+ r"""
122
+ Return the image of ``self`` under the omega automorphism.
123
+
124
+ The *omega automorphism* is defined to be the unique algebra
125
+ endomorphism `\omega` of the ring of symmetric functions that
126
+ satisfies `\omega(e_k) = h_k` for all positive integers `k`
127
+ (where `e_k` stands for the `k`-th elementary symmetric
128
+ function, and `h_k` stands for the `k`-th complete homogeneous
129
+ symmetric function). It furthermore is a Hopf algebra
130
+ endomorphism and an involution, and it is also known as the
131
+ *omega involution*. It sends the power-sum symmetric function
132
+ `p_k` to `(-1)^{k-1} p_k` for every positive integer `k`.
133
+
134
+ The images of some bases under the omega automorphism are given by
135
+
136
+ .. MATH::
137
+
138
+ \omega(e_{\lambda}) = h_{\lambda}, \qquad
139
+ \omega(h_{\lambda}) = e_{\lambda}, \qquad
140
+ \omega(p_{\lambda}) = (-1)^{|\lambda| - \ell(\lambda)}
141
+ p_{\lambda}, \qquad
142
+ \omega(s_{\lambda}) = s_{\lambda^{\prime}},
143
+
144
+ where `\lambda` is any partition, where `\ell(\lambda)` denotes
145
+ the length (:meth:`~sage.combinat.partition.Partition.length`)
146
+ of the partition `\lambda`, where `\lambda^{\prime}` denotes the
147
+ conjugate partition
148
+ (:meth:`~sage.combinat.partition.Partition.conjugate`) of
149
+ `\lambda`, and where the usual notations for bases are used
150
+ (`e` = elementary, `h` = complete homogeneous, `p` = powersum,
151
+ `s` = Schur).
152
+
153
+ :meth:`omega_involution` is a synonym for the :meth:`omega`
154
+ method.
155
+
156
+ EXAMPLES::
157
+
158
+ sage: e = SymmetricFunctions(QQ).e()
159
+ sage: a = e([2,1]); a
160
+ e[2, 1]
161
+ sage: a.omega()
162
+ e[1, 1, 1] - e[2, 1]
163
+
164
+ ::
165
+
166
+ sage: h = SymmetricFunctions(QQ).h()
167
+ sage: h(e([2,1]).omega())
168
+ h[2, 1]
169
+ """
170
+ e = self.parent()
171
+ h = e.realization_of().h()
172
+ return e( h._from_element(self) )
173
+
174
+ omega_involution = omega
175
+
176
+ def verschiebung(self, n):
177
+ r"""
178
+ Return the image of the symmetric function ``self`` under the
179
+ `n`-th Verschiebung operator.
180
+
181
+ The `n`-th Verschiebung operator `\mathbf{V}_n` is defined to be
182
+ the unique algebra endomorphism `V` of the ring of symmetric
183
+ functions that satisfies `V(h_r) = h_{r/n}` for every positive
184
+ integer `r` divisible by `n`, and satisfies `V(h_r) = 0` for
185
+ every positive integer `r` not divisible by `n`. This operator
186
+ `\mathbf{V}_n` is a Hopf algebra endomorphism. For every
187
+ nonnegative integer `r` with `n \mid r`, it satisfies
188
+
189
+ .. MATH::
190
+
191
+ \mathbf{V}_n(h_r) = h_{r/n},
192
+ \quad \mathbf{V}_n(p_r) = n p_{r/n},
193
+ \quad \mathbf{V}_n(e_r) = (-1)^{r - r/n} e_{r/n}
194
+
195
+ (where `h` is the complete homogeneous basis, `p` is the
196
+ powersum basis, and `e` is the elementary basis). For every
197
+ nonnegative integer `r` with `n \nmid r`, it satisfes
198
+
199
+ .. MATH::
200
+
201
+ \mathbf{V}_n(h_r) = \mathbf{V}_n(p_r) = \mathbf{V}_n(e_r) = 0.
202
+
203
+ The `n`-th Verschiebung operator is also called the `n`-th
204
+ Verschiebung endomorphism. Its name derives from the Verschiebung
205
+ (German for "shift") endomorphism of the Witt vectors.
206
+
207
+ The `n`-th Verschiebung operator is adjoint to the `n`-th
208
+ Frobenius operator (see :meth:`~sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic_Element.frobenius`
209
+ for its definition) with respect to the Hall scalar product
210
+ (:meth:`~sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic_Element.scalar`).
211
+
212
+ The action of the `n`-th Verschiebung operator on the Schur basis
213
+ can also be computed explicitly. The following (probably clumsier
214
+ than necessary) description can be obtained by solving exercise
215
+ 7.61 in Stanley [STA]_.
216
+
217
+ Let `\lambda` be a partition. Let `n` be a positive integer. If
218
+ the `n`-core of `\lambda` is nonempty, then
219
+ `\mathbf{V}_n(s_\lambda) = 0`. Otherwise, the following method
220
+ computes `\mathbf{V}_n(s_\lambda)`: Write the partition `\lambda`
221
+ in the form `(\lambda_1, \lambda_2, ..., \lambda_{ns})` for some
222
+ nonnegative integer `s`. (If `n` does not divide the length of
223
+ `\lambda`, then this is achieved by adding trailing zeroes to
224
+ `\lambda`.) Set `\beta_i = \lambda_i + ns - i` for every
225
+ `s \in \{ 1, 2, \ldots, ns \}`. Then,
226
+ `(\beta_1, \beta_2, ..., \beta_{ns})` is a strictly decreasing
227
+ sequence of nonnegative integers. Stably sort the list
228
+ `(1, 2, \ldots, ns)` in order of (weakly) increasing remainder of
229
+ `-1 - \beta_i` modulo `n`. Let `\xi` be the sign of the
230
+ permutation that is used for this sorting. Let `\psi` be the sign
231
+ of the permutation that is used to stably sort the list
232
+ `(1, 2, \ldots, ns)` in order of (weakly) increasing remainder of
233
+ `i - 1` modulo `n`. (Notice that `\psi = (-1)^{n(n-1)s(s-1)/4}`.)
234
+ Then, `\mathbf{V}_n(s_\lambda) = \xi \psi \prod_{i=0}^{n-1}
235
+ s_{\lambda^{(i)}}`, where
236
+ `(\lambda^{(0)}, \lambda^{(1)}, \ldots, \lambda^{(n - 1)})`
237
+ is the `n`-quotient of `\lambda`.
238
+
239
+ INPUT:
240
+
241
+ - ``n`` -- positive integer
242
+
243
+ OUTPUT:
244
+
245
+ The result of applying the `n`-th Verschiebung operator (on the
246
+ ring of symmetric functions) to ``self``.
247
+
248
+ EXAMPLES::
249
+
250
+ sage: Sym = SymmetricFunctions(ZZ)
251
+ sage: e = Sym.e()
252
+ sage: e[3].verschiebung(2)
253
+ 0
254
+ sage: e[4].verschiebung(4)
255
+ -e[1]
256
+
257
+ The Verschiebung endomorphisms are multiplicative::
258
+
259
+ sage: all( all( e(lam).verschiebung(2) * e(mu).verschiebung(2)
260
+ ....: == (e(lam) * e(mu)).verschiebung(2)
261
+ ....: for mu in Partitions(4) )
262
+ ....: for lam in Partitions(4) )
263
+ True
264
+
265
+ TESTS:
266
+
267
+ Let us check that this method on the elementary basis gives the
268
+ same result as the implementation in :mod:`sage.combinat.sf.sfa`
269
+ on the complete homogeneous basis::
270
+
271
+ sage: Sym = SymmetricFunctions(QQ)
272
+ sage: e = Sym.e(); h = Sym.h()
273
+ sage: all( h(e(lam)).verschiebung(3) == h(e(lam).verschiebung(3))
274
+ ....: for lam in Partitions(6) )
275
+ True
276
+ sage: all( e(h(lam)).verschiebung(2) == e(h(lam).verschiebung(2))
277
+ ....: for lam in Partitions(4) )
278
+ True
279
+ """
280
+ parent = self.parent()
281
+ e_coords_of_self = self.monomial_coefficients().items()
282
+ dct = {Partition([i // n for i in lam]):
283
+ (-1) ** (sum(lam) - (sum(lam) // n)) * coeff
284
+ for (lam, coeff) in e_coords_of_self
285
+ if all( i % n == 0 for i in lam )}
286
+ result_in_e_basis = parent._from_dict(dct)
287
+ return parent(result_in_e_basis)
288
+
289
+ def expand(self, n, alphabet='x'):
290
+ """
291
+ Expand the symmetric function ``self`` as a symmetric polynomial
292
+ in ``n`` variables.
293
+
294
+ INPUT:
295
+
296
+ - ``n`` -- nonnegative integer
297
+
298
+ - ``alphabet`` -- (default: ``'x'``) a variable for the expansion
299
+
300
+ OUTPUT:
301
+
302
+ A monomial expansion of ``self`` in the `n` variables
303
+ labelled by ``alphabet``.
304
+
305
+ EXAMPLES::
306
+
307
+ sage: e = SymmetricFunctions(QQ).e()
308
+ sage: e([2,1]).expand(3)
309
+ x0^2*x1 + x0*x1^2 + x0^2*x2 + 3*x0*x1*x2 + x1^2*x2 + x0*x2^2 + x1*x2^2
310
+ sage: e([1,1,1]).expand(2)
311
+ x0^3 + 3*x0^2*x1 + 3*x0*x1^2 + x1^3
312
+ sage: e([3]).expand(2)
313
+ 0
314
+ sage: e([2]).expand(3)
315
+ x0*x1 + x0*x2 + x1*x2
316
+ sage: e([3]).expand(4,alphabet='x,y,z,t')
317
+ x*y*z + x*y*t + x*z*t + y*z*t
318
+ sage: e([3]).expand(4,alphabet='y')
319
+ y0*y1*y2 + y0*y1*y3 + y0*y2*y3 + y1*y2*y3
320
+ sage: e([]).expand(2)
321
+ 1
322
+ sage: e([]).expand(0)
323
+ 1
324
+ sage: (3*e([])).expand(0)
325
+ 3
326
+ """
327
+ condition = lambda part: max(part) > n
328
+ return self._expand(condition, n, alphabet)
329
+
330
+ def principal_specialization(self, n=infinity, q=None):
331
+ r"""
332
+ Return the principal specialization of a symmetric function.
333
+
334
+ The *principal specialization* of order `n` at `q`
335
+ is the ring homomorphism `ps_{n,q}` from the ring of
336
+ symmetric functions to another commutative ring `R`
337
+ given by `x_i \mapsto q^{i-1}` for `i \in \{1,\dots,n\}`
338
+ and `x_i \mapsto 0` for `i > n`.
339
+ Here, `q` is a given element of `R`, and we assume that
340
+ the variables of our symmetric functions are
341
+ `x_1, x_2, x_3, \ldots`.
342
+ (To be more precise, `ps_{n,q}` is a `K`-algebra
343
+ homomorphism, where `K` is the base ring.)
344
+ See Section 7.8 of [EnumComb2]_.
345
+
346
+ The *stable principal specialization* at `q` is the ring
347
+ homomorphism `ps_q` from the ring of symmetric functions
348
+ to another commutative ring `R` given by
349
+ `x_i \mapsto q^{i-1}` for all `i`.
350
+ This is well-defined only if the resulting infinite sums
351
+ converge; thus, in particular, setting `q = 1` in the
352
+ stable principal specialization is an invalid operation.
353
+
354
+ INPUT:
355
+
356
+ - ``n`` -- (default: ``infinity``) a nonnegative integer or
357
+ ``infinity``, specifying whether to compute the principal
358
+ specialization of order ``n`` or the stable principal
359
+ specialization.
360
+
361
+ - ``q`` -- (default: ``None``) the value to use for `q`; the
362
+ default is to create a ring of polynomials in ``q``
363
+ (or a field of rational functions in ``q``) over the
364
+ given coefficient ring.
365
+
366
+ We use the formulas from Proposition 7.8.3 of [EnumComb2]_
367
+ (using Gaussian binomial coefficients `\binom{u}{v}_q`):
368
+
369
+ .. MATH::
370
+
371
+ ps_{n,q}(e_\lambda) = \prod_i q^{\binom{\lambda_i}{2}} \binom{n}{\lambda_i}_q,
372
+
373
+ ps_{n,1}(e_\lambda) = \prod_i \binom{n}{\lambda_i},
374
+
375
+ ps_q(e_\lambda) = \prod_i q^{\binom{\lambda_i}{2}} / \prod_{j=1}^{\lambda_i} (1-q^j).
376
+
377
+ EXAMPLES::
378
+
379
+ sage: e = SymmetricFunctions(QQ).e()
380
+ sage: x = e[3,1]
381
+ sage: x.principal_specialization(3)
382
+ q^5 + q^4 + q^3
383
+ sage: x = 5*e[1,1,1] + 3*e[2,1] + 1
384
+ sage: x.principal_specialization(3)
385
+ 5*q^6 + 18*q^5 + 36*q^4 + 44*q^3 + 36*q^2 + 18*q + 6
386
+
387
+ By default, we return a rational functions in `q`. Sometimes
388
+ it is better to obtain an element of the symbolic ring::
389
+
390
+ sage: x.principal_specialization(q=var("q")) # needs sage.symbolic
391
+ -3*q/((q^2 - 1)*(q - 1)^2) - 5/(q - 1)^3 + 1
392
+
393
+ TESTS::
394
+
395
+ sage: e.zero().principal_specialization(3)
396
+ 0
397
+ """
398
+ from sage.combinat.q_analogues import q_binomial
399
+
400
+ def get_variable(ring, name):
401
+ try:
402
+ ring(name)
403
+ except TypeError:
404
+ from sage.rings.polynomial.polynomial_ring_constructor import (
405
+ PolynomialRing,
406
+ )
407
+ return PolynomialRing(ring, name).gen()
408
+ else:
409
+ raise ValueError("the variable %s is in the base ring, pass it explicitly" % name)
410
+
411
+ if q is None:
412
+ q = get_variable(self.base_ring(), "q")
413
+
414
+ if q == 1:
415
+ if n == infinity:
416
+ raise ValueError("the stable principal specialization at q=1 is not defined")
417
+ f = lambda partition: prod(binomial(n, part) for part in partition)
418
+ elif n == infinity:
419
+ f = lambda partition: prod(q**binomial(part, 2)/prod((1-q**i)
420
+ for i in range(1,part+1))
421
+ for part in partition)
422
+ else:
423
+ f = lambda partition: prod(q**binomial(part, 2)*q_binomial(n, part, q=q)
424
+ for part in partition)
425
+
426
+ return self.parent()._apply_module_morphism(self, f, q.parent())
427
+
428
+ def exponential_specialization(self, t=None, q=1):
429
+ r"""
430
+ Return the exponential specialization of a
431
+ symmetric function (when `q = 1`), or the
432
+ `q`-exponential specialization (when `q \neq 1`).
433
+
434
+ The *exponential specialization* `ex` at `t` is a
435
+ `K`-algebra homomorphism from the `K`-algebra of
436
+ symmetric functions to another `K`-algebra `R`.
437
+ It is defined whenever the base ring `K` is a
438
+ `\QQ`-algebra and `t` is an element of `R`.
439
+ The easiest way to define it is by specifying its
440
+ values on the powersum symmetric functions to be
441
+ `p_1 = t` and `p_n = 0` for `n > 1`.
442
+ Equivalently, on the homogeneous functions it is
443
+ given by `ex(h_n) = t^n / n!`; see Proposition 7.8.4 of
444
+ [EnumComb2]_.
445
+
446
+ By analogy, the `q`-exponential specialization is a
447
+ `K`-algebra homomorphism from the `K`-algebra of
448
+ symmetric functions to another `K`-algebra `R` that
449
+ depends on two elements `t` and `q` of `R` for which
450
+ the elements `1 - q^i` for all positive integers `i`
451
+ are invertible.
452
+ It can be defined by specifying its values on the
453
+ complete homogeneous symmetric functions to be
454
+
455
+ .. MATH::
456
+
457
+ ex_q(h_n) = t^n / [n]_q!,
458
+
459
+ where `[n]_q!` is the `q`-factorial. Equivalently, for
460
+ `q \neq 1` and a homogeneous symmetric function `f` of
461
+ degree `n`, we have
462
+
463
+ .. MATH::
464
+
465
+ ex_q(f) = (1-q)^n t^n ps_q(f),
466
+
467
+ where `ps_q(f)` is the stable principal specialization of `f`
468
+ (see :meth:`principal_specialization`).
469
+ (See (7.29) in [EnumComb2]_.)
470
+
471
+ The limit of `ex_q` as `q \to 1` is `ex`.
472
+
473
+ INPUT:
474
+
475
+ - ``t`` -- (default: ``None``) the value to use for `t`.
476
+ The default is to create a ring of polynomials in `t`.
477
+
478
+ - ``q`` -- (default: `1`) the value to use for `q`. If
479
+ ``q`` is ``None``, then a ring (or fraction field) of
480
+ polynomials in ``q`` is created.
481
+
482
+ EXAMPLES::
483
+
484
+ sage: e = SymmetricFunctions(QQ).e()
485
+ sage: x = e[3,2]
486
+ sage: x.exponential_specialization()
487
+ 1/12*t^5
488
+ sage: x = 5*e[2] + 3*e[1] + 1
489
+ sage: x.exponential_specialization(t=var("t"), q=var("q")) # needs sage.symbolic
490
+ 5*q*t^2/(q + 1) + 3*t + 1
491
+
492
+ TESTS::
493
+
494
+ sage: e.zero().exponential_specialization()
495
+ 0
496
+ """
497
+ from sage.combinat.q_analogues import q_factorial
498
+
499
+ def get_variable(ring, name):
500
+ try:
501
+ ring(name)
502
+ except TypeError:
503
+ from sage.rings.polynomial.polynomial_ring_constructor import (
504
+ PolynomialRing,
505
+ )
506
+ return PolynomialRing(ring, name).gen()
507
+ else:
508
+ raise ValueError("the variable %s is in the base ring, pass it explicitly" % name)
509
+
510
+ if q == 1:
511
+ if t is None:
512
+ t = get_variable(self.base_ring(), 't')
513
+
514
+ def f(partition):
515
+ n = 0
516
+ m = 1
517
+ for part in partition:
518
+ n += part
519
+ m *= factorial(part)
520
+ return t**n/m
521
+
522
+ return self.parent()._apply_module_morphism(self, f, t.parent())
523
+
524
+ if q is None and t is None:
525
+ q = get_variable(self.base_ring(), 'q')
526
+ t = get_variable(q.parent(), 't')
527
+ elif q is None:
528
+ q = get_variable(t.parent(), 'q')
529
+ elif t is None:
530
+ t = get_variable(q.parent(), 't')
531
+
532
+ def f(partition):
533
+ n = 0
534
+ m = 1
535
+ for part in partition:
536
+ n += part
537
+ m *= q**binomial(part, 2)/q_factorial(part, q=q)
538
+
539
+ return t**n * m
540
+
541
+ return self.parent()._apply_module_morphism(self, f, t.parent())
542
+
543
+
544
+ # Backward compatibility for unpickling
545
+ from sage.misc.persist import register_unpickle_override
546
+
547
+ register_unpickle_override('sage.combinat.sf.elementary',
548
+ 'SymmetricFunctionAlgebraElement_elementary',
549
+ SymmetricFunctionAlgebra_elementary.Element)