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,623 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.modules
3
+ r"""
4
+ Quantum Oscillator Algebras
5
+
6
+ AUTHORS:
7
+
8
+ - Travis Scrimshaw (2023-12): initial version
9
+ """
10
+
11
+ #*****************************************************************************
12
+ # Copyright (C) 2023 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.misc_c import prod
23
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
24
+ from sage.rings.integer_ring import ZZ
25
+ from sage.categories.algebras import Algebras
26
+ from sage.combinat.free_module import CombinatorialFreeModule
27
+ from sage.categories.cartesian_product import cartesian_product
28
+ from sage.sets.family import Family
29
+ from sage.sets.non_negative_integers import NonNegativeIntegers
30
+
31
+
32
+ class QuantumOscillatorAlgebra(CombinatorialFreeModule):
33
+ r"""
34
+ The quantum oscillator algebra.
35
+
36
+ Let `R` be a commutative algebra and `q \in R` be a unit.
37
+ The *quantum oscillator algebra*, or `q`-oscillator algebra,
38
+ is the unital associative `R`-algebra with generators `a^+`,
39
+ `a^-` and `k^{\pm 1}` satisfying the following relations:
40
+
41
+ .. MATH::
42
+
43
+ k a^{\pm} = q^{\pm 1} a^{\pm} k, \qquad
44
+ a^- a^+ = 1 - q^2 k^2, \qquad
45
+ a^+ a^- = 1 - k^2.
46
+
47
+ INPUT:
48
+
49
+ - ``q`` -- (optional) the parameter `q`
50
+ - ``R`` -- (default: `\QQ(q)`) the base ring that contains ``q``
51
+
52
+ EXAMPLES:
53
+
54
+ We construct the algebra and perform some basic computations::
55
+
56
+ sage: O = algebras.QuantumOscillator()
57
+ sage: ap, am, k, ki = O.algebra_generators()
58
+ sage: q = O.q()
59
+ sage: k^-3 * ap * ki * am^2 * k - q^3 * ap * k^3
60
+ q^5*a-*k^-3 - q^3*a-*k^-1 - q^3*a+*k^3
61
+
62
+ We construct representations of the type `A_1` quantum coordinate ring
63
+ using the quantum oscillator algebra and verify the quantum determinant::
64
+
65
+ sage: pi = matrix([[am, k], [-q*k, ap]]); pi
66
+ [ a- k]
67
+ [-q*k a+]
68
+ sage: pi[0,0] * pi[1,1] - q * pi[0,1] * pi[1,0]
69
+ 1
70
+
71
+ Next, we use this to build representations for type `A_2`::
72
+
73
+ sage: def quantum_det(M):
74
+ ....: n = M.nrows()
75
+ ....: return sum((-q)**sigma.length()
76
+ ....: * prod(M[i,sigma[i]-1] for i in range(n))
77
+ ....: for sigma in Permutations(n))
78
+ sage: def build_repr(wd, gens):
79
+ ....: n = gens[0].nrows()
80
+ ....: ret = gens[wd[0]-1]
81
+ ....: for ind in wd[1:]:
82
+ ....: g = gens[ind-1]
83
+ ....: temp = [[None]*n for _ in range(n)]
84
+ ....: for i in range(n):
85
+ ....: for j in range(n):
86
+ ....: temp[i][j] = sum(tensor([ret[i,k], g[k,j]]) for k in range(n))
87
+ ....: ret = matrix(temp)
88
+ ....: return ret
89
+ sage: pi1 = matrix.block_diagonal(pi, matrix.identity(1)); pi1
90
+ [ a- k| 0]
91
+ [-q*k a+| 0]
92
+ [---------+----]
93
+ [ 0 0| 1]
94
+ sage: pi2 = matrix.block_diagonal(matrix.identity(1), pi); pi2
95
+ [ 1| 0 0]
96
+ [----+---------]
97
+ [ 0| a- k]
98
+ [ 0|-q*k a+]
99
+ sage: quantum_det(pi1) == 1
100
+ True
101
+ sage: quantum_det(pi2) == 1
102
+ True
103
+ sage: pi12 = build_repr([1,2], [pi1, pi2]); pi12
104
+ [ a- # 1 k # a- k # k]
105
+ [-q*k # 1 a+ # a- a+ # k]
106
+ [ 0 -q*1 # k 1 # a+]
107
+ sage: quantum_det(pi12)
108
+ 1 # 1
109
+ sage: pi121 = build_repr([1,2,1], [pi1, pi2]); pi121
110
+ [ a- # 1 # a- - q*k # a- # k a- # 1 # k + k # a- # a+ k # k # 1]
111
+ [-q*k # 1 # a- - q*a+ # a- # k -q*k # 1 # k + a+ # a- # a+ a+ # k # 1]
112
+ [ q^2*1 # k # k -q*1 # k # a+ 1 # a+ # 1]
113
+ sage: quantum_det(pi121)
114
+ 1 # 1 # 1
115
+ sage: pi212 = build_repr([2,1,2], [pi1, pi2]); pi212
116
+ [ 1 # a- # 1 1 # k # a- 1 # k # k]
117
+ [ -q*a- # k # 1 a- # a+ # a- - q*k # 1 # k a- # a+ # k + k # 1 # a+]
118
+ [ q^2*k # k # 1 -q*k # a+ # a- - q*a+ # 1 # k -q*k # a+ # k + a+ # 1 # a+]
119
+ sage: quantum_det(pi212)
120
+ 1 # 1 # 1
121
+
122
+ REFERENCES:
123
+
124
+ - [Kuniba2022]_ Section 3.2
125
+ """
126
+ @staticmethod
127
+ def __classcall_private__(cls, q=None, R=None):
128
+ r"""
129
+ Standardize input to ensure a unique representation.
130
+
131
+ TESTS::
132
+
133
+ sage: O1 = algebras.QuantumOscillator()
134
+ sage: q = PolynomialRing(ZZ, 'q').fraction_field().gen()
135
+ sage: O2 = algebras.QuantumOscillator(q=q)
136
+ sage: O3 = algebras.QuantumOscillator(q, q.parent())
137
+ sage: O1 is O2 and O2 is O3
138
+ True
139
+ """
140
+ if q is None:
141
+ q = PolynomialRing(ZZ, 'q').fraction_field().gen()
142
+ if R is None:
143
+ R = q.parent()
144
+ q = R(q)
145
+
146
+ return super().__classcall__(cls, q, R)
147
+
148
+ def __init__(self, q, R):
149
+ r"""
150
+ Initialize ``self``.
151
+
152
+ EXAMPLES::
153
+
154
+ sage: O = algebras.QuantumOscillator()
155
+ sage: TestSuite(O).run()
156
+ """
157
+ self._q = q
158
+ self._k_poly = PolynomialRing(R, 'k')
159
+ indices = cartesian_product([ZZ, ZZ])
160
+
161
+ cat = Algebras(R).WithBasis()
162
+ CombinatorialFreeModule.__init__(self, R, indices, category=cat)
163
+ self._assign_names(('ap', 'am', 'k', 'ki'))
164
+
165
+ def _repr_(self) -> str:
166
+ r"""
167
+ Return a string representation of ``self``.
168
+
169
+ EXAMPLES::
170
+
171
+ sage: algebras.QuantumOscillator()
172
+ Quantum oscillator algebra with q=q over
173
+ Fraction Field of Univariate Polynomial Ring in q over Integer Ring
174
+ """
175
+ return "Quantum oscillator algebra with q={} over {}".format(
176
+ self._q, self.base_ring())
177
+
178
+ def _latex_(self):
179
+ r"""
180
+ Return a latex representation of ``self``.
181
+
182
+ EXAMPLES::
183
+
184
+ sage: O = algebras.QuantumOscillator()
185
+ sage: latex(O)
186
+ \operatorname{Osc}_{q}
187
+ """
188
+ return "\\operatorname{Osc}_{%s}" % self._q
189
+
190
+ def q(self):
191
+ r"""
192
+ Return the `q` of ``self``.
193
+
194
+ EXAMPLES::
195
+
196
+ sage: O = algebras.QuantumOscillator()
197
+ sage: O.q()
198
+ q
199
+ sage: O = algebras.QuantumOscillator(q=QQ(-5))
200
+ sage: O.q()
201
+ -5
202
+ """
203
+ return self._q
204
+
205
+ @cached_method
206
+ def algebra_generators(self):
207
+ r"""
208
+ Return the algebra generators of ``self``.
209
+
210
+ EXAMPLES::
211
+
212
+ sage: O = algebras.QuantumOscillator()
213
+ sage: O.algebra_generators()
214
+ Finite family {'am': a-, 'ap': a+, 'k': k, 'ki': k^-1}
215
+ """
216
+ d = {'ap': self.monomial((ZZ.one(), ZZ.zero())),
217
+ 'am': self.monomial((-ZZ.one(), ZZ.zero())),
218
+ 'k': self.monomial((ZZ.zero(), ZZ.one())),
219
+ 'ki': self.monomial((ZZ.zero(), -ZZ.one()))}
220
+ return Family(d)
221
+
222
+ @cached_method
223
+ def gens(self) -> tuple:
224
+ r"""
225
+ Return the generators of ``self``.
226
+
227
+ EXAMPLES::
228
+
229
+ sage: O = algebras.QuantumOscillator()
230
+ sage: O.gens()
231
+ (a+, a-, k, k^-1)
232
+ """
233
+ return tuple(self.algebra_generators())
234
+
235
+ @cached_method
236
+ def one_basis(self) -> tuple:
237
+ r"""
238
+ Return the index of the basis element of `1`.
239
+
240
+ EXAMPLES::
241
+
242
+ sage: O = algebras.QuantumOscillator()
243
+ sage: O.one_basis()
244
+ (0, 0)
245
+ """
246
+ return (ZZ.zero(), ZZ.zero())
247
+
248
+ def some_elements(self) -> tuple:
249
+ r"""
250
+ Return some elements of ``self``.
251
+
252
+ EXAMPLES::
253
+
254
+ sage: O = algebras.QuantumOscillator()
255
+ sage: O.some_elements()
256
+ (a+, a-, k, k^-1, 1, a+^3, a-^4, k^2, k^-5, a+*k,
257
+ a-^4*k^-3, 1 + 3*k + 2*a+ + a+*k)
258
+ """
259
+ ap, am, k, ki = self.gens()
260
+ return (ap, am, k, ki, self.one(),
261
+ ap**3, am**4, k**2, ki**5, ap*k, am**4*ki**3,
262
+ self.an_element())
263
+
264
+ def fock_space_representation(self):
265
+ r"""
266
+ Return the Fock space representation of ``self``.
267
+
268
+ .. SEEALSO::
269
+
270
+ :class:`~sage.algebras.quantum_oscillator.FockSpaceRepresentation`
271
+
272
+ EXAMPLES::
273
+
274
+ sage: O = algebras.QuantumOscillator()
275
+ sage: O.fock_space_representation()
276
+ Fock space representation of Quantum oscillator algebra with q=q
277
+ over Fraction Field of Univariate Polynomial Ring in q over Integer Ring
278
+ """
279
+ return FockSpaceRepresentation(self)
280
+
281
+ def _repr_term(self, m) -> str:
282
+ r"""
283
+ Return a string representation of the basis element indexed by ``m``.
284
+
285
+ EXAMPLES::
286
+
287
+ sage: O = algebras.QuantumOscillator()
288
+ sage: O._repr_term((1, 3))
289
+ 'a+*k^3'
290
+ sage: O._repr_term((-1, 1))
291
+ 'a-*k'
292
+ sage: O._repr_term((5, 0))
293
+ 'a+^5'
294
+ sage: O._repr_term((-4, -2))
295
+ 'a-^4*k^-2'
296
+ sage: O._repr_term((0, -4))
297
+ 'k^-4'
298
+ sage: O._repr_term((0, 0))
299
+ '1'
300
+
301
+ sage: O(5)
302
+ 5
303
+ """
304
+ a, k = m
305
+
306
+ astr = ''
307
+ if a == 1:
308
+ astr = 'a+'
309
+ elif a > 1:
310
+ astr = 'a+^{}'.format(a)
311
+ elif a == -1:
312
+ astr = 'a-'
313
+ elif a < -1:
314
+ astr = 'a-^{}'.format(-a)
315
+
316
+ kstr = ''
317
+ if k == 1:
318
+ kstr = 'k'
319
+ elif k != 0:
320
+ kstr = 'k^{}'.format(k)
321
+
322
+ if astr:
323
+ if kstr:
324
+ return astr + '*' + kstr
325
+ return astr
326
+ if kstr:
327
+ return kstr
328
+ return '1'
329
+
330
+ def _latex_term(self, m):
331
+ r"""
332
+ Return a latex representation for the basis element indexed by ``m``.
333
+
334
+ EXAMPLES::
335
+
336
+ sage: O = algebras.QuantumOscillator()
337
+ sage: O._latex_term((1, 3))
338
+ 'a^+ k^{3}'
339
+ sage: O._latex_term((-1, 1))
340
+ 'a^- k'
341
+ sage: O._latex_term((5, 0))
342
+ '(a^+)^{5}'
343
+ sage: O._latex_term((-4, -2))
344
+ '(a^-)^{4} k^{-2}'
345
+ sage: O._latex_term((0, -4))
346
+ 'k^{-4}'
347
+ sage: O._latex_term((0, 0))
348
+ '1'
349
+
350
+ sage: latex(O(5))
351
+ 5
352
+ """
353
+ a, k = m
354
+
355
+ astr = ''
356
+ if a == 1:
357
+ astr = 'a^+'
358
+ elif a > 1:
359
+ astr = '(a^+)^{{{}}}'.format(a)
360
+ elif a == -1:
361
+ astr = 'a^-'
362
+ elif a < -1:
363
+ astr = '(a^-)^{{{}}}'.format(-a)
364
+
365
+ kstr = ''
366
+ if k == 1:
367
+ kstr = 'k'
368
+ elif k != 0:
369
+ kstr = 'k^{{{}}}'.format(k)
370
+
371
+ if astr:
372
+ if kstr:
373
+ return astr + ' ' + kstr
374
+ return astr
375
+ if kstr:
376
+ return kstr
377
+ return '1'
378
+
379
+ @cached_method
380
+ def product_on_basis(self, ml, mr):
381
+ r"""
382
+ Return the product of the basis elements indexed by ``ml`` and ``mr``.
383
+
384
+ EXAMPLES::
385
+
386
+ sage: O = algebras.QuantumOscillator()
387
+ sage: ap, am, k, ki = O.algebra_generators()
388
+ sage: O.product_on_basis((-2, 3), (-4, 5))
389
+ 1/q^12*a-^6*k^8
390
+ sage: O.product_on_basis((2, 3), (4, -5))
391
+ q^12*a+^6*k^-2
392
+ sage: O.product_on_basis((2, 3), (0, -3))
393
+ a+^2
394
+ sage: k^5 * ki^10
395
+ k^-5
396
+ sage: k^10 * ki^5
397
+ k^5
398
+ sage: ap^3 * k^5
399
+ a+^3*k^5
400
+ sage: am^3 * k^5
401
+ a-^3*k^5
402
+ sage: k^5 * ap^3
403
+ q^15*a+^3*k^5
404
+ sage: k^5 * am^3
405
+ 1/q^15*a-^3*k^5
406
+ sage: ki^5 * ap^3
407
+ 1/q^15*a+^3*k^-5
408
+ sage: ki^5 * am^3
409
+ q^15*a-^3*k^-5
410
+ sage: ap * am
411
+ 1 - k^2
412
+ sage: am * ap
413
+ 1 - q^2*k^2
414
+
415
+ sage: (ap + am + k + ki)^2
416
+ a-^2 + (q+1)*a-*k^-1 + ((q+1)/q)*a-*k + k^-2 + 4 - q^2*k^2
417
+ + ((q+1)/q)*a+*k^-1 + (q+1)*a+*k + a+^2
418
+
419
+ sage: (ap)^3 * (am)^5
420
+ a-^2 + ((-q^4-q^2-1)/q^8)*a-^2*k^2 + ((q^4+q^2+1)/q^14)*a-^2*k^4 - 1/q^18*a-^2*k^6
421
+ sage: (ap)^5 * (am)^3
422
+ a+^2 + ((-q^4-q^2-1)/q^4)*a+^2*k^2 + ((q^4+q^2+1)/q^6)*a+^2*k^4 - 1/q^6*a+^2*k^6
423
+ sage: (am)^3 * (ap)^5
424
+ a+^2 + (-q^10-q^8-q^6)*a+^2*k^2 + (q^18+q^16+q^14)*a+^2*k^4 - q^24*a+^2*k^6
425
+ sage: (am)^5 * (ap)^3
426
+ a-^2 + (-q^6-q^4-q^2)*a-^2*k^2 + (q^10+q^8+q^6)*a-^2*k^4 - q^12*a-^2*k^6
427
+ """
428
+ q = self._q
429
+ k = self._k_poly.gen()
430
+ al, kl = ml
431
+ ar, kr = mr
432
+ coeff = q ** (kl * ar)
433
+ if (al <= 0 and ar <= 0) or (al >= 0 and ar >= 0):
434
+ return self.element_class(self, {(al + ar, kl + kr): coeff})
435
+ # now al and ar have different signs
436
+ if al < 0: # a^- * a^+ case
437
+ kp = self._k_poly.prod(1 - q**(2*(ar-i)) * k**2 for i in range(min(-al,ar)))
438
+ else: # a^+ * a^- case
439
+ kp = self._k_poly.prod(1 - q**(2*(ar+i)) * k**2 for i in range(1,min(al,-ar)+1))
440
+ a = al + ar
441
+ return self.element_class(self, {(a, kl+kr+i): c * coeff for i, c in enumerate(kp) if c})
442
+
443
+ class Element(CombinatorialFreeModule.Element):
444
+ def __invert__(self):
445
+ r"""
446
+ Return the inverse if ``self`` is a basis element.
447
+
448
+ EXAMPLES::
449
+
450
+ sage: O = algebras.QuantumOscillator()
451
+ sage: ap, am, k, ki = O.algebra_generators()
452
+ sage: k.inverse()
453
+ k^-1
454
+ sage: ~k^5
455
+ k^-5
456
+ sage: ~ki^2
457
+ k^2
458
+ sage: O.zero().inverse()
459
+ Traceback (most recent call last):
460
+ ...
461
+ ZeroDivisionError
462
+ sage: ~ap
463
+ Traceback (most recent call last):
464
+ ...
465
+ NotImplementedError: only implemented for monomials in k
466
+ sage: ~(k + ki)
467
+ Traceback (most recent call last):
468
+ ...
469
+ NotImplementedError: only implemented for monomials in k
470
+ """
471
+ if not self:
472
+ raise ZeroDivisionError
473
+ if len(self) != 1 or self.leading_support()[0] != 0:
474
+ raise NotImplementedError("only implemented for monomials in k")
475
+
476
+ ((a, k), coeff), = list(self._monomial_coefficients.items())
477
+ O = self.parent()
478
+ return O.element_class(O, {(a, -k): coeff.inverse_of_unit()})
479
+
480
+
481
+ class FockSpaceRepresentation(CombinatorialFreeModule):
482
+ r"""
483
+ The unique Fock space representation of the
484
+ :class:`~sage.algebras.quantum_oscillator.QuantumOscillatorAlgebra`.
485
+ """
486
+ def __init__(self, oscillator_algebra):
487
+ r"""
488
+ Initialize ``self``.
489
+
490
+ EXAMPLES::
491
+
492
+ sage: O = algebras.QuantumOscillator()
493
+ sage: F = O.fock_space_representation()
494
+ sage: TestSuite(F).run()
495
+ """
496
+ self._O = oscillator_algebra
497
+ ind = NonNegativeIntegers()
498
+ CombinatorialFreeModule.__init__(self, oscillator_algebra.base_ring(), ind, prefix='', bracket=['|', '>'],
499
+ latex_bracket=[r'\lvert', r'\rangle'])
500
+
501
+ def _test_representation(self, **options):
502
+ r"""
503
+ Test that ``self`` is a representation of the quantum
504
+ oscillator algebra.
505
+
506
+ EXAMPLES::
507
+
508
+ sage: O = algebras.QuantumOscillator(q=GF(7)(3))
509
+ sage: F = O.fock_space_representation()
510
+ sage: F._test_representation()
511
+ """
512
+ tester = self._tester(**options)
513
+ S = self._O.some_elements()
514
+ num_trials = 0
515
+ from itertools import product
516
+ for a, b in product(S, repeat=2):
517
+ for elt in tester.some_elements():
518
+ num_trials += 1
519
+ if num_trials > tester._max_runs:
520
+ return
521
+ tester.assertEqual((a*b)*elt, a*(b*elt))
522
+
523
+ def _repr_(self) -> str:
524
+ r"""
525
+ Return a string representation of ``self``.
526
+
527
+ EXAMPLES::
528
+
529
+ sage: O = algebras.QuantumOscillator(q=GF(5)(2))
530
+ sage: O.fock_space_representation()
531
+ Fock space representation of Quantum oscillator algebra
532
+ with q=2 over Finite Field of size 5
533
+ """
534
+ return "Fock space representation of {}".format(self._O)
535
+
536
+ def _latex_(self):
537
+ r"""
538
+ Return a latex representation of ``self``.
539
+
540
+ EXAMPLES::
541
+
542
+ sage: O = algebras.QuantumOscillator()
543
+ sage: F = O.fock_space_representation()
544
+ sage: latex(F)
545
+ \mathfrak{F}_{q}
546
+ """
547
+ return r"\mathfrak{{F}}_{{{}}}".format(self._O._q)
548
+
549
+ def vacuum(self):
550
+ r"""
551
+ Return the vacuum element `|0\rangle` of ``self``.
552
+
553
+ EXAMPLES::
554
+
555
+ sage: O = algebras.QuantumOscillator()
556
+ sage: F = O.fock_space_representation()
557
+ sage: F.vacuum()
558
+ |0>
559
+ """
560
+ return self.basis()[0]
561
+
562
+ def some_elements(self):
563
+ r"""
564
+ Return some elements of ``self``.
565
+
566
+ EXAMPLES::
567
+
568
+ sage: O = algebras.QuantumOscillator()
569
+ sage: F = O.fock_space_representation()
570
+ sage: F.some_elements()
571
+ (|0>, |1>, |52>, |0> + 2*|1> + 3*|2> + |42>)
572
+ """
573
+ B = self.basis()
574
+ return (B[0], B[1], B[52], self.an_element())
575
+
576
+ class Element(CombinatorialFreeModule.Element):
577
+ def _acted_upon_(self, scalar, self_on_left=True):
578
+ r"""
579
+ Return the action of ``scalar`` on ``self``.
580
+
581
+ EXAMPLES::
582
+
583
+ sage: O = algebras.QuantumOscillator()
584
+ sage: ap, am, k, ki = O.gens()
585
+ sage: F = O.fock_space_representation()
586
+ sage: B = F.basis()
587
+ sage: [ap * B[i] for i in range(3)]
588
+ [|1>, |2>, |3>]
589
+ sage: [am * B[i] for i in range(3)]
590
+ [0, (-q^2+1)*|0>, (-q^4+1)*|1>]
591
+ sage: [k * B[i] for i in range(3)]
592
+ [|0>, q*|1>, q^2*|2>]
593
+ sage: [ki * B[i] for i in range(3)]
594
+ [|0>, 1/q*|1>, 1/q^2*|2>]
595
+ sage: (am)^3 * B[5]
596
+ (-q^24+q^18+q^16+q^14-q^10-q^8-q^6+1)*|2>
597
+ sage: (7*k^3 + am) * (B[0] + B[1] + B[2])
598
+ (-q^2+8)*|0> + (-q^4+7*q^3+1)*|1> + 7*q^6*|2>
599
+ sage: 5 * (B[2] + B[3])
600
+ 5*|2> + 5*|3>
601
+ """
602
+ # Check for scalars first
603
+ ret = super()._acted_upon_(scalar, self_on_left)
604
+ if ret is not None:
605
+ return ret
606
+ P = self.parent()
607
+ if self_on_left or scalar not in P._O: # needs to be a left Osc-action
608
+ return None
609
+ scalar = P._O(scalar)
610
+ q = P._O._q
611
+
612
+ ret = []
613
+ for om, oc in scalar:
614
+ a, k = om
615
+ for fm, fc in self:
616
+ if fm < -a: # the result will be 0
617
+ continue
618
+ c = q ** (fm*k)
619
+ if a < 0:
620
+ c *= prod(1 - q**(2*(fm-i)) for i in range(-a))
621
+ if c:
622
+ ret.append((fm+a, oc * fc * c))
623
+ return P.sum_of_terms(ret)
@@ -0,0 +1,20 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.libs.singular sage.modules
3
+
4
+ ############################################################
5
+ # Backwards compatible unpickling
6
+ ############################################################
7
+
8
+ def unpickle_QuaternionAlgebra_v0(*key):
9
+ """
10
+ The `0`-th version of pickling for quaternion algebras.
11
+
12
+ EXAMPLES::
13
+
14
+ sage: t = (QQ, -5, -19, ('i', 'j', 'k'))
15
+ sage: import sage.algebras.quaternion_algebra
16
+ sage: sage.algebras.quaternion_algebra.unpickle_QuaternionAlgebra_v0(*t)
17
+ Quaternion Algebra (-5, -19) with base ring Rational Field
18
+ """
19
+ from .quatalg.quaternion_algebra import QuaternionAlgebra
20
+ return QuaternionAlgebra(*key)
@@ -0,0 +1,55 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.libs.singular sage.modules
3
+
4
+ #######################################################################
5
+ # Backward compatible unpickle functions
6
+ #######################################################################
7
+
8
+ from .quatalg.quaternion_algebra_element import (QuaternionAlgebraElement_generic,
9
+ QuaternionAlgebraElement_rational_field,
10
+ QuaternionAlgebraElement_number_field)
11
+
12
+
13
+ def unpickle_QuaternionAlgebraElement_generic_v0(*args):
14
+ """
15
+ EXAMPLES::
16
+
17
+ sage: K.<X> = QQ[]
18
+ sage: Q.<i,j,k> = QuaternionAlgebra(Frac(K), -5,-19); z = 2/3 + i*X - X^2*j + X^3*k
19
+ sage: f, t = z.__reduce__()
20
+ sage: import sage.algebras.quaternion_algebra_element
21
+ sage: sage.algebras.quaternion_algebra_element.unpickle_QuaternionAlgebraElement_generic_v0(*t)
22
+ 2/3 + X*i + (-X^2)*j + X^3*k
23
+ sage: sage.algebras.quaternion_algebra_element.unpickle_QuaternionAlgebraElement_generic_v0(*t) == z
24
+ True
25
+ """
26
+ return QuaternionAlgebraElement_generic(*args)
27
+
28
+
29
+ def unpickle_QuaternionAlgebraElement_rational_field_v0(*args):
30
+ """
31
+ EXAMPLES::
32
+
33
+ sage: Q.<i,j,k> = QuaternionAlgebra(-5,-19); a = 2/3 + i*5/7 - j*2/5 +19/2
34
+ sage: f, t = a.__reduce__()
35
+ sage: import sage.algebras.quaternion_algebra_element
36
+ sage: sage.algebras.quaternion_algebra_element.unpickle_QuaternionAlgebraElement_rational_field_v0(*t)
37
+ 61/6 + 5/7*i - 2/5*j
38
+ """
39
+ return QuaternionAlgebraElement_rational_field(*args)
40
+
41
+
42
+ def unpickle_QuaternionAlgebraElement_number_field_v0(*args):
43
+ """
44
+ EXAMPLES::
45
+
46
+ sage: # needs sage.symbolic
47
+ sage: K.<a> = QQ[2^(1/3)]; Q.<i,j,k> = QuaternionAlgebra(K, -3, a); z = i + j
48
+ sage: f, t = z.__reduce__()
49
+ sage: import sage.algebras.quaternion_algebra_element
50
+ sage: sage.algebras.quaternion_algebra_element.unpickle_QuaternionAlgebraElement_number_field_v0(*t)
51
+ i + j
52
+ sage: sage.algebras.quaternion_algebra_element.unpickle_QuaternionAlgebraElement_number_field_v0(*t) == z
53
+ True
54
+ """
55
+ return QuaternionAlgebraElement_number_field(*args)