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,1251 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.graphs sage.modules
3
+ r"""
4
+ Elementary crystals
5
+
6
+ Let `\lambda` be a weight. The crystals `T_{\lambda}`, `R_{\lambda}`, `B_i`,
7
+ and `C` are important objects in the tensor category of crystals.
8
+ For example, the crystal `T_0` is the neutral object in this category; i.e.,
9
+ `T_0 \otimes B \cong B \otimes T_0 \cong B` for any crystal `B`. We list
10
+ some other properties of these crystals:
11
+
12
+ - The crystal `T_{\lambda} \otimes B(\infty)` is the crystal of the Verma
13
+ module with highest weight `\lambda`, where `\lambda` is a dominant integral
14
+ weight.
15
+
16
+ - Let `u_{\infty}` be the highest weight vector of `B(\infty)` and `\lambda`
17
+ be a dominant integral weight. There is an embedding of crystals `B(\lambda)
18
+ \longrightarrow T_{\lambda} \otimes B(\infty)` sending `u_{\lambda} \mapsto
19
+ t_{\lambda} \otimes u_{\infty}` which is not strict, but the embedding
20
+ `B(\lambda) \longrightarrow C \otimes T_{\lambda} \otimes B(\infty)` by
21
+ `u_{\lambda} \mapsto c \otimes t_{\lambda} \otimes u_{\infty}` is a strict
22
+ embedding.
23
+
24
+ - For any dominant integral weight `\lambda`, there is a surjective crystal
25
+ morphism `\Psi_{\lambda} \colon R_{\lambda} \otimes B(\infty) \longrightarrow
26
+ B(\lambda)`. More precisely, if `B = \{r_{\lambda} \otimes b \in R_{\lambda}
27
+ \otimes B(\infty) : \Psi_{\lambda}(r_{\lambda} \otimes b) \neq 0 \}`, then
28
+ `B \cong B(\lambda)` as crystals.
29
+
30
+ - For all Cartan types and all weights `\lambda`, we have `R_{\lambda} \cong C
31
+ \otimes T_{\lambda}` as crystals.
32
+
33
+ - For each `i`, there is a strict crystal morphism `\Psi_i \colon B(\infty)
34
+ \longrightarrow B_i \otimes B(\infty)` defined by `u_{\infty} \mapsto
35
+ b_i(0) \otimes u_{\infty}`, where `u_\infty` is the highest weight vector
36
+ of `B(\infty)`.
37
+
38
+ For more information on `B(\infty)`, see
39
+ :class:`~sage.combinat.crystals.infinity_crystals.InfinityCrystalOfTableaux`.
40
+
41
+ .. NOTE::
42
+
43
+ As with
44
+ :class:`~sage.combinat.crystals.tensor_product.TensorProductOfCrystals`,
45
+ we are using the opposite of Kashiwara's convention.
46
+
47
+ AUTHORS:
48
+
49
+ - Ben Salisbury: Initial version
50
+
51
+ REFERENCES:
52
+
53
+ - [Ka1993]_
54
+
55
+ - [NZ1997]_
56
+ """
57
+
58
+ # ****************************************************************************
59
+ # Copyright (C) 2013 Ben Salisbury <benjamin_salisbury at brown dot edu>
60
+ #
61
+ # Distributed under the terms of the GNU General Public License (GPL)
62
+ #
63
+ # This code is distributed in the hope that it will be useful,
64
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
65
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
66
+ # General Public License for more details.
67
+ #
68
+ # The full text of the GPL is available at:
69
+ #
70
+ # https://www.gnu.org/licenses/
71
+ # ***************************************************************************
72
+
73
+ from sage.categories.crystals import Crystals
74
+ from sage.categories.finite_crystals import FiniteCrystals
75
+ from sage.categories.highest_weight_crystals import HighestWeightCrystals
76
+ from sage.categories.regular_crystals import RegularCrystals
77
+ from sage.categories.supercrystals import SuperCrystals
78
+ from sage.categories.regular_supercrystals import RegularSuperCrystals
79
+ from sage.categories.infinite_enumerated_sets import InfiniteEnumeratedSets
80
+ from sage.structure.element import Element
81
+ from sage.structure.parent import Parent
82
+ from sage.structure.unique_representation import UniqueRepresentation
83
+ from sage.combinat.root_system.cartan_type import CartanType
84
+ from sage.combinat.root_system.root_lattice_realizations import RootLatticeRealizations
85
+ from sage.rings.integer import Integer
86
+ from sage.rings.integer_ring import ZZ
87
+
88
+
89
+ class AbstractSingleCrystalElement(Element):
90
+ r"""
91
+ Abstract base class for elements in crystals with a single element.
92
+ """
93
+
94
+ def __lt__(self, other):
95
+ r"""
96
+ EXAMPLES::
97
+
98
+ sage: La = RootSystem("D4").ambient_space().fundamental_weights()
99
+ sage: T = crystals.elementary.T("D4",La[3]+La[4])
100
+ sage: t = T.highest_weight_vector()
101
+ sage: t < t.e(1)
102
+ False
103
+ sage: t < t
104
+ False
105
+ """
106
+ return False
107
+
108
+ def __hash__(self):
109
+ r"""
110
+ TESTS::
111
+
112
+ sage: C = crystals.elementary.Component("D7")
113
+ sage: c = C.highest_weight_vector()
114
+ sage: hash(c) # random
115
+ 879
116
+ """
117
+ return hash(self.parent())
118
+
119
+ def __eq__(self, other):
120
+ r"""
121
+ EXAMPLES::
122
+
123
+ sage: La = RootSystem("A2").weight_lattice().fundamental_weights()
124
+ sage: T = crystals.elementary.T("A2",La[1])
125
+ sage: U = crystals.elementary.T("A2",La[2])
126
+ sage: la = RootSystem("B2").weight_lattice().fundamental_weights()
127
+ sage: V = crystals.elementary.T("B2",la[1])
128
+ sage: t = T.highest_weight_vector()
129
+ sage: u = U.highest_weight_vector()
130
+ sage: v = V.highest_weight_vector()
131
+ sage: [t == t, u == u, v == v]
132
+ [True, True, True]
133
+ sage: [t == u, u == v, t == v]
134
+ [False, False, False]
135
+
136
+ sage: C = crystals.elementary.Component("D7")
137
+ sage: c = C.highest_weight_vector()
138
+ sage: c == c
139
+ True
140
+ sage: c == c.f(7)
141
+ False
142
+ """
143
+ if isinstance(other, AbstractSingleCrystalElement):
144
+ return self.parent() is other.parent()
145
+ return False
146
+
147
+ def __ne__(self, other):
148
+ r"""
149
+ EXAMPLES::
150
+
151
+ sage: La = RootSystem("A2").weight_lattice().fundamental_weights()
152
+ sage: T = crystals.elementary.T("A2",La[1])
153
+ sage: T.highest_weight_vector() != T.highest_weight_vector()
154
+ False
155
+ sage: T.highest_weight_vector() != T.highest_weight_vector().e(1)
156
+ True
157
+ """
158
+ return not self == other
159
+
160
+ def e(self, i):
161
+ r"""
162
+ Return `e_i` of ``self``, which is ``None`` for all `i`.
163
+
164
+ INPUT:
165
+
166
+ - ``i`` -- an element of the index set
167
+
168
+ EXAMPLES::
169
+
170
+ sage: ct = CartanType(['A',2])
171
+ sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
172
+ sage: T = crystals.elementary.T(ct,la[1])
173
+ sage: t = T.highest_weight_vector()
174
+ sage: t.e(1)
175
+ sage: t.e(2)
176
+ """
177
+ return None
178
+
179
+ def f(self, i):
180
+ r"""
181
+ Return `f_i` of ``self``, which is ``None`` for all `i`.
182
+
183
+ INPUT:
184
+
185
+ - ``i`` -- an element of the index set
186
+
187
+ EXAMPLES::
188
+
189
+ sage: ct = CartanType(['A',2])
190
+ sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
191
+ sage: T = crystals.elementary.T(ct,la[1])
192
+ sage: t = T.highest_weight_vector()
193
+ sage: t.f(1)
194
+ sage: t.f(2)
195
+ """
196
+ return None
197
+
198
+
199
+ class TCrystal(UniqueRepresentation, Parent):
200
+ r"""
201
+ The crystal `T_{\lambda}`.
202
+
203
+ Let `\lambda` be a weight. As defined in [Ka1993]_ the crystal
204
+ `T_{\lambda} = \{ t_{\lambda} \}` is a single element crystal with the
205
+ crystal structure defined by
206
+
207
+ .. MATH::
208
+
209
+ \mathrm{wt}(t_\lambda) = \lambda, \quad
210
+ e_i t_{\lambda} = f_i t_{\lambda} = 0, \quad
211
+ \varepsilon_i(t_{\lambda}) = \varphi_i(t_{\lambda}) = -\infty.
212
+
213
+ The crystal `T_{\lambda}` shifts the weights of the vertices in a crystal
214
+ `B` by `\lambda` when tensored with `B`, but leaves the graph structure of
215
+ `B` unchanged. That is to say, for all `b \in B`, we have `\mathrm{wt}(b
216
+ \otimes t_{\lambda}) = \mathrm{wt}(b) + \lambda`.
217
+
218
+ INPUT:
219
+
220
+ - ``cartan_type`` -- a Cartan type
221
+
222
+ - ``weight`` -- an element of the weight lattice of type ``cartan_type``
223
+
224
+ EXAMPLES::
225
+
226
+ sage: ct = CartanType(['A',2])
227
+ sage: C = crystals.Tableaux(ct, shape=[1])
228
+ sage: for x in C: x.weight()
229
+ (1, 0, 0)
230
+ (0, 1, 0)
231
+ (0, 0, 1)
232
+ sage: La = RootSystem(ct).ambient_space().fundamental_weights()
233
+ sage: TLa = crystals.elementary.T(ct, 3*(La[1] + La[2]))
234
+ sage: TP = crystals.TensorProduct(TLa, C)
235
+ sage: for x in TP: x.weight()
236
+ (7, 3, 0)
237
+ (6, 4, 0)
238
+ (6, 3, 1)
239
+ sage: G = C.digraph()
240
+ sage: H = TP.digraph()
241
+ sage: G.is_isomorphic(H,edge_labels=True)
242
+ True
243
+ """
244
+
245
+ @staticmethod
246
+ def __classcall_private__(cls, cartan_type, weight=None):
247
+ r"""
248
+ Normalize input to ensure a unique representation.
249
+
250
+ EXAMPLES::
251
+
252
+ sage: ct = CartanType(['A',3])
253
+ sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
254
+ sage: wts = RootSystem(ct).ambient_space().fundamental_weights()
255
+ sage: X = crystals.elementary.T(['A',3], la[1])
256
+ sage: Y = crystals.elementary.T(la[1])
257
+ sage: X is Y
258
+ True
259
+ """
260
+ if weight is None:
261
+ weight = cartan_type
262
+ cartan_type = weight.parent().cartan_type()
263
+ cartan_type = CartanType(cartan_type)
264
+ return super().__classcall__(cls, cartan_type, weight)
265
+
266
+ def __init__(self, cartan_type, weight):
267
+ r"""
268
+ Initialize ``self``.
269
+
270
+ EXAMPLES::
271
+
272
+ sage: la = RootSystem("A2").weight_lattice().fundamental_weights()
273
+ sage: B = crystals.elementary.T("A2", 5*la[2])
274
+ sage: TestSuite(B).run()
275
+ """
276
+ self._weight = weight
277
+ self._cartan_type = cartan_type
278
+ if self._cartan_type.type() == 'Q':
279
+ category = SuperCrystals().Finite()
280
+ else:
281
+ category = (FiniteCrystals(), HighestWeightCrystals())
282
+ Parent.__init__(self, category=category)
283
+ self.module_generators = (self.element_class(self),)
284
+
285
+ def _repr_(self):
286
+ r"""
287
+ Return a string representation of ``self``.
288
+
289
+ EXAMPLES::
290
+
291
+ sage: la = RootSystem(['E',6]).weight_lattice().fundamental_weights()
292
+ sage: B = crystals.elementary.T(['E',6], la[6])
293
+ sage: B
294
+ The T crystal of type ['E', 6] and weight Lambda[6]
295
+ """
296
+ return "The T crystal of type {1!s} and weight {0!s}".format(self._weight, self._cartan_type)
297
+
298
+ def _element_constructor_(self, weight):
299
+ r"""
300
+ Construct an element of ``self`` from ``weight``.
301
+
302
+ INPUT:
303
+
304
+ - ``weight`` -- an element of the weight lattice
305
+
306
+ EXAMPLES::
307
+
308
+ sage: la = RootSystem("E8").weight_lattice().fundamental_weights()
309
+ sage: T = crystals.elementary.T("E8",la[7]+la[8])
310
+ sage: T(la[7]+la[8])
311
+ Lambda[7] + Lambda[8]
312
+ """
313
+ if weight != self._weight:
314
+ raise ValueError("only element is t(%s)" % self._weight)
315
+ return self.element_class(self)
316
+
317
+ def cardinality(self):
318
+ r"""
319
+ Return the cardinality of ``self``, which is always `1`.
320
+
321
+ EXAMPLES::
322
+
323
+ sage: La = RootSystem(['C',12]).weight_lattice().fundamental_weights()
324
+ sage: T = crystals.elementary.T(['C',12], La[9])
325
+ sage: T.cardinality()
326
+ 1
327
+ """
328
+ return ZZ.one()
329
+
330
+ def weight_lattice_realization(self):
331
+ """
332
+ Return a realization of the lattice containing the weights
333
+ of ``self``.
334
+
335
+ EXAMPLES::
336
+
337
+ sage: La = RootSystem(['C',12]).weight_lattice().fundamental_weights()
338
+ sage: T = crystals.elementary.T(['C',12], La[9])
339
+ sage: T.weight_lattice_realization()
340
+ Weight lattice of the Root system of type ['C', 12]
341
+
342
+ sage: ct = CartanMatrix([[2, -4], [-5, 2]])
343
+ sage: La = RootSystem(ct).weight_lattice().fundamental_weights()
344
+ sage: T = crystals.elementary.T(ct, La[1])
345
+ sage: T.weight_lattice_realization()
346
+ Weight lattice of the Root system of type
347
+ [ 2 -4]
348
+ [-5 2]
349
+ """
350
+ return self._weight.parent()
351
+
352
+ class Element(AbstractSingleCrystalElement):
353
+ r"""
354
+ Element of a `T_{\lambda}` crystal.
355
+ """
356
+
357
+ def _repr_(self):
358
+ r"""
359
+ EXAMPLES::
360
+
361
+ sage: ct = CartanType(['F',4])
362
+ sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
363
+ sage: T = crystals.elementary.T(ct,2*la[1]-3*la[3])
364
+ sage: t = T.highest_weight_vector()
365
+ sage: t
366
+ 2*Lambda[1] - 3*Lambda[3]
367
+ """
368
+ return repr(self.parent()._weight)
369
+
370
+ def _latex_(self):
371
+ r"""
372
+ Return a LaTeX representation of ``self``.
373
+
374
+ EXAMPLES::
375
+
376
+ sage: ct = CartanType(['B',5,1])
377
+ sage: la = RootSystem(ct).ambient_space().fundamental_weights()
378
+ sage: T = crystals.elementary.T(ct, 2*la[1]-3*la[3]+la[0])
379
+ sage: t = T.highest_weight_vector()
380
+ sage: latex(t)
381
+ {t_{-e_{0} - 3 e_{1} - 3 e_{2} - 3 e_{deltacheck}}}
382
+ """
383
+ return "{t_{" + self.parent()._weight._latex_() + "}}"
384
+
385
+ def epsilon(self, i):
386
+ r"""
387
+ Return `\varepsilon_i` of ``self``, which is `-\infty` for all `i`.
388
+
389
+ INPUT:
390
+
391
+ - ``i`` -- an element of the index set
392
+
393
+ EXAMPLES::
394
+
395
+ sage: ct = CartanType(['C',5])
396
+ sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
397
+ sage: T = crystals.elementary.T(ct,la[4]+la[5]-la[1]-la[2])
398
+ sage: t = T.highest_weight_vector()
399
+ sage: [t.epsilon(i) for i in T.index_set()]
400
+ [-inf, -inf, -inf, -inf, -inf]
401
+ """
402
+ return float("-inf")
403
+
404
+ def phi(self, i):
405
+ r"""
406
+ Return `\varphi_i` of ``self``, which is `-\infty` for all `i`.
407
+
408
+ INPUT:
409
+
410
+ - ``i`` -- an element of the index set
411
+
412
+ EXAMPLES::
413
+
414
+ sage: ct = CartanType(['C',5])
415
+ sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
416
+ sage: T = crystals.elementary.T(ct,la[4]+la[5]-la[1]-la[2])
417
+ sage: t = T.highest_weight_vector()
418
+ sage: [t.phi(i) for i in T.index_set()]
419
+ [-inf, -inf, -inf, -inf, -inf]
420
+ """
421
+ return float("-inf")
422
+
423
+ def weight(self):
424
+ r"""
425
+ Return the weight of ``self``, which is always `\lambda`.
426
+
427
+ EXAMPLES::
428
+
429
+ sage: ct = CartanType(['C',5])
430
+ sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
431
+ sage: T = crystals.elementary.T(ct,la[4]+la[5]-la[1]-la[2])
432
+ sage: t = T.highest_weight_vector()
433
+ sage: t.weight()
434
+ -Lambda[1] - Lambda[2] + Lambda[4] + Lambda[5]
435
+ """
436
+ return self.parent()._weight
437
+
438
+
439
+ class RCrystal(UniqueRepresentation, Parent):
440
+ r"""
441
+ The crystal `R_{\lambda}`.
442
+
443
+ For a fixed weight `\lambda`, the crystal `R_{\lambda} = \{ r_{\lambda} \}`
444
+ is a single element crystal with the crystal structure defined by
445
+
446
+ .. MATH::
447
+
448
+ \mathrm{wt}(r_{\lambda}) = \lambda, \quad
449
+ e_i r_{\lambda} = f_i r_{\lambda} = 0, \quad
450
+ \varepsilon_i(r_{\lambda}) = -\langle h_i, \lambda\rangle, \quad
451
+ \varphi_i(r_{\lambda}) = 0,
452
+
453
+ where `\{h_i\}` are the simple coroots.
454
+
455
+ Tensoring `R_{\lambda}` with a crystal `B` results in shifting the weights
456
+ of the vertices in `B` by `\lambda` and may also cut a subset out of the
457
+ original graph of `B`. That is, `\mathrm{wt}(r_{\lambda} \otimes b) =
458
+ \mathrm{wt}(b) + \lambda`, where `b \in B`, provided `r_{\lambda} \otimes
459
+ b \neq 0`. For example, the crystal graph of `B(\lambda)` is the same as
460
+ the crystal graph of `R_{\lambda} \otimes B(\infty)` generated from the
461
+ component `r_{\lambda} \otimes u_{\infty}`.
462
+
463
+ There is also a dual version of this crystal given by
464
+ `R^{\vee}_{\lambda} = \{ r^{\vee}_{\lambda} \}` with the crystal
465
+ structure defined by
466
+
467
+ .. MATH::
468
+
469
+ \mathrm{wt}(r^{\vee}_{\lambda}) = \lambda, \quad
470
+ e_i r^{\vee}_{\lambda} = f_i r^{\vee}_{\lambda} = 0, \quad
471
+ \varepsilon_i(r^{\vee}_{\lambda}) = 0, \quad
472
+ \varphi_i(r^{\vee}_{\lambda}) = \langle h_i, \lambda\rangle.
473
+
474
+ INPUT:
475
+
476
+ - ``cartan_type`` -- a Cartan type
477
+ - ``weight`` -- an element of the weight lattice of type ``cartan_type``
478
+ - ``dual`` -- boolean (default: ``False``)
479
+
480
+ EXAMPLES:
481
+
482
+ We check by tensoring `R_{\lambda}` with `B(\infty)` results in a
483
+ component of `B(\lambda)`::
484
+
485
+ sage: B = crystals.infinity.Tableaux("A2")
486
+ sage: R = crystals.elementary.R("A2", B.Lambda()[1]+B.Lambda()[2])
487
+ sage: T = crystals.TensorProduct(R, B)
488
+ sage: mg = T(R.highest_weight_vector(), B.highest_weight_vector())
489
+ sage: S = T.subcrystal(generators=[mg])
490
+ sage: sorted([x.weight() for x in S], key=str)
491
+ [(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 1, 1),
492
+ (1, 1, 1), (1, 2, 0), (2, 0, 1), (2, 1, 0)]
493
+ sage: C = crystals.Tableaux("A2", shape=[2,1])
494
+ sage: sorted([x.weight() for x in C], key=str)
495
+ [(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 1, 1),
496
+ (1, 1, 1), (1, 2, 0), (2, 0, 1), (2, 1, 0)]
497
+ sage: GT = T.digraph(subset=S)
498
+ sage: GC = C.digraph()
499
+ sage: GT.is_isomorphic(GC, edge_labels=True)
500
+ True
501
+ """
502
+
503
+ @staticmethod
504
+ def __classcall_private__(cls, cartan_type, weight=None, dual=False):
505
+ r"""
506
+ Normalize input to ensure a unique representation.
507
+
508
+ EXAMPLES::
509
+
510
+ sage: ct = CartanType(['A',3])
511
+ sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
512
+ sage: X = crystals.elementary.R(['A',3], la[1])
513
+ sage: Y = crystals.elementary.R(la[1])
514
+ sage: X is Y
515
+ True
516
+ """
517
+ if weight is None:
518
+ weight = cartan_type
519
+ cartan_type = weight.parent().cartan_type()
520
+ cartan_type = CartanType(cartan_type)
521
+ return super().__classcall__(cls, cartan_type, weight, dual)
522
+
523
+ def __init__(self, cartan_type, weight, dual):
524
+ r"""
525
+ Initialize ``self``.
526
+
527
+ EXAMPLES::
528
+
529
+ sage: la = RootSystem("A2").weight_lattice().fundamental_weights()
530
+ sage: B = crystals.elementary.R("A2",5*la[2])
531
+ sage: TestSuite(B).run()
532
+ """
533
+ self._weight = weight
534
+ self._cartan_type = cartan_type
535
+ self._dual = dual
536
+ if self._cartan_type.type() == 'Q':
537
+ category = SuperCrystals().Finite()
538
+ else:
539
+ category = (FiniteCrystals(), HighestWeightCrystals())
540
+ Parent.__init__(self, category=category)
541
+ self.module_generators = (self.element_class(self),)
542
+
543
+ def _repr_(self):
544
+ r"""
545
+ Return a string representation of ``self``.
546
+
547
+ EXAMPLES::
548
+
549
+ sage: la = RootSystem(['E',6]).weight_lattice().fundamental_weights()
550
+ sage: B = crystals.elementary.R(['E',6], la[6])
551
+ sage: B
552
+ The R crystal of weight Lambda[6] and type ['E', 6]
553
+
554
+ sage: crystals.elementary.R(['E',6], la[1], dual=True)
555
+ The dual R crystal of weight Lambda[1] and type ['E', 6]
556
+ """
557
+ dual_str = " dual" if self._dual else ""
558
+ return "The{} R crystal of weight {} and type {}".format(
559
+ dual_str, self._weight, self._cartan_type)
560
+
561
+ def _element_constructor_(self, weight):
562
+ r"""
563
+ Construct an element of ``self`` from ``weight``.
564
+
565
+ INPUT:
566
+
567
+ - ``weight`` -- an element of the weight lattice
568
+
569
+ EXAMPLES::
570
+
571
+ sage: la = RootSystem("E8").weight_lattice().fundamental_weights()
572
+ sage: R = crystals.elementary.R("E8",la[7]+la[8])
573
+ sage: R(la[7]+la[8])
574
+ Lambda[7] + Lambda[8]
575
+ """
576
+ if weight != self._weight:
577
+ raise ValueError("Only element is r(%s)" % self._weight)
578
+ return self.element_class(self)
579
+
580
+ def cardinality(self):
581
+ r"""
582
+ Return the cardinality of ``self``, which is always `1`.
583
+
584
+ EXAMPLES::
585
+
586
+ sage: La = RootSystem(['C',12]).weight_lattice().fundamental_weights()
587
+ sage: R = crystals.elementary.R(['C',12],La[9])
588
+ sage: R.cardinality()
589
+ 1
590
+ """
591
+ return ZZ.one()
592
+
593
+ def weight_lattice_realization(self):
594
+ """
595
+ Return a realization of the lattice containing the weights
596
+ of ``self``.
597
+
598
+ EXAMPLES::
599
+
600
+ sage: La = RootSystem(['C',12]).weight_lattice().fundamental_weights()
601
+ sage: R = crystals.elementary.R(['C',12], La[9])
602
+ sage: R.weight_lattice_realization()
603
+ Weight lattice of the Root system of type ['C', 12]
604
+
605
+ sage: ct = CartanMatrix([[2, -4], [-5, 2]])
606
+ sage: La = RootSystem(ct).weight_lattice().fundamental_weights()
607
+ sage: R = crystals.elementary.R(ct, La[1])
608
+ sage: R.weight_lattice_realization()
609
+ Weight lattice of the Root system of type
610
+ [ 2 -4]
611
+ [-5 2]
612
+ """
613
+ return self._weight.parent()
614
+
615
+ class Element(AbstractSingleCrystalElement):
616
+ r"""
617
+ Element of a `R_{\lambda}` crystal.
618
+ """
619
+
620
+ def _repr_(self):
621
+ r"""
622
+ EXAMPLES::
623
+
624
+ sage: ct = CartanType(['F',4])
625
+ sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
626
+ sage: T = crystals.elementary.T(ct,2*la[1]-3*la[3])
627
+ sage: t = T.highest_weight_vector()
628
+ sage: t
629
+ 2*Lambda[1] - 3*Lambda[3]
630
+ """
631
+ return repr(self.parent()._weight)
632
+
633
+ def _latex_(self):
634
+ r"""
635
+ Return a LaTeX representation of ``self``.
636
+
637
+ EXAMPLES::
638
+
639
+ sage: la = RootSystem("G2").weight_lattice().fundamental_weights()
640
+ sage: R = crystals.elementary.R("G2",la[1])
641
+ sage: r = R.highest_weight_vector()
642
+ sage: latex(r)
643
+ {r_{\Lambda_{1}}}
644
+
645
+ sage: R = crystals.elementary.R("G2", la[1], dual=True)
646
+ sage: latex(R.highest_weight_vector())
647
+ {r^{\vee}_{\Lambda_{1}}}
648
+ """
649
+ if self.parent()._dual:
650
+ return r"{r^{\vee}_{" + self.parent()._weight._latex_() + "}}"
651
+ return "{r_{" + self.parent()._weight._latex_() + "}}"
652
+
653
+ def epsilon(self, i):
654
+ r"""
655
+ Return `\varepsilon_i` of ``self``.
656
+
657
+ We have `\varepsilon_i(r_{\lambda}) = -\langle h_i, \lambda
658
+ \rangle` for all `i`, where `h_i` is a simple coroot.
659
+
660
+ INPUT:
661
+
662
+ - ``i`` -- an element of the index set
663
+
664
+ EXAMPLES::
665
+
666
+ sage: la = RootSystem(['A',2]).weight_lattice().fundamental_weights()
667
+ sage: R = crystals.elementary.R("A2", la[1])
668
+ sage: r = R.highest_weight_vector()
669
+ sage: [r.epsilon(i) for i in R.index_set()]
670
+ [-1, 0]
671
+
672
+ sage: R = crystals.elementary.R("A2", la[1], dual=True)
673
+ sage: r = R.highest_weight_vector()
674
+ sage: [r.epsilon(i) for i in R.index_set()]
675
+ [0, 0]
676
+ """
677
+ if self.parent()._dual:
678
+ return ZZ.zero()
679
+ else:
680
+ P = self.parent().weight_lattice_realization()
681
+ h = P.simple_coroots()
682
+ return -P(self.weight()).scalar(h[i])
683
+
684
+ def phi(self, i):
685
+ r"""
686
+ Return `\varphi_i` of ``self``, which is `0` for all `i`.
687
+
688
+ INPUT:
689
+
690
+ - ``i`` -- an element of the index set
691
+
692
+ EXAMPLES::
693
+
694
+ sage: la = RootSystem("C5").weight_lattice().fundamental_weights()
695
+ sage: R = crystals.elementary.R("C5", la[4]+la[5])
696
+ sage: r = R.highest_weight_vector()
697
+ sage: [r.phi(i) for i in R.index_set()]
698
+ [0, 0, 0, 0, 0]
699
+
700
+ sage: R = crystals.elementary.R("C5", la[4]+la[5], dual=True)
701
+ sage: r = R.highest_weight_vector()
702
+ sage: [r.phi(i) for i in R.index_set()]
703
+ [0, 0, 0, 1, 1]
704
+ """
705
+ if self.parent()._dual:
706
+ P = self.parent().weight_lattice_realization()
707
+ h = P.simple_coroots()
708
+ return P(self.weight()).scalar(h[i])
709
+ else:
710
+ return ZZ.zero()
711
+
712
+ def weight(self):
713
+ r"""
714
+ Return the weight of ``self``, which is always `\lambda`.
715
+
716
+ EXAMPLES::
717
+
718
+ sage: ct = CartanType(['C',5])
719
+ sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
720
+ sage: T = crystals.elementary.T(ct,la[4]+la[5]-la[1]-la[2])
721
+ sage: t = T.highest_weight_vector()
722
+ sage: t.weight()
723
+ -Lambda[1] - Lambda[2] + Lambda[4] + Lambda[5]
724
+ """
725
+ return self.parent()._weight
726
+
727
+
728
+ class ElementaryCrystal(UniqueRepresentation, Parent):
729
+ r"""
730
+ The elementary crystal `B_i`.
731
+
732
+ For `i` an element of the index set of type `X`, the crystal `B_i` of type
733
+ `X` is the set
734
+
735
+ .. MATH::
736
+
737
+ B_i = \{ b_i(m) : m \in \ZZ \},
738
+
739
+ where the crystal structure is given by
740
+
741
+ .. MATH::
742
+
743
+ \begin{aligned}
744
+ \mathrm{wt}\bigl(b_i(m)\bigr) &= m\alpha_i \\
745
+ \varphi_j\bigl(b_i(m)\bigr) &= \begin{cases}
746
+ m & \text{ if } j=i, \\
747
+ -\infty & \text{ if } j\neq i,
748
+ \end{cases} \\
749
+ \varepsilon_j\bigl(b_i(m)\bigr) &= \begin{cases}
750
+ -m & \text{ if } j=i, \\
751
+ -\infty & \text{ if } j\neq i,
752
+ \end{cases} \\
753
+ e_j b_i(m) &= \begin{cases}
754
+ b_i(m+1) & \text{ if } j=i, \\
755
+ 0 & \text{ if } j\neq i,
756
+ \end{cases} \\
757
+ f_j b_i(m) &= \begin{cases}
758
+ b_i(m-1) & \text{ if } j=i, \\
759
+ 0 & \text{ if } j\neq i.
760
+ \end{cases}
761
+ \end{aligned}
762
+
763
+ The *Kashiwara embedding theorem* asserts there is a unique strict crystal
764
+ embedding of crystals
765
+
766
+ .. MATH::
767
+
768
+ B(\infty) \hookrightarrow B_i \otimes B(\infty),
769
+
770
+ satisfying certain properties (see [Ka1993]_). The above embedding
771
+ may be iterated to obtain a new embedding
772
+
773
+ .. MATH::
774
+
775
+ B(\infty) \hookrightarrow B_{i_N} \otimes B_{i_{N-1}}
776
+ \otimes \cdots \otimes B_{i_2} \otimes B_{i_1} \otimes B(\infty),
777
+
778
+ which is a foundational object in the study of *polyhedral realizations of
779
+ crystals* (see, for example, [NZ1997]_).
780
+ """
781
+
782
+ @staticmethod
783
+ def __classcall_private__(cls, cartan_type, i):
784
+ r"""
785
+ Normalize input to ensure a unique representation.
786
+
787
+ EXAMPLES::
788
+
789
+ sage: B = crystals.elementary.Elementary(['A',4], 3)
790
+ sage: C = crystals.elementary.Elementary(CartanType("A4"), int(3))
791
+ sage: B is C
792
+ True
793
+ """
794
+ cartan_type = CartanType(cartan_type)
795
+ if i not in cartan_type.index_set():
796
+ raise ValueError('i must an element of the index set')
797
+ return super().__classcall__(cls, cartan_type, i)
798
+
799
+ def __init__(self, cartan_type, i):
800
+ r"""
801
+ Initialize ``self``.
802
+
803
+ EXAMPLES::
804
+
805
+ sage: B = crystals.elementary.Elementary("D4",3)
806
+ sage: TestSuite(B).run()
807
+ """
808
+ Parent.__init__(self, category=(Crystals(), InfiniteEnumeratedSets()))
809
+ self._i = i
810
+ self._cartan_type = cartan_type
811
+ self.module_generators = (self.element_class(self, 0),)
812
+
813
+ def _repr_(self):
814
+ r"""
815
+ Return a string representation of ``self``.
816
+
817
+ EXAMPLES::
818
+
819
+ sage: B = crystals.elementary.Elementary(['B',5,1], 4)
820
+ sage: B
821
+ The 4-elementary crystal of type ['B', 5, 1]
822
+ """
823
+ return "The {0!s}-elementary crystal of type {1!s}".format(self._i, self._cartan_type)
824
+
825
+ def _element_constructor_(self, m):
826
+ r"""
827
+ Construct an element of ``self`` from ``weight``.
828
+
829
+ INPUT:
830
+
831
+ - ``m`` -- integer
832
+
833
+ EXAMPLES::
834
+
835
+ sage: B = crystals.elementary.Elementary(['F',4], 2)
836
+ sage: B(0)
837
+ 0
838
+ sage: B(-15)
839
+ -15
840
+ sage: B(721)
841
+ 721
842
+ """
843
+ return self.element_class(self, ZZ(m))
844
+
845
+ def weight_lattice_realization(self):
846
+ """
847
+ Return a realization of the lattice containing the weights
848
+ of ``self``.
849
+
850
+ EXAMPLES::
851
+
852
+ sage: B = crystals.elementary.Elementary(['A',4, 1], 2)
853
+ sage: B.weight_lattice_realization()
854
+ Root lattice of the Root system of type ['A', 4, 1]
855
+ """
856
+ return self.cartan_type().root_system().root_lattice()
857
+
858
+ class Element(Element):
859
+ r"""
860
+ Element of a `B_i` crystal.
861
+ """
862
+
863
+ def __init__(self, parent, m):
864
+ r"""
865
+ EXAMPLES::
866
+
867
+ sage: B = crystals.elementary.Elementary(['B',7],7)
868
+ sage: elt = B(17); elt
869
+ 17
870
+ """
871
+ self._m = m
872
+ Element.__init__(self, parent)
873
+
874
+ def __hash__(self):
875
+ r"""
876
+ TESTS::
877
+
878
+ sage: B = crystals.elementary.Elementary(['B',7],7)
879
+ sage: hash(B(17))
880
+ 17
881
+ """
882
+ return hash(self._m)
883
+
884
+ def _repr_(self):
885
+ r"""
886
+ EXAMPLES::
887
+
888
+ sage: B = crystals.elementary.Elementary(['A',4],3)
889
+ sage: B(-47)
890
+ -47
891
+ """
892
+ return repr(self._m)
893
+
894
+ def __lt__(self, other):
895
+ r"""
896
+ EXAMPLES::
897
+
898
+ sage: B = crystals.elementary.Elementary("D4",3)
899
+ sage: b = B(1)
900
+ sage: c = B(-1)
901
+ sage: b.__lt__(c)
902
+ False
903
+ sage: c.__lt__(b)
904
+ True
905
+ """
906
+ if self.parent() is not other.parent():
907
+ return False
908
+ return Integer(self._m) < Integer(other._m)
909
+
910
+ def __eq__(self, other):
911
+ r"""
912
+ EXAMPLES::
913
+
914
+ sage: B = crystals.elementary.Elementary("A2",1)
915
+ sage: C = crystals.elementary.Elementary("A2",2)
916
+ sage: D = crystals.elementary.Elementary("B2",1)
917
+ sage: [B(0) == B(1), B(0) == C(0), B(0) == D(0), C(0) == D(0)]
918
+ [False, False, False, False]
919
+ sage: [B(1) == B(1), C(12) == C(12), D(-1) == D(-1)]
920
+ [True, True, True]
921
+ """
922
+ if isinstance(other, ElementaryCrystal.Element):
923
+ return self.parent() is other.parent() and self._m == other._m
924
+ return False
925
+
926
+ def __ne__(self, other):
927
+ r"""
928
+ EXAMPLES::
929
+
930
+ sage: B = crystals.elementary.Elementary("A2",1)
931
+ sage: B(0) != B(2)
932
+ True
933
+ sage: B(0) != B(0)
934
+ False
935
+ """
936
+ return not self == other
937
+
938
+ def _latex_(self):
939
+ r"""
940
+ Return a LaTeX representation of ``self``.
941
+
942
+ EXAMPLES::
943
+
944
+ sage: B = crystals.elementary.Elementary(['B',11,1],6)
945
+ sage: latex(B(26))
946
+ {b_{6}(26)}
947
+ """
948
+ return "{b_{%s}(%s)}" % (self.parent()._i, self._m)
949
+
950
+ def e(self, i):
951
+ r"""
952
+ Return the action of `e_i` on ``self``.
953
+
954
+ INPUT:
955
+
956
+ - ``i`` -- an element of the index set
957
+
958
+ EXAMPLES::
959
+
960
+ sage: B = crystals.elementary.Elementary(['E',7],1)
961
+ sage: B(3).e(1)
962
+ 4
963
+ sage: B(172).e_string([1]*171)
964
+ 343
965
+ sage: B(0).e(2)
966
+ """
967
+ if i == self.parent()._i:
968
+ return self.__class__(self.parent(), self._m + 1)
969
+ else:
970
+ return None
971
+
972
+ def f(self, i):
973
+ r"""
974
+ Return the action of `f_i` on ``self``.
975
+
976
+ INPUT:
977
+
978
+ - ``i`` -- an element of the index set
979
+
980
+ EXAMPLES::
981
+
982
+ sage: B = crystals.elementary.Elementary(['E',7],1)
983
+ sage: B(3).f(1)
984
+ 2
985
+ sage: B(172).f_string([1]*171)
986
+ 1
987
+ sage: B(0).e(2)
988
+ """
989
+ if i == self.parent()._i:
990
+ return self.__class__(self.parent(), self._m - 1)
991
+ else:
992
+ return None
993
+
994
+ def epsilon(self, i):
995
+ r"""
996
+ Return `\varepsilon_i` of ``self``.
997
+
998
+ INPUT:
999
+
1000
+ - ``i`` -- an element of the index set
1001
+
1002
+ EXAMPLES::
1003
+
1004
+ sage: B = crystals.elementary.Elementary(['F',4],3)
1005
+ sage: [[B(j).epsilon(i) for i in B.index_set()] for j in range(5)]
1006
+ [[-inf, -inf, 0, -inf],
1007
+ [-inf, -inf, -1, -inf],
1008
+ [-inf, -inf, -2, -inf],
1009
+ [-inf, -inf, -3, -inf],
1010
+ [-inf, -inf, -4, -inf]]
1011
+ """
1012
+ if i == self.parent()._i:
1013
+ return -self._m
1014
+ else:
1015
+ return float("-inf")
1016
+
1017
+ def phi(self, i):
1018
+ r"""
1019
+ Return `\varphi_i` of ``self``.
1020
+
1021
+ INPUT:
1022
+
1023
+ - ``i`` -- an element of the index set
1024
+
1025
+ EXAMPLES::
1026
+
1027
+ sage: B = crystals.elementary.Elementary(['E',8,1],4)
1028
+ sage: [[B(m).phi(j) for j in B.index_set()] for m in range(44,49)]
1029
+ [[-inf, -inf, -inf, -inf, 44, -inf, -inf, -inf, -inf],
1030
+ [-inf, -inf, -inf, -inf, 45, -inf, -inf, -inf, -inf],
1031
+ [-inf, -inf, -inf, -inf, 46, -inf, -inf, -inf, -inf],
1032
+ [-inf, -inf, -inf, -inf, 47, -inf, -inf, -inf, -inf],
1033
+ [-inf, -inf, -inf, -inf, 48, -inf, -inf, -inf, -inf]]
1034
+ """
1035
+ if i == self.parent()._i:
1036
+ return self._m
1037
+ else:
1038
+ return float("-inf")
1039
+
1040
+ def weight(self):
1041
+ r"""
1042
+ Return the weight of ``self``.
1043
+
1044
+ EXAMPLES::
1045
+
1046
+ sage: B = crystals.elementary.Elementary(['C',14],12)
1047
+ sage: B(-385).weight()
1048
+ -385*alpha[12]
1049
+ """
1050
+ Q = self.parent().weight_lattice_realization()
1051
+ return self._m * Q.simple_root(self.parent()._i)
1052
+
1053
+
1054
+ class ComponentCrystal(UniqueRepresentation, Parent):
1055
+ r"""
1056
+ The component crystal.
1057
+
1058
+ Defined in [Ka1993]_, the component crystal `C = \{c\}` is the single
1059
+ element crystal whose crystal structure is defined by
1060
+
1061
+ .. MATH::
1062
+
1063
+ \mathrm{wt}(c) = 0, \quad
1064
+ e_i c = f_i c = 0, \quad
1065
+ \varepsilon_i(c) = \varphi_i(c) = 0.
1066
+
1067
+ Note `C \cong B(0)`, where `B(0)` is the highest weight crystal of highest
1068
+ weight `0`.
1069
+
1070
+ INPUT:
1071
+
1072
+ - ``cartan_type`` -- a Cartan type
1073
+ """
1074
+
1075
+ @staticmethod
1076
+ def __classcall_private__(cls, cartan_type, P=None):
1077
+ r"""
1078
+ Normalize input to ensure a unique representation.
1079
+
1080
+ EXAMPLES::
1081
+
1082
+ sage: C = crystals.elementary.Component("A2")
1083
+ sage: D = crystals.elementary.Component(CartanType(['A',2]))
1084
+ sage: C is D
1085
+ True
1086
+ sage: AS = RootSystem(['A',2]).ambient_space()
1087
+ sage: E = crystals.elementary.Component(AS)
1088
+ sage: F = crystals.elementary.Component(CartanType(['A',2]), AS)
1089
+ sage: C is E and C is F
1090
+ True
1091
+ """
1092
+ if cartan_type in RootLatticeRealizations:
1093
+ P = cartan_type
1094
+ cartan_type = P.cartan_type()
1095
+ elif P is None:
1096
+ cartan_type = CartanType(cartan_type)
1097
+ P = cartan_type.root_system().ambient_space()
1098
+ if P is None:
1099
+ P = cartan_type.root_system().weight_lattice()
1100
+ return super().__classcall__(cls, cartan_type, P)
1101
+
1102
+ def __init__(self, cartan_type, P):
1103
+ r"""
1104
+ Initialize ``self``.
1105
+
1106
+ EXAMPLES::
1107
+
1108
+ sage: B = crystals.elementary.Component("D4")
1109
+ sage: TestSuite(B).run()
1110
+ """
1111
+ self._weight_lattice_realization = P
1112
+ self._cartan_type = cartan_type
1113
+ if self._cartan_type.type() == 'Q':
1114
+ category = RegularSuperCrystals()
1115
+ else:
1116
+ category = (RegularCrystals().Finite(), HighestWeightCrystals())
1117
+ Parent.__init__(self, category=category)
1118
+ self.module_generators = (self.element_class(self),)
1119
+
1120
+ def _repr_(self):
1121
+ r"""
1122
+ Return a string representation of ``self``.
1123
+
1124
+ EXAMPLES::
1125
+
1126
+ sage: C = crystals.elementary.Component("D4")
1127
+ sage: C
1128
+ The component crystal of type ['D', 4]
1129
+ """
1130
+ return "The component crystal of type {0!s}".format(self._cartan_type)
1131
+
1132
+ def _element_constructor_(self, weight):
1133
+ r"""
1134
+ Construct an element of ``self``.
1135
+
1136
+ EXAMPLES::
1137
+
1138
+ sage: C = crystals.elementary.Component("E6")
1139
+ sage: c = C.highest_weight_vector()
1140
+ sage: c
1141
+ c
1142
+ """
1143
+ if weight != self.weight_lattice_realization().zero():
1144
+ raise ValueError("only element is c")
1145
+ return self.element_class(self)
1146
+
1147
+ def cardinality(self):
1148
+ r"""
1149
+ Return the cardinality of ``self``, which is always `1`.
1150
+
1151
+ EXAMPLES::
1152
+
1153
+ sage: C = crystals.elementary.Component("E6")
1154
+ sage: c = C.highest_weight_vector()
1155
+ sage: C.cardinality()
1156
+ 1
1157
+ """
1158
+ return ZZ.one()
1159
+
1160
+ def weight_lattice_realization(self):
1161
+ """
1162
+ Return the weight lattice realization of ``self``.
1163
+
1164
+ EXAMPLES::
1165
+
1166
+ sage: C = crystals.elementary.Component("A2")
1167
+ sage: C.weight_lattice_realization()
1168
+ Ambient space of the Root system of type ['A', 2]
1169
+
1170
+ sage: P = RootSystem(['A',2]).weight_lattice()
1171
+ sage: C = crystals.elementary.Component(P)
1172
+ sage: C.weight_lattice_realization() is P
1173
+ True
1174
+ """
1175
+ return self._weight_lattice_realization
1176
+
1177
+ class Element(AbstractSingleCrystalElement):
1178
+ r"""
1179
+ Element of a component crystal.
1180
+ """
1181
+
1182
+ def _repr_(self):
1183
+ r"""
1184
+ EXAMPLES::
1185
+
1186
+ sage: C = crystals.elementary.Component("F4")
1187
+ sage: c = C.highest_weight_vector()
1188
+ sage: c
1189
+ c
1190
+ """
1191
+ return 'c'
1192
+
1193
+ def _latex_(self):
1194
+ r"""
1195
+ Return a LaTeX representation of ``self``.
1196
+
1197
+ EXAMPLES::
1198
+
1199
+ sage: C = crystals.elementary.Component("E7")
1200
+ sage: c = C.highest_weight_vector()
1201
+ sage: latex(c)
1202
+ {c}
1203
+ """
1204
+ return "{c}"
1205
+
1206
+ def epsilon(self, i):
1207
+ r"""
1208
+ Return `\varepsilon_i` of ``self``, which is `0` for all `i`.
1209
+
1210
+ INPUT:
1211
+
1212
+ - ``i`` -- an element of the index set
1213
+
1214
+ EXAMPLES::
1215
+
1216
+ sage: C = crystals.elementary.Component("C5")
1217
+ sage: c = C.highest_weight_vector()
1218
+ sage: [c.epsilon(i) for i in C.index_set()]
1219
+ [0, 0, 0, 0, 0]
1220
+ """
1221
+ return 0
1222
+
1223
+ def phi(self, i):
1224
+ r"""
1225
+ Return `\varphi_i` of ``self``, which is `0` for all `i`.
1226
+
1227
+ INPUT:
1228
+
1229
+ - ``i`` -- an element of the index set
1230
+
1231
+ EXAMPLES::
1232
+
1233
+ sage: C = crystals.elementary.Component("C5")
1234
+ sage: c = C.highest_weight_vector()
1235
+ sage: [c.phi(i) for i in C.index_set()]
1236
+ [0, 0, 0, 0, 0]
1237
+ """
1238
+ return 0
1239
+
1240
+ def weight(self):
1241
+ r"""
1242
+ Return the weight of ``self``, which is always `0`.
1243
+
1244
+ EXAMPLES::
1245
+
1246
+ sage: C = crystals.elementary.Component("F4")
1247
+ sage: c = C.highest_weight_vector()
1248
+ sage: c.weight()
1249
+ (0, 0, 0, 0)
1250
+ """
1251
+ return self.parent().weight_lattice_realization().zero()