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,693 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.modules
3
+ """
4
+ Alternating Central Extension Quantum Onsager Algebra
5
+
6
+ AUTHORS:
7
+
8
+ - Travis Scrimshaw (2021-03): Initial version
9
+ """
10
+
11
+ # ****************************************************************************
12
+ # Copyright (C) 2021 Travis Scrimshaw <tcscrims at gmail.com>
13
+ #
14
+ # This program is free software: you can redistribute it and/or modify
15
+ # it under the terms of the GNU General Public License as published by
16
+ # the Free Software Foundation, either version 2 of the License, or
17
+ # (at your option) any later version.
18
+ # https://www.gnu.org/licenses/
19
+ # ****************************************************************************
20
+
21
+ from sage.misc.cachefunc import cached_method
22
+ from sage.misc.lazy_attribute import lazy_attribute
23
+ from sage.categories.algebras import Algebras
24
+ from sage.combinat.free_module import CombinatorialFreeModule
25
+ from sage.monoids.indexed_free_monoid import IndexedFreeAbelianMonoid
26
+ from sage.sets.positive_integers import PositiveIntegers
27
+ from sage.sets.disjoint_union_enumerated_sets import DisjointUnionEnumeratedSets
28
+ from sage.sets.family import Family
29
+ from sage.rings.integer_ring import ZZ
30
+
31
+
32
+ class ACEQuantumOnsagerAlgebra(CombinatorialFreeModule):
33
+ r"""
34
+ The alternating central extension of the `q`-Onsager algebra.
35
+
36
+ The *alternating central extension* `\mathcal{A}_q` of the `q`-Onsager
37
+ algebra `O_q` is a current algebra of `O_q` introduced by Baseilhac
38
+ and Koizumi [BK2005]_. A presentation was given by Baseilhac
39
+ and Shigechi [BS2010]_, which was then reformulated in terms of currents
40
+ in [Ter2021]_ and then used to prove that the generators form a PBW basis.
41
+
42
+ .. NOTE::
43
+
44
+ This is only for the `q`-Onsager algebra with parameter
45
+ `c = q^{-1} (q - q^{-1})^2`.
46
+
47
+ EXAMPLES::
48
+
49
+ sage: A = algebras.AlternatingCentralExtensionQuantumOnsager(QQ)
50
+ sage: AG = A.algebra_generators()
51
+
52
+ We construct the generators `\mathcal{G}_3`, `\mathcal{W}_{-5}`,
53
+ `\mathcal{W}_2`, and `\widetilde{\mathcal{G}}_{4}` and perform
54
+ some computations::
55
+
56
+ sage: G3 = AG[0,3]
57
+ sage: Wm5 = AG[1,-5]
58
+ sage: W2 = AG[1,2]
59
+ sage: Gt4 = AG[2,4]
60
+ sage: [G3, Wm5, W2, Gt4]
61
+ [G[3], W[-5], W[2], Gt[4]]
62
+ sage: Gt4 * G3
63
+ G[3]*Gt[4] + ((-q^12+3*q^8-3*q^4+1)/q^6)*W[-6]*W[1]
64
+ + ((-q^12+3*q^8-3*q^4+1)/q^6)*W[-5]*W[2]
65
+ + ((q^12-3*q^8+3*q^4-1)/q^6)*W[-4]*W[1]
66
+ + ((-q^12+3*q^8-3*q^4+1)/q^6)*W[-4]*W[3]
67
+ + ((-q^12+3*q^8-3*q^4+1)/q^6)*W[-3]*W[-2]
68
+ + ((q^12-3*q^8+3*q^4-1)/q^6)*W[-3]*W[2]
69
+ + ((q^12-3*q^8+3*q^4-1)/q^6)*W[-2]*W[5]
70
+ + ((-q^12+3*q^8-3*q^4+1)/q^6)*W[-1]*W[4]
71
+ + ((q^12-3*q^8+3*q^4-1)/q^6)*W[-1]*W[6]
72
+ + ((-q^12+3*q^8-3*q^4+1)/q^6)*W[0]*W[5]
73
+ + ((q^12-3*q^8+3*q^4-1)/q^6)*W[0]*W[7]
74
+ + ((q^12-3*q^8+3*q^4-1)/q^6)*W[3]*W[4]
75
+ sage: Wm5 * G3
76
+ ((q^2-1)/q^2)*G[1]*W[-7] + ((-q^2+1)/q^2)*G[1]*W[7]
77
+ + ((q^2-1)/q^2)*G[2]*W[-6] + ((-q^2+1)/q^2)*G[2]*W[6] + G[3]*W[-5]
78
+ + ((-q^2+1)/q^2)*G[6]*W[-2] + ((q^2-1)/q^2)*G[6]*W[2]
79
+ + ((-q^2+1)/q^2)*G[7]*W[-1] + ((q^2-1)/q^2)*G[7]*W[1]
80
+ + ((-q^2+1)/q^2)*G[8]*W[0] + ((-q^8+2*q^4-1)/q^5)*W[-8]
81
+ + ((q^8-2*q^4+1)/q^5)*W[8]
82
+ sage: W2 * G3
83
+ (q^2-1)*G[1]*W[-2] + (-q^2+1)*G[1]*W[4] + (-q^2+1)*G[3]*W[0]
84
+ + q^2*G[3]*W[2] + (q^2-1)*G[4]*W[1] + ((-q^8+2*q^4-1)/q^3)*W[-3]
85
+ + ((q^8-2*q^4+1)/q^3)*W[5]
86
+ sage: W2 * Wm5
87
+ (q^4/(q^8+2*q^6-2*q^2-1))*G[1]*Gt[6] + (-q^4/(q^8+2*q^6-2*q^2-1))*G[6]*Gt[1]
88
+ + W[-5]*W[2] + (q/(q^2+1))*G[7] + (-q/(q^2+1))*Gt[7]
89
+ sage: Gt4 * Wm5
90
+ ((q^2-1)/q^2)*W[-8]*Gt[1] + ((q^2-1)/q^2)*W[-7]*Gt[2]
91
+ + ((q^2-1)/q^2)*W[-6]*Gt[3] + W[-5]*Gt[4] + ((-q^2+1)/q^2)*W[-3]*Gt[6]
92
+ + ((-q^2+1)/q^2)*W[-2]*Gt[7] + ((-q^2+1)/q^2)*W[-1]*Gt[8]
93
+ + ((-q^2+1)/q^2)*W[0]*Gt[9] + ((q^2-1)/q^2)*W[1]*Gt[8]
94
+ + ((q^2-1)/q^2)*W[2]*Gt[7] + ((q^2-1)/q^2)*W[3]*Gt[6]
95
+ + ((-q^2+1)/q^2)*W[6]*Gt[3] + ((-q^2+1)/q^2)*W[7]*Gt[2]
96
+ + ((-q^2+1)/q^2)*W[8]*Gt[1] + ((-q^8+2*q^4-1)/q^5)*W[-9]
97
+ + ((q^8-2*q^4+1)/q^5)*W[9]
98
+ sage: Gt4 * W2
99
+ (q^2-1)*W[-3]*Gt[1] + (-q^2+1)*W[0]*Gt[4] + (q^2-1)*W[1]*Gt[5]
100
+ + q^2*W[2]*Gt[4] + (-q^2+1)*W[5]*Gt[1] + ((-q^8+2*q^4-1)/q^3)*W[-4]
101
+ + ((q^8-2*q^4+1)/q^3)*W[6]
102
+
103
+ REFERENCES:
104
+
105
+ - [BK2005]_
106
+ - [BS2010]_
107
+ - [Ter2021]_
108
+ """
109
+ @staticmethod
110
+ def __classcall_private__(cls, R=None, q=None):
111
+ """
112
+ Normalize input to ensure a unique representation.
113
+
114
+ TESTS::
115
+
116
+ sage: A1 = algebras.AlternatingCentralExtensionQuantumOnsager(QQ)
117
+ sage: R.<q> = QQ[]
118
+ sage: q = R.gen()
119
+ sage: A2 = algebras.AlternatingCentralExtensionQuantumOnsager(R.fraction_field(), q)
120
+ sage: A1 is A2
121
+ True
122
+ sage: A2.q().parent() is R.fraction_field()
123
+ True
124
+ sage: q = R.fraction_field().gen()
125
+ sage: A3 = algebras.AlternatingCentralExtensionQuantumOnsager(q=q)
126
+ sage: A1 is A3
127
+ True
128
+ """
129
+ if q is None:
130
+ if R is None:
131
+ raise ValueError("either base ring or q must be specified")
132
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
133
+ q = PolynomialRing(R, 'q').fraction_field().gen()
134
+ R = q.parent()
135
+ else:
136
+ if R is None:
137
+ R = q.parent()
138
+ else:
139
+ q = R(q)
140
+ return super().__classcall__(cls, R, q)
141
+
142
+ def __init__(self, R, q):
143
+ r"""
144
+ Initialize ``self``.
145
+
146
+ TESTS::
147
+
148
+ sage: A = algebras.AlternatingCentralExtensionQuantumOnsager(QQ)
149
+ sage: TestSuite(A).run() # long time
150
+ """
151
+ I = DisjointUnionEnumeratedSets([PositiveIntegers(), ZZ, PositiveIntegers()],
152
+ keepkey=True, facade=True)
153
+ monomials = IndexedFreeAbelianMonoid(I, prefix='A', bracket=False)
154
+ self._q = q
155
+ CombinatorialFreeModule.__init__(self, R, monomials,
156
+ prefix='', bracket=False, latex_bracket=False,
157
+ sorting_key=self._monomial_key,
158
+ category=Algebras(R).WithBasis().Filtered())
159
+
160
+ def _monomial_key(self, x):
161
+ r"""
162
+ Compute the key for ``x`` so that the comparison is done by
163
+ reverse degree lexicographic order.
164
+
165
+ EXAMPLES::
166
+
167
+ sage: A = algebras.AlternatingCentralExtensionQuantumOnsager(QQ)
168
+ sage: AG = A.algebra_generators()
169
+ sage: AG[1,1] * AG[1,0] * AG[0,1] # indirect doctest
170
+ G[1]*W[0]*W[1] + (q/(q^2+1))*G[1]^2 + (-q/(q^2+1))*G[1]*Gt[1]
171
+ + ((-q^8+2*q^4-1)/q^5)*W[-1]*W[1] + ((-q^8+2*q^4-1)/q^5)*W[0]^2
172
+ + ((q^8-2*q^4+1)/q^5)*W[0]*W[2] + ((q^8-2*q^4+1)/q^5)*W[1]^2
173
+ """
174
+ return (-len(x), x.to_word_list())
175
+
176
+ def _repr_(self):
177
+ r"""
178
+ Return a string representation of ``self``.
179
+
180
+ EXAMPLES::
181
+
182
+ sage: A = algebras.AlternatingCentralExtensionQuantumOnsager(QQ)
183
+ sage: A
184
+ Alternating Central Extension of q-Onsager algebra over Fraction
185
+ Field of Univariate Polynomial Ring in q over Rational Field
186
+ """
187
+ return "Alternating Central Extension of {}-Onsager algebra over {}".format(
188
+ self._q, self.base_ring())
189
+
190
+ def _latex_(self):
191
+ r"""
192
+ Return a latex representation of ``self``.
193
+
194
+ EXAMPLES::
195
+
196
+ sage: A = algebras.AlternatingCentralExtensionQuantumOnsager(QQ)
197
+ sage: latex(A)
198
+ \mathcal{A}_{q,\mathrm{Frac}(\Bold{Q}[q])}
199
+ """
200
+ from sage.misc.latex import latex
201
+ return "\\mathcal{{A}}_{{{},{}}}".format(latex(self._q),
202
+ latex(self.base_ring()))
203
+
204
+ def _repr_term(self, m):
205
+ r"""
206
+ Return a string representation of the term indexed by ``m``.
207
+
208
+ EXAMPLES::
209
+
210
+ sage: A = algebras.AlternatingCentralExtensionQuantumOnsager(QQ)
211
+ sage: I = A._indices.gens()
212
+ sage: A._repr_term(I[0,3])
213
+ 'G[3]'
214
+ sage: A._repr_term(I[1,-2])
215
+ 'W[-2]'
216
+ sage: A._repr_term(I[1,3])
217
+ 'W[3]'
218
+ sage: A._repr_term(I[2,5])
219
+ 'Gt[5]'
220
+ sage: A._repr_term(I[0,1]^2 * I[1,0] * I[1,3]^13 * I[2,3])
221
+ 'G[1]^2*W[0]*W[3]^13*Gt[3]'
222
+ """
223
+ def to_str(x):
224
+ k, e = x
225
+ if k[0] == 0:
226
+ ret = "G[{}]".format(k[1])
227
+ elif k[0] == 1:
228
+ ret = "W[{}]".format(k[1])
229
+ elif k[0] == 2:
230
+ ret = "Gt[{}]".format(k[1])
231
+ if e > 1:
232
+ ret = ret + "^{}".format(e)
233
+ return ret
234
+ return '*'.join(to_str(x) for x in m._sorted_items())
235
+
236
+ def _latex_term(self, m):
237
+ r"""
238
+ Return a latex representation of the term indexed by ``m``.
239
+
240
+ EXAMPLES::
241
+
242
+ sage: A = algebras.AlternatingCentralExtensionQuantumOnsager(QQ)
243
+ sage: I = A._indices.gens()
244
+ sage: A._latex_term(I[0,3])
245
+ '\\mathcal{G}_{3}'
246
+ sage: A._latex_term(I[1,-2])
247
+ '\\mathcal{W}_{-2}'
248
+ sage: A._latex_term(I[1,3])
249
+ '\\mathcal{W}_{3}'
250
+ sage: A._latex_term(I[2,5])
251
+ '\\widetilde{\\mathcal{G}}_{5}'
252
+ sage: A._latex_term(I[0,1]^2 * I[1,0] * I[1,3]^13 * I[2,3])
253
+ '\\mathcal{G}_{1}^{2} \\mathcal{W}_{0} \\mathcal{W}_{3}^{13} \\widetilde{\\mathcal{G}}_{3}'
254
+ """
255
+ def to_str(x):
256
+ k, e = x
257
+ if k[0] == 0:
258
+ ret = "\\mathcal{{G}}_{{{}}}".format(k[1])
259
+ elif k[0] == 1:
260
+ ret = "\\mathcal{{W}}_{{{}}}".format(k[1])
261
+ elif k[0] == 2:
262
+ ret = "\\widetilde{{\\mathcal{{G}}}}_{{{}}}".format(k[1])
263
+ if e > 1:
264
+ ret = ret + '^{{{}}}'.format(e)
265
+ return ret
266
+ return ' '.join(to_str(x) for x in m._sorted_items())
267
+
268
+ @cached_method
269
+ def algebra_generators(self):
270
+ r"""
271
+ Return the algebra generators of ``self``.
272
+
273
+ EXAMPLES::
274
+
275
+ sage: A = algebras.AlternatingCentralExtensionQuantumOnsager(QQ)
276
+ sage: A.algebra_generators()
277
+ Lazy family (generator map(i))_{i in Disjoint union of
278
+ Family (Positive integers, Integer Ring, Positive integers)}
279
+ """
280
+ G = self._indices.gens()
281
+ q = self._q
282
+
283
+ def monomial_map(x):
284
+ if x[0] != 1 and x[1] == 0:
285
+ return self.term(self.one_basis(), -(q-~q)*(q+~q)**2)
286
+ return self.monomial(G[x])
287
+ return Family(self._indices._indices, monomial_map,
288
+ name="generator map")
289
+
290
+ gens = algebra_generators
291
+
292
+ def q(self):
293
+ r"""
294
+ Return the parameter `q` of ``self``.
295
+
296
+ EXAMPLES::
297
+
298
+ sage: A = algebras.AlternatingCentralExtensionQuantumOnsager(QQ)
299
+ sage: A.q()
300
+ q
301
+ """
302
+ return self._q
303
+
304
+ @cached_method
305
+ def one_basis(self):
306
+ r"""
307
+ Return the basis element indexing `1`.
308
+
309
+ EXAMPLES::
310
+
311
+ sage: A = algebras.AlternatingCentralExtensionQuantumOnsager(QQ)
312
+ sage: ob = A.one_basis(); ob
313
+ 1
314
+ sage: ob.parent()
315
+ Free abelian monoid indexed by Disjoint union of
316
+ Family (Positive integers, Integer Ring, Positive integers)
317
+ """
318
+ return self._indices.one()
319
+
320
+ def _an_element_(self):
321
+ r"""
322
+ Return an element of ``self``.
323
+
324
+ EXAMPLES::
325
+
326
+ sage: A = algebras.AlternatingCentralExtensionQuantumOnsager(QQ)
327
+ sage: A.an_element()
328
+ q*G[2] - 2*W[-3] + W[2] - q*Gt[1]
329
+ """
330
+ G = self.algebra_generators()
331
+ return G[1,2] - 2*G[1,-3] + self.base_ring().an_element()*(G[0,2] - G[2,1])
332
+
333
+ def some_elements(self):
334
+ r"""
335
+ Return some elements of ``self``.
336
+
337
+ EXAMPLES::
338
+
339
+ sage: A = algebras.AlternatingCentralExtensionQuantumOnsager(QQ)
340
+ sage: A.some_elements()
341
+ [W[0], W[3], W[-1], W[1], W[-2], G[1], G[2], Gt[1], Gt[2]]
342
+ """
343
+ G = self.algebra_generators()
344
+ return [G[1,0], G[1,3], G[1,-1], G[1,1], G[1,-2], G[0,1], G[0,2], G[2,1], G[2,2]]
345
+
346
+ def degree_on_basis(self, m):
347
+ r"""
348
+ Return the degree of the basis element indexed by ``m``.
349
+
350
+ EXAMPLES::
351
+
352
+ sage: A = algebras.AlternatingCentralExtensionQuantumOnsager(QQ)
353
+ sage: G = A.algebra_generators()
354
+ sage: A.degree_on_basis(G[0,1].leading_support())
355
+ 2
356
+ sage: A.degree_on_basis(G[0,2].leading_support())
357
+ 4
358
+ sage: A.degree_on_basis(G[1,-1].leading_support())
359
+ 3
360
+ sage: A.degree_on_basis(G[1,0].leading_support())
361
+ 1
362
+ sage: A.degree_on_basis(G[1,1].leading_support())
363
+ 1
364
+ sage: A.degree_on_basis(G[2,1].leading_support())
365
+ 2
366
+ sage: A.degree_on_basis(G[2,2].leading_support())
367
+ 4
368
+ sage: [x.degree() for x in A.some_elements()]
369
+ [1, 5, 3, 1, 5, 2, 4, 2, 4]
370
+ """
371
+ def deg(k):
372
+ if k[0] != 1:
373
+ return 2*k[1]
374
+ return -2*k[1]+1 if k[1] <= 0 else 2*k[1] - 1
375
+ return ZZ.sum(deg(k) * c for k, c in m._monomial.items())
376
+
377
+ @cached_method
378
+ def quantum_onsager_pbw_generator(self, i):
379
+ r"""
380
+ Return the image of the PBW generator of the `q`-Onsager algebra
381
+ in ``self``.
382
+
383
+ INPUT:
384
+
385
+ - ``i`` -- a pair ``(k, m)`` such that
386
+
387
+ * ``k=0`` and ``m`` is an integer
388
+ * ``k=1`` and ``m`` is a positive integer
389
+
390
+ EXAMPLES::
391
+
392
+ sage: A = algebras.AlternatingCentralExtensionQuantumOnsager(QQ)
393
+ sage: A.quantum_onsager_pbw_generator((0,0))
394
+ W[1]
395
+ sage: A.quantum_onsager_pbw_generator((0,1))
396
+ (q^3/(q^4-1))*W[1]*Gt[1] - q^2*W[0] + (q^2+1)*W[2]
397
+ sage: A.quantum_onsager_pbw_generator((0,2))
398
+ (q^6/(q^8-2*q^4+1))*W[1]*Gt[1]^2 + (-q^5/(q^4-1))*W[0]*Gt[1]
399
+ + (q^3/(q^2-1))*W[1]*Gt[2] + (q^3/(q^2-1))*W[2]*Gt[1]
400
+ + (-q^4-q^2)*W[-1] - q^2*W[1] + (q^4+2*q^2+1)*W[3]
401
+ sage: A.quantum_onsager_pbw_generator((0,-1))
402
+ W[0]
403
+ sage: A.quantum_onsager_pbw_generator((0,-2))
404
+ (q/(q^4-1))*W[0]*Gt[1] + ((q^2+1)/q^2)*W[-1] - 1/q^2*W[1]
405
+ sage: A.quantum_onsager_pbw_generator((0,-3))
406
+ (q^2/(q^8-2*q^4+1))*W[0]*Gt[1]^2 + (1/(q^3-q))*W[-1]*Gt[1]
407
+ + (1/(q^3-q))*W[0]*Gt[2] - (1/(q^5-q))*W[1]*Gt[1]
408
+ + ((q^4+2*q^2+1)/q^4)*W[-2] - 1/q^2*W[0] + ((-q^2-1)/q^4)*W[2]
409
+ sage: A.quantum_onsager_pbw_generator((1,1))
410
+ ((-q^2+1)/q^2)*W[0]*W[1] + (1/(q^3+q))*G[1] - (1/(q^3+q))*Gt[1]
411
+ sage: A.quantum_onsager_pbw_generator((1,2))
412
+ -1/q*W[0]*W[1]*Gt[1] + (1/(q^6+q^4-q^2-1))*G[1]*Gt[1]
413
+ + ((-q^4+1)/q^4)*W[-1]*W[1] + (q^2-1)*W[0]^2
414
+ + ((-q^4+1)/q^2)*W[0]*W[2] + ((q^2-1)/q^4)*W[1]^2
415
+ - (1/(q^6+q^4-q^2-1))*Gt[1]^2 + 1/q^3*G[2] - 1/q^3*Gt[2]
416
+ """
417
+ W0 = self.algebra_generators()[1,0]
418
+ W1 = self.algebra_generators()[1,1]
419
+ q = self._q
420
+ if i[0] == 0:
421
+ if i[1] < 0:
422
+ if i[1] == -1:
423
+ return W0
424
+ Bd = self.quantum_onsager_pbw_generator((1, 1))
425
+ Bm1 = self.quantum_onsager_pbw_generator((0, i[1]+1))
426
+ Bm2 = self.quantum_onsager_pbw_generator((0, i[1]+2))
427
+ return Bm2 + q/(q**-3-~q-q+q**3) * (Bd * Bm1 - Bm1 * Bd)
428
+ else:
429
+ if i[1] == 0:
430
+ return W1
431
+ Bd = self.quantum_onsager_pbw_generator((1, 1))
432
+ Bm1 = self.quantum_onsager_pbw_generator((0, i[1]-1))
433
+ Bm2 = self.quantum_onsager_pbw_generator((0, i[1]-2))
434
+ return Bm2 - q/(q**-3-~q-q+q**3) * (Bd * Bm1 - Bm1 * Bd)
435
+ elif i[0] == 1:
436
+ if i[1] == 1:
437
+ return q**-2 * W1 * W0 - W0 * W1
438
+ if i[1] <= 0:
439
+ raise ValueError("not an index of a PBW basis element")
440
+ B = self.quantum_onsager_pbw_generator
441
+ n = i[1]
442
+ Bm1 = self.quantum_onsager_pbw_generator((0, n-1))
443
+ return (q**-2 * Bm1 * W0 - W0 * Bm1
444
+ + (q**-2 - 1) * sum(B((0,ell)) * B((0,n-ell-2))
445
+ for ell in range(n-1)))
446
+ raise ValueError("not an index of a PBW basis element")
447
+
448
+ @cached_method
449
+ def product_on_basis(self, lhs, rhs):
450
+ r"""
451
+ Return the product of the two basis elements ``lhs`` and ``rhs``.
452
+
453
+ EXAMPLES::
454
+
455
+ sage: A = algebras.AlternatingCentralExtensionQuantumOnsager(QQ)
456
+ sage: G = A.algebra_generators()
457
+ sage: q = A.q()
458
+ sage: rho = -(q^2 - q^-2)^2
459
+
460
+ We verify the PBW ordering::
461
+
462
+ sage: G[0,1] * G[1,1] # indirect doctest
463
+ G[1]*W[1]
464
+ sage: G[1,1] * G[0,1]
465
+ q^2*G[1]*W[1] + ((-q^8+2*q^4-1)/q^3)*W[0] + ((q^8-2*q^4+1)/q^3)*W[2]
466
+ sage: G[1,-1] * G[1,1]
467
+ W[-1]*W[1]
468
+ sage: G[1,1] * G[1,-1]
469
+ W[-1]*W[1] + (q/(q^2+1))*G[2] + (-q/(q^2+1))*Gt[2]
470
+ sage: G[1,1] * G[2,1]
471
+ W[1]*Gt[1]
472
+ sage: G[2,1] * G[1,1]
473
+ q^2*W[1]*Gt[1] + ((-q^8+2*q^4-1)/q^3)*W[0] + ((q^8-2*q^4+1)/q^3)*W[2]
474
+ sage: G[0,1] * G[2,1]
475
+ G[1]*Gt[1]
476
+ sage: G[2,1] * G[0,1]
477
+ G[1]*Gt[1] + ((-q^12+3*q^8-3*q^4+1)/q^6)*W[-1]*W[1]
478
+ + ((-q^12+3*q^8-3*q^4+1)/q^6)*W[0]^2
479
+ + ((q^12-3*q^8+3*q^4-1)/q^6)*W[0]*W[2]
480
+ + ((q^12-3*q^8+3*q^4-1)/q^6)*W[1]^2
481
+
482
+ We verify some of the defining relations (see Equations (3-14)
483
+ in [Ter2021]_), which are used to construct the PBW basis::
484
+
485
+ sage: G[0,1] * G[0,2] == G[0,2] * G[0,1]
486
+ True
487
+ sage: G[1,-1] * G[1,-2] == G[1,-2] * G[1,-1]
488
+ True
489
+ sage: G[1,1] * G[1,2] == G[1,2] * G[1,1]
490
+ True
491
+ sage: G[2,1] * G[2,2] == G[2,2] * G[2,1]
492
+ True
493
+ sage: G[1,0] * G[1,2] - G[1,2] * G[1,0] == G[1,-1] * G[1,1] - G[1,1] * G[1,-1]
494
+ True
495
+ sage: G[1,0] * G[1,2] - G[1,2] * G[1,0] == (G[2,2] - G[0,2]) / (q + ~q)
496
+ True
497
+ sage: q * G[1,0] * G[0,2] - ~q * G[0,2] * G[1,0] == q * G[2,2] * G[1,0] - ~q * G[1,0] * G[2,2]
498
+ True
499
+ sage: q * G[1,0] * G[0,2] - ~q * G[0,2] * G[1,0] == rho * G[1,-2] - rho * G[1,2]
500
+ True
501
+ sage: q * G[0,2] * G[1,1] - ~q * G[1,1] * G[0,2] == q * G[1,1] * G[2,2] - ~q * G[2,2] * G[1,1]
502
+ True
503
+ sage: q * G[0,2] * G[1,1] - ~q * G[1,1] * G[0,2] == rho * G[1,3] - rho * G[1,-1]
504
+ True
505
+ sage: G[1,-2] * G[1,2] - G[1,2] * G[1,-2] == G[1,-1] * G[1,3] - G[1,3] * G[1,-1]
506
+ True
507
+ sage: G[1,-2] * G[0,2] - G[0,2] * G[1,-2] == G[1,-1] * G[0,3] - G[0,3] * G[1,-1]
508
+ True
509
+ sage: G[1,1] * G[0,2] - G[0,2] * G[1,1] == G[1,2] * G[0,1] - G[0,1] * G[1,2]
510
+ True
511
+ sage: G[1,-2] * G[2,2] - G[2,2] * G[1,-2] == G[1,-1] * G[2,3] - G[2,3] * G[1,-1]
512
+ True
513
+ sage: G[1,1] * G[2,2] - G[2,2] * G[1,1] == G[1,2] * G[2,1] - G[2,1] * G[1,2]
514
+ True
515
+ sage: G[0,1] * G[2,2] - G[2,2] * G[0,1] == G[0,2] * G[2,1] - G[2,1] * G[0,2]
516
+ True
517
+ """
518
+ # Some trivial base cases
519
+ if lhs == self.one_basis():
520
+ return self.monomial(rhs)
521
+ if rhs == self.one_basis():
522
+ return self.monomial(lhs)
523
+
524
+ I = self._indices
525
+ B = I.gens()
526
+ q = self._q
527
+ kl = lhs.trailing_support()
528
+ kr = rhs.leading_support()
529
+ if kl <= kr:
530
+ return self.monomial(lhs * rhs)
531
+
532
+ A = self.algebra_generators()
533
+
534
+ # Create the commutator
535
+ # We have xy - yx = [x, y] -> xy = yx + LOT for x > y
536
+ if kl[0] == kr[0]:
537
+ # Commuting elements
538
+ if kl[0] != 1 or (kl[1] > 0 and kr[1] > 0) or (kl[1] <= 0 and kr[1] <= 0):
539
+ return self.monomial(lhs * B[kr]) * self.monomial(rhs // B[kr])
540
+
541
+ # relation (ii)
542
+ i = kl[1] - 1
543
+ j = -kr[1]
544
+ denom = (q**2 - q**-2) * (q + q**-1)**2
545
+ terms = A[1,-j]*A[1,i+1] + self.sum(A[0,ell]*A[2,i+j+1-ell] - A[0,i+j+1-ell]*A[2,ell] for ell in range(min(i,j)+1)) / denom
546
+ elif kl[0] == 2 and kr[0] == 0:
547
+ # relation (iii)
548
+ i = kl[1] - 1
549
+ j = kr[1] - 1
550
+ coeff = (q**2 - q**-2)**3
551
+ terms = (A[0,j+1]*A[2,i+1] - coeff * A[1,-i]*A[1,-j] + coeff * A[1,i+1]*A[1,j+1]
552
+ + coeff * sum(A[1,-ell]*A[1,i+j+2-ell] - A[1,ell-1-i-j]*A[1,ell+1] for ell in range(min(i,j)+1))
553
+ - coeff * sum(A[1,1-ell]*A[1,i+j+1-ell] - A[1,ell-i-j]*A[1,ell] for ell in range(1, min(i,j)+1)))
554
+ elif kl[0] == 1 and kr[0] == 0:
555
+ if kl[1] > 0:
556
+ # relation (vi)
557
+ i = kl[1] - 1
558
+ j = kr[1] - 1
559
+ coeff = q * (q - ~q)
560
+ terms = (A[0,j+1]*A[1,i+1] + coeff * sum(A[0,ell]*A[1,ell-i-j] for ell in range(min(i,j)+1))
561
+ + coeff * sum(A[0,i+j+1-ell]*A[1,ell+1] - A[0,ell]*A[1,i+j+2-ell] for ell in range(min(i,j)+1))
562
+ - coeff * sum(A[0,i+j+1-ell]*A[1,1-ell] for ell in range(1, min(i,j)+1)))
563
+ else:
564
+ # relation (v)
565
+ i = -kl[1]
566
+ j = kr[1] - 1
567
+ coeff = ~q * (q - ~q)
568
+ terms = (A[0,j+1]*A[1,-i] - coeff * sum(A[0,ell]*A[1,i+j+1-ell] for ell in range(min(i,j)+1))
569
+ + coeff * sum(A[0,ell]*A[1,ell-1-i-j] - A[0,i+j+1-ell]*A[1,-ell] for ell in range(min(i,j)+1))
570
+ + coeff * sum(A[0,i+j+1-ell]*A[1,ell] for ell in range(1, min(i,j)+1)))
571
+ elif kl[0] == 2 and kr[0] == 1:
572
+ if kr[1] > 0:
573
+ # relation (vi)
574
+ i = kl[1] - 1
575
+ j = kr[1] - 1
576
+ coeff = q * (q - ~q)
577
+ terms = (A[1,j+1]*A[2,i+1] + coeff * sum(A[1,ell-i-j]*A[2,ell] for ell in range(min(i,j)+1))
578
+ + coeff * sum(A[1,ell+1]*A[2,i+j+1-ell] - A[1,i+j+2-ell]*A[2,ell] for ell in range(min(i,j)+1))
579
+ - coeff * sum(A[1,1-ell]*A[2,i+j+1-ell] for ell in range(1, min(i,j)+1)))
580
+ else:
581
+ # relation (vii)
582
+ i = kl[1] - 1
583
+ j = -kr[1]
584
+ coeff = ~q * (q - ~q)
585
+ terms = (A[1,-j]*A[2,i+1] - coeff * sum(A[1,i+j+1-ell]*A[2,ell] for ell in range(min(i,j)+1))
586
+ + coeff * sum(A[1,ell-1-i-j]*A[2,ell] - A[1,-ell]*A[2,i+j+1-ell] for ell in range(min(i,j)+1))
587
+ + coeff * sum(A[1,ell]*A[2,i+j+1-ell] for ell in range(1, min(i,j)+1)))
588
+
589
+ return self.monomial(lhs // B[kl]) * terms * self.monomial(rhs // B[kr])
590
+
591
+ def _sigma_on_basis(self, x):
592
+ r"""
593
+ Return the action of the `\sigma` automorphism on the basis element
594
+ indexed by ``x``.
595
+
596
+ EXAMPLES::
597
+
598
+ sage: A = algebras.AlternatingCentralExtensionQuantumOnsager(QQ)
599
+ sage: I = A._indices.monoid_generators()
600
+ sage: A._sigma_on_basis(I[1,-1] * I[1,1])
601
+ W[0]*W[2] + (q/(q^2+1))*G[2] + (-q/(q^2+1))*Gt[2]
602
+ sage: A._sigma_on_basis(I[0,1] * I[2,1])
603
+ G[1]*Gt[1] + ((-q^12+3*q^8-3*q^4+1)/q^6)*W[-1]*W[1]
604
+ + ((-q^12+3*q^8-3*q^4+1)/q^6)*W[0]^2
605
+ + ((q^12-3*q^8+3*q^4-1)/q^6)*W[0]*W[2]
606
+ + ((q^12-3*q^8+3*q^4-1)/q^6)*W[1]^2
607
+ sage: [(x, A.sigma(x)) for x in A.some_elements()]
608
+ [(W[0], W[1]), (W[3], W[-2]), (W[-1], W[2]), (W[1], W[0]),
609
+ (W[-2], W[3]), (G[1], Gt[1]), (G[2], Gt[2]), (Gt[1], G[1]),
610
+ (Gt[2], G[2])]
611
+ """
612
+ def tw(m):
613
+ if m[0] == 0:
614
+ return (2, m[1])
615
+ if m[0] == 1:
616
+ return (1, -m[1]+1)
617
+ if m[0] == 2:
618
+ return (0, m[1])
619
+ A = self.algebra_generators()
620
+ return self.prod(A[tw(m)]**e for m,e in x._sorted_items())
621
+
622
+ def _dagger_on_basis(self, x):
623
+ r"""
624
+ Return the action of the `\dagger` antiautomorphism on the basis element
625
+ indexed by ``x``.
626
+
627
+ EXAMPLES::
628
+
629
+ sage: A = algebras.AlternatingCentralExtensionQuantumOnsager(QQ)
630
+ sage: I = A._indices.monoid_generators()
631
+ sage: A._dagger_on_basis(I[0,1] * I[1,-1] * I[2,1])
632
+ G[1]*W[-1]*Gt[1]
633
+ sage: A._dagger_on_basis(I[1,-1] * I[1,1])
634
+ W[-1]*W[1] + (q/(q^2+1))*G[2] + (-q/(q^2+1))*Gt[2]
635
+ sage: A._dagger_on_basis(I[0,1] * I[1,-1] * I[1,2] * I[2,1])
636
+ (q^4/(q^8+2*q^6-2*q^2-1))*G[1]^2*Gt[1]*Gt[2]
637
+ + (-q^4/(q^8+2*q^6-2*q^2-1))*G[1]*G[2]*Gt[1]^2
638
+ + G[1]*W[-1]*W[2]*Gt[1] + (q/(q^2+1))*G[1]*G[3]*Gt[1]
639
+ + (-q/(q^2+1))*G[1]*Gt[1]*Gt[3]
640
+ sage: [(x, A.dagger(x)) for x in A.some_elements()]
641
+ [(W[0], W[0]), (W[3], W[3]), (W[-1], W[-1]), (W[1], W[1]),
642
+ (W[-2], W[-2]), (G[1], Gt[1]), (G[2], Gt[2]), (Gt[1], G[1]),
643
+ (Gt[2], G[2])]
644
+ """
645
+ def tw(m):
646
+ if m[0] == 0:
647
+ return (2, m[1])
648
+ if m[0] == 1:
649
+ return (1, m[1])
650
+ if m[0] == 2:
651
+ return (0, m[1])
652
+ A = self.algebra_generators()
653
+ return self.prod(A[tw(m)]**e for m,e in reversed(x._sorted_items()))
654
+
655
+ @lazy_attribute
656
+ def sigma(self):
657
+ r"""
658
+ The automorphism `\sigma`.
659
+
660
+ EXAMPLES::
661
+
662
+ sage: A = algebras.AlternatingCentralExtensionQuantumOnsager(QQ)
663
+ sage: G = A.algebra_generators()
664
+ sage: x = A.an_element()^2
665
+ sage: A.sigma(A.sigma(x)) == x
666
+ True
667
+ sage: A.sigma(G[1,-1] * G[1,1]) == A.sigma(G[1,-1]) * A.sigma(G[1,1])
668
+ True
669
+ sage: A.sigma(G[0,2] * G[1,3]) == A.sigma(G[0,2]) * A.sigma(G[1,3])
670
+ True
671
+ """
672
+ return self.module_morphism(self._sigma_on_basis, codomain=self, category=self.category())
673
+
674
+ @lazy_attribute
675
+ def dagger(self):
676
+ r"""
677
+ The antiautomorphism `\dagger`.
678
+
679
+ EXAMPLES::
680
+
681
+ sage: A = algebras.AlternatingCentralExtensionQuantumOnsager(QQ)
682
+ sage: G = A.algebra_generators()
683
+ sage: x = A.an_element()^2
684
+ sage: A.dagger(A.dagger(x)) == x
685
+ True
686
+ sage: A.dagger(G[1,-1] * G[1,1]) == A.dagger(G[1,1]) * A.dagger(G[1,-1])
687
+ True
688
+ sage: A.dagger(G[0,2] * G[1,3]) == A.dagger(G[1,3]) * A.dagger(G[0,2])
689
+ True
690
+ sage: A.dagger(G[2,2] * G[1,3]) == A.dagger(G[1,3]) * A.dagger(G[2,2])
691
+ True
692
+ """
693
+ return self.module_morphism(self._dagger_on_basis, codomain=self)
@@ -0,0 +1,9 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ """
3
+ Quantum Groups
4
+ """
5
+
6
+ from sage.misc.lazy_import import lazy_import
7
+ lazy_import('sage.algebras.quantum_groups.fock_space', 'FockSpace')
8
+ lazy_import('sage.algebras.quantum_groups.quantum_group_gap', 'QuantumGroup')
9
+ del lazy_import