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,345 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.modules
3
+ r"""
4
+ Associated Graded Algebras To Filtered Algebras
5
+
6
+ AUTHORS:
7
+
8
+ - Travis Scrimshaw (2014-10-08): Initial version
9
+ """
10
+
11
+ # ****************************************************************************
12
+ # Copyright (C) 2014 Travis Scrimshaw <tscrim at ucdavis.edu>
13
+ #
14
+ # Distributed under the terms of the GNU General Public License (GPL)
15
+ # https://www.gnu.org/licenses/
16
+ # ****************************************************************************
17
+
18
+ from sage.misc.cachefunc import cached_method
19
+ from copy import copy
20
+
21
+ from sage.categories.modules_with_basis import ModulesWithBasis
22
+ from sage.sets.family import Family
23
+ from sage.combinat.free_module import CombinatorialFreeModule
24
+
25
+
26
+ class AssociatedGradedAlgebra(CombinatorialFreeModule):
27
+ r"""
28
+ The associated graded algebra/module `\operatorname{gr} A`
29
+ of a filtered algebra/module with basis `A`.
30
+
31
+ Let `A` be a filtered module over a commutative ring `R`.
32
+ Let `(F_i)_{i \in I}` be the filtration of `A`, with `I` being
33
+ a totally ordered set. Define
34
+
35
+ .. MATH::
36
+
37
+ G_i = F_i / \sum_{j < i} F_j
38
+
39
+ for every `i \in I`, and then
40
+
41
+ .. MATH::
42
+
43
+ \operatorname{gr} A = \bigoplus_{i \in I} G_i.
44
+
45
+ There are canonical projections `p_i : F_i \to G_i` for
46
+ every `i \in I`. Moreover `\operatorname{gr} A` is naturally a
47
+ graded `R`-module with `G_i` being the `i`-th graded component.
48
+ This graded `R`-module is known as the *associated graded module*
49
+ (or, for short, just *graded module*) of `A`.
50
+
51
+ Now, assume that `A` (endowed with the filtration
52
+ `(F_i)_{i \in I}`) is not just a filtered `R`-module, but also
53
+ a filtered `R`-algebra.
54
+ Let `u \in G_i` and `v \in G_j`, and let `u' \in F_i` and
55
+ `v' \in F_j` be lifts of `u` and `v`, respectively (so that
56
+ `u = p_i(u')` and `v = p_j(v')`). Then, we define a
57
+ multiplication `*` on `\operatorname{gr} A` (not to be mistaken
58
+ for the multiplication of the original algebra `A`) by
59
+
60
+ .. MATH::
61
+
62
+ u * v = p_{i+j} (u' v').
63
+
64
+ The *associated graded algebra* (or, for short, just
65
+ *graded algebra*) of `A` is the graded algebra
66
+ `\operatorname{gr} A` (endowed with this multiplication).
67
+
68
+ Now, assume that `A` is a filtered `R`-algebra with basis.
69
+ Let `(b_x)_{x \in X}` be the basis of `A`,
70
+ and consider the partition `X = \bigsqcup_{i \in I} X_i` of
71
+ the set `X`, which is part of the data of a filtered
72
+ algebra with basis. We know (see
73
+ :class:`~sage.categories.filtered_modules_with_basis.FilteredModulesWithBasis`)
74
+ that `A` (being a filtered `R`-module with basis) is canonically
75
+ (when the basis is considered to be part of the data)
76
+ isomorphic to `\operatorname{gr} A` as an `R`-module. Therefore
77
+ the `k`-th graded component `G_k` can be identified with
78
+ the span of `(b_x)_{x \in X_k}`, or equivalently the
79
+ `k`-th homogeneous component of `A`. Suppose
80
+ that `u' v' = \sum_{k \leq i+j} m_k` where `m_k \in G_k` (which
81
+ has been identified with the `k`-th homogeneous component of `A`).
82
+ Then `u * v = m_{i+j}`. We also note that the choice of
83
+ identification of `G_k` with the `k`-th homogeneous component
84
+ of `A` depends on the given basis.
85
+
86
+ The basis `(b_x)_{x \in X}` of `A` gives rise to a basis
87
+ of `\operatorname{gr} A`. This latter basis is still indexed
88
+ by the elements of `X`, and consists of the images of the
89
+ `b_x` under the `R`-module isomorphism from `A` to
90
+ `\operatorname{gr} A`. It makes `\operatorname{gr} A` into
91
+ a graded `R`-algebra with basis.
92
+
93
+ In this class, the `R`-module isomorphism from `A` to
94
+ `\operatorname{gr} A` is implemented as
95
+ :meth:`to_graded_conversion` and also as the default
96
+ conversion from `A` to `\operatorname{gr} A`. Its
97
+ inverse map is implemented as
98
+ :meth:`from_graded_conversion`.
99
+ The projection `p_i : F_i \to G_i` is implemented as
100
+ :meth:`projection` ``(i)``.
101
+
102
+ INPUT:
103
+
104
+ - ``A`` -- a filtered module (or algebra) with basis
105
+
106
+ OUTPUT:
107
+
108
+ The associated graded module of `A`, if `A` is just a filtered
109
+ `R`-module.
110
+ The associated graded algebra of `A`, if `A` is a filtered
111
+ `R`-algebra.
112
+
113
+ EXAMPLES:
114
+
115
+ Associated graded module of a filtered module::
116
+
117
+ sage: A = Modules(QQ).WithBasis().Filtered().example()
118
+ sage: grA = A.graded_algebra()
119
+ sage: grA.category()
120
+ Category of graded vector spaces with basis over Rational Field
121
+ sage: x = A.basis()[Partition([3,2,1])]
122
+ sage: grA(x)
123
+ Bbar[[3, 2, 1]]
124
+
125
+ Associated graded algebra of a filtered algebra::
126
+
127
+ sage: A = Algebras(QQ).WithBasis().Filtered().example()
128
+ sage: grA = A.graded_algebra()
129
+ sage: grA.category()
130
+ Category of graded algebras with basis over Rational Field
131
+ sage: x,y,z = [grA.algebra_generators()[s] for s in ['x','y','z']]
132
+ sage: x
133
+ bar(U['x'])
134
+ sage: y * x + z
135
+ bar(U['x']*U['y']) + bar(U['z'])
136
+ sage: A(y) * A(x) + A(z)
137
+ U['x']*U['y']
138
+
139
+ We note that the conversion between ``A`` and ``grA`` is
140
+ the canonical ``QQ``-module isomorphism stemming from the
141
+ fact that the underlying ``QQ``-modules of ``A`` and
142
+ ``grA`` are isomorphic::
143
+
144
+ sage: grA(A.an_element())
145
+ bar(U['x']^2*U['y']^2*U['z']^3) + 2*bar(U['x']) + 3*bar(U['y']) + bar(1)
146
+ sage: elt = A.an_element() + A.algebra_generators()['x'] + 2
147
+ sage: grelt = grA(elt); grelt
148
+ bar(U['x']^2*U['y']^2*U['z']^3) + 3*bar(U['x']) + 3*bar(U['y']) + 3*bar(1)
149
+ sage: A(grelt) == elt
150
+ True
151
+
152
+ .. TODO::
153
+
154
+ The algebra ``A`` must currently be an instance of (a subclass of)
155
+ :class:`CombinatorialFreeModule`. This should work with any
156
+ filtered algebra with a basis.
157
+
158
+ .. TODO::
159
+
160
+ Implement a version of associated graded algebra for
161
+ filtered algebras without a distinguished basis.
162
+
163
+ REFERENCES:
164
+
165
+ - :wikipedia:`Filtered_algebra#Associated_graded_algebra`
166
+ """
167
+ def __init__(self, A, category=None):
168
+ """
169
+ Initialize ``self``.
170
+
171
+ EXAMPLES::
172
+
173
+ sage: A = Algebras(QQ).WithBasis().Filtered().example()
174
+ sage: grA = A.graded_algebra()
175
+ sage: TestSuite(grA).run(elements=[prod(grA.algebra_generators())])
176
+ """
177
+ if A not in ModulesWithBasis(A.base_ring().category()).Filtered():
178
+ raise ValueError("the base algebra must be filtered and with basis")
179
+ self._A = A
180
+
181
+ base_ring = A.base_ring()
182
+ base_one = base_ring.one()
183
+
184
+ category = A.category().Graded().or_subcategory(category)
185
+ try:
186
+ opts = copy(A.print_options())
187
+ if not opts['prefix'] and not opts['bracket']:
188
+ opts['bracket'] = '('
189
+ opts['prefix'] = opts['prefix'] + 'bar'
190
+ except AttributeError:
191
+ opts = {'prefix': 'Abar'}
192
+
193
+ CombinatorialFreeModule.__init__(self, base_ring, A.basis().keys(),
194
+ category=category, **opts)
195
+
196
+ # Setup the conversion back
197
+ phi = self.module_morphism(diagonal=lambda x: base_one, codomain=A)
198
+ self._A.register_conversion(phi)
199
+
200
+ def _repr_(self):
201
+ """
202
+ Return a string representation of ``self``.
203
+
204
+ EXAMPLES::
205
+
206
+ sage: A = Algebras(QQ).WithBasis().Filtered().example()
207
+ sage: A.graded_algebra()
208
+ Graded Algebra of An example of a filtered algebra with basis:
209
+ the universal enveloping algebra of Lie algebra of RR^3
210
+ with cross product over Rational Field
211
+ """
212
+ from sage.categories.algebras_with_basis import AlgebrasWithBasis
213
+ if self in AlgebrasWithBasis:
214
+ return "Graded Algebra of {}".format(self._A)
215
+ return "Graded Module of {}".format(self._A)
216
+
217
+ def _latex_(self):
218
+ r"""
219
+ Return a latex representation of ``self``.
220
+
221
+ EXAMPLES::
222
+
223
+ sage: A = Algebras(QQ).WithBasis().Filtered().example()
224
+ sage: latex(A.graded_algebra())
225
+ \operatorname{gr} ...
226
+ """
227
+ from sage.misc.latex import latex
228
+ return "\\operatorname{gr} " + latex(self._A)
229
+
230
+ def _element_constructor_(self, x):
231
+ r"""
232
+ Construct an element of ``self`` from ``x``.
233
+
234
+ If ``self`` `= \operatorname{gr} A` for a filtered algebra
235
+ `A` with basis, and if ``x`` is an element of `A`, then
236
+ this returns the image of `x` under the canonical `R`-module
237
+ isomorphism `A \to \operatorname{gr} A`. (In this case,
238
+ this is equivalent to calling
239
+ ``self.to_graded_conversion()(x)``.)
240
+
241
+ EXAMPLES::
242
+
243
+ sage: A = Algebras(QQ).WithBasis().Filtered().example()
244
+ sage: grA = A.graded_algebra()
245
+ sage: grA(A.an_element())
246
+ bar(U['x']^2*U['y']^2*U['z']^3)
247
+ + 2*bar(U['x']) + 3*bar(U['y']) + bar(1)
248
+ sage: grA(A.an_element() + A.algebra_generators()['x'] + 2)
249
+ bar(U['x']^2*U['y']^2*U['z']^3)
250
+ + 3*bar(U['x']) + 3*bar(U['y']) + 3*bar(1)
251
+ """
252
+ if isinstance(x, CombinatorialFreeModule.Element):
253
+ if x.parent() is self._A:
254
+ return self._from_dict(dict(x))
255
+ return super()._element_constructor_(x)
256
+
257
+ def gen(self, *args, **kwds):
258
+ """
259
+ Return a generator of ``self``.
260
+
261
+ EXAMPLES::
262
+
263
+ sage: A = Algebras(QQ).WithBasis().Filtered().example()
264
+ sage: grA = A.graded_algebra()
265
+ sage: grA.gen('x')
266
+ bar(U['x'])
267
+ """
268
+ try:
269
+ x = self._A.gen(*args, **kwds)
270
+ except AttributeError:
271
+ x = self._A.algebra_generators()[args[0]]
272
+ return self(x)
273
+
274
+ @cached_method
275
+ def algebra_generators(self):
276
+ """
277
+ Return the algebra generators of ``self``.
278
+
279
+ This assumes that the algebra generators of `A` provided by
280
+ its ``algebra_generators`` method are homogeneous.
281
+
282
+ EXAMPLES::
283
+
284
+ sage: A = Algebras(QQ).WithBasis().Filtered().example()
285
+ sage: grA = A.graded_algebra()
286
+ sage: grA.algebra_generators()
287
+ Finite family {'x': bar(U['x']), 'y': bar(U['y']), 'z': bar(U['z'])}
288
+ """
289
+ G = self._A.algebra_generators()
290
+ return Family(G.keys(), lambda x: self(G[x]), name='generator')
291
+
292
+ def degree_on_basis(self, x):
293
+ """
294
+ Return the degree of the basis element indexed by ``x``.
295
+
296
+ EXAMPLES::
297
+
298
+ sage: A = Algebras(QQ).WithBasis().Filtered().example()
299
+ sage: grA = A.graded_algebra()
300
+ sage: all(A.degree_on_basis(x) == grA.degree_on_basis(x)
301
+ ....: for g in grA.algebra_generators() for x in g.support())
302
+ True
303
+ """
304
+ return self._A.degree_on_basis(x)
305
+
306
+ @cached_method
307
+ def one_basis(self):
308
+ r"""
309
+ Return the basis index of the element `1` of
310
+ `\operatorname{gr} A`.
311
+
312
+ This assumes that the unity `1` of `A` belongs to `F_0`.
313
+
314
+ EXAMPLES::
315
+
316
+ sage: A = Algebras(QQ).WithBasis().Filtered().example()
317
+ sage: grA = A.graded_algebra()
318
+ sage: grA.one_basis()
319
+ 1
320
+ """
321
+ return self._A.one_basis()
322
+
323
+ def product_on_basis(self, x, y):
324
+ """
325
+ Return the product on basis elements given by the
326
+ indices ``x`` and ``y``.
327
+
328
+ EXAMPLES::
329
+
330
+ sage: A = Algebras(QQ).WithBasis().Filtered().example()
331
+ sage: grA = A.graded_algebra()
332
+ sage: G = grA.algebra_generators()
333
+ sage: x,y,z = G['x'], G['y'], G['z']
334
+ sage: x * y # indirect doctest
335
+ bar(U['x']*U['y'])
336
+ sage: y * x
337
+ bar(U['x']*U['y'])
338
+ sage: z * y * x
339
+ bar(U['x']*U['y']*U['z'])
340
+ """
341
+ ret = self._A.product_on_basis(x, y)
342
+ deg = self._A.degree_on_basis(x) + self._A.degree_on_basis(y)
343
+ return self.sum_of_terms([(i,c) for i,c in ret
344
+ if self._A.degree_on_basis(i) == deg],
345
+ distinct=True)
@@ -0,0 +1,350 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.graphs sage.modules
3
+ r"""
4
+ Cellular Basis
5
+ ==============
6
+
7
+ Cellular algebras are a class of algebras introduced by Graham and Lehrer
8
+ [GrLe1996]_. The :class:`CellularBasis` class provides a general framework for
9
+ implementing cellular algebras and their cell modules and simple modules.
10
+
11
+ Let `R` be a commutative ring. A `R`-algebra `A` is a *cellular algebra*
12
+ if it has a *cell datum*, which is a tuple `(\Lambda, i, M, C)`,
13
+ where `\Lambda` is finite poset with order `\ge`, if `\mu \in \Lambda`
14
+ then `T(\mu)` is a finite set and
15
+
16
+ .. MATH::
17
+
18
+ C \colon \coprod_{\mu \in \Lambda} T(\mu) \times T(\mu)
19
+ \longrightarrow A; (\mu,s,t) \mapsto c^\mu_{st}
20
+ \text{ is an injective map}
21
+
22
+ such that the following holds:
23
+
24
+ * The set `\{c^\mu_{st}\mid \mu\in\Lambda, s,t\in T(\mu)\}` is a basis of `A`.
25
+ * If `a \in A` and `\mu\in\Lambda, s,t \in T(\mu)` then:
26
+
27
+ .. MATH::
28
+
29
+ a c^\mu_{st} = \sum_{u\in T(\mu)} r_a(s,u) c^\mu_{ut} \pmod{A^{>\mu}},
30
+
31
+ where `A^{>\mu}` is spanned by
32
+
33
+ .. MATH::
34
+
35
+ `\{c^\nu_{ab} | \nu > \mu\text{ and } a,b \in T(\nu)\}`.
36
+
37
+ Moreover, the scalar `r_a(s,u)` depends only on `a`, `s` and
38
+ `u` and, in particular, is independent of `t`.
39
+
40
+ * The map `\iota \colon A \longrightarrow A; c^\mu_{st} \mapsto c^\mu_{ts}`
41
+ is an algebra anti-isomorphism.
42
+
43
+ A *cellular basis* for `A` is any basis of the form
44
+ `\{c^\mu_{st} \mid \mu \in \Lambda, s,t \in T(\mu) \}`.
45
+
46
+ Note that the scalars `r_a(s,u) \in R` depend only if `a`, `s` and `u` and,
47
+ in particular, they do not depend on `t`. It follows from the definition of
48
+ a cell datum that `A^{>\mu}` is a two-sided ideal of `A`. More importantly,
49
+ if `\mu \in \Lambda` then the
50
+ :class:`~sage.modules.with_basis.cell_module.CellModule` `C^\mu` is the
51
+ free `R`-module with basis `\{c^\mu_s \mid \mu \in \Lambda, s \in T(\mu)\}`
52
+ and with `A`-action:
53
+
54
+ .. MATH::
55
+
56
+ a c^\mu_{s} = \sum_{u \in T(\mu)} r_a(s,u) c^\mu_{u},
57
+
58
+ where the scalars `r_a(s,u)` are those appearing in the definition of the cell
59
+ datum. It follows from the cellular basis axioms that `C^\mu` comes
60
+ equipped with a bilinear form `\langle\ ,\ \rangle` that is determined by:
61
+
62
+ .. MATH::
63
+
64
+ c^\mu_{st} c^\mu_u = \langle c^\mu_{s}, c^\mu_t \rangle c^\mu_u.
65
+
66
+ The *radical* of `C^\mu` is the `A`-submodule
67
+ `\operatorname{rad} C^\mu = \{x \in C^\mu | \langle x,y \rangle = 0 \}`.
68
+ Hence, `D^\mu = C^\mu / \operatorname{rad} C^\mu` is also an `A`-module.
69
+ It is not difficult to show that `\{ D^\mu \mid D^\mu \neq 0 \}` is a
70
+ complete set of pairwise non-isomorphic `A`-modules. Hence, a cell datum for
71
+ `A` gives an explicit construction of the irreducible `A`-modules. The module
72
+ :meth:`~sage.modules.with_basis.cell_module.CellModule.simple_module()`
73
+ `D^\mu` is either zero or absolutely irreducible.
74
+
75
+ EXAMPLES:
76
+
77
+ We compute a cellular basis and do some basic computations::
78
+
79
+ sage: S = SymmetricGroupAlgebra(QQ, 3)
80
+ sage: C = S.cellular_basis()
81
+ sage: C
82
+ Cellular basis of Symmetric group algebra of order 3
83
+ over Rational Field
84
+
85
+ .. SEEALSO::
86
+
87
+ :class:`~sage.modules.with_basis.cell_module.CellModule`
88
+
89
+ AUTHOR:
90
+
91
+ - Travis Scrimshaw (2015-11-5): Initial version
92
+
93
+ REFERENCES:
94
+
95
+ - [GrLe1996]_
96
+ - [KX1998]_
97
+ - [Mat1999]_
98
+ - :wikipedia:`Cellular_algebra`
99
+ - http://webusers.imj-prg.fr/~bernhard.keller/ictp2006/lecturenotes/xi.pdf
100
+ """
101
+
102
+ # ****************************************************************************
103
+ # Copyright (C) 2015-2018 Travis Scrimshaw <tcscrims at gmail.com>
104
+ #
105
+ # This program is free software: you can redistribute it and/or modify
106
+ # it under the terms of the GNU General Public License as published by
107
+ # the Free Software Foundation, either version 2 of the License, or
108
+ # (at your option) any later version.
109
+ # https://www.gnu.org/licenses/
110
+ # ****************************************************************************
111
+
112
+ try:
113
+ from typing import Self # type: ignore (Python >= 3.11)
114
+ except ImportError:
115
+ from typing_extensions import Self # type: ignore (Python 3.10)
116
+
117
+ from sage.categories.algebras import Algebras
118
+ from sage.combinat.free_module import CombinatorialFreeModule
119
+ from sage.misc.cachefunc import cached_method
120
+
121
+
122
+ class CellularBasis(CombinatorialFreeModule):
123
+ r"""
124
+ The cellular basis of a cellular algebra, in the sense of
125
+ Graham and Lehrer [GrLe1996]_.
126
+
127
+ INPUT:
128
+
129
+ - ``A`` -- the cellular algebra
130
+
131
+ EXAMPLES:
132
+
133
+ We compute a cellular basis and do some basic computations::
134
+
135
+ sage: S = SymmetricGroupAlgebra(QQ, 3)
136
+ sage: C = S.cellular_basis()
137
+ sage: C
138
+ Cellular basis of Symmetric group algebra of order 3
139
+ over Rational Field
140
+ sage: len(C.basis())
141
+ 6
142
+ sage: len(S.basis())
143
+ 6
144
+ sage: a,b,c,d,e,f = C.basis()
145
+ sage: f
146
+ C([3], [[1, 2, 3]], [[1, 2, 3]])
147
+ sage: c
148
+ C([2, 1], [[1, 3], [2]], [[1, 2], [3]])
149
+ sage: d
150
+ C([2, 1], [[1, 2], [3]], [[1, 3], [2]])
151
+ sage: f * f
152
+ C([3], [[1, 2, 3]], [[1, 2, 3]])
153
+ sage: f * c
154
+ 0
155
+ sage: d * c
156
+ C([2, 1], [[1, 2], [3]], [[1, 2], [3]])
157
+ sage: c * d
158
+ C([2, 1], [[1, 3], [2]], [[1, 3], [2]])
159
+ sage: S(f)
160
+ 1/6*[1, 2, 3] + 1/6*[1, 3, 2] + 1/6*[2, 1, 3] + 1/6*[2, 3, 1]
161
+ + 1/6*[3, 1, 2] + 1/6*[3, 2, 1]
162
+ sage: S(d)
163
+ 1/4*[1, 3, 2] - 1/4*[2, 3, 1] + 1/4*[3, 1, 2] - 1/4*[3, 2, 1]
164
+ sage: B = list(S.basis())
165
+ sage: B[2]
166
+ [2, 1, 3]
167
+ sage: C(B[2])
168
+ -C([1, 1, 1], [[1], [2], [3]], [[1], [2], [3]])
169
+ + C([2, 1], [[1, 2], [3]], [[1, 2], [3]])
170
+ - C([2, 1], [[1, 3], [2]], [[1, 3], [2]])
171
+ + C([3], [[1, 2, 3]], [[1, 2, 3]])
172
+ """
173
+ def __init__(self, A, to_algebra=None, from_algebra=None, **kwargs):
174
+ r"""
175
+ Initialize ``self``.
176
+
177
+ EXAMPLES::
178
+
179
+ sage: S = SymmetricGroupAlgebra(QQ, 3)
180
+ sage: C = S.cellular_basis()
181
+ sage: TestSuite(C).run()
182
+ """
183
+ self._algebra = A
184
+ I = [(la, s, t) for la in A.cell_poset()
185
+ for s in A.cell_module_indices(la)
186
+ for t in A.cell_module_indices(la)]
187
+
188
+ # TODO: Use instead A.category().Realizations() so
189
+ # operations are defined by coercion?
190
+ prefix = kwargs.pop('prefix', 'C')
191
+ cat = Algebras(A.category().base_ring()).FiniteDimensional().WithBasis().Cellular()
192
+ CombinatorialFreeModule.__init__(self, A.base_ring(), I,
193
+ prefix=prefix, bracket=False,
194
+ category=cat, **kwargs)
195
+
196
+ # Register coercions
197
+ if from_algebra is None:
198
+ from_algebra = A._to_cellular_element
199
+ if to_algebra is None:
200
+ to_algebra = A._from_cellular_index
201
+ if from_algebra is not NotImplemented:
202
+ to_cellular = A.module_morphism(from_algebra, codomain=self,
203
+ category=cat)
204
+ if to_algebra is NotImplemented:
205
+ from_cellular = ~to_cellular
206
+ else:
207
+ from_cellular = self.module_morphism(to_algebra, codomain=A,
208
+ category=cat)
209
+ if from_algebra is NotImplemented:
210
+ to_cellular = ~from_cellular
211
+ to_cellular.register_as_coercion()
212
+ from_cellular.register_as_coercion()
213
+
214
+ def _repr_(self):
215
+ r"""
216
+ String representation of ``self``.
217
+
218
+ EXAMPLES::
219
+
220
+ sage: S = SymmetricGroupAlgebra(QQ, 3)
221
+ sage: S.cellular_basis()
222
+ Cellular basis of Symmetric group algebra of order 3 over Rational Field
223
+ """
224
+ return "Cellular basis of {}".format(self._algebra)
225
+
226
+ def _latex_term(self, x):
227
+ r"""
228
+ Return a latex representation of the term indexed by ``x``.
229
+
230
+ EXAMPLES::
231
+
232
+ sage: S = SymmetricGroupAlgebra(QQ, 3)
233
+ sage: C = S.cellular_basis()
234
+ sage: s = Tableau([[1,2],[3]])
235
+ sage: C._latex_term((Partition([2,1]), s, s))
236
+ 'C^{...}_{\\left(...\\right)}'
237
+ """
238
+ from sage.misc.latex import latex
239
+ la = x[0]
240
+ m = (x[1], x[2])
241
+ # m contains "non-LaTeXed" strings, use string representation
242
+ sla = latex(la)
243
+ if sla.find('\\text{\\textt') != -1:
244
+ sla = str(la)
245
+ sm = latex(m)
246
+ if sm.find('\\text{\\textt') != -1:
247
+ sm = str(m)
248
+ return "C^{%s}_{%s}" % (sla, sm)
249
+
250
+ def cellular_basis_of(self):
251
+ """
252
+ Return the defining algebra of ``self``.
253
+
254
+ EXAMPLES::
255
+
256
+ sage: S = SymmetricGroupAlgebra(QQ, 3)
257
+ sage: C = S.cellular_basis()
258
+ sage: C.cellular_basis_of() is S
259
+ True
260
+ """
261
+ return self._algebra
262
+
263
+ def cell_poset(self):
264
+ """
265
+ Return the cell poset of ``self``.
266
+
267
+ EXAMPLES::
268
+
269
+ sage: S = SymmetricGroupAlgebra(QQ, 3)
270
+ sage: C = S.cellular_basis()
271
+ sage: C.cell_poset()
272
+ Finite poset containing 3 elements
273
+ """
274
+ return self._algebra.cell_poset()
275
+
276
+ def cell_module_indices(self, la):
277
+ r"""
278
+ Return the indices of the cell module of ``self``
279
+ indexed by ``la`` .
280
+
281
+ This is the finite set `M(\lambda)`.
282
+
283
+ EXAMPLES::
284
+
285
+ sage: S = SymmetricGroupAlgebra(QQ, 3)
286
+ sage: C = S.cellular_basis()
287
+ sage: C.cell_module_indices([2,1])
288
+ Standard tableaux of shape [2, 1]
289
+ """
290
+ return self._algebra.cell_module_indices(la)
291
+
292
+ def cellular_basis(self) -> Self:
293
+ """
294
+ Return the cellular basis of ``self``, which is ``self``.
295
+
296
+ EXAMPLES::
297
+
298
+ sage: S = SymmetricGroupAlgebra(QQ, 3)
299
+ sage: C = S.cellular_basis()
300
+ sage: C.cellular_basis() is C
301
+ True
302
+ """
303
+ return self
304
+
305
+ @cached_method
306
+ def one(self):
307
+ """
308
+ Return the element `1` in ``self``.
309
+
310
+ EXAMPLES::
311
+
312
+ sage: S = SymmetricGroupAlgebra(QQ, 3)
313
+ sage: C = S.cellular_basis()
314
+ sage: C.one()
315
+ C([1, 1, 1], [[1], [2], [3]], [[1], [2], [3]])
316
+ + C([2, 1], [[1, 2], [3]], [[1, 2], [3]])
317
+ + C([2, 1], [[1, 3], [2]], [[1, 3], [2]])
318
+ + C([3], [[1, 2, 3]], [[1, 2, 3]])
319
+ """
320
+ return self(self._algebra.one())
321
+
322
+ @cached_method
323
+ def product_on_basis(self, x, y):
324
+ """
325
+ Return the product of basis indices by ``x`` and ``y``.
326
+
327
+ EXAMPLES::
328
+
329
+ sage: S = SymmetricGroupAlgebra(QQ, 3)
330
+ sage: C = S.cellular_basis()
331
+ sage: la = Partition([2,1])
332
+ sage: s = StandardTableau([[1,2],[3]])
333
+ sage: t = StandardTableau([[1,3],[2]])
334
+ sage: C.product_on_basis((la, s, t), (la, s, t))
335
+ 0
336
+
337
+ TESTS::
338
+
339
+ sage: C5.<z5> = CyclotomicField(5)
340
+ sage: TL = TemperleyLiebAlgebra(2, z5 + ~z5, C5)
341
+ sage: m = TL.cell_module(0)
342
+ sage: c = m.basis().keys()[0]
343
+ sage: B = TL.cellular_basis()
344
+ sage: B.product_on_basis((0, c, c), (0, c, c))
345
+ (-z5^3-z5^2-1)*C(0, {{1, 2}}, {{1, 2}})
346
+
347
+ sage: p = TL(B.monomial((0,c,c))) * TL(B.monomial((0,c,c)))
348
+ """
349
+ A = self._algebra
350
+ return self(A(self.monomial(x)) * A(self.monomial(y)))