passagemath-combinat 10.6.42__cp314-cp314t-win_amd64.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 (401) hide show
  1. passagemath_combinat/__init__.py +3 -0
  2. passagemath_combinat-10.6.42.dist-info/DELVEWHEEL +2 -0
  3. passagemath_combinat-10.6.42.dist-info/METADATA +160 -0
  4. passagemath_combinat-10.6.42.dist-info/RECORD +401 -0
  5. passagemath_combinat-10.6.42.dist-info/WHEEL +5 -0
  6. passagemath_combinat-10.6.42.dist-info/top_level.txt +3 -0
  7. passagemath_combinat.libs/libgmp-10-3a5f019e2510aeaad918cab2b57a689d.dll +0 -0
  8. passagemath_combinat.libs/libsymmetrica-3-7dcf900932804d0df5fd0919b4668720.dll +0 -0
  9. sage/algebras/affine_nil_temperley_lieb.py +263 -0
  10. sage/algebras/all.py +24 -0
  11. sage/algebras/all__sagemath_combinat.py +35 -0
  12. sage/algebras/askey_wilson.py +935 -0
  13. sage/algebras/associated_graded.py +345 -0
  14. sage/algebras/cellular_basis.py +350 -0
  15. sage/algebras/cluster_algebra.py +2766 -0
  16. sage/algebras/down_up_algebra.py +860 -0
  17. sage/algebras/free_algebra.py +1698 -0
  18. sage/algebras/free_algebra_element.py +345 -0
  19. sage/algebras/free_algebra_quotient.py +405 -0
  20. sage/algebras/free_algebra_quotient_element.py +295 -0
  21. sage/algebras/free_zinbiel_algebra.py +885 -0
  22. sage/algebras/hall_algebra.py +783 -0
  23. sage/algebras/hecke_algebras/all.py +4 -0
  24. sage/algebras/hecke_algebras/ariki_koike_algebra.py +1796 -0
  25. sage/algebras/hecke_algebras/ariki_koike_specht_modules.py +475 -0
  26. sage/algebras/hecke_algebras/cubic_hecke_algebra.py +3520 -0
  27. sage/algebras/hecke_algebras/cubic_hecke_base_ring.py +1473 -0
  28. sage/algebras/hecke_algebras/cubic_hecke_matrix_rep.py +1079 -0
  29. sage/algebras/iwahori_hecke_algebra.py +3095 -0
  30. sage/algebras/jordan_algebra.py +1773 -0
  31. sage/algebras/lie_conformal_algebras/abelian_lie_conformal_algebra.py +113 -0
  32. sage/algebras/lie_conformal_algebras/affine_lie_conformal_algebra.py +156 -0
  33. sage/algebras/lie_conformal_algebras/all.py +18 -0
  34. sage/algebras/lie_conformal_algebras/bosonic_ghosts_lie_conformal_algebra.py +134 -0
  35. sage/algebras/lie_conformal_algebras/examples.py +43 -0
  36. sage/algebras/lie_conformal_algebras/fermionic_ghosts_lie_conformal_algebra.py +131 -0
  37. sage/algebras/lie_conformal_algebras/finitely_freely_generated_lca.py +139 -0
  38. sage/algebras/lie_conformal_algebras/free_bosons_lie_conformal_algebra.py +174 -0
  39. sage/algebras/lie_conformal_algebras/free_fermions_lie_conformal_algebra.py +167 -0
  40. sage/algebras/lie_conformal_algebras/freely_generated_lie_conformal_algebra.py +107 -0
  41. sage/algebras/lie_conformal_algebras/graded_lie_conformal_algebra.py +135 -0
  42. sage/algebras/lie_conformal_algebras/lie_conformal_algebra.py +353 -0
  43. sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py +236 -0
  44. sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_basis.py +78 -0
  45. sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_structure_coefs.py +328 -0
  46. sage/algebras/lie_conformal_algebras/n2_lie_conformal_algebra.py +117 -0
  47. sage/algebras/lie_conformal_algebras/neveu_schwarz_lie_conformal_algebra.py +86 -0
  48. sage/algebras/lie_conformal_algebras/virasoro_lie_conformal_algebra.py +82 -0
  49. sage/algebras/lie_conformal_algebras/weyl_lie_conformal_algebra.py +205 -0
  50. sage/algebras/nil_coxeter_algebra.py +191 -0
  51. sage/algebras/q_commuting_polynomials.py +673 -0
  52. sage/algebras/q_system.py +608 -0
  53. sage/algebras/quantum_clifford.py +959 -0
  54. sage/algebras/quantum_groups/ace_quantum_onsager.py +693 -0
  55. sage/algebras/quantum_groups/all.py +9 -0
  56. sage/algebras/quantum_groups/fock_space.py +2219 -0
  57. sage/algebras/quantum_groups/q_numbers.py +207 -0
  58. sage/algebras/quantum_groups/quantum_group_gap.py +2695 -0
  59. sage/algebras/quantum_groups/representations.py +591 -0
  60. sage/algebras/quantum_matrix_coordinate_algebra.py +1006 -0
  61. sage/algebras/quantum_oscillator.py +623 -0
  62. sage/algebras/quaternion_algebra.py +20 -0
  63. sage/algebras/quaternion_algebra_element.py +55 -0
  64. sage/algebras/rational_cherednik_algebra.py +525 -0
  65. sage/algebras/schur_algebra.py +670 -0
  66. sage/algebras/shuffle_algebra.py +1011 -0
  67. sage/algebras/splitting_algebra.py +779 -0
  68. sage/algebras/tensor_algebra.py +709 -0
  69. sage/algebras/yangian.py +1082 -0
  70. sage/algebras/yokonuma_hecke_algebra.py +1018 -0
  71. sage/all__sagemath_combinat.py +44 -0
  72. sage/combinat/SJT.py +255 -0
  73. sage/combinat/affine_permutation.py +2405 -0
  74. sage/combinat/algebraic_combinatorics.py +55 -0
  75. sage/combinat/all.py +53 -0
  76. sage/combinat/all__sagemath_combinat.py +195 -0
  77. sage/combinat/alternating_sign_matrix.py +2063 -0
  78. sage/combinat/baxter_permutations.py +346 -0
  79. sage/combinat/bijectionist.py +3220 -0
  80. sage/combinat/binary_recurrence_sequences.py +1180 -0
  81. sage/combinat/blob_algebra.py +685 -0
  82. sage/combinat/catalog_partitions.py +27 -0
  83. sage/combinat/chas/all.py +23 -0
  84. sage/combinat/chas/fsym.py +1180 -0
  85. sage/combinat/chas/wqsym.py +2601 -0
  86. sage/combinat/cluster_complex.py +326 -0
  87. sage/combinat/colored_permutations.py +2039 -0
  88. sage/combinat/colored_permutations_representations.py +964 -0
  89. sage/combinat/composition_signed.py +142 -0
  90. sage/combinat/composition_tableau.py +855 -0
  91. sage/combinat/constellation.py +1729 -0
  92. sage/combinat/core.py +751 -0
  93. sage/combinat/counting.py +12 -0
  94. sage/combinat/crystals/affine.py +742 -0
  95. sage/combinat/crystals/affine_factorization.py +518 -0
  96. sage/combinat/crystals/affinization.py +331 -0
  97. sage/combinat/crystals/alcove_path.py +2013 -0
  98. sage/combinat/crystals/all.py +22 -0
  99. sage/combinat/crystals/bkk_crystals.py +141 -0
  100. sage/combinat/crystals/catalog.py +115 -0
  101. sage/combinat/crystals/catalog_elementary_crystals.py +18 -0
  102. sage/combinat/crystals/catalog_infinity_crystals.py +33 -0
  103. sage/combinat/crystals/catalog_kirillov_reshetikhin.py +18 -0
  104. sage/combinat/crystals/crystals.py +257 -0
  105. sage/combinat/crystals/direct_sum.py +260 -0
  106. sage/combinat/crystals/elementary_crystals.py +1251 -0
  107. sage/combinat/crystals/fast_crystals.py +441 -0
  108. sage/combinat/crystals/fully_commutative_stable_grothendieck.py +1205 -0
  109. sage/combinat/crystals/generalized_young_walls.py +1076 -0
  110. sage/combinat/crystals/highest_weight_crystals.py +436 -0
  111. sage/combinat/crystals/induced_structure.py +695 -0
  112. sage/combinat/crystals/infinity_crystals.py +730 -0
  113. sage/combinat/crystals/kac_modules.py +863 -0
  114. sage/combinat/crystals/kirillov_reshetikhin.py +4196 -0
  115. sage/combinat/crystals/kyoto_path_model.py +497 -0
  116. sage/combinat/crystals/letters.cp314t-win_amd64.pyd +0 -0
  117. sage/combinat/crystals/letters.pxd +79 -0
  118. sage/combinat/crystals/letters.pyx +3056 -0
  119. sage/combinat/crystals/littelmann_path.py +1518 -0
  120. sage/combinat/crystals/monomial_crystals.py +1262 -0
  121. sage/combinat/crystals/multisegments.py +462 -0
  122. sage/combinat/crystals/mv_polytopes.py +467 -0
  123. sage/combinat/crystals/pbw_crystal.py +511 -0
  124. sage/combinat/crystals/pbw_datum.cp314t-win_amd64.pyd +0 -0
  125. sage/combinat/crystals/pbw_datum.pxd +4 -0
  126. sage/combinat/crystals/pbw_datum.pyx +487 -0
  127. sage/combinat/crystals/polyhedral_realization.py +372 -0
  128. sage/combinat/crystals/spins.cp314t-win_amd64.pyd +0 -0
  129. sage/combinat/crystals/spins.pxd +21 -0
  130. sage/combinat/crystals/spins.pyx +756 -0
  131. sage/combinat/crystals/star_crystal.py +290 -0
  132. sage/combinat/crystals/subcrystal.py +464 -0
  133. sage/combinat/crystals/tensor_product.py +1177 -0
  134. sage/combinat/crystals/tensor_product_element.cp314t-win_amd64.pyd +0 -0
  135. sage/combinat/crystals/tensor_product_element.pxd +35 -0
  136. sage/combinat/crystals/tensor_product_element.pyx +1870 -0
  137. sage/combinat/crystals/virtual_crystal.py +420 -0
  138. sage/combinat/cyclic_sieving_phenomenon.py +204 -0
  139. sage/combinat/debruijn_sequence.cp314t-win_amd64.pyd +0 -0
  140. sage/combinat/debruijn_sequence.pyx +355 -0
  141. sage/combinat/decorated_permutation.py +270 -0
  142. sage/combinat/degree_sequences.cp314t-win_amd64.pyd +0 -0
  143. sage/combinat/degree_sequences.pyx +588 -0
  144. sage/combinat/derangements.py +527 -0
  145. sage/combinat/descent_algebra.py +1008 -0
  146. sage/combinat/diagram.py +1551 -0
  147. sage/combinat/diagram_algebras.py +5886 -0
  148. sage/combinat/dyck_word.py +4349 -0
  149. sage/combinat/e_one_star.py +1623 -0
  150. sage/combinat/enumerated_sets.py +123 -0
  151. sage/combinat/expnums.cp314t-win_amd64.pyd +0 -0
  152. sage/combinat/expnums.pyx +148 -0
  153. sage/combinat/fast_vector_partitions.cp314t-win_amd64.pyd +0 -0
  154. sage/combinat/fast_vector_partitions.pyx +346 -0
  155. sage/combinat/fqsym.py +1977 -0
  156. sage/combinat/free_dendriform_algebra.py +954 -0
  157. sage/combinat/free_prelie_algebra.py +1141 -0
  158. sage/combinat/fully_commutative_elements.py +1077 -0
  159. sage/combinat/fully_packed_loop.py +1523 -0
  160. sage/combinat/gelfand_tsetlin_patterns.py +1409 -0
  161. sage/combinat/gray_codes.py +311 -0
  162. sage/combinat/grossman_larson_algebras.py +667 -0
  163. sage/combinat/growth.py +4352 -0
  164. sage/combinat/hall_polynomial.py +188 -0
  165. sage/combinat/hillman_grassl.py +866 -0
  166. sage/combinat/integer_matrices.py +329 -0
  167. sage/combinat/integer_vectors_mod_permgroup.py +1238 -0
  168. sage/combinat/k_tableau.py +4564 -0
  169. sage/combinat/kazhdan_lusztig.py +215 -0
  170. sage/combinat/key_polynomial.py +885 -0
  171. sage/combinat/knutson_tao_puzzles.py +2286 -0
  172. sage/combinat/lr_tableau.py +311 -0
  173. sage/combinat/matrices/all.py +24 -0
  174. sage/combinat/matrices/hadamard_matrix.py +3790 -0
  175. sage/combinat/matrices/latin.py +2912 -0
  176. sage/combinat/misc.py +401 -0
  177. sage/combinat/multiset_partition_into_sets_ordered.py +3541 -0
  178. sage/combinat/ncsf_qsym/all.py +21 -0
  179. sage/combinat/ncsf_qsym/combinatorics.py +317 -0
  180. sage/combinat/ncsf_qsym/generic_basis_code.py +1427 -0
  181. sage/combinat/ncsf_qsym/ncsf.py +5637 -0
  182. sage/combinat/ncsf_qsym/qsym.py +4053 -0
  183. sage/combinat/ncsf_qsym/tutorial.py +447 -0
  184. sage/combinat/ncsym/all.py +21 -0
  185. sage/combinat/ncsym/bases.py +855 -0
  186. sage/combinat/ncsym/dual.py +593 -0
  187. sage/combinat/ncsym/ncsym.py +2076 -0
  188. sage/combinat/necklace.py +551 -0
  189. sage/combinat/non_decreasing_parking_function.py +634 -0
  190. sage/combinat/nu_dyck_word.py +1474 -0
  191. sage/combinat/output.py +861 -0
  192. sage/combinat/parallelogram_polyomino.py +4326 -0
  193. sage/combinat/parking_functions.py +1602 -0
  194. sage/combinat/partition_algebra.py +1998 -0
  195. sage/combinat/partition_kleshchev.py +1982 -0
  196. sage/combinat/partition_shifting_algebras.py +584 -0
  197. sage/combinat/partition_tuple.py +3114 -0
  198. sage/combinat/path_tableaux/all.py +13 -0
  199. sage/combinat/path_tableaux/catalog.py +29 -0
  200. sage/combinat/path_tableaux/dyck_path.py +380 -0
  201. sage/combinat/path_tableaux/frieze.py +476 -0
  202. sage/combinat/path_tableaux/path_tableau.py +728 -0
  203. sage/combinat/path_tableaux/semistandard.py +510 -0
  204. sage/combinat/perfect_matching.py +779 -0
  205. sage/combinat/plane_partition.py +3300 -0
  206. sage/combinat/q_bernoulli.cp314t-win_amd64.pyd +0 -0
  207. sage/combinat/q_bernoulli.pyx +128 -0
  208. sage/combinat/quickref.py +81 -0
  209. sage/combinat/recognizable_series.py +2051 -0
  210. sage/combinat/regular_sequence.py +4316 -0
  211. sage/combinat/regular_sequence_bounded.py +543 -0
  212. sage/combinat/restricted_growth.py +81 -0
  213. sage/combinat/ribbon.py +20 -0
  214. sage/combinat/ribbon_shaped_tableau.py +489 -0
  215. sage/combinat/ribbon_tableau.py +1180 -0
  216. sage/combinat/rigged_configurations/all.py +46 -0
  217. sage/combinat/rigged_configurations/bij_abstract_class.py +548 -0
  218. sage/combinat/rigged_configurations/bij_infinity.py +370 -0
  219. sage/combinat/rigged_configurations/bij_type_A.py +163 -0
  220. sage/combinat/rigged_configurations/bij_type_A2_dual.py +338 -0
  221. sage/combinat/rigged_configurations/bij_type_A2_even.py +218 -0
  222. sage/combinat/rigged_configurations/bij_type_A2_odd.py +199 -0
  223. sage/combinat/rigged_configurations/bij_type_B.py +900 -0
  224. sage/combinat/rigged_configurations/bij_type_C.py +267 -0
  225. sage/combinat/rigged_configurations/bij_type_D.py +771 -0
  226. sage/combinat/rigged_configurations/bij_type_D_tri.py +392 -0
  227. sage/combinat/rigged_configurations/bij_type_D_twisted.py +576 -0
  228. sage/combinat/rigged_configurations/bij_type_E67.py +402 -0
  229. sage/combinat/rigged_configurations/bijection.py +143 -0
  230. sage/combinat/rigged_configurations/kleber_tree.py +1475 -0
  231. sage/combinat/rigged_configurations/kr_tableaux.py +1898 -0
  232. sage/combinat/rigged_configurations/rc_crystal.py +461 -0
  233. sage/combinat/rigged_configurations/rc_infinity.py +540 -0
  234. sage/combinat/rigged_configurations/rigged_configuration_element.py +2403 -0
  235. sage/combinat/rigged_configurations/rigged_configurations.py +1918 -0
  236. sage/combinat/rigged_configurations/rigged_partition.cp314t-win_amd64.pyd +0 -0
  237. sage/combinat/rigged_configurations/rigged_partition.pxd +15 -0
  238. sage/combinat/rigged_configurations/rigged_partition.pyx +680 -0
  239. sage/combinat/rigged_configurations/tensor_product_kr_tableaux.py +499 -0
  240. sage/combinat/rigged_configurations/tensor_product_kr_tableaux_element.py +428 -0
  241. sage/combinat/rsk.py +3438 -0
  242. sage/combinat/schubert_polynomial.py +508 -0
  243. sage/combinat/set_partition.py +3318 -0
  244. sage/combinat/set_partition_iterator.cp314t-win_amd64.pyd +0 -0
  245. sage/combinat/set_partition_iterator.pyx +136 -0
  246. sage/combinat/set_partition_ordered.py +1590 -0
  247. sage/combinat/sf/abreu_nigro.py +346 -0
  248. sage/combinat/sf/all.py +52 -0
  249. sage/combinat/sf/character.py +576 -0
  250. sage/combinat/sf/classical.py +319 -0
  251. sage/combinat/sf/dual.py +996 -0
  252. sage/combinat/sf/elementary.py +549 -0
  253. sage/combinat/sf/hall_littlewood.py +1028 -0
  254. sage/combinat/sf/hecke.py +336 -0
  255. sage/combinat/sf/homogeneous.py +464 -0
  256. sage/combinat/sf/jack.py +1428 -0
  257. sage/combinat/sf/k_dual.py +1458 -0
  258. sage/combinat/sf/kfpoly.py +447 -0
  259. sage/combinat/sf/llt.py +789 -0
  260. sage/combinat/sf/macdonald.py +2019 -0
  261. sage/combinat/sf/monomial.py +525 -0
  262. sage/combinat/sf/multiplicative.py +113 -0
  263. sage/combinat/sf/new_kschur.py +1786 -0
  264. sage/combinat/sf/ns_macdonald.py +964 -0
  265. sage/combinat/sf/orthogonal.py +246 -0
  266. sage/combinat/sf/orthotriang.py +355 -0
  267. sage/combinat/sf/powersum.py +963 -0
  268. sage/combinat/sf/schur.py +880 -0
  269. sage/combinat/sf/sf.py +1653 -0
  270. sage/combinat/sf/sfa.py +7053 -0
  271. sage/combinat/sf/symplectic.py +253 -0
  272. sage/combinat/sf/witt.py +721 -0
  273. sage/combinat/shifted_primed_tableau.py +2735 -0
  274. sage/combinat/shuffle.py +830 -0
  275. sage/combinat/sidon_sets.py +146 -0
  276. sage/combinat/similarity_class_type.py +1721 -0
  277. sage/combinat/sine_gordon.py +618 -0
  278. sage/combinat/six_vertex_model.py +784 -0
  279. sage/combinat/skew_partition.py +2053 -0
  280. sage/combinat/skew_tableau.py +2989 -0
  281. sage/combinat/sloane_functions.py +8935 -0
  282. sage/combinat/specht_module.py +1403 -0
  283. sage/combinat/species/all.py +48 -0
  284. sage/combinat/species/characteristic_species.py +321 -0
  285. sage/combinat/species/composition_species.py +273 -0
  286. sage/combinat/species/cycle_species.py +284 -0
  287. sage/combinat/species/empty_species.py +155 -0
  288. sage/combinat/species/functorial_composition_species.py +148 -0
  289. sage/combinat/species/generating_series.py +673 -0
  290. sage/combinat/species/library.py +148 -0
  291. sage/combinat/species/linear_order_species.py +169 -0
  292. sage/combinat/species/misc.py +83 -0
  293. sage/combinat/species/partition_species.py +290 -0
  294. sage/combinat/species/permutation_species.py +268 -0
  295. sage/combinat/species/product_species.py +423 -0
  296. sage/combinat/species/recursive_species.py +476 -0
  297. sage/combinat/species/set_species.py +192 -0
  298. sage/combinat/species/species.py +820 -0
  299. sage/combinat/species/structure.py +539 -0
  300. sage/combinat/species/subset_species.py +243 -0
  301. sage/combinat/species/sum_species.py +225 -0
  302. sage/combinat/subword.py +564 -0
  303. sage/combinat/subword_complex.py +2122 -0
  304. sage/combinat/subword_complex_c.cp314t-win_amd64.pyd +0 -0
  305. sage/combinat/subword_complex_c.pyx +119 -0
  306. sage/combinat/super_tableau.py +821 -0
  307. sage/combinat/superpartition.py +1154 -0
  308. sage/combinat/symmetric_group_algebra.py +3774 -0
  309. sage/combinat/symmetric_group_representations.py +1830 -0
  310. sage/combinat/t_sequences.py +877 -0
  311. sage/combinat/tableau.py +9506 -0
  312. sage/combinat/tableau_residues.py +860 -0
  313. sage/combinat/tableau_tuple.py +5353 -0
  314. sage/combinat/tiling.py +2432 -0
  315. sage/combinat/triangles_FHM.py +777 -0
  316. sage/combinat/tutorial.py +1857 -0
  317. sage/combinat/vector_partition.py +337 -0
  318. sage/combinat/words/abstract_word.py +1722 -0
  319. sage/combinat/words/all.py +59 -0
  320. sage/combinat/words/alphabet.py +268 -0
  321. sage/combinat/words/finite_word.py +7201 -0
  322. sage/combinat/words/infinite_word.py +113 -0
  323. sage/combinat/words/lyndon_word.py +652 -0
  324. sage/combinat/words/morphic.py +351 -0
  325. sage/combinat/words/morphism.py +3878 -0
  326. sage/combinat/words/paths.py +2932 -0
  327. sage/combinat/words/shuffle_product.py +278 -0
  328. sage/combinat/words/suffix_trees.py +1873 -0
  329. sage/combinat/words/word.py +769 -0
  330. sage/combinat/words/word_char.cp314t-win_amd64.pyd +0 -0
  331. sage/combinat/words/word_char.pyx +847 -0
  332. sage/combinat/words/word_datatypes.cp314t-win_amd64.pyd +0 -0
  333. sage/combinat/words/word_datatypes.pxd +4 -0
  334. sage/combinat/words/word_datatypes.pyx +1067 -0
  335. sage/combinat/words/word_generators.py +2026 -0
  336. sage/combinat/words/word_infinite_datatypes.py +1218 -0
  337. sage/combinat/words/word_options.py +99 -0
  338. sage/combinat/words/words.py +2396 -0
  339. sage/data_structures/all__sagemath_combinat.py +1 -0
  340. sage/databases/all__sagemath_combinat.py +13 -0
  341. sage/databases/findstat.py +4897 -0
  342. sage/databases/oeis.py +2058 -0
  343. sage/databases/sloane.py +393 -0
  344. sage/dynamics/all__sagemath_combinat.py +14 -0
  345. sage/dynamics/cellular_automata/all.py +7 -0
  346. sage/dynamics/cellular_automata/catalog.py +34 -0
  347. sage/dynamics/cellular_automata/elementary.py +612 -0
  348. sage/dynamics/cellular_automata/glca.py +477 -0
  349. sage/dynamics/cellular_automata/solitons.py +1463 -0
  350. sage/dynamics/finite_dynamical_system.py +1249 -0
  351. sage/dynamics/finite_dynamical_system_catalog.py +382 -0
  352. sage/games/all.py +7 -0
  353. sage/games/hexad.py +704 -0
  354. sage/games/quantumino.py +591 -0
  355. sage/games/sudoku.py +889 -0
  356. sage/games/sudoku_backtrack.cp314t-win_amd64.pyd +0 -0
  357. sage/games/sudoku_backtrack.pyx +189 -0
  358. sage/groups/all__sagemath_combinat.py +1 -0
  359. sage/groups/indexed_free_group.py +489 -0
  360. sage/libs/all__sagemath_combinat.py +6 -0
  361. sage/libs/lrcalc/__init__.py +1 -0
  362. sage/libs/lrcalc/lrcalc.py +525 -0
  363. sage/libs/symmetrica/__init__.py +7 -0
  364. sage/libs/symmetrica/all.py +101 -0
  365. sage/libs/symmetrica/kostka.pxi +168 -0
  366. sage/libs/symmetrica/part.pxi +193 -0
  367. sage/libs/symmetrica/plet.pxi +42 -0
  368. sage/libs/symmetrica/sab.pxi +196 -0
  369. sage/libs/symmetrica/sb.pxi +332 -0
  370. sage/libs/symmetrica/sc.pxi +192 -0
  371. sage/libs/symmetrica/schur.pxi +956 -0
  372. sage/libs/symmetrica/symmetrica.cp314t-win_amd64.pyd +0 -0
  373. sage/libs/symmetrica/symmetrica.pxi +1172 -0
  374. sage/libs/symmetrica/symmetrica.pyx +39 -0
  375. sage/monoids/all.py +13 -0
  376. sage/monoids/automatic_semigroup.py +1054 -0
  377. sage/monoids/free_abelian_monoid.py +315 -0
  378. sage/monoids/free_abelian_monoid_element.cp314t-win_amd64.pyd +0 -0
  379. sage/monoids/free_abelian_monoid_element.pxd +16 -0
  380. sage/monoids/free_abelian_monoid_element.pyx +397 -0
  381. sage/monoids/free_monoid.py +335 -0
  382. sage/monoids/free_monoid_element.py +431 -0
  383. sage/monoids/hecke_monoid.py +65 -0
  384. sage/monoids/string_monoid.py +817 -0
  385. sage/monoids/string_monoid_element.py +547 -0
  386. sage/monoids/string_ops.py +143 -0
  387. sage/monoids/trace_monoid.py +972 -0
  388. sage/rings/all__sagemath_combinat.py +2 -0
  389. sage/sat/all.py +4 -0
  390. sage/sat/boolean_polynomials.py +405 -0
  391. sage/sat/converters/__init__.py +6 -0
  392. sage/sat/converters/anf2cnf.py +14 -0
  393. sage/sat/converters/polybori.py +611 -0
  394. sage/sat/solvers/__init__.py +5 -0
  395. sage/sat/solvers/cryptominisat.py +287 -0
  396. sage/sat/solvers/dimacs.py +783 -0
  397. sage/sat/solvers/picosat.py +228 -0
  398. sage/sat/solvers/sat_lp.py +156 -0
  399. sage/sat/solvers/satsolver.cp314t-win_amd64.pyd +0 -0
  400. sage/sat/solvers/satsolver.pxd +3 -0
  401. sage/sat/solvers/satsolver.pyx +405 -0
