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,540 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.graphs sage.modules
3
+ r"""
4
+ Rigged configurations of `\mathcal{B}(\infty)`
5
+
6
+ AUTHORS:
7
+
8
+ - Travis Scrimshaw (2013-04-16): initial version
9
+ """
10
+
11
+ # ****************************************************************************
12
+ # Copyright (C) 2013 Travis Scrimshaw <tscrim@ucdavis.edu>
13
+ #
14
+ # Distributed under the terms of the GNU General Public License (GPL)
15
+ #
16
+ # This code is distributed in the hope that it will be useful,
17
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
18
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19
+ # General Public License for more details.
20
+ #
21
+ # The full text of the GPL is available at:
22
+ #
23
+ # https://www.gnu.org/licenses/
24
+ # ****************************************************************************
25
+
26
+ from sage.misc.lazy_attribute import lazy_attribute
27
+ from sage.structure.unique_representation import UniqueRepresentation
28
+ from sage.structure.parent import Parent
29
+ from sage.categories.highest_weight_crystals import HighestWeightCrystals
30
+ from sage.categories.homset import Hom
31
+ from sage.combinat.root_system.cartan_type import CartanType
32
+ from sage.combinat.rigged_configurations.rigged_configuration_element import (
33
+ RiggedConfigurationElement, RCNonSimplyLacedElement)
34
+ from sage.combinat.rigged_configurations.rigged_configurations import RiggedConfigurations
35
+ from sage.combinat.rigged_configurations.rigged_partition import RiggedPartition
36
+
37
+ # Note on implementation, this class is used for simply-laced types only
38
+
39
+
40
+ class InfinityCrystalOfRiggedConfigurations(UniqueRepresentation, Parent):
41
+ r"""
42
+ Rigged configuration model for `\mathcal{B}(\infty)`.
43
+
44
+ The crystal is generated by the empty rigged configuration with the same
45
+ crystal structure given by the :class:`highest weight model
46
+ <sage.combinat.rigged_configurations.rc_crystal.CrystalOfRiggedConfigurations>`
47
+ except we remove the condition that the resulting rigged configuration
48
+ needs to be valid when applying `f_a`.
49
+
50
+ INPUT:
51
+
52
+ - ``cartan_type`` -- a Cartan type
53
+
54
+ EXAMPLES:
55
+
56
+ For simplicity, we display all of the rigged configurations
57
+ horizontally::
58
+
59
+ sage: RiggedConfigurations.options(display='horizontal')
60
+
61
+ We begin with a simply-laced finite type::
62
+
63
+ sage: RC = crystals.infinity.RiggedConfigurations(['A', 3]); RC
64
+ The infinity crystal of rigged configurations of type ['A', 3]
65
+
66
+ sage: RC.options(display='horizontal')
67
+
68
+ sage: mg = RC.highest_weight_vector(); mg
69
+ (/) (/) (/)
70
+ sage: elt = mg.f_string([2,1,3,2]); elt
71
+ 0[ ]0 -2[ ]-1 0[ ]0
72
+ -2[ ]-1
73
+ sage: elt.e(1)
74
+ sage: elt.e(3)
75
+ sage: mg.f_string([2,1,3,2]).e(2)
76
+ -1[ ]-1 0[ ]1 -1[ ]-1
77
+ sage: mg.f_string([2,3,2,1,3,2])
78
+ 0[ ]0 -3[ ][ ]-1 -1[ ][ ]-1
79
+ -2[ ]-1
80
+
81
+ Next we consider a non-simply-laced finite type::
82
+
83
+ sage: RC = crystals.infinity.RiggedConfigurations(['C', 3])
84
+ sage: mg = RC.highest_weight_vector()
85
+ sage: mg.f_string([2,1,3,2])
86
+ 0[ ]0 -1[ ]0 0[ ]0
87
+ -1[ ]-1
88
+ sage: mg.f_string([2,3,2,1,3,2])
89
+ 0[ ]-1 -1[ ][ ]-1 -1[ ][ ]0
90
+ -1[ ]0
91
+
92
+ We can construct rigged configurations using a diagram folding of
93
+ a simply-laced type. This yields an equivalent but distinct crystal::
94
+
95
+ sage: vct = CartanType(['C', 3]).as_folding()
96
+ sage: VRC = crystals.infinity.RiggedConfigurations(vct)
97
+ sage: mg = VRC.highest_weight_vector()
98
+ sage: mg.f_string([2,1,3,2])
99
+ 0[ ]0 -2[ ]-1 0[ ]0
100
+ -2[ ]-1
101
+ sage: mg.f_string([2,3,2,1,3,2])
102
+ -1[ ]-1 -2[ ][ ][ ]-1 -1[ ][ ]0
103
+
104
+ sage: G = RC.subcrystal(max_depth=5).digraph()
105
+ sage: VG = VRC.subcrystal(max_depth=5).digraph()
106
+ sage: G.is_isomorphic(VG, edge_labels=True)
107
+ True
108
+
109
+ We can also construct `B(\infty)` using rigged configurations in
110
+ affine types::
111
+
112
+ sage: RC = crystals.infinity.RiggedConfigurations(['A', 3, 1])
113
+ sage: mg = RC.highest_weight_vector()
114
+ sage: mg.f_string([0,1,2,3,0,1,3])
115
+ -1[ ]0 -1[ ]-1 1[ ]1 -1[ ][ ]-1
116
+ -1[ ]0 -1[ ]-1
117
+
118
+ sage: RC = crystals.infinity.RiggedConfigurations(['C', 3, 1])
119
+ sage: mg = RC.highest_weight_vector()
120
+ sage: mg.f_string([1,2,3,0,1,2,3,3,0])
121
+ -2[ ][ ]-1 0[ ]1 0[ ]0 -4[ ][ ][ ]-2
122
+ 0[ ]0 0[ ]-1
123
+
124
+ sage: RC = crystals.infinity.RiggedConfigurations(['A', 6, 2])
125
+ sage: mg = RC.highest_weight_vector()
126
+ sage: mg.f_string([1,2,3,0,1,2,3,3,0])
127
+ 0[ ]-1 0[ ]1 0[ ]0 -4[ ][ ][ ]-2
128
+ 0[ ]-1 0[ ]1 0[ ]-1
129
+
130
+ We reset the global options::
131
+
132
+ sage: RiggedConfigurations.options._reset()
133
+ """
134
+ @staticmethod
135
+ def __classcall_private__(cls, cartan_type):
136
+ r"""
137
+ Normalize the input arguments to ensure unique representation.
138
+
139
+ EXAMPLES::
140
+
141
+ sage: RC1 = crystals.infinity.RiggedConfigurations(CartanType(['A',3]))
142
+ sage: RC2 = crystals.infinity.RiggedConfigurations(['A',3])
143
+ sage: RC2 is RC1
144
+ True
145
+ """
146
+ from sage.combinat.root_system.type_folded import CartanTypeFolded
147
+ if isinstance(cartan_type, CartanTypeFolded):
148
+ return InfinityCrystalOfNonSimplyLacedRC(cartan_type)
149
+
150
+ cartan_type = CartanType(cartan_type)
151
+ return super().__classcall__(cls, cartan_type)
152
+
153
+ def __init__(self, cartan_type):
154
+ r"""
155
+ Initialize ``self``.
156
+
157
+ EXAMPLES::
158
+
159
+ sage: RC = crystals.infinity.RiggedConfigurations(['A', 2])
160
+ sage: TestSuite(RC).run()
161
+ sage: RC = crystals.infinity.RiggedConfigurations(['A', 2, 1])
162
+ sage: TestSuite(RC).run() # long time
163
+ sage: RC = crystals.infinity.RiggedConfigurations(['C', 2])
164
+ sage: TestSuite(RC).run() # long time
165
+ sage: RC = crystals.infinity.RiggedConfigurations(['C', 2, 1])
166
+ sage: TestSuite(RC).run() # long time
167
+ """
168
+ self._cartan_type = cartan_type
169
+ Parent.__init__(self, category=HighestWeightCrystals().Infinite())
170
+ self._rc_index = self._cartan_type.index_set()
171
+ self._rc_index_inverse = {i: ii for ii, i in enumerate(self._rc_index)}
172
+ # We store the Cartan matrix for the vacancy number
173
+ # calculations for speed
174
+ self._cartan_matrix = self._cartan_type.cartan_matrix()
175
+ self.module_generators = (self.element_class(self, rigging_list=[[]]*cartan_type.rank()),)
176
+
177
+ options = RiggedConfigurations.options
178
+
179
+ def _repr_(self):
180
+ """
181
+ Return a string representation of ``self``.
182
+
183
+ EXAMPLES::
184
+
185
+ sage: crystals.infinity.RiggedConfigurations(['A', 3])
186
+ The infinity crystal of rigged configurations of type ['A', 3]
187
+ """
188
+ return "The infinity crystal of rigged configurations of type {}".format(self._cartan_type)
189
+
190
+ def _element_constructor_(self, lst=None, **options):
191
+ """
192
+ Construct an element of ``self`` from ``lst``.
193
+
194
+ EXAMPLES::
195
+
196
+ sage: RC = crystals.infinity.RiggedConfigurations(['A', 3, 1])
197
+ sage: ascii_art(RC(partition_list=[[1,1]]*4, rigging_list=[[1,1], [0,0], [0,0], [-1,-1]]))
198
+ 0[ ]1 0[ ]0 0[ ]0 0[ ]-1
199
+ 0[ ]1 0[ ]0 0[ ]0 0[ ]-1
200
+
201
+ sage: RC = crystals.infinity.RiggedConfigurations(['C', 3])
202
+ sage: ascii_art(RC(partition_list=[[1],[1,1],[1]], rigging_list=[[0],[0,-1],[0]]))
203
+ 0[ ]0 -1[ ]0 0[ ]0
204
+ -1[ ]-1
205
+
206
+ TESTS:
207
+
208
+ Check that :issue:`17054` is fixed::
209
+
210
+ sage: RC = RiggedConfigurations(['A',2,1], [[1,1]]*4 + [[2,1]]*4)
211
+ sage: B = crystals.infinity.RiggedConfigurations(['A',2])
212
+ sage: x = RC().f_string([2,2,1,1,2,1,2,1])
213
+ sage: ascii_art(x)
214
+ 0[ ][ ][ ][ ]-4 0[ ][ ][ ][ ]0
215
+ sage: ascii_art(B(x))
216
+ -4[ ][ ][ ][ ]-4 -4[ ][ ][ ][ ]0
217
+ sage: x == RC().f_string([2,2,1,1,2,1,2,1])
218
+ True
219
+ """
220
+ if isinstance(lst, RiggedConfigurationElement):
221
+ lst = [p._clone() for p in lst] # Make a deep copy
222
+ elif isinstance(lst, list) and bool(lst) and isinstance(lst[0], RiggedPartition):
223
+ lst = [p._clone() for p in lst] # Make a deep copy
224
+ return self.element_class(self, lst, **options)
225
+
226
+ def _coerce_map_from_(self, P):
227
+ """
228
+ Return ``True`` or the coerce map from ``P`` if a map exists.
229
+
230
+ EXAMPLES::
231
+
232
+ sage: T = crystals.infinity.Tableaux(['A',3])
233
+ sage: RC = crystals.infinity.RiggedConfigurations(['A',3])
234
+ sage: RC._coerce_map_from_(T)
235
+ Crystal Isomorphism morphism:
236
+ From: The infinity crystal of tableaux of type ['A', 3]
237
+ To: The infinity crystal of rigged configurations of type ['A', 3]
238
+ """
239
+ if self.cartan_type().is_finite():
240
+ from sage.combinat.crystals.infinity_crystals import InfinityCrystalOfTableaux
241
+ if (isinstance(P, InfinityCrystalOfTableaux)
242
+ and self.cartan_type().is_simply_laced()):
243
+ from sage.combinat.rigged_configurations.bij_infinity import FromTableauIsomorphism
244
+ return FromTableauIsomorphism(Hom(P, self))
245
+ return super()._coerce_map_from_(P)
246
+
247
+ def _calc_vacancy_number(self, partitions, a, i, **options):
248
+ r"""
249
+ Calculate the vacancy number `p_i^{(a)}(\nu)` in ``self``.
250
+
251
+ This assumes that `\gamma_a = 1` for all `a` and `(\alpha_a \mid
252
+ \alpha_b ) = A_{ab}`.
253
+
254
+ INPUT:
255
+
256
+ - ``partitions`` -- the list of rigged partitions we are using
257
+
258
+ - ``a`` -- the rigged partition index
259
+
260
+ - ``i`` -- the row length
261
+
262
+ TESTS::
263
+
264
+ sage: RC = crystals.infinity.RiggedConfigurations(['A', 4])
265
+ sage: elt = RC(partition_list=[[1], [1], [], []])
266
+ sage: RC._calc_vacancy_number(elt.nu(), 0, 1)
267
+ -1
268
+ """
269
+ if i == float('inf'):
270
+ return -sum(self._cartan_matrix[a, b] * sum(nu)
271
+ for b, nu in enumerate(partitions))
272
+
273
+ return -sum(self._cartan_matrix[a, b] * nu.get_num_cells_to_column(i)
274
+ for b, nu in enumerate(partitions))
275
+
276
+ # FIXME: Remove this method!!!
277
+ def weight_lattice_realization(self):
278
+ """
279
+ Return the weight lattice realization used to express the weights
280
+ of elements in ``self``.
281
+
282
+ EXAMPLES::
283
+
284
+ sage: RC = crystals.infinity.RiggedConfigurations(['A', 2, 1])
285
+ sage: RC.weight_lattice_realization()
286
+ Extended weight lattice of the Root system of type ['A', 2, 1]
287
+ """
288
+ R = self._cartan_type.root_system()
289
+ if self._cartan_type.is_affine():
290
+ return R.weight_lattice(extended=True)
291
+ if self._cartan_type.is_finite() and R.ambient_space():
292
+ return R.ambient_space()
293
+ return R.weight_lattice()
294
+
295
+ class Element(RiggedConfigurationElement):
296
+ r"""
297
+ A rigged configuration in `\mathcal{B}(\infty)` in simply-laced types.
298
+
299
+ TESTS::
300
+
301
+ sage: RC = crystals.infinity.RiggedConfigurations(['A', 3, 1])
302
+ sage: elt = RC(partition_list=[[1,1]]*4, rigging_list=[[1,1], [0,0], [0,0], [-1,-1]])
303
+ sage: TestSuite(elt).run()
304
+ """
305
+
306
+ def weight(self):
307
+ """
308
+ Return the weight of ``self``.
309
+
310
+ EXAMPLES::
311
+
312
+ sage: RC = crystals.infinity.RiggedConfigurations(['A', 3, 1])
313
+ sage: elt = RC(partition_list=[[1,1]]*4, rigging_list=[[1,1], [0,0], [0,0], [-1,-1]])
314
+ sage: elt.weight()
315
+ -2*delta
316
+ """
317
+ P = self.parent().weight_lattice_realization()
318
+ alpha = list(P.simple_roots())
319
+ return -sum(sum(x) * alpha[i] for i, x in enumerate(self))
320
+
321
+
322
+ class InfinityCrystalOfNonSimplyLacedRC(InfinityCrystalOfRiggedConfigurations):
323
+ r"""
324
+ Rigged configurations for `\mathcal{B}(\infty)` in non-simply-laced types.
325
+ """
326
+
327
+ def __init__(self, vct):
328
+ """
329
+ Initialize ``self``.
330
+
331
+ EXAMPLES::
332
+
333
+ sage: vct = CartanType(['C', 2]).as_folding()
334
+ sage: RC = crystals.infinity.RiggedConfigurations(vct)
335
+ sage: TestSuite(RC).run() # long time
336
+ sage: vct = CartanType(['C', 2, 1]).as_folding()
337
+ sage: RC = crystals.infinity.RiggedConfigurations(vct)
338
+ sage: TestSuite(RC).run() # long time
339
+ """
340
+ self._folded_ct = vct
341
+ InfinityCrystalOfRiggedConfigurations.__init__(self, vct._cartan_type)
342
+
343
+ def _coerce_map_from_(self, P):
344
+ """
345
+ Return ``True`` or the coerce map from ``P`` if a map exists.
346
+
347
+ EXAMPLES::
348
+
349
+ sage: T = crystals.infinity.Tableaux(['C',3])
350
+ sage: vct = CartanType(['C',3]).as_folding()
351
+ sage: RC = crystals.infinity.RiggedConfigurations(vct)
352
+ sage: RC._coerce_map_from_(T)
353
+ Crystal Isomorphism morphism:
354
+ From: The infinity crystal of tableaux of type ['C', 3]
355
+ To: The infinity crystal of rigged configurations of type ['C', 3]
356
+ """
357
+ if self.cartan_type().is_finite():
358
+ from sage.combinat.crystals.infinity_crystals import InfinityCrystalOfTableaux
359
+ if isinstance(P, InfinityCrystalOfTableaux):
360
+ from sage.combinat.rigged_configurations.bij_infinity import FromTableauIsomorphism
361
+ return FromTableauIsomorphism(Hom(P, self))
362
+ return super()._coerce_map_from_(P)
363
+
364
+ def _calc_vacancy_number(self, partitions, a, i):
365
+ r"""
366
+ Calculate the vacancy number `p_i^{(a)}(\nu)` in ``self``.
367
+
368
+ INPUT:
369
+
370
+ - ``partitions`` -- the list of rigged partitions we are using
371
+
372
+ - ``a`` -- the rigged partition index
373
+
374
+ - ``i`` -- the row length
375
+
376
+ TESTS::
377
+
378
+ sage: La = RootSystem(['C', 2]).weight_lattice().fundamental_weights()
379
+ sage: vct = CartanType(['C', 2]).as_folding()
380
+ sage: RC = crystals.RiggedConfigurations(vct, La[1])
381
+ sage: elt = RC(partition_list=[[1], [1]])
382
+ sage: RC._calc_vacancy_number(elt.nu(), 0, 1)
383
+ 0
384
+ sage: RC._calc_vacancy_number(elt.nu(), 1, 1)
385
+ -1
386
+ """
387
+ I = self.index_set()
388
+ ia = I[a]
389
+ vac_num = 0
390
+
391
+ if i == float('inf'):
392
+ return -sum(self._cartan_matrix[a, b] * sum(nu)
393
+ for b, nu in enumerate(partitions))
394
+
395
+ gamma = self._folded_ct.scaling_factors()
396
+ g = gamma[ia]
397
+ for b in range(self._cartan_matrix.ncols()):
398
+ ib = I[b]
399
+ q = partitions[b].get_num_cells_to_column(g * i, gamma[ib])
400
+ vac_num -= self._cartan_matrix[a, b] * q // gamma[ib]
401
+
402
+ return vac_num
403
+
404
+ @lazy_attribute
405
+ def virtual(self):
406
+ """
407
+ Return the corresponding virtual crystal.
408
+
409
+ EXAMPLES::
410
+
411
+ sage: vct = CartanType(['C', 3]).as_folding()
412
+ sage: RC = crystals.infinity.RiggedConfigurations(vct)
413
+ sage: RC
414
+ The infinity crystal of rigged configurations of type ['C', 3]
415
+ sage: RC.virtual
416
+ The infinity crystal of rigged configurations of type ['A', 5]
417
+ """
418
+ return InfinityCrystalOfRiggedConfigurations(self._folded_ct._folding)
419
+
420
+ def to_virtual(self, rc):
421
+ """
422
+ Convert ``rc`` into a rigged configuration in the virtual crystal.
423
+
424
+ INPUT:
425
+
426
+ - ``rc`` -- a rigged configuration element
427
+
428
+ EXAMPLES::
429
+
430
+ sage: vct = CartanType(['C', 2]).as_folding()
431
+ sage: RC = crystals.infinity.RiggedConfigurations(vct)
432
+ sage: mg = RC.highest_weight_vector()
433
+ sage: elt = mg.f_string([1,2,2,1,1]); elt
434
+ <BLANKLINE>
435
+ -3[ ][ ][ ]-2
436
+ <BLANKLINE>
437
+ -1[ ][ ]0
438
+ <BLANKLINE>
439
+ sage: velt = RC.to_virtual(elt); velt
440
+ <BLANKLINE>
441
+ -3[ ][ ][ ]-2
442
+ <BLANKLINE>
443
+ -2[ ][ ][ ][ ]0
444
+ <BLANKLINE>
445
+ -3[ ][ ][ ]-2
446
+ <BLANKLINE>
447
+ sage: velt.parent()
448
+ The infinity crystal of rigged configurations of type ['A', 3]
449
+ """
450
+ gamma = [int(f) for f in self._folded_ct.scaling_factors()]
451
+ sigma = self._folded_ct._orbit
452
+ n = self._folded_ct._folding.rank()
453
+ vindex = self._folded_ct._folding.index_set()
454
+ partitions = [None] * n
455
+ riggings = [None] * n
456
+ for a, rp in enumerate(rc):
457
+ for i in sigma[a]:
458
+ k = vindex.index(i)
459
+ partitions[k] = [row_len * gamma[a] for row_len in rp._list]
460
+ riggings[k] = [rig_val * gamma[a] for rig_val in rp.rigging]
461
+ return self.virtual.element_class(self.virtual, partition_list=partitions,
462
+ rigging_list=riggings)
463
+
464
+ def from_virtual(self, vrc):
465
+ """
466
+ Convert ``vrc`` in the virtual crystal into a rigged configuration of
467
+ the original Cartan type.
468
+
469
+ INPUT:
470
+
471
+ - ``vrc`` -- a virtual rigged configuration
472
+
473
+ EXAMPLES::
474
+
475
+ sage: vct = CartanType(['C', 2]).as_folding()
476
+ sage: RC = crystals.infinity.RiggedConfigurations(vct)
477
+ sage: elt = RC(partition_list=[[3],[2]], rigging_list=[[-2],[0]])
478
+ sage: vrc_elt = RC.to_virtual(elt)
479
+ sage: ret = RC.from_virtual(vrc_elt); ret
480
+ <BLANKLINE>
481
+ -3[ ][ ][ ]-2
482
+ <BLANKLINE>
483
+ -1[ ][ ]0
484
+ <BLANKLINE>
485
+ sage: ret == elt
486
+ True
487
+ """
488
+ gamma = list(self._folded_ct.scaling_factors()) # map(int, self._folded_ct.scaling_factors())
489
+ sigma = self._folded_ct._orbit
490
+ n = self._cartan_type.rank()
491
+ partitions = [None] * n
492
+ riggings = [None] * n
493
+ vindex = self._folded_ct._folding.index_set()
494
+ # TODO: Handle special cases for A^{(2)} even and its dual?
495
+ for a in range(n):
496
+ index = vindex.index(sigma[a][0])
497
+ partitions[a] = [row_len // gamma[a] for row_len in vrc[index]._list]
498
+ riggings[a] = [rig_val / gamma[a] for rig_val in vrc[index].rigging]
499
+ return self.element_class(self, partition_list=partitions,
500
+ rigging_list=riggings)
501
+
502
+ class Element(RCNonSimplyLacedElement):
503
+ r"""
504
+ A rigged configuration in `\mathcal{B}(\infty)` in
505
+ non-simply-laced types.
506
+
507
+ TESTS::
508
+
509
+ sage: vct = CartanType(['C', 3]).as_folding()
510
+ sage: RC = crystals.infinity.RiggedConfigurations(vct)
511
+ sage: elt = RC(partition_list=[[1],[1,1],[1]])
512
+ sage: TestSuite(elt).run()
513
+ """
514
+
515
+ def weight(self):
516
+ """
517
+ Return the weight of ``self``.
518
+
519
+ EXAMPLES::
520
+
521
+ sage: vct = CartanType(['C', 3]).as_folding()
522
+ sage: RC = crystals.infinity.RiggedConfigurations(vct)
523
+ sage: elt = RC(partition_list=[[1],[1,1],[1]], rigging_list=[[0],[-1,-1],[0]])
524
+ sage: elt.weight()
525
+ (-1, -1, 0)
526
+
527
+ sage: vct = CartanType(['F', 4, 1]).as_folding()
528
+ sage: RC = crystals.infinity.RiggedConfigurations(vct)
529
+ sage: mg = RC.highest_weight_vector()
530
+ sage: elt = mg.f_string([1,0,3,4,2,2]); ascii_art(elt)
531
+ -1[ ]-1 0[ ]1 -2[ ][ ]-2 0[ ]1 -1[ ]-1
532
+ sage: wt = elt.weight(); wt
533
+ -Lambda[0] + Lambda[1] - 2*Lambda[2] + 3*Lambda[3] - Lambda[4] - delta
534
+ sage: al = RC.weight_lattice_realization().simple_roots()
535
+ sage: wt == -(al[0] + al[1] + 2*al[2] + al[3] + al[4])
536
+ True
537
+ """
538
+ P = self.parent().weight_lattice_realization()
539
+ alpha = list(P.simple_roots())
540
+ return -sum(sum(x) * alpha[i] for i, x in enumerate(self))