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,855 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.modules
3
+ r"""
4
+ Bases for ``NCSym``
5
+
6
+ AUTHORS:
7
+
8
+ - Travis Scrimshaw (08-04-2013): initial version
9
+ """
10
+ # ****************************************************************************
11
+ # Copyright (C) 2013 Travis Scrimshaw <tscrim at ucdavis.edu>
12
+ #
13
+ # Distributed under the terms of the GNU General Public License (GPL)
14
+ # https://www.gnu.org/licenses/
15
+ # ****************************************************************************
16
+
17
+ from sage.misc.abstract_method import abstract_method
18
+ from sage.misc.lazy_attribute import lazy_attribute
19
+ from sage.misc.cachefunc import cached_method
20
+ from sage.misc.bindable_class import BindableClass
21
+ from sage.categories.graded_hopf_algebras import GradedHopfAlgebras
22
+ from sage.categories.realizations import Category_realization_of_parent
23
+ from sage.categories.modules_with_basis import ModulesWithBasis
24
+ from sage.categories.tensor import tensor
25
+ from sage.categories.homset import Hom
26
+ from sage.combinat.set_partition import SetPartition, SetPartitions
27
+ from sage.combinat.free_module import CombinatorialFreeModule
28
+
29
+
30
+ class NCSymBasis_abstract(CombinatorialFreeModule, BindableClass):
31
+ """
32
+ Abstract base class for a basis of `NCSym` or its dual.
33
+ """
34
+
35
+ def _element_constructor_(self, x):
36
+ """
37
+ Construct an element of ``self``.
38
+
39
+ INPUT:
40
+
41
+ - ``x`` -- set partition or list of lists of integers
42
+
43
+ EXAMPLES::
44
+
45
+ sage: m = SymmetricFunctionsNonCommutingVariables(QQ).m()
46
+ sage: m([[1,3],[2]])
47
+ m{{1, 3}, {2}}
48
+ sage: m(SetPartition([[1,3],[2]]))
49
+ m{{1, 3}, {2}}
50
+ """
51
+ if isinstance(x, (list, tuple)):
52
+ x = SetPartition(x)
53
+ return super()._element_constructor_(x)
54
+
55
+
56
+ class NCSymOrNCSymDualBases(Category_realization_of_parent):
57
+ r"""
58
+ Base category for the category of bases of symmetric functions
59
+ in non-commuting variables or its Hopf dual for the common code.
60
+ """
61
+
62
+ def super_categories(self):
63
+ r"""
64
+ Return the super categories of bases of (the Hopf dual of) the
65
+ symmetric functions in non-commuting variables.
66
+
67
+ OUTPUT: list of categories
68
+
69
+ TESTS::
70
+
71
+ sage: from sage.combinat.ncsym.bases import NCSymOrNCSymDualBases
72
+ sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
73
+ sage: NCSymOrNCSymDualBases(NCSym).super_categories()
74
+ [Category of realizations of Symmetric functions in
75
+ non-commuting variables over the Rational Field,
76
+ Category of graded Hopf algebras with basis over Rational Field,
77
+ Join of Category of realizations of Hopf algebras over Rational Field
78
+ and Category of graded algebras over Rational Field
79
+ and Category of graded coalgebras over Rational Field]
80
+ """
81
+ R = self.base().base_ring()
82
+ from sage.categories.graded_hopf_algebras_with_basis import GradedHopfAlgebrasWithBasis
83
+ return [self.base().Realizations(),
84
+ GradedHopfAlgebrasWithBasis(R),
85
+ GradedHopfAlgebras(R).Realizations()]
86
+
87
+ def _repr_(self):
88
+ r"""
89
+ Return a string representation of ``self``.
90
+
91
+ TESTS::
92
+
93
+ sage: from sage.combinat.ncsym.bases import NCSymOrNCSymDualBases
94
+ sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
95
+ sage: NCSymOrNCSymDualBases(NCSym)
96
+ Category of bases of NCSym or NCSym^* over the Rational Field
97
+ """
98
+ return "Category of bases of NCSym or NCSym^* over the {}".format(self.base().base_ring())
99
+
100
+ class ParentMethods:
101
+ def _repr_(self):
102
+ """
103
+ TESTS::
104
+
105
+ sage: SymmetricFunctionsNonCommutingVariables(QQ).m()
106
+ Symmetric functions in non-commuting variables over the Rational Field in the monomial basis
107
+ sage: SymmetricFunctionsNonCommutingVariables(QQ).m().dual_basis()
108
+ Dual symmetric functions in non-commuting variables over the Rational Field in the w basis
109
+ sage: SymmetricFunctionsNonCommutingVariables(QQ).chi()
110
+ Symmetric functions in non-commuting variables over the Rational Field in the
111
+ supercharacter basis with parameter q=2
112
+ sage: SymmetricFunctionsNonCommutingVariables(QQ['q'].fraction_field()).rho('q')
113
+ Symmetric functions in non-commuting variables over the Fraction Field
114
+ of Univariate Polynomial Ring in q over Rational Field in the
115
+ deformed_coarse_powersum basis with parameter q
116
+ """
117
+ str = "{} in the {} basis".format(self.realization_of(), self._realization_name())
118
+ if hasattr(self, '_q'):
119
+ str += " with parameter q"
120
+ if repr(self._q) != 'q':
121
+ str += "=" + repr(self._q)
122
+ return str
123
+
124
+ def __getitem__(self, i):
125
+ """
126
+ Return the basis element indexed by `i`.
127
+
128
+ INPUT:
129
+
130
+ - ``i`` -- set partition or a list of list of integers
131
+
132
+ EXAMPLES::
133
+
134
+ sage: w = SymmetricFunctionsNonCommutingVariables(QQ).dual().w()
135
+ sage: w[[1], [2,3]]
136
+ w{{1}, {2, 3}}
137
+ sage: w[{1}, (2,3)]
138
+ w{{1}, {2, 3}}
139
+ sage: w[[]]
140
+ w{}
141
+ """
142
+ if isinstance(i, SetPartition):
143
+ return self.monomial(i)
144
+ if i == []:
145
+ return self.one()
146
+ if not isinstance(i, tuple):
147
+ i = (i,)
148
+ return self.monomial(SetPartition(i))
149
+
150
+ @cached_method
151
+ def one_basis(self):
152
+ r"""
153
+ Return the index of the basis element containing `1`.
154
+
155
+ OUTPUT: the empty set partition
156
+
157
+ EXAMPLES::
158
+
159
+ sage: m = SymmetricFunctionsNonCommutingVariables(QQ).m()
160
+ sage: m.one_basis()
161
+ {}
162
+ sage: w = SymmetricFunctionsNonCommutingVariables(QQ).dual().w()
163
+ sage: w.one_basis()
164
+ {}
165
+ """
166
+ return SetPartition([])
167
+
168
+ def counit_on_basis(self, A):
169
+ r"""
170
+ The counit is defined by sending all elements of positive degree
171
+ to zero.
172
+
173
+ INPUT:
174
+
175
+ - ``A`` -- set partition
176
+
177
+ OUTPUT: either the `0` or the `1` of the base ring of ``self``
178
+
179
+ EXAMPLES::
180
+
181
+ sage: m = SymmetricFunctionsNonCommutingVariables(QQ).m()
182
+ sage: m.counit_on_basis(SetPartition([[1,3], [2]]))
183
+ 0
184
+ sage: m.counit_on_basis(SetPartition([]))
185
+ 1
186
+ sage: w = SymmetricFunctionsNonCommutingVariables(QQ).dual().w()
187
+ sage: w.counit_on_basis(SetPartition([[1,3], [2]]))
188
+ 0
189
+ sage: w.counit_on_basis(SetPartition([]))
190
+ 1
191
+ """
192
+ if len(A) != 0:
193
+ return self.base_ring().zero()
194
+ return self.base_ring().one()
195
+
196
+ def duality_pairing(self, x, y):
197
+ r"""
198
+ Compute the pairing between an element of ``self`` and an element
199
+ of the dual.
200
+
201
+ Carry out this computation by converting ``x`` to the `\mathbf{m}`
202
+ basis and ``y`` to the `\mathbf{w}` basis.
203
+
204
+ INPUT:
205
+
206
+ - ``x`` -- an element of symmetric functions in non-commuting
207
+ variables
208
+ - ``y`` -- an element of the dual of symmetric functions in
209
+ non-commuting variables
210
+
211
+ OUTPUT: an element of the base ring of ``self``
212
+
213
+ EXAMPLES::
214
+
215
+ sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
216
+ sage: h = NCSym.h()
217
+ sage: w = NCSym.m().dual_basis()
218
+ sage: matrix([[h(A).duality_pairing(w(B)) for A in SetPartitions(3)] for B in SetPartitions(3)])
219
+ [6 2 2 2 1]
220
+ [2 2 1 1 1]
221
+ [2 1 2 1 1]
222
+ [2 1 1 2 1]
223
+ [1 1 1 1 1]
224
+ sage: (h[[1,2],[3]] + 3*h[[1,3],[2]]).duality_pairing(2*w[[1,3],[2]] + w[[1,2,3]] + 2*w[[1,2],[3]])
225
+ 32
226
+ """
227
+ m = self.realization_of().m()
228
+ x = m(x)
229
+ y = m.dual_basis()(y)
230
+ return sum(coeff * y[I] for (I, coeff) in x)
231
+
232
+ def duality_pairing_matrix(self, basis, degree):
233
+ r"""
234
+ The matrix of scalar products between elements of `NCSym` and
235
+ elements of `NCSym^*`.
236
+
237
+ INPUT:
238
+
239
+ - ``basis`` -- a basis of the dual Hopf algebra
240
+ - ``degree`` -- nonnegative integer
241
+
242
+ OUTPUT:
243
+
244
+ The matrix of scalar products between the basis ``self`` and the
245
+ basis ``basis`` in the dual Hopf algebra of degree ``degree``.
246
+
247
+ EXAMPLES:
248
+
249
+ The matrix between the `\mathbf{m}` basis and the
250
+ `\mathbf{w}` basis::
251
+
252
+ sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
253
+ sage: m = NCSym.m()
254
+ sage: w = NCSym.dual().w()
255
+ sage: m.duality_pairing_matrix(w, 3)
256
+ [1 0 0 0 0]
257
+ [0 1 0 0 0]
258
+ [0 0 1 0 0]
259
+ [0 0 0 1 0]
260
+ [0 0 0 0 1]
261
+
262
+ Similarly for some of the other basis of `NCSym` and the `\mathbf{w}`
263
+ basis::
264
+
265
+ sage: e = NCSym.e()
266
+ sage: e.duality_pairing_matrix(w, 3)
267
+ [0 0 0 0 1]
268
+ [0 0 1 1 1]
269
+ [0 1 0 1 1]
270
+ [0 1 1 0 1]
271
+ [1 1 1 1 1]
272
+ sage: p = NCSym.p()
273
+ sage: p.duality_pairing_matrix(w, 3)
274
+ [1 0 0 0 0]
275
+ [1 1 0 0 0]
276
+ [1 0 1 0 0]
277
+ [1 0 0 1 0]
278
+ [1 1 1 1 1]
279
+ sage: cp = NCSym.cp()
280
+ sage: cp.duality_pairing_matrix(w, 3)
281
+ [1 0 0 0 0]
282
+ [1 1 0 0 0]
283
+ [0 0 1 0 0]
284
+ [1 0 0 1 0]
285
+ [1 1 1 1 1]
286
+ sage: x = NCSym.x()
287
+ sage: w.duality_pairing_matrix(x, 3)
288
+ [ 0 0 0 0 1]
289
+ [ 1 0 -1 -1 1]
290
+ [ 1 -1 0 -1 1]
291
+ [ 1 -1 -1 0 1]
292
+ [ 2 -1 -1 -1 1]
293
+
294
+ A base case test::
295
+
296
+ sage: m.duality_pairing_matrix(w, 0)
297
+ [1]
298
+ """
299
+ from sage.matrix.constructor import matrix
300
+ # TODO: generalize to keys indexing the basis of the graded component
301
+ return matrix(self.base_ring(),
302
+ [[self.duality_pairing(self[I], basis[J])
303
+ for J in SetPartitions(degree)]
304
+ for I in SetPartitions(degree)])
305
+
306
+ class ElementMethods:
307
+ def duality_pairing(self, other):
308
+ r"""
309
+ Compute the pairing between ``self`` and an element ``other`` of the dual.
310
+
311
+ EXAMPLES::
312
+
313
+ sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
314
+ sage: m = NCSym.m()
315
+ sage: w = m.dual_basis()
316
+ sage: elt = m[[1,3],[2]] - 3*m[[1,2],[3]]
317
+ sage: elt.duality_pairing(w[[1,3],[2]])
318
+ 1
319
+ sage: elt.duality_pairing(w[[1,2],[3]])
320
+ -3
321
+ sage: elt.duality_pairing(w[[1,2]])
322
+ 0
323
+ sage: e = NCSym.e()
324
+ sage: w[[1,3],[2]].duality_pairing(e[[1,3],[2]])
325
+ 0
326
+ """
327
+ return self.parent().duality_pairing(self, other)
328
+
329
+
330
+ class NCSymBases(Category_realization_of_parent):
331
+ r"""
332
+ Category of bases of symmetric functions in non-commuting variables.
333
+
334
+ EXAMPLES::
335
+
336
+ sage: from sage.combinat.ncsym.bases import NCSymBases
337
+ sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
338
+ sage: NCSymBases(NCSym)
339
+ Category of bases of symmetric functions in non-commuting variables over the Rational Field
340
+ """
341
+
342
+ def super_categories(self):
343
+ r"""
344
+ Return the super categories of bases of the Hopf dual of the
345
+ symmetric functions in non-commuting variables.
346
+
347
+ OUTPUT: list of categories
348
+
349
+ TESTS::
350
+
351
+ sage: from sage.combinat.ncsym.bases import NCSymBases
352
+ sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
353
+ sage: NCSymBases(NCSym).super_categories()
354
+ [Category of bases of NCSym or NCSym^* over the Rational Field]
355
+ """
356
+ return [NCSymOrNCSymDualBases(self.base())]
357
+
358
+ def _repr_(self):
359
+ r"""
360
+ Return a string representation of ``self``.
361
+
362
+ TESTS::
363
+
364
+ sage: from sage.combinat.ncsym.bases import NCSymBases
365
+ sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
366
+ sage: NCSymBases(NCSym)
367
+ Category of bases of symmetric functions in non-commuting variables over the Rational Field
368
+ """
369
+ return "Category of bases of symmetric functions in non-commuting"\
370
+ " variables over the {}".format(self.base().base_ring())
371
+
372
+ class ParentMethods:
373
+ def from_symmetric_function(self, f):
374
+ """
375
+ Return the image of the symmetric function ``f`` in ``self``.
376
+
377
+ This is performed by converting to the monomial basis and
378
+ extending the method :meth:`sum_of_partitions` linearly. This is a
379
+ linear map from the symmetric functions to the symmetric functions
380
+ in non-commuting variables that does not preserve the product or
381
+ coproduct structure of the Hopf algebra.
382
+
383
+ .. SEEALSO:: :meth:`to_symmetric_function`
384
+
385
+ INPUT:
386
+
387
+ - ``f`` -- a symmetric function
388
+
389
+ OUTPUT: an element of ``self``
390
+
391
+ EXAMPLES::
392
+
393
+ sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
394
+ sage: Sym = SymmetricFunctions(QQ)
395
+ sage: e = NCSym.e()
396
+ sage: elem = Sym.e()
397
+ sage: elt = e.from_symmetric_function(elem[2,1,1]); elt
398
+ 1/12*e{{1}, {2}, {3, 4}} + 1/12*e{{1}, {2, 3}, {4}} + 1/12*e{{1}, {2, 4}, {3}}
399
+ + 1/12*e{{1, 2}, {3}, {4}} + 1/12*e{{1, 3}, {2}, {4}} + 1/12*e{{1, 4}, {2}, {3}}
400
+ sage: elem(elt.to_symmetric_function())
401
+ e[2, 1, 1]
402
+ sage: e.from_symmetric_function(elem[4])
403
+ 1/24*e{{1, 2, 3, 4}}
404
+ sage: p = NCSym.p()
405
+ sage: pow = Sym.p()
406
+ sage: elt = p.from_symmetric_function(pow[2,1,1]); elt
407
+ 1/6*p{{1}, {2}, {3, 4}} + 1/6*p{{1}, {2, 3}, {4}} + 1/6*p{{1}, {2, 4}, {3}}
408
+ + 1/6*p{{1, 2}, {3}, {4}} + 1/6*p{{1, 3}, {2}, {4}} + 1/6*p{{1, 4}, {2}, {3}}
409
+ sage: pow(elt.to_symmetric_function())
410
+ p[2, 1, 1]
411
+ sage: p.from_symmetric_function(pow[4])
412
+ p{{1, 2, 3, 4}}
413
+ sage: h = NCSym.h()
414
+ sage: comp = Sym.complete()
415
+ sage: elt = h.from_symmetric_function(comp[2,1,1]); elt
416
+ 1/12*h{{1}, {2}, {3, 4}} + 1/12*h{{1}, {2, 3}, {4}} + 1/12*h{{1}, {2, 4}, {3}}
417
+ + 1/12*h{{1, 2}, {3}, {4}} + 1/12*h{{1, 3}, {2}, {4}} + 1/12*h{{1, 4}, {2}, {3}}
418
+ sage: comp(elt.to_symmetric_function())
419
+ h[2, 1, 1]
420
+ sage: h.from_symmetric_function(comp[4])
421
+ 1/24*h{{1, 2, 3, 4}}
422
+ """
423
+ m = self.realization_of().m()
424
+ return self(m.from_symmetric_function(f))
425
+
426
+ def primitive(self, A, i=1):
427
+ r"""
428
+ Return the primitive associated to ``A`` in ``self``.
429
+
430
+ .. SEEALSO::
431
+
432
+ :meth:`~sage.combinat.ncsym.ncsym.SymmetricFunctionsNonCommutingVariables.powersum.primitive`
433
+
434
+ INPUT:
435
+
436
+ - ``A`` -- set partition
437
+ - ``i`` -- positive integer
438
+
439
+ OUTPUT: an element of ``self``
440
+
441
+ EXAMPLES::
442
+
443
+ sage: e = SymmetricFunctionsNonCommutingVariables(QQ).e()
444
+ sage: elt = e.primitive(SetPartition([[1,3],[2]])); elt
445
+ e{{1, 2}, {3}} - e{{1, 3}, {2}}
446
+ sage: elt.coproduct()
447
+ e{} # e{{1, 2}, {3}} - e{} # e{{1, 3}, {2}} + e{{1, 2}, {3}} # e{} - e{{1, 3}, {2}} # e{}
448
+ """
449
+ p = self.realization_of().p()
450
+ return self(p.primitive(A, i))
451
+
452
+ @abstract_method(optional=True)
453
+ def internal_coproduct_on_basis(self, i):
454
+ """
455
+ The internal coproduct of the algebra on the basis (optional).
456
+
457
+ INPUT:
458
+
459
+ - ``i`` -- the indices of an element of the basis of ``self``
460
+
461
+ OUTPUT: an element of the tensor squared of ``self``
462
+
463
+ EXAMPLES::
464
+
465
+ sage: m = SymmetricFunctionsNonCommutingVariables(QQ).m()
466
+ sage: m.internal_coproduct_on_basis(SetPartition([[1,2]]))
467
+ m{{1, 2}} # m{{1, 2}}
468
+ """
469
+
470
+ @lazy_attribute
471
+ def internal_coproduct(self):
472
+ r"""
473
+ Compute the internal coproduct of ``self``.
474
+
475
+ If :meth:`internal_coproduct_on_basis()` is available, construct
476
+ the internal coproduct morphism from ``self`` to ``self``
477
+ `\otimes` ``self`` by extending it by linearity. Otherwise, this uses
478
+ :meth:`internal_coproduct_by_coercion()`, if available.
479
+
480
+ OUTPUT: an element of the tensor squared of ``self``
481
+
482
+ EXAMPLES::
483
+
484
+ sage: cp = SymmetricFunctionsNonCommutingVariables(QQ).cp()
485
+ sage: cp.internal_coproduct(cp[[1,3],[2]] - 2*cp[[1]])
486
+ -2*cp{{1}} # cp{{1}} + cp{{1, 2, 3}} # cp{{1, 3}, {2}} + cp{{1, 3}, {2}} # cp{{1, 2, 3}}
487
+ + cp{{1, 3}, {2}} # cp{{1, 3}, {2}}
488
+ """
489
+ if self.internal_coproduct_on_basis is not NotImplemented:
490
+ return Hom(self, tensor([self, self]),
491
+ ModulesWithBasis(self.base_ring()))(on_basis=self.internal_coproduct_on_basis)
492
+ elif hasattr(self, "internal_coproduct_by_coercion"):
493
+ return self.internal_coproduct_by_coercion
494
+
495
+ def internal_coproduct_by_coercion(self, x):
496
+ r"""
497
+ Return the internal coproduct by coercing the element to the powersum basis.
498
+
499
+ INPUT:
500
+
501
+ - ``x`` -- an element of ``self``
502
+
503
+ OUTPUT: an element of the tensor squared of ``self``
504
+
505
+ EXAMPLES::
506
+
507
+ sage: h = SymmetricFunctionsNonCommutingVariables(QQ).h()
508
+ sage: h[[1,3],[2]].internal_coproduct() # indirect doctest
509
+ 2*h{{1}, {2}, {3}} # h{{1}, {2}, {3}} - h{{1}, {2}, {3}} # h{{1, 3}, {2}}
510
+ - h{{1, 3}, {2}} # h{{1}, {2}, {3}} + h{{1, 3}, {2}} # h{{1, 3}, {2}}
511
+ """
512
+ R = self.realization_of().a_realization()
513
+ return self.tensor_square().sum(coeff * tensor([self(R[A]), self(R[B])])
514
+ for ((A, B), coeff) in R(x).internal_coproduct())
515
+
516
+ class ElementMethods:
517
+ def expand(self, n, alphabet='x'):
518
+ r"""
519
+ Expand the symmetric function into ``n`` non-commuting
520
+ variables in an alphabet, which by default is ``'x'``.
521
+
522
+ This computation is completed by coercing the element ``self``
523
+ into the monomial basis and computing the expansion in
524
+ the ``alphabet`` there.
525
+
526
+ INPUT:
527
+
528
+ - ``n`` -- the number of variables in the expansion
529
+ - ``alphabet`` -- (default: ``'x'``) the alphabet in which
530
+ ``self`` is to be expanded
531
+
532
+ OUTPUT:
533
+
534
+ - an expansion of ``self`` into the ``n`` non-commuting
535
+ variables specified by ``alphabet``
536
+
537
+ EXAMPLES::
538
+
539
+ sage: h = SymmetricFunctionsNonCommutingVariables(QQ).h()
540
+ sage: h[[1,3],[2]].expand(3)
541
+ 2*x0^3 + x0^2*x1 + x0^2*x2 + 2*x0*x1*x0 + x0*x1^2 + x0*x1*x2 + 2*x0*x2*x0
542
+ + x0*x2*x1 + x0*x2^2 + x1*x0^2 + 2*x1*x0*x1 + x1*x0*x2 + x1^2*x0 + 2*x1^3
543
+ + x1^2*x2 + x1*x2*x0 + 2*x1*x2*x1 + x1*x2^2 + x2*x0^2 + x2*x0*x1 + 2*x2*x0*x2
544
+ + x2*x1*x0 + x2*x1^2 + 2*x2*x1*x2 + x2^2*x0 + x2^2*x1 + 2*x2^3
545
+ sage: x = SymmetricFunctionsNonCommutingVariables(QQ).x()
546
+ sage: x[[1,3],[2]].expand(3)
547
+ -x0^2*x1 - x0^2*x2 - x0*x1^2 - x0*x1*x2 - x0*x2*x1 - x0*x2^2 - x1*x0^2
548
+ - x1*x0*x2 - x1^2*x0 - x1^2*x2 - x1*x2*x0 - x1*x2^2 - x2*x0^2 - x2*x0*x1
549
+ - x2*x1*x0 - x2*x1^2 - x2^2*x0 - x2^2*x1
550
+ """
551
+ m = self.parent().realization_of().monomial()
552
+ return m(self).expand(n, alphabet)
553
+
554
+ def to_symmetric_function(self):
555
+ r"""
556
+ Compute the projection of an element of symmetric function in
557
+ non-commuting variables to the symmetric functions.
558
+
559
+ The projection of a monomial symmetric function in non-commuting
560
+ variables indexed by the set partition ``A`` is defined as
561
+
562
+ .. MATH::
563
+
564
+ \mathbf{m}_A \mapsto m_{\lambda(A)} \prod_i n_i(\lambda(A))!
565
+
566
+ where `\lambda(A)` is the partition associated with `A` by
567
+ taking the sizes of the parts and `n_i(\mu)` is the
568
+ multiplicity of `i` in `\mu`. For other bases this map is extended
569
+ linearly.
570
+
571
+ OUTPUT: an element of the symmetric functions in the monomial basis
572
+
573
+ EXAMPLES::
574
+
575
+ sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
576
+ sage: e = NCSym.e()
577
+ sage: h = NCSym.h()
578
+ sage: p = NCSym.p()
579
+ sage: cp = NCSym.cp()
580
+ sage: x = NCSym.x()
581
+ sage: cp[[1,3],[2]].to_symmetric_function()
582
+ m[2, 1]
583
+ sage: x[[1,3],[2]].to_symmetric_function()
584
+ -6*m[1, 1, 1] - 2*m[2, 1]
585
+ sage: e[[1,3],[2]].to_symmetric_function()
586
+ 2*e[2, 1]
587
+ sage: h[[1,3],[2]].to_symmetric_function()
588
+ 2*h[2, 1]
589
+ sage: p[[1,3],[2]].to_symmetric_function()
590
+ p[2, 1]
591
+ """
592
+ m = self.parent().realization_of().monomial()
593
+ return m(self).to_symmetric_function()
594
+
595
+ def to_wqsym(self):
596
+ r"""
597
+ Return the image of ``self`` under the canonical
598
+ inclusion map `NCSym \to WQSym`.
599
+
600
+ The canonical inclusion map `NCSym \to WQSym` is
601
+ an injective homomorphism of algebras. It sends a
602
+ basis element `\mathbf{m}_A` of `NCSym` to the sum of
603
+ basis elements `\mathbf{M}_P` of `WQSym`, where `P`
604
+ ranges over all ordered set partitions that become
605
+ `A` when the ordering is forgotten.
606
+ This map is denoted by `\theta` in [BZ05]_ (17).
607
+
608
+ .. SEEALSO::
609
+
610
+ :class:`WordQuasiSymmetricFunctions` for a
611
+ definition of `WQSym`.
612
+
613
+ EXAMPLES::
614
+
615
+ sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
616
+ sage: e = NCSym.e()
617
+ sage: h = NCSym.h()
618
+ sage: p = NCSym.p()
619
+ sage: cp = NCSym.cp()
620
+ sage: x = NCSym.x()
621
+ sage: m = NCSym.m()
622
+ sage: m[[1,3],[2]].to_wqsym()
623
+ M[{1, 3}, {2}] + M[{2}, {1, 3}]
624
+ sage: x[[1,3],[2]].to_wqsym()
625
+ -M[{1}, {2}, {3}] - M[{1}, {2, 3}] - M[{1}, {3}, {2}]
626
+ - M[{1, 2}, {3}] - M[{2}, {1}, {3}] - M[{2}, {3}, {1}]
627
+ - M[{2, 3}, {1}] - M[{3}, {1}, {2}] - M[{3}, {1, 2}]
628
+ - M[{3}, {2}, {1}]
629
+ sage: (4*p[[1,3],[2]]-p[[1]]).to_wqsym()
630
+ -M[{1}] + 4*M[{1, 2, 3}] + 4*M[{1, 3}, {2}] + 4*M[{2}, {1, 3}]
631
+ """
632
+ parent = self.parent()
633
+ NCSym = parent.realization_of()
634
+ R = parent.base_ring()
635
+ m = NCSym.monomial()
636
+ from sage.combinat.chas.wqsym import WordQuasiSymmetricFunctions
637
+ M = WordQuasiSymmetricFunctions(R).M()
638
+ from itertools import permutations
639
+ OSP = M.basis().keys()
640
+
641
+ def to_wqsym_on_m_basis(A):
642
+ # Return the image of `\mathbf{m}_A` under the inclusion
643
+ # map `NCSym \to WQSym`.
644
+ l = len(A)
645
+ return M.sum_of_terms(((OSP([A[ui] for ui in u]), 1)
646
+ for u in permutations(range(l))),
647
+ distinct=True)
648
+ return M.linear_combination((to_wqsym_on_m_basis(A), coeff)
649
+ for A, coeff in m(self))
650
+
651
+ def internal_coproduct(self):
652
+ r"""
653
+ Return the internal coproduct of ``self``.
654
+
655
+ The internal coproduct is defined on the power sum basis as
656
+
657
+ .. MATH::
658
+
659
+ \mathbf{p}_A \mapsto \mathbf{p}_A \otimes \mathbf{p}_A
660
+
661
+ and the map is extended linearly.
662
+
663
+ OUTPUT: an element of the tensor square of the basis of ``self``
664
+
665
+ EXAMPLES::
666
+
667
+ sage: x = SymmetricFunctionsNonCommutingVariables(QQ).x()
668
+ sage: x[[1,3],[2]].internal_coproduct()
669
+ x{{1}, {2}, {3}} # x{{1, 3}, {2}} + x{{1, 3}, {2}} # x{{1}, {2}, {3}}
670
+ + x{{1, 3}, {2}} # x{{1, 3}, {2}}
671
+ """
672
+ return self.parent().internal_coproduct(self)
673
+
674
+ def omega(self):
675
+ r"""
676
+ Return the involution `\omega` applied to ``self``.
677
+
678
+ The involution `\omega` is defined by
679
+
680
+ .. MATH::
681
+
682
+ \mathbf{e}_A \mapsto \mathbf{h}_A
683
+
684
+ and the result is extended linearly.
685
+
686
+ OUTPUT: an element in the same basis as ``self``
687
+
688
+ EXAMPLES::
689
+
690
+ sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
691
+ sage: m = NCSym.m()
692
+ sage: m[[1,3],[2]].omega()
693
+ -2*m{{1, 2, 3}} - m{{1, 3}, {2}}
694
+ sage: p = NCSym.p()
695
+ sage: p[[1,3],[2]].omega()
696
+ -p{{1, 3}, {2}}
697
+ sage: cp = NCSym.cp()
698
+ sage: cp[[1,3],[2]].omega()
699
+ -2*cp{{1, 2, 3}} - cp{{1, 3}, {2}}
700
+ sage: x = NCSym.x()
701
+ sage: x[[1,3],[2]].omega()
702
+ -2*x{{1}, {2}, {3}} - x{{1, 3}, {2}}
703
+ """
704
+ P = self.parent()
705
+ e = P.realization_of().e()
706
+ h = P.realization_of().h()
707
+ return P(h.sum_of_terms(e(self)))
708
+
709
+
710
+ class MultiplicativeNCSymBases(Category_realization_of_parent):
711
+ r"""
712
+ Category of multiplicative bases of symmetric functions in non-commuting variables.
713
+
714
+ A multiplicative basis is one for which `\mathbf{b}_A \mathbf{b}_B = \mathbf{b}_{A|B}`
715
+ where `A|B` is the :meth:`~sage.combinat.set_partition.SetPartition.pipe` operation
716
+ on set partitions.
717
+
718
+ EXAMPLES::
719
+
720
+ sage: from sage.combinat.ncsym.bases import MultiplicativeNCSymBases
721
+ sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
722
+ sage: MultiplicativeNCSymBases(NCSym)
723
+ Category of multiplicative bases of symmetric functions in non-commuting variables over the Rational Field
724
+ """
725
+
726
+ def super_categories(self):
727
+ r"""
728
+ Return the super categories of bases of the Hopf dual of the
729
+ symmetric functions in non-commuting variables.
730
+
731
+ OUTPUT: list of categories
732
+
733
+ TESTS::
734
+
735
+ sage: from sage.combinat.ncsym.bases import MultiplicativeNCSymBases
736
+ sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
737
+ sage: MultiplicativeNCSymBases(NCSym).super_categories()
738
+ [Category of bases of symmetric functions in non-commuting variables over the Rational Field]
739
+ """
740
+ return [NCSymBases(self.base())]
741
+
742
+ def _repr_(self):
743
+ r"""
744
+ Return a string representation of ``self``.
745
+
746
+ TESTS::
747
+
748
+ sage: from sage.combinat.ncsym.bases import MultiplicativeNCSymBases
749
+ sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
750
+ sage: MultiplicativeNCSymBases(NCSym)
751
+ Category of multiplicative bases of symmetric functions in non-commuting variables over the Rational Field
752
+ """
753
+ return "Category of multiplicative bases of symmetric functions in non-commuting"\
754
+ " variables over the {}".format(self.base().base_ring())
755
+
756
+ class ParentMethods:
757
+ def product_on_basis(self, A, B):
758
+ r"""
759
+ The product on basis elements.
760
+
761
+ The product on a multiplicative basis is given by
762
+ `\mathbf{b}_A \cdot \mathbf{b}_B = \mathbf{b}_{A | B}`.
763
+
764
+ The bases `\{ \mathbf{e}, \mathbf{h}, \mathbf{x}, \mathbf{cp}, \mathbf{p},
765
+ \mathbf{chi}, \mathbf{rho} \}` are all multiplicative.
766
+
767
+ INPUT:
768
+
769
+ - ``A``, ``B`` -- set partitions
770
+
771
+ OUTPUT: an element in the basis ``self``
772
+
773
+ EXAMPLES::
774
+
775
+ sage: e = SymmetricFunctionsNonCommutingVariables(QQ).e()
776
+ sage: h = SymmetricFunctionsNonCommutingVariables(QQ).h()
777
+ sage: x = SymmetricFunctionsNonCommutingVariables(QQ).x()
778
+ sage: cp = SymmetricFunctionsNonCommutingVariables(QQ).cp()
779
+ sage: p = SymmetricFunctionsNonCommutingVariables(QQ).p()
780
+ sage: chi = SymmetricFunctionsNonCommutingVariables(QQ).chi()
781
+ sage: rho = SymmetricFunctionsNonCommutingVariables(QQ).rho()
782
+ sage: A = SetPartition([[1], [2, 3]])
783
+ sage: B = SetPartition([[1], [3], [2,4]])
784
+ sage: e.product_on_basis(A, B)
785
+ e{{1}, {2, 3}, {4}, {5, 7}, {6}}
786
+ sage: h.product_on_basis(A, B)
787
+ h{{1}, {2, 3}, {4}, {5, 7}, {6}}
788
+ sage: x.product_on_basis(A, B)
789
+ x{{1}, {2, 3}, {4}, {5, 7}, {6}}
790
+ sage: cp.product_on_basis(A, B)
791
+ cp{{1}, {2, 3}, {4}, {5, 7}, {6}}
792
+ sage: p.product_on_basis(A, B)
793
+ p{{1}, {2, 3}, {4}, {5, 7}, {6}}
794
+ sage: chi.product_on_basis(A, B)
795
+ chi{{1}, {2, 3}, {4}, {5, 7}, {6}}
796
+ sage: rho.product_on_basis(A, B)
797
+ rho{{1}, {2, 3}, {4}, {5, 7}, {6}}
798
+ sage: e.product_on_basis(A,B)==e(h(e(A))*h(e(B)))
799
+ True
800
+ sage: h.product_on_basis(A,B)==h(x(h(A))*x(h(B)))
801
+ True
802
+ sage: x.product_on_basis(A,B)==x(h(x(A))*h(x(B)))
803
+ True
804
+ sage: cp.product_on_basis(A,B)==cp(p(cp(A))*p(cp(B)))
805
+ True
806
+ sage: p.product_on_basis(A,B)==p(e(p(A))*e(p(B)))
807
+ True
808
+ """
809
+ return self.monomial(A.pipe(B))
810
+
811
+ class ElementMethods:
812
+ pass
813
+
814
+
815
+ class NCSymDualBases(Category_realization_of_parent):
816
+ r"""
817
+ Category of bases of dual symmetric functions in non-commuting variables.
818
+
819
+ EXAMPLES::
820
+
821
+ sage: from sage.combinat.ncsym.bases import NCSymDualBases
822
+ sage: DNCSym = SymmetricFunctionsNonCommutingVariables(QQ).dual()
823
+ sage: NCSymDualBases(DNCSym)
824
+ Category of bases of dual symmetric functions in non-commuting variables over the Rational Field
825
+ """
826
+
827
+ def super_categories(self):
828
+ r"""
829
+ Return the super categories of bases of the Hopf dual of the
830
+ symmetric functions in non-commuting variables.
831
+
832
+ OUTPUT: list of categories
833
+
834
+ TESTS::
835
+
836
+ sage: from sage.combinat.ncsym.bases import NCSymBases
837
+ sage: NCSym = SymmetricFunctionsNonCommutingVariables(QQ)
838
+ sage: NCSymBases(NCSym).super_categories()
839
+ [Category of bases of NCSym or NCSym^* over the Rational Field]
840
+ """
841
+ return [NCSymOrNCSymDualBases(self.base())]
842
+
843
+ def _repr_(self):
844
+ r"""
845
+ Return a string representation of ``self``.
846
+
847
+ TESTS::
848
+
849
+ sage: from sage.combinat.ncsym.bases import NCSymDualBases
850
+ sage: DNCSym = SymmetricFunctionsNonCommutingVariables(QQ).dual()
851
+ sage: NCSymDualBases(DNCSym)
852
+ Category of bases of dual symmetric functions in non-commuting variables over the Rational Field
853
+ """
854
+ return "Category of bases of dual symmetric functions in non-commuting"\
855
+ " variables over the {}".format(self.base().base_ring())