@@ -0,0 +1,525 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.modules
3
+ """
4
+ Monomial symmetric functions
5
+ """
6
+ # ****************************************************************************
7
+ # Copyright (C) 2007 Mike Hansen <mhansen@gmail.com>
8
+ # 2010 Anne Schilling <anne at math.ucdavis.edu> (addition)
9
+ # 2012 Mike Zabrocki <mike.zabrocki@gmail.com>
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
+ # https://www.gnu.org/licenses/
21
+ # ****************************************************************************
22
+
23
+ from sage.arith.misc import binomial, factorial, multinomial
24
+ from sage.combinat.partition import _Partitions
25
+ from sage.misc.lazy_import import lazy_import
26
+ from sage.rings.infinity import infinity
27
+ from sage.rings.integer import Integer
28
+
29
+ lazy_import('sage.libs.symmetrica', 'all', as_='symmetrica')
30
+
31
+ from . import classical
32
+
33
+
34
+ class SymmetricFunctionAlgebra_monomial(classical.SymmetricFunctionAlgebra_classical):
35
+ def __init__(self, Sym):
36
+ """
37
+ A class for methods related to monomial symmetric functions.
38
+
39
+ INPUT:
40
+
41
+ - ``self`` -- a monomial symmetric function basis
42
+ - ``Sym`` -- an instance of the ring of the symmetric functions
43
+
44
+ TESTS::
45
+
46
+ sage: # needs lrcalc_python
47
+ sage: m = SymmetricFunctions(QQ).m()
48
+ sage: m == loads(dumps(m))
49
+ True
50
+ sage: TestSuite(m).run(skip=['_test_associativity', '_test_distributivity', '_test_prod'])
51
+ sage: TestSuite(m).run(elements = [m[1,1]+m[2], m[1]+2*m[1,1]])
52
+ """
53
+ classical.SymmetricFunctionAlgebra_classical.__init__(self, Sym, "monomial", 'm')
54
+
55
+ def _dual_basis_default(self):
56
+ """
57
+ Return the default dual basis to ``self`` when no scalar product is specified.
58
+
59
+ This method returns the dual basis of the monomial basis with
60
+ respect to the standard scalar product, which is the
61
+ homogeneous basis.
62
+
63
+ EXAMPLES::
64
+
65
+ sage: m = SymmetricFunctions(QQ).m()
66
+ sage: h = SymmetricFunctions(QQ).h()
67
+ sage: m.dual_basis() == h
68
+ True
69
+
70
+ TESTS::
71
+
72
+ sage: m._dual_basis_default() is m.dual_basis()
73
+ True
74
+ sage: zee = lambda x : x.centralizer_size()
75
+ sage: dm = m.dual_basis(zee)
76
+ sage: dm[3,1].scalar(m[2,1,1])
77
+ 0
78
+ sage: m[2,1,1].scalar(dm[3,1])
79
+ 0
80
+ """
81
+ return self.realization_of().h()
82
+
83
+ def product(self, left, right):
84
+ """
85
+ Return the product of ``left`` and ``right``.
86
+
87
+ - ``left``, ``right`` -- symmetric functions written in the
88
+ monomial basis ``self``
89
+
90
+ OUTPUT:
91
+
92
+ - the product of ``left`` and ``right``, expanded in the
93
+ monomial basis, as a dictionary whose keys are partitions and
94
+ whose values are the coefficients of these partitions (more
95
+ precisely, their respective monomial symmetric functions) in the
96
+ product.
97
+
98
+ EXAMPLES::
99
+
100
+ sage: m = SymmetricFunctions(QQ).m()
101
+ sage: a = m([2,1])
102
+ sage: a^2
103
+ 4*m[2, 2, 1, 1] + 6*m[2, 2, 2] + 2*m[3, 2, 1] + 2*m[3, 3] + 2*m[4, 1, 1] + m[4, 2]
104
+
105
+ ::
106
+
107
+ sage: QQx.<x> = QQ['x']
108
+ sage: m = SymmetricFunctions(QQx).m()
109
+ sage: a = m([2,1])+x
110
+ sage: 2*a # indirect doctest
111
+ 2*x*m[] + 2*m[2, 1]
112
+ sage: a^2
113
+ x^2*m[] + 2*x*m[2, 1] + 4*m[2, 2, 1, 1] + 6*m[2, 2, 2] + 2*m[3, 2, 1] + 2*m[3, 3] + 2*m[4, 1, 1] + m[4, 2]
114
+ """
115
+ # Use symmetrica to do the multiplication
116
+ # A = left.parent()
117
+
118
+ # Hack due to symmetrica crashing when both of the
119
+ # partitions are the empty partition
120
+ # if R is ZZ or R is QQ:
121
+ # return symmetrica.mult_monomial_monomial(left, right)
122
+
123
+ z_elt = {}
124
+ for left_m, left_c in left._monomial_coefficients.items():
125
+ for right_m, right_c in right._monomial_coefficients.items():
126
+
127
+ # Hack due to symmetrica crashing when both of the
128
+ # partitions are the empty partition
129
+ if not left_m and not right_m:
130
+ z_elt[left_m] = left_c * right_c
131
+ continue
132
+
133
+ d = symmetrica.mult_monomial_monomial({left_m: Integer(1)},
134
+ {right_m: Integer(1)}).monomial_coefficients()
135
+ for m in d:
136
+ if m in z_elt:
137
+ z_elt[m] += left_c * right_c * d[m]
138
+ else:
139
+ z_elt[m] = left_c * right_c * d[m]
140
+ return self._from_dict(z_elt)
141
+
142
+ def from_polynomial(self, f, check=True):
143
+ r"""
144
+ Return the symmetric function in the monomial basis corresponding
145
+ to the polynomial ``f``.
146
+
147
+ INPUT:
148
+
149
+ - ``self`` -- a monomial symmetric function basis
150
+ - ``f`` -- a polynomial in finitely many variables over the
151
+ same base ring as ``self``; it is assumed that this
152
+ polynomial is symmetric
153
+ - ``check`` -- boolean (default: ``True``); checks whether
154
+ the polynomial is indeed symmetric
155
+
156
+ OUTPUT:
157
+
158
+ - This function converts a symmetric polynomial `f` in a
159
+ polynomial ring in finitely many variables to a symmetric
160
+ function in the monomial basis of the ring of symmetric
161
+ functions over the same base ring.
162
+
163
+ EXAMPLES::
164
+
165
+ sage: # needs sage.groups
166
+ sage: m = SymmetricFunctions(QQ).m()
167
+ sage: P = PolynomialRing(QQ, 'x', 3)
168
+ sage: x = P.gens()
169
+ sage: f = x[0] + x[1] + x[2]
170
+ sage: m.from_polynomial(f)
171
+ m[1]
172
+ sage: f = x[0]**2+x[1]**2+x[2]**2
173
+ sage: m.from_polynomial(f)
174
+ m[2]
175
+ sage: f = x[0]^2+x[1]
176
+ sage: m.from_polynomial(f)
177
+ Traceback (most recent call last):
178
+ ...
179
+ ValueError: x0^2 + x1 is not a symmetric polynomial
180
+ sage: f = (m[2,1]+m[1,1]).expand(3)
181
+ sage: m.from_polynomial(f)
182
+ m[1, 1] + m[2, 1]
183
+ sage: f = (2*m[2,1]+m[1,1]+3*m[3]).expand(3)
184
+ sage: m.from_polynomial(f)
185
+ m[1, 1] + 2*m[2, 1] + 3*m[3]
186
+
187
+ """
188
+ assert self.base_ring() == f.base_ring()
189
+ if check and not f.is_symmetric():
190
+ raise ValueError("%s is not a symmetric polynomial" % f)
191
+ out = self._from_dict({_Partitions.element_class(_Partitions, list(e)): c
192
+ for e, c in f.monomial_coefficients().items()
193
+ if all(e[i+1] <= e[i] for i in range(len(e)-1))},
194
+ remove_zeros=False)
195
+ return out
196
+
197
+ def from_polynomial_exp(self, p):
198
+ r"""
199
+ Conversion from polynomial in exponential notation.
200
+
201
+ INPUT:
202
+
203
+ - ``self`` -- a monomial symmetric function basis
204
+ - ``p`` -- a polynomial over the same base ring as ``self``
205
+
206
+ OUTPUT:
207
+
208
+ - This returns a symmetric function by mapping each monomial of
209
+ `p` with exponents ``exp`` into `m_\lambda` where `\lambda` is
210
+ the partition with exponential notation ``exp``.
211
+
212
+ EXAMPLES::
213
+
214
+ sage: m = SymmetricFunctions(QQ).m()
215
+ sage: P = PolynomialRing(QQ,'x',5)
216
+ sage: x = P.gens()
217
+
218
+ The exponential notation of the partition `(5,5,5,3,1,1)` is::
219
+
220
+ sage: Partition([5,5,5,3,1,1]).to_exp()
221
+ [2, 0, 1, 0, 3]
222
+
223
+ Therefore, the monomial::
224
+
225
+ sage: f = x[0]^2 * x[2] * x[4]^3
226
+
227
+ is mapped to::
228
+
229
+ sage: m.from_polynomial_exp(f)
230
+ m[5, 5, 5, 3, 1, 1]
231
+
232
+ Furthermore, this function is linear::
233
+
234
+ sage: f = 3 * x[3] + 2 * x[0]^2 * x[2] * x[4]^3
235
+ sage: m.from_polynomial_exp(f)
236
+ 3*m[4] + 2*m[5, 5, 5, 3, 1, 1]
237
+
238
+ .. SEEALSO::
239
+
240
+ :func:`Partition`, :meth:`Partition.to_exp`
241
+ """
242
+ assert self.base_ring() == p.parent().base_ring()
243
+ from sage.combinat.sf.sfa import _from_polynomial
244
+ return _from_polynomial(p, self)
245
+
246
+ def antipode_by_coercion(self, element):
247
+ r"""
248
+ The antipode of ``element`` via coercion to and from the power-sum
249
+ basis or the Schur basis (depending on whether the power sums really
250
+ form a basis over the given ground ring).
251
+
252
+ INPUT:
253
+
254
+ - ``element`` -- element in a basis of the ring of symmetric functions
255
+
256
+ EXAMPLES::
257
+
258
+ sage: Sym = SymmetricFunctions(QQ)
259
+ sage: m = Sym.monomial()
260
+ sage: m[3,2].antipode()
261
+ m[3, 2] + 2*m[5]
262
+ sage: m.antipode_by_coercion(m[3,2])
263
+ m[3, 2] + 2*m[5]
264
+
265
+ sage: Sym = SymmetricFunctions(ZZ)
266
+ sage: m = Sym.monomial()
267
+ sage: m[3,2].antipode()
268
+ m[3, 2] + 2*m[5]
269
+ sage: m.antipode_by_coercion(m[3,2])
270
+ m[3, 2] + 2*m[5]
271
+
272
+ .. TODO::
273
+
274
+ Is there a not too difficult way to get the power-sum computations
275
+ to work over any ring, not just one with coercion from `\QQ`?
276
+ """
277
+ from sage.rings.rational_field import RationalField
278
+ if self.has_coerce_map_from(RationalField()):
279
+ p = self.realization_of().powersum()
280
+ return self(p.antipode(p(element)))
281
+
282
+ s = self.realization_of().schur()
283
+ return self(s.antipode(s(element)))
284
+
285
+ def _magma_init_(self, magma):
286
+ """
287
+ Used in converting this ring to the corresponding ring in MAGMA.
288
+
289
+ EXAMPLES::
290
+
291
+ sage: # optional - magma
292
+ sage: M = SymmetricFunctions(QQ).m()
293
+ sage: t = 4*M[3,2]+9
294
+ sage: mt = magma(t); mt
295
+ 9 + 4*$.[3,2]
296
+ sage: mt.sage()
297
+ 9*m[] + 4*m[3, 2]
298
+ """
299
+ B = magma(self.base_ring())
300
+ Bref = B._ref()
301
+ return f"SymmetricFunctionAlgebraMonomial({Bref})"
302
+
303
+ class Element(classical.SymmetricFunctionAlgebra_classical.Element):
304
+ def expand(self, n, alphabet='x'):
305
+ """
306
+ Expand the symmetric function ``self`` as a symmetric polynomial
307
+ in ``n`` variables.
308
+
309
+ INPUT:
310
+
311
+ - ``n`` -- nonnegative integer
312
+
313
+ - ``alphabet`` -- (default: ``'x'``) a variable for the expansion
314
+
315
+ OUTPUT:
316
+
317
+ A monomial expansion of ``self`` in the `n` variables
318
+ labelled by ``alphabet``.
319
+
320
+ EXAMPLES::
321
+
322
+ sage: m = SymmetricFunctions(QQ).m()
323
+ sage: m([2,1]).expand(3)
324
+ x0^2*x1 + x0*x1^2 + x0^2*x2 + x1^2*x2 + x0*x2^2 + x1*x2^2
325
+ sage: m([1,1,1]).expand(2)
326
+ 0
327
+ sage: m([2,1]).expand(3,alphabet='z')
328
+ z0^2*z1 + z0*z1^2 + z0^2*z2 + z1^2*z2 + z0*z2^2 + z1*z2^2
329
+ sage: m([2,1]).expand(3,alphabet='x,y,z')
330
+ x^2*y + x*y^2 + x^2*z + y^2*z + x*z^2 + y*z^2
331
+ sage: m([1]).expand(0)
332
+ 0
333
+ sage: (3*m([])).expand(0)
334
+ 3
335
+ """
336
+
337
+ def condition(part):
338
+ return len(part) > n
339
+ return self._expand(condition, n, alphabet)
340
+
341
+ def principal_specialization(self, n=infinity, q=None):
342
+ r"""
343
+ Return the principal specialization of a symmetric function.
344
+
345
+ The *principal specialization* of order `n` at `q`
346
+ is the ring homomorphism `ps_{n,q}` from the ring of
347
+ symmetric functions to another commutative ring `R`
348
+ given by `x_i \mapsto q^{i-1}` for `i \in \{1,\dots,n\}`
349
+ and `x_i \mapsto 0` for `i > n`.
350
+ Here, `q` is a given element of `R`, and we assume that
351
+ the variables of our symmetric functions are
352
+ `x_1, x_2, x_3, \ldots`.
353
+ (To be more precise, `ps_{n,q}` is a `K`-algebra
354
+ homomorphism, where `K` is the base ring.)
355
+ See Section 7.8 of [EnumComb2]_.
356
+
357
+ The *stable principal specialization* at `q` is the ring
358
+ homomorphism `ps_q` from the ring of symmetric functions
359
+ to another commutative ring `R` given by
360
+ `x_i \mapsto q^{i-1}` for all `i`.
361
+ This is well-defined only if the resulting infinite sums
362
+ converge; thus, in particular, setting `q = 1` in the
363
+ stable principal specialization is an invalid operation.
364
+
365
+ INPUT:
366
+
367
+ - ``n`` -- (default: ``infinity``) a nonnegative integer or
368
+ ``infinity``, specifying whether to compute the principal
369
+ specialization of order ``n`` or the stable principal
370
+ specialization.
371
+
372
+ - ``q`` -- (default: ``None``) the value to use for `q`; the
373
+ default is to create a ring of polynomials in ``q``
374
+ (or a field of rational functions in ``q``) over the
375
+ given coefficient ring.
376
+
377
+ For ``q=1`` and finite ``n`` we use the formula from
378
+ Proposition 7.8.3 of [EnumComb2]_:
379
+
380
+ .. MATH::
381
+
382
+ ps_{n,1}(m_\lambda) = \binom{n}{\ell(\lambda)}
383
+ \binom{\ell(\lambda)}{m_1(\lambda), m_2(\lambda),\dots},
384
+
385
+ where `\ell(\lambda)` denotes the length of `\lambda`.
386
+
387
+ In all other cases, we convert to complete homogeneous
388
+ symmetric functions.
389
+
390
+ EXAMPLES::
391
+
392
+ sage: m = SymmetricFunctions(QQ).m()
393
+ sage: x = m[3,1]
394
+ sage: x.principal_specialization(3)
395
+ q^7 + q^6 + q^5 + q^3 + q^2 + q
396
+
397
+ sage: x = 5*m[2] + 3*m[1] + 1
398
+ sage: x.principal_specialization(3, q=var("q")) # needs sage.symbolic
399
+ -10*(q^3 - 1)*q/(q - 1) + 5*(q^3 - 1)^2/(q - 1)^2 + 3*(q^3 - 1)/(q - 1) + 1
400
+
401
+ TESTS::
402
+
403
+ sage: m.zero().principal_specialization(3)
404
+ 0
405
+ """
406
+ if q == 1:
407
+ if n == infinity:
408
+ raise ValueError("the stable principal specialization at q=1 is not defined")
409
+ f = lambda partition: binomial(n, len(partition))*multinomial(partition.to_exp())
410
+ return self.parent()._apply_module_morphism(self, f, q.parent())
411
+
412
+ # heuristically, it seems fastest to fall back to the
413
+ # elementary basis - using the powersum basis would
414
+ # introduce singularities, because it is not a Z-basis
415
+ return self.parent().realization_of().elementary()(self).principal_specialization(n=n, q=q)
416
+
417
+ def exponential_specialization(self, t=None, q=1):
418
+ r"""
419
+ Return the exponential specialization of a
420
+ symmetric function (when `q = 1`), or the
421
+ `q`-exponential specialization (when `q \neq 1`).
422
+
423
+ The *exponential specialization* `ex` at `t` is a
424
+ `K`-algebra homomorphism from the `K`-algebra of
425
+ symmetric functions to another `K`-algebra `R`.
426
+ It is defined whenever the base ring `K` is a
427
+ `\QQ`-algebra and `t` is an element of `R`.
428
+ The easiest way to define it is by specifying its
429
+ values on the powersum symmetric functions to be
430
+ `p_1 = t` and `p_n = 0` for `n > 1`.
431
+ Equivalently, on the homogeneous functions it is
432
+ given by `ex(h_n) = t^n / n!`; see Proposition 7.8.4 of
433
+ [EnumComb2]_.
434
+
435
+ By analogy, the `q`-exponential specialization is a
436
+ `K`-algebra homomorphism from the `K`-algebra of
437
+ symmetric functions to another `K`-algebra `R` that
438
+ depends on two elements `t` and `q` of `R` for which
439
+ the elements `1 - q^i` for all positive integers `i`
440
+ are invertible.
441
+ It can be defined by specifying its values on the
442
+ complete homogeneous symmetric functions to be
443
+
444
+ .. MATH::
445
+
446
+ ex_q(h_n) = t^n / [n]_q!,
447
+
448
+ where `[n]_q!` is the `q`-factorial. Equivalently, for
449
+ `q \neq 1` and a homogeneous symmetric function `f` of
450
+ degree `n`, we have
451
+
452
+ .. MATH::
453
+
454
+ ex_q(f) = (1-q)^n t^n ps_q(f),
455
+
456
+ where `ps_q(f)` is the stable principal specialization of `f`
457
+ (see :meth:`principal_specialization`).
458
+ (See (7.29) in [EnumComb2]_.)
459
+
460
+ The limit of `ex_q` as `q \to 1` is `ex`.
461
+
462
+ INPUT:
463
+
464
+ - ``t`` -- (default: ``None``) the value to use for `t`;
465
+ the default is to create a ring of polynomials in ``t``
466
+
467
+ - ``q`` -- (default: `1`) the value to use for `q`; if
468
+ ``q`` is ``None``, then a ring (or fraction field) of
469
+ polynomials in ``q`` is created
470
+
471
+ EXAMPLES::
472
+
473
+ sage: m = SymmetricFunctions(QQ).m()
474
+ sage: (m[3]+m[2,1]+m[1,1,1]).exponential_specialization()
475
+ 1/6*t^3
476
+
477
+ sage: x = 5*m[1,1,1] + 3*m[2,1] + 1
478
+ sage: x.exponential_specialization()
479
+ 5/6*t^3 + 1
480
+
481
+ We also support the `q`-exponential_specialization::
482
+
483
+ sage: factor(m[3].exponential_specialization(q=var("q"), t=var("t"))) # needs sage.symbolic
484
+ (q - 1)^2*t^3/(q^2 + q + 1)
485
+
486
+ TESTS::
487
+
488
+ sage: m.zero().exponential_specialization()
489
+ 0
490
+ """
491
+ def get_variable(ring, name):
492
+ try:
493
+ ring(name)
494
+ except TypeError:
495
+ from sage.rings.polynomial.polynomial_ring_constructor import (
496
+ PolynomialRing,
497
+ )
498
+ return PolynomialRing(ring, name).gen()
499
+ else:
500
+ raise ValueError("the variable %s is in the base ring, pass it explicitly" % name)
501
+
502
+ if q == 1:
503
+ if t is None:
504
+ t = get_variable(self.base_ring(), 't')
505
+
506
+ def f(partition):
507
+ n = 0
508
+ for part in partition:
509
+ if part != 1:
510
+ return 0
511
+ n += 1
512
+ return t**n / factorial(n)
513
+
514
+ return self.parent()._apply_module_morphism(self, f, t.parent())
515
+
516
+ # heuristically, it seems fastest to fall back to the
517
+ # elementary basis - using the powersum basis would
518
+ # introduce singularities, because it is not a Z-basis
519
+ return self.parent().realization_of().elementary()(self).exponential_specialization(t=t, q=q)
520
+
521
+
522
+ # Backward compatibility for unpickling
523
+ from sage.misc.persist import register_unpickle_override
524
+
525
+ register_unpickle_override('sage.combinat.sf.monomial', 'SymmetricFunctionAlgebraElement_monomial', SymmetricFunctionAlgebra_monomial.Element)
@@ -0,0 +1,113 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.modules
3
+ r"""
4
+ Multiplicative symmetric functions
5
+
6
+ A realization `h` of the ring of symmetric functions is multiplicative if for
7
+ a partition `\lambda = (\lambda_1,\lambda_2,\ldots)` we have
8
+ `h_\lambda = h_{\lambda_1} h_{\lambda_2} \cdots`.
9
+ """
10
+ #*****************************************************************************
11
+ # Copyright (C) 2007 Mike Hansen <mhansen@gmail.com>,
12
+ #
13
+ # Distributed under the terms of the GNU General Public License (GPL)
14
+ #
15
+ # This code is distributed in the hope that it will be useful,
16
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18
+ # General Public License for more details.
19
+ #
20
+ # The full text of the GPL is available at:
21
+ #
22
+ # https://www.gnu.org/licenses/
23
+ #*****************************************************************************
24
+ import sage.combinat.partition
25
+
26
+ from . import classical
27
+
28
+
29
+ class SymmetricFunctionAlgebra_multiplicative(classical.SymmetricFunctionAlgebra_classical):
30
+ r"""
31
+ The class of multiplicative bases of the ring of symmetric functions.
32
+
33
+ A realization `q` of the ring of symmetric functions is multiplicative if
34
+ for a partition `\lambda = (\lambda_1,\lambda_2,\ldots)` we have
35
+ `q_\lambda = q_{\lambda_1} q_{\lambda_2} \cdots` (with `q_0` meaning `1`).
36
+
37
+ Examples of multiplicative realizations are the elementary symmetric basis,
38
+ the complete homogeneous basis, the powersum basis (if the base ring is a
39
+ `\QQ`-algebra), and the Witt basis (but not the Schur basis or the
40
+ monomial basis).
41
+ """
42
+
43
+ def product_on_basis(self, left, right):
44
+ """
45
+ Return the product of ``left`` and ``right``.
46
+
47
+ INPUT:
48
+
49
+ - ``left``, ``right`` -- partitions
50
+
51
+ OUTPUT: an element of ``self``
52
+
53
+ EXAMPLES::
54
+
55
+ sage: e = SymmetricFunctions(QQ).e()
56
+ sage: e([2,1])^2 # indirect doctest
57
+ e[2, 2, 1, 1]
58
+
59
+ ::
60
+
61
+ sage: h = SymmetricFunctions(QQ).h()
62
+ sage: h([2,1])^2
63
+ h[2, 2, 1, 1]
64
+
65
+ ::
66
+
67
+ sage: p = SymmetricFunctions(QQ).p()
68
+ sage: p([2,1])^2
69
+ p[2, 2, 1, 1]
70
+
71
+ ::
72
+
73
+ sage: QQx.<x> = QQ[]
74
+ sage: p = SymmetricFunctions(QQx).p()
75
+ sage: (x*p([2]))^2
76
+ x^2*p[2, 2]
77
+
78
+ sage: TestSuite(p).run() # to silence sage -coverage
79
+ """
80
+ m = list(left) + list(right)
81
+ m.sort(reverse=True)
82
+ return self.monomial(sage.combinat.partition.Partition(m))
83
+
84
+ def coproduct_on_basis(self, mu):
85
+ r"""
86
+ Return the coproduct on a basis element for multiplicative bases.
87
+
88
+ INPUT:
89
+
90
+ - ``mu`` -- a partition
91
+
92
+ OUTPUT:
93
+
94
+ - the image of ``self[mu]`` under comultiplication; this is an
95
+ element of the tensor square of ``self``
96
+
97
+ EXAMPLES::
98
+
99
+ sage: Sym = SymmetricFunctions(QQ)
100
+ sage: p = Sym.powersum()
101
+ sage: p.coproduct_on_basis([2,1])
102
+ p[] # p[2, 1] + p[1] # p[2] + p[2] # p[1] + p[2, 1] # p[]
103
+
104
+ sage: e = Sym.elementary()
105
+ sage: e.coproduct_on_basis([3,1])
106
+ e[] # e[3, 1] + e[1] # e[2, 1] + e[1] # e[3] + e[1, 1] # e[2] + e[2] # e[1, 1] + e[2, 1] # e[1] + e[3] # e[1] + e[3, 1] # e[]
107
+
108
+ sage: h = Sym.homogeneous()
109
+ sage: h.coproduct_on_basis([3,1])
110
+ h[] # h[3, 1] + h[1] # h[2, 1] + h[1] # h[3] + h[1, 1] # h[2] + h[2] # h[1, 1] + h[2, 1] # h[1] + h[3] # h[1] + h[3, 1] # h[]
111
+ """
112
+ T = self.tensor_square()
113
+ return T.prod(self.coproduct_on_generators(p) for p in mu)