passagemath-combinat 10.6.42__cp314-cp314t-win_amd64.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 (401) hide show
  1. passagemath_combinat/__init__.py +3 -0
  2. passagemath_combinat-10.6.42.dist-info/DELVEWHEEL +2 -0
  3. passagemath_combinat-10.6.42.dist-info/METADATA +160 -0
  4. passagemath_combinat-10.6.42.dist-info/RECORD +401 -0
  5. passagemath_combinat-10.6.42.dist-info/WHEEL +5 -0
  6. passagemath_combinat-10.6.42.dist-info/top_level.txt +3 -0
  7. passagemath_combinat.libs/libgmp-10-3a5f019e2510aeaad918cab2b57a689d.dll +0 -0
  8. passagemath_combinat.libs/libsymmetrica-3-7dcf900932804d0df5fd0919b4668720.dll +0 -0
  9. sage/algebras/affine_nil_temperley_lieb.py +263 -0
  10. sage/algebras/all.py +24 -0
  11. sage/algebras/all__sagemath_combinat.py +35 -0
  12. sage/algebras/askey_wilson.py +935 -0
  13. sage/algebras/associated_graded.py +345 -0
  14. sage/algebras/cellular_basis.py +350 -0
  15. sage/algebras/cluster_algebra.py +2766 -0
  16. sage/algebras/down_up_algebra.py +860 -0
  17. sage/algebras/free_algebra.py +1698 -0
  18. sage/algebras/free_algebra_element.py +345 -0
  19. sage/algebras/free_algebra_quotient.py +405 -0
  20. sage/algebras/free_algebra_quotient_element.py +295 -0
  21. sage/algebras/free_zinbiel_algebra.py +885 -0
  22. sage/algebras/hall_algebra.py +783 -0
  23. sage/algebras/hecke_algebras/all.py +4 -0
  24. sage/algebras/hecke_algebras/ariki_koike_algebra.py +1796 -0
  25. sage/algebras/hecke_algebras/ariki_koike_specht_modules.py +475 -0
  26. sage/algebras/hecke_algebras/cubic_hecke_algebra.py +3520 -0
  27. sage/algebras/hecke_algebras/cubic_hecke_base_ring.py +1473 -0
  28. sage/algebras/hecke_algebras/cubic_hecke_matrix_rep.py +1079 -0
  29. sage/algebras/iwahori_hecke_algebra.py +3095 -0
  30. sage/algebras/jordan_algebra.py +1773 -0
  31. sage/algebras/lie_conformal_algebras/abelian_lie_conformal_algebra.py +113 -0
  32. sage/algebras/lie_conformal_algebras/affine_lie_conformal_algebra.py +156 -0
  33. sage/algebras/lie_conformal_algebras/all.py +18 -0
  34. sage/algebras/lie_conformal_algebras/bosonic_ghosts_lie_conformal_algebra.py +134 -0
  35. sage/algebras/lie_conformal_algebras/examples.py +43 -0
  36. sage/algebras/lie_conformal_algebras/fermionic_ghosts_lie_conformal_algebra.py +131 -0
  37. sage/algebras/lie_conformal_algebras/finitely_freely_generated_lca.py +139 -0
  38. sage/algebras/lie_conformal_algebras/free_bosons_lie_conformal_algebra.py +174 -0
  39. sage/algebras/lie_conformal_algebras/free_fermions_lie_conformal_algebra.py +167 -0
  40. sage/algebras/lie_conformal_algebras/freely_generated_lie_conformal_algebra.py +107 -0
  41. sage/algebras/lie_conformal_algebras/graded_lie_conformal_algebra.py +135 -0
  42. sage/algebras/lie_conformal_algebras/lie_conformal_algebra.py +353 -0
  43. sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py +236 -0
  44. sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_basis.py +78 -0
  45. sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_structure_coefs.py +328 -0
  46. sage/algebras/lie_conformal_algebras/n2_lie_conformal_algebra.py +117 -0
  47. sage/algebras/lie_conformal_algebras/neveu_schwarz_lie_conformal_algebra.py +86 -0
  48. sage/algebras/lie_conformal_algebras/virasoro_lie_conformal_algebra.py +82 -0
  49. sage/algebras/lie_conformal_algebras/weyl_lie_conformal_algebra.py +205 -0
  50. sage/algebras/nil_coxeter_algebra.py +191 -0
  51. sage/algebras/q_commuting_polynomials.py +673 -0
  52. sage/algebras/q_system.py +608 -0
  53. sage/algebras/quantum_clifford.py +959 -0
  54. sage/algebras/quantum_groups/ace_quantum_onsager.py +693 -0
  55. sage/algebras/quantum_groups/all.py +9 -0
  56. sage/algebras/quantum_groups/fock_space.py +2219 -0
  57. sage/algebras/quantum_groups/q_numbers.py +207 -0
  58. sage/algebras/quantum_groups/quantum_group_gap.py +2695 -0
  59. sage/algebras/quantum_groups/representations.py +591 -0
  60. sage/algebras/quantum_matrix_coordinate_algebra.py +1006 -0
  61. sage/algebras/quantum_oscillator.py +623 -0
  62. sage/algebras/quaternion_algebra.py +20 -0
  63. sage/algebras/quaternion_algebra_element.py +55 -0
  64. sage/algebras/rational_cherednik_algebra.py +525 -0
  65. sage/algebras/schur_algebra.py +670 -0
  66. sage/algebras/shuffle_algebra.py +1011 -0
  67. sage/algebras/splitting_algebra.py +779 -0
  68. sage/algebras/tensor_algebra.py +709 -0
  69. sage/algebras/yangian.py +1082 -0
  70. sage/algebras/yokonuma_hecke_algebra.py +1018 -0
  71. sage/all__sagemath_combinat.py +44 -0
  72. sage/combinat/SJT.py +255 -0
  73. sage/combinat/affine_permutation.py +2405 -0
  74. sage/combinat/algebraic_combinatorics.py +55 -0
  75. sage/combinat/all.py +53 -0
  76. sage/combinat/all__sagemath_combinat.py +195 -0
  77. sage/combinat/alternating_sign_matrix.py +2063 -0
  78. sage/combinat/baxter_permutations.py +346 -0
  79. sage/combinat/bijectionist.py +3220 -0
  80. sage/combinat/binary_recurrence_sequences.py +1180 -0
  81. sage/combinat/blob_algebra.py +685 -0
  82. sage/combinat/catalog_partitions.py +27 -0
  83. sage/combinat/chas/all.py +23 -0
  84. sage/combinat/chas/fsym.py +1180 -0
  85. sage/combinat/chas/wqsym.py +2601 -0
  86. sage/combinat/cluster_complex.py +326 -0
  87. sage/combinat/colored_permutations.py +2039 -0
  88. sage/combinat/colored_permutations_representations.py +964 -0
  89. sage/combinat/composition_signed.py +142 -0
  90. sage/combinat/composition_tableau.py +855 -0
  91. sage/combinat/constellation.py +1729 -0
  92. sage/combinat/core.py +751 -0
  93. sage/combinat/counting.py +12 -0
  94. sage/combinat/crystals/affine.py +742 -0
  95. sage/combinat/crystals/affine_factorization.py +518 -0
  96. sage/combinat/crystals/affinization.py +331 -0
  97. sage/combinat/crystals/alcove_path.py +2013 -0
  98. sage/combinat/crystals/all.py +22 -0
  99. sage/combinat/crystals/bkk_crystals.py +141 -0
  100. sage/combinat/crystals/catalog.py +115 -0
  101. sage/combinat/crystals/catalog_elementary_crystals.py +18 -0
  102. sage/combinat/crystals/catalog_infinity_crystals.py +33 -0
  103. sage/combinat/crystals/catalog_kirillov_reshetikhin.py +18 -0
  104. sage/combinat/crystals/crystals.py +257 -0
  105. sage/combinat/crystals/direct_sum.py +260 -0
  106. sage/combinat/crystals/elementary_crystals.py +1251 -0
  107. sage/combinat/crystals/fast_crystals.py +441 -0
  108. sage/combinat/crystals/fully_commutative_stable_grothendieck.py +1205 -0
  109. sage/combinat/crystals/generalized_young_walls.py +1076 -0
  110. sage/combinat/crystals/highest_weight_crystals.py +436 -0
  111. sage/combinat/crystals/induced_structure.py +695 -0
  112. sage/combinat/crystals/infinity_crystals.py +730 -0
  113. sage/combinat/crystals/kac_modules.py +863 -0
  114. sage/combinat/crystals/kirillov_reshetikhin.py +4196 -0
  115. sage/combinat/crystals/kyoto_path_model.py +497 -0
  116. sage/combinat/crystals/letters.cp314t-win_amd64.pyd +0 -0
  117. sage/combinat/crystals/letters.pxd +79 -0
  118. sage/combinat/crystals/letters.pyx +3056 -0
  119. sage/combinat/crystals/littelmann_path.py +1518 -0
  120. sage/combinat/crystals/monomial_crystals.py +1262 -0
  121. sage/combinat/crystals/multisegments.py +462 -0
  122. sage/combinat/crystals/mv_polytopes.py +467 -0
  123. sage/combinat/crystals/pbw_crystal.py +511 -0
  124. sage/combinat/crystals/pbw_datum.cp314t-win_amd64.pyd +0 -0
  125. sage/combinat/crystals/pbw_datum.pxd +4 -0
  126. sage/combinat/crystals/pbw_datum.pyx +487 -0
  127. sage/combinat/crystals/polyhedral_realization.py +372 -0
  128. sage/combinat/crystals/spins.cp314t-win_amd64.pyd +0 -0
  129. sage/combinat/crystals/spins.pxd +21 -0
  130. sage/combinat/crystals/spins.pyx +756 -0
  131. sage/combinat/crystals/star_crystal.py +290 -0
  132. sage/combinat/crystals/subcrystal.py +464 -0
  133. sage/combinat/crystals/tensor_product.py +1177 -0
  134. sage/combinat/crystals/tensor_product_element.cp314t-win_amd64.pyd +0 -0
  135. sage/combinat/crystals/tensor_product_element.pxd +35 -0
  136. sage/combinat/crystals/tensor_product_element.pyx +1870 -0
  137. sage/combinat/crystals/virtual_crystal.py +420 -0
  138. sage/combinat/cyclic_sieving_phenomenon.py +204 -0
  139. sage/combinat/debruijn_sequence.cp314t-win_amd64.pyd +0 -0
  140. sage/combinat/debruijn_sequence.pyx +355 -0
  141. sage/combinat/decorated_permutation.py +270 -0
  142. sage/combinat/degree_sequences.cp314t-win_amd64.pyd +0 -0
  143. sage/combinat/degree_sequences.pyx +588 -0
  144. sage/combinat/derangements.py +527 -0
  145. sage/combinat/descent_algebra.py +1008 -0
  146. sage/combinat/diagram.py +1551 -0
  147. sage/combinat/diagram_algebras.py +5886 -0
  148. sage/combinat/dyck_word.py +4349 -0
  149. sage/combinat/e_one_star.py +1623 -0
  150. sage/combinat/enumerated_sets.py +123 -0
  151. sage/combinat/expnums.cp314t-win_amd64.pyd +0 -0
  152. sage/combinat/expnums.pyx +148 -0
  153. sage/combinat/fast_vector_partitions.cp314t-win_amd64.pyd +0 -0
  154. sage/combinat/fast_vector_partitions.pyx +346 -0
  155. sage/combinat/fqsym.py +1977 -0
  156. sage/combinat/free_dendriform_algebra.py +954 -0
  157. sage/combinat/free_prelie_algebra.py +1141 -0
  158. sage/combinat/fully_commutative_elements.py +1077 -0
  159. sage/combinat/fully_packed_loop.py +1523 -0
  160. sage/combinat/gelfand_tsetlin_patterns.py +1409 -0
  161. sage/combinat/gray_codes.py +311 -0
  162. sage/combinat/grossman_larson_algebras.py +667 -0
  163. sage/combinat/growth.py +4352 -0
  164. sage/combinat/hall_polynomial.py +188 -0
  165. sage/combinat/hillman_grassl.py +866 -0
  166. sage/combinat/integer_matrices.py +329 -0
  167. sage/combinat/integer_vectors_mod_permgroup.py +1238 -0
  168. sage/combinat/k_tableau.py +4564 -0
  169. sage/combinat/kazhdan_lusztig.py +215 -0
  170. sage/combinat/key_polynomial.py +885 -0
  171. sage/combinat/knutson_tao_puzzles.py +2286 -0
  172. sage/combinat/lr_tableau.py +311 -0
  173. sage/combinat/matrices/all.py +24 -0
  174. sage/combinat/matrices/hadamard_matrix.py +3790 -0
  175. sage/combinat/matrices/latin.py +2912 -0
  176. sage/combinat/misc.py +401 -0
  177. sage/combinat/multiset_partition_into_sets_ordered.py +3541 -0
  178. sage/combinat/ncsf_qsym/all.py +21 -0
  179. sage/combinat/ncsf_qsym/combinatorics.py +317 -0
  180. sage/combinat/ncsf_qsym/generic_basis_code.py +1427 -0
  181. sage/combinat/ncsf_qsym/ncsf.py +5637 -0
  182. sage/combinat/ncsf_qsym/qsym.py +4053 -0
  183. sage/combinat/ncsf_qsym/tutorial.py +447 -0
  184. sage/combinat/ncsym/all.py +21 -0
  185. sage/combinat/ncsym/bases.py +855 -0
  186. sage/combinat/ncsym/dual.py +593 -0
  187. sage/combinat/ncsym/ncsym.py +2076 -0
  188. sage/combinat/necklace.py +551 -0
  189. sage/combinat/non_decreasing_parking_function.py +634 -0
  190. sage/combinat/nu_dyck_word.py +1474 -0
  191. sage/combinat/output.py +861 -0
  192. sage/combinat/parallelogram_polyomino.py +4326 -0
  193. sage/combinat/parking_functions.py +1602 -0
  194. sage/combinat/partition_algebra.py +1998 -0
  195. sage/combinat/partition_kleshchev.py +1982 -0
  196. sage/combinat/partition_shifting_algebras.py +584 -0
  197. sage/combinat/partition_tuple.py +3114 -0
  198. sage/combinat/path_tableaux/all.py +13 -0
  199. sage/combinat/path_tableaux/catalog.py +29 -0
  200. sage/combinat/path_tableaux/dyck_path.py +380 -0
  201. sage/combinat/path_tableaux/frieze.py +476 -0
  202. sage/combinat/path_tableaux/path_tableau.py +728 -0
  203. sage/combinat/path_tableaux/semistandard.py +510 -0
  204. sage/combinat/perfect_matching.py +779 -0
  205. sage/combinat/plane_partition.py +3300 -0
  206. sage/combinat/q_bernoulli.cp314t-win_amd64.pyd +0 -0
  207. sage/combinat/q_bernoulli.pyx +128 -0
  208. sage/combinat/quickref.py +81 -0
  209. sage/combinat/recognizable_series.py +2051 -0
  210. sage/combinat/regular_sequence.py +4316 -0
  211. sage/combinat/regular_sequence_bounded.py +543 -0
  212. sage/combinat/restricted_growth.py +81 -0
  213. sage/combinat/ribbon.py +20 -0
  214. sage/combinat/ribbon_shaped_tableau.py +489 -0
  215. sage/combinat/ribbon_tableau.py +1180 -0
  216. sage/combinat/rigged_configurations/all.py +46 -0
  217. sage/combinat/rigged_configurations/bij_abstract_class.py +548 -0
  218. sage/combinat/rigged_configurations/bij_infinity.py +370 -0
  219. sage/combinat/rigged_configurations/bij_type_A.py +163 -0
  220. sage/combinat/rigged_configurations/bij_type_A2_dual.py +338 -0
  221. sage/combinat/rigged_configurations/bij_type_A2_even.py +218 -0
  222. sage/combinat/rigged_configurations/bij_type_A2_odd.py +199 -0
  223. sage/combinat/rigged_configurations/bij_type_B.py +900 -0
  224. sage/combinat/rigged_configurations/bij_type_C.py +267 -0
  225. sage/combinat/rigged_configurations/bij_type_D.py +771 -0
  226. sage/combinat/rigged_configurations/bij_type_D_tri.py +392 -0
  227. sage/combinat/rigged_configurations/bij_type_D_twisted.py +576 -0
  228. sage/combinat/rigged_configurations/bij_type_E67.py +402 -0
  229. sage/combinat/rigged_configurations/bijection.py +143 -0
  230. sage/combinat/rigged_configurations/kleber_tree.py +1475 -0
  231. sage/combinat/rigged_configurations/kr_tableaux.py +1898 -0
  232. sage/combinat/rigged_configurations/rc_crystal.py +461 -0
  233. sage/combinat/rigged_configurations/rc_infinity.py +540 -0
  234. sage/combinat/rigged_configurations/rigged_configuration_element.py +2403 -0
  235. sage/combinat/rigged_configurations/rigged_configurations.py +1918 -0
  236. sage/combinat/rigged_configurations/rigged_partition.cp314t-win_amd64.pyd +0 -0
  237. sage/combinat/rigged_configurations/rigged_partition.pxd +15 -0
  238. sage/combinat/rigged_configurations/rigged_partition.pyx +680 -0
  239. sage/combinat/rigged_configurations/tensor_product_kr_tableaux.py +499 -0
  240. sage/combinat/rigged_configurations/tensor_product_kr_tableaux_element.py +428 -0
  241. sage/combinat/rsk.py +3438 -0
  242. sage/combinat/schubert_polynomial.py +508 -0
  243. sage/combinat/set_partition.py +3318 -0
  244. sage/combinat/set_partition_iterator.cp314t-win_amd64.pyd +0 -0
  245. sage/combinat/set_partition_iterator.pyx +136 -0
  246. sage/combinat/set_partition_ordered.py +1590 -0
  247. sage/combinat/sf/abreu_nigro.py +346 -0
  248. sage/combinat/sf/all.py +52 -0
  249. sage/combinat/sf/character.py +576 -0
  250. sage/combinat/sf/classical.py +319 -0
  251. sage/combinat/sf/dual.py +996 -0
  252. sage/combinat/sf/elementary.py +549 -0
  253. sage/combinat/sf/hall_littlewood.py +1028 -0
  254. sage/combinat/sf/hecke.py +336 -0
  255. sage/combinat/sf/homogeneous.py +464 -0
  256. sage/combinat/sf/jack.py +1428 -0
  257. sage/combinat/sf/k_dual.py +1458 -0
  258. sage/combinat/sf/kfpoly.py +447 -0
  259. sage/combinat/sf/llt.py +789 -0
  260. sage/combinat/sf/macdonald.py +2019 -0
  261. sage/combinat/sf/monomial.py +525 -0
  262. sage/combinat/sf/multiplicative.py +113 -0
  263. sage/combinat/sf/new_kschur.py +1786 -0
  264. sage/combinat/sf/ns_macdonald.py +964 -0
  265. sage/combinat/sf/orthogonal.py +246 -0
  266. sage/combinat/sf/orthotriang.py +355 -0
  267. sage/combinat/sf/powersum.py +963 -0
  268. sage/combinat/sf/schur.py +880 -0
  269. sage/combinat/sf/sf.py +1653 -0
  270. sage/combinat/sf/sfa.py +7053 -0
  271. sage/combinat/sf/symplectic.py +253 -0
  272. sage/combinat/sf/witt.py +721 -0
  273. sage/combinat/shifted_primed_tableau.py +2735 -0
  274. sage/combinat/shuffle.py +830 -0
  275. sage/combinat/sidon_sets.py +146 -0
  276. sage/combinat/similarity_class_type.py +1721 -0
  277. sage/combinat/sine_gordon.py +618 -0
  278. sage/combinat/six_vertex_model.py +784 -0
  279. sage/combinat/skew_partition.py +2053 -0
  280. sage/combinat/skew_tableau.py +2989 -0
  281. sage/combinat/sloane_functions.py +8935 -0
  282. sage/combinat/specht_module.py +1403 -0
  283. sage/combinat/species/all.py +48 -0
  284. sage/combinat/species/characteristic_species.py +321 -0
  285. sage/combinat/species/composition_species.py +273 -0
  286. sage/combinat/species/cycle_species.py +284 -0
  287. sage/combinat/species/empty_species.py +155 -0
  288. sage/combinat/species/functorial_composition_species.py +148 -0
  289. sage/combinat/species/generating_series.py +673 -0
  290. sage/combinat/species/library.py +148 -0
  291. sage/combinat/species/linear_order_species.py +169 -0
  292. sage/combinat/species/misc.py +83 -0
  293. sage/combinat/species/partition_species.py +290 -0
  294. sage/combinat/species/permutation_species.py +268 -0
  295. sage/combinat/species/product_species.py +423 -0
  296. sage/combinat/species/recursive_species.py +476 -0
  297. sage/combinat/species/set_species.py +192 -0
  298. sage/combinat/species/species.py +820 -0
  299. sage/combinat/species/structure.py +539 -0
  300. sage/combinat/species/subset_species.py +243 -0
  301. sage/combinat/species/sum_species.py +225 -0
  302. sage/combinat/subword.py +564 -0
  303. sage/combinat/subword_complex.py +2122 -0
  304. sage/combinat/subword_complex_c.cp314t-win_amd64.pyd +0 -0
  305. sage/combinat/subword_complex_c.pyx +119 -0
  306. sage/combinat/super_tableau.py +821 -0
  307. sage/combinat/superpartition.py +1154 -0
  308. sage/combinat/symmetric_group_algebra.py +3774 -0
  309. sage/combinat/symmetric_group_representations.py +1830 -0
  310. sage/combinat/t_sequences.py +877 -0
  311. sage/combinat/tableau.py +9506 -0
  312. sage/combinat/tableau_residues.py +860 -0
  313. sage/combinat/tableau_tuple.py +5353 -0
  314. sage/combinat/tiling.py +2432 -0
  315. sage/combinat/triangles_FHM.py +777 -0
  316. sage/combinat/tutorial.py +1857 -0
  317. sage/combinat/vector_partition.py +337 -0
  318. sage/combinat/words/abstract_word.py +1722 -0
  319. sage/combinat/words/all.py +59 -0
  320. sage/combinat/words/alphabet.py +268 -0
  321. sage/combinat/words/finite_word.py +7201 -0
  322. sage/combinat/words/infinite_word.py +113 -0
  323. sage/combinat/words/lyndon_word.py +652 -0
  324. sage/combinat/words/morphic.py +351 -0
  325. sage/combinat/words/morphism.py +3878 -0
  326. sage/combinat/words/paths.py +2932 -0
  327. sage/combinat/words/shuffle_product.py +278 -0
  328. sage/combinat/words/suffix_trees.py +1873 -0
  329. sage/combinat/words/word.py +769 -0
  330. sage/combinat/words/word_char.cp314t-win_amd64.pyd +0 -0
  331. sage/combinat/words/word_char.pyx +847 -0
  332. sage/combinat/words/word_datatypes.cp314t-win_amd64.pyd +0 -0
  333. sage/combinat/words/word_datatypes.pxd +4 -0
  334. sage/combinat/words/word_datatypes.pyx +1067 -0
  335. sage/combinat/words/word_generators.py +2026 -0
  336. sage/combinat/words/word_infinite_datatypes.py +1218 -0
  337. sage/combinat/words/word_options.py +99 -0
  338. sage/combinat/words/words.py +2396 -0
  339. sage/data_structures/all__sagemath_combinat.py +1 -0
  340. sage/databases/all__sagemath_combinat.py +13 -0
  341. sage/databases/findstat.py +4897 -0
  342. sage/databases/oeis.py +2058 -0
  343. sage/databases/sloane.py +393 -0
  344. sage/dynamics/all__sagemath_combinat.py +14 -0
  345. sage/dynamics/cellular_automata/all.py +7 -0
  346. sage/dynamics/cellular_automata/catalog.py +34 -0
  347. sage/dynamics/cellular_automata/elementary.py +612 -0
  348. sage/dynamics/cellular_automata/glca.py +477 -0
  349. sage/dynamics/cellular_automata/solitons.py +1463 -0
  350. sage/dynamics/finite_dynamical_system.py +1249 -0
  351. sage/dynamics/finite_dynamical_system_catalog.py +382 -0
  352. sage/games/all.py +7 -0
  353. sage/games/hexad.py +704 -0
  354. sage/games/quantumino.py +591 -0
  355. sage/games/sudoku.py +889 -0
  356. sage/games/sudoku_backtrack.cp314t-win_amd64.pyd +0 -0
  357. sage/games/sudoku_backtrack.pyx +189 -0
  358. sage/groups/all__sagemath_combinat.py +1 -0
  359. sage/groups/indexed_free_group.py +489 -0
  360. sage/libs/all__sagemath_combinat.py +6 -0
  361. sage/libs/lrcalc/__init__.py +1 -0
  362. sage/libs/lrcalc/lrcalc.py +525 -0
  363. sage/libs/symmetrica/__init__.py +7 -0
  364. sage/libs/symmetrica/all.py +101 -0
  365. sage/libs/symmetrica/kostka.pxi +168 -0
  366. sage/libs/symmetrica/part.pxi +193 -0
  367. sage/libs/symmetrica/plet.pxi +42 -0
  368. sage/libs/symmetrica/sab.pxi +196 -0
  369. sage/libs/symmetrica/sb.pxi +332 -0
  370. sage/libs/symmetrica/sc.pxi +192 -0
  371. sage/libs/symmetrica/schur.pxi +956 -0
  372. sage/libs/symmetrica/symmetrica.cp314t-win_amd64.pyd +0 -0
  373. sage/libs/symmetrica/symmetrica.pxi +1172 -0
  374. sage/libs/symmetrica/symmetrica.pyx +39 -0
  375. sage/monoids/all.py +13 -0
  376. sage/monoids/automatic_semigroup.py +1054 -0
  377. sage/monoids/free_abelian_monoid.py +315 -0
  378. sage/monoids/free_abelian_monoid_element.cp314t-win_amd64.pyd +0 -0
  379. sage/monoids/free_abelian_monoid_element.pxd +16 -0
  380. sage/monoids/free_abelian_monoid_element.pyx +397 -0
  381. sage/monoids/free_monoid.py +335 -0
  382. sage/monoids/free_monoid_element.py +431 -0
  383. sage/monoids/hecke_monoid.py +65 -0
  384. sage/monoids/string_monoid.py +817 -0
  385. sage/monoids/string_monoid_element.py +547 -0
  386. sage/monoids/string_ops.py +143 -0
  387. sage/monoids/trace_monoid.py +972 -0
  388. sage/rings/all__sagemath_combinat.py +2 -0
  389. sage/sat/all.py +4 -0
  390. sage/sat/boolean_polynomials.py +405 -0
  391. sage/sat/converters/__init__.py +6 -0
  392. sage/sat/converters/anf2cnf.py +14 -0
  393. sage/sat/converters/polybori.py +611 -0
  394. sage/sat/solvers/__init__.py +5 -0
  395. sage/sat/solvers/cryptominisat.py +287 -0
  396. sage/sat/solvers/dimacs.py +783 -0
  397. sage/sat/solvers/picosat.py +228 -0
  398. sage/sat/solvers/sat_lp.py +156 -0
  399. sage/sat/solvers/satsolver.cp314t-win_amd64.pyd +0 -0
  400. sage/sat/solvers/satsolver.pxd +3 -0
  401. sage/sat/solvers/satsolver.pyx +405 -0
@@ -0,0 +1,730 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.graphs sage.modules
3
+ r"""
4
+ `\mathcal{B}(\infty)` crystals of tableaux in nonexceptional types and `G_2`
5
+
6
+ A tableau model for `\mathcal{B}(\infty)`. For more information, see
7
+ :class:`~sage.combinat.crystals.infinity_crystals.InfinityCrystalOfTableaux`.
8
+
9
+ AUTHORS:
10
+
11
+ - Ben Salisbury: initial version
12
+ - Travis Scrimshaw: initial version
13
+ """
14
+
15
+ #*****************************************************************************
16
+ # Copyright (C) 2013 Ben Salisbury <bsalisbury1 at gmail.com>
17
+ # Travis Scrimshaw <tscrim at ucdavis.edu>
18
+ #
19
+ # Distributed under the terms of the GNU General Public License (GPL)
20
+ #
21
+ # This code is distributed in the hope that it will be useful,
22
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
23
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24
+ # General Public License for more details.
25
+ #
26
+ # The full text of the GPL is available at:
27
+ #
28
+ # http://www.gnu.org/licenses/
29
+ #****************************************************************************
30
+
31
+ from sage.structure.parent import Parent
32
+ from sage.categories.infinite_enumerated_sets import InfiniteEnumeratedSets
33
+ from sage.categories.highest_weight_crystals import HighestWeightCrystals
34
+ from sage.categories.crystals import Crystals
35
+ from sage.categories.supercrystals import SuperCrystals
36
+ from sage.categories.homset import Hom
37
+ from sage.misc.cachefunc import cached_method
38
+ from sage.misc.flatten import flatten
39
+
40
+ from sage.combinat.partition import Partition
41
+ from sage.combinat.root_system.cartan_type import CartanType
42
+ from sage.combinat.crystals.letters import CrystalOfLetters
43
+ from sage.combinat.crystals.tensor_product import CrystalOfWords
44
+ from sage.combinat.crystals.tensor_product_element import (CrystalOfTableauxElement,
45
+ InfinityCrystalOfTableauxElement, InfinityCrystalOfTableauxElementTypeD,
46
+ InfinityQueerCrystalOfTableauxElement)
47
+
48
+
49
+ class InfinityCrystalOfTableaux(CrystalOfWords):
50
+ r"""
51
+ `\mathcal{B}(\infty)` crystal of tableaux.
52
+
53
+ A tableaux model `\mathcal{T}(\infty)` for the crystal
54
+ `\mathcal{B}(\infty)` is introduced by Hong and Lee in [HL2008]_. This model
55
+ is currently valid for types `A_n`, `B_n`, `C_n`, `D_n`, and `G_2`, and
56
+ builds on the tableaux model given by Kashiwara and Nakashima [KN1994]_ in
57
+ types `A_n`, `B_n`, `C_n`, and `D_n`, and by Kang and Misra [KM1994]_ in
58
+ type `G_2`.
59
+
60
+ .. NOTE::
61
+
62
+ We are using the English convention for our tableaux.
63
+
64
+ We say a tableau `T` is *marginally large* if:
65
+
66
+ - for each `1 \leq i \leq n`, the leftmost box in the `i`-th row
67
+ from the top in `T` is an `i`-box,
68
+
69
+ - for each `1 \leq i \leq n`, the number of `i`-boxes in the `i`-th row
70
+ from the top in `T` is greater than the total number of boxes in the
71
+ `(i+1)`-th row by exactly one.
72
+
73
+ We now will describe this tableaux model type-by-type.
74
+
75
+ .. rubric:: Type `A_n`
76
+
77
+ `\mathcal{T}(\infty)` is the set of marginally large semistandard
78
+ tableaux with exactly `n` rows over the alphabet `\{1 \prec 2 \prec
79
+ \cdots \prec n+1 \}`.
80
+
81
+ .. rubric:: Type `B_n`
82
+
83
+ `\mathcal{T}(\infty)` is the set of marginally large semistandard
84
+ tableaux with exactly `n` rows over the alphabet `\{1 \prec \cdots
85
+ \prec n \prec 0 \prec \overline{n} \prec \cdots \prec \overline{1} \}`
86
+ and subject to the following constraints:
87
+
88
+ - for each `1 \le i \le n`, the contents of the boxes in the
89
+ `i`-th row are `\preceq \overline{i}`,
90
+
91
+ - the entry `0` can appear at most once in a single row.
92
+
93
+ .. rubric:: Type `C_n`
94
+
95
+ `\mathcal{T}(\infty)` is the set of marginally large semistandard
96
+ tableaux with exactly `n` rows over the alphabet `\{1 \prec \cdots
97
+ \prec n \prec \overline{n} \prec \cdots \prec \overline{1} \}` and
98
+ for each `1 \leq i \leq n`, the contents of the boxes in the `i`-th
99
+ row are `\preceq \overline{i}`.
100
+
101
+ .. rubric:: Type `D_n`
102
+
103
+ `\mathcal{T}(\infty)` is the set of marginally large semistandard
104
+ tableaux with exactly `n-1` rows over the alphabet `\{1 \prec \cdots
105
+ \prec n, \overline{n} \prec \cdots \prec \overline{1} \}` and subject
106
+ to the following constraints:
107
+
108
+ - for each `1 \le i \le n`, the contents of the boxes in the `i`-th
109
+ row are `\preceq \overline{i}`,
110
+
111
+ - the entries `n` and `\overline{n}` may not appear simultaneously in
112
+ a single row.
113
+
114
+ .. rubric:: Type `G_2`
115
+
116
+ `\mathcal{T}(\infty)` is the set of marginally large semistandard
117
+ tableaux with exactly `2` rows over the ordered alphabet `\{1 \prec
118
+ 2 \prec 3 \prec 0 \prec \overline{3} \prec \overline{2} \prec
119
+ \overline{1}\}` and subject to the following constraints:
120
+
121
+ - the contents of the boxes in the first row are `\preceq \overline{i}`,
122
+
123
+ - the contents of the boxes in the second row are `\preceq 3`,
124
+
125
+ - the entry `0` can appear at most once in the first row and not at
126
+ all in the second row.
127
+
128
+ In particular, the shape of the tableaux is not fixed in any instance of
129
+ `\mathcal{T}(\infty)`; the row lengths of a tableau can be arbitrarily long.
130
+
131
+ INPUT:
132
+
133
+ - ``cartan_type`` -- one of ``['A',n]``, ``['B',n]``, ``['C',n]``,
134
+ ``['D',n]``, or ``['G',2]``, where ``n`` is a positive integer
135
+
136
+ EXAMPLES::
137
+
138
+ sage: B = crystals.infinity.Tableaux(['A',2])
139
+ sage: b = B.highest_weight_vector(); b.pp()
140
+ 1 1
141
+ 2
142
+ sage: b.f_string([2,1,1,2,2,2]).pp()
143
+ 1 1 1 1 1 2 3
144
+ 2 3 3 3
145
+
146
+ sage: B = crystals.infinity.Tableaux(['G',2])
147
+ sage: b = B(rows=[[1,1,1,1,1,2,3,3,0,-3,-1,-1,-1],[2,3,3,3]])
148
+ sage: b.e_string([2,1,1,1,1,1,1]).pp()
149
+ 1 1 1 1 2 3 3 3 3 -2 -2 -2
150
+ 2 3 3
151
+ sage: b.e_string([2,1,1,1,1,1,1,1])
152
+
153
+ We check that a few classical crystals embed into `\mathcal{T}(\infty)`::
154
+
155
+ sage: def crystal_test(B, C):
156
+ ....: T = crystals.elementary.T(C.cartan_type(), C.module_generators[0].weight())
157
+ ....: TP = crystals.TensorProduct(T, B)
158
+ ....: mg = TP(T[0], B.module_generators[0])
159
+ ....: g = {C.module_generators[0]: mg}
160
+ ....: f = C.crystal_morphism(g, category=HighestWeightCrystals())
161
+ ....: G = B.digraph(subset=[f(x) for x in C])
162
+ ....: return G.is_isomorphic(C.digraph(), edge_labels=True)
163
+ sage: B = crystals.infinity.Tableaux(['A',2])
164
+ sage: C = crystals.Tableaux(['A',2], shape=[2,1])
165
+ sage: crystal_test(B, C)
166
+ True
167
+ sage: C = crystals.Tableaux(['A',2], shape=[6,2])
168
+ sage: crystal_test(B, C)
169
+ True
170
+ sage: B = crystals.infinity.Tableaux(['B',2])
171
+ sage: C = crystals.Tableaux(['B',2], shape=[3])
172
+ sage: crystal_test(B, C)
173
+ True
174
+ sage: C = crystals.Tableaux(['B',2], shape=[2,1])
175
+ sage: crystal_test(B, C)
176
+ True
177
+ sage: B = crystals.infinity.Tableaux(['C',3])
178
+ sage: C = crystals.Tableaux(['C',3], shape=[2,1])
179
+ sage: crystal_test(B, C)
180
+ True
181
+ sage: B = crystals.infinity.Tableaux(['D',4])
182
+ sage: C = crystals.Tableaux(['D',4], shape=[2])
183
+ sage: crystal_test(B, C)
184
+ True
185
+ sage: C = crystals.Tableaux(['D',4], shape=[1,1,1,1])
186
+ sage: crystal_test(B, C)
187
+ True
188
+ sage: B = crystals.infinity.Tableaux(['G',2])
189
+ sage: C = crystals.Tableaux(['G',2], shape=[3])
190
+ sage: crystal_test(B, C)
191
+ True
192
+ """
193
+ @staticmethod
194
+ def __classcall_private__(cls, cartan_type):
195
+ """
196
+ Normalize input to ensure a unique representation.
197
+
198
+ EXAMPLES::
199
+
200
+ sage: B = crystals.infinity.Tableaux(['A',4])
201
+ sage: B2 = crystals.infinity.Tableaux(CartanType(['A',4]))
202
+ sage: B is B2
203
+ True
204
+ """
205
+ cartan_type = CartanType(cartan_type)
206
+ if cartan_type.type() == 'D':
207
+ return InfinityCrystalOfTableauxTypeD(cartan_type)
208
+ if cartan_type.type() == 'Q':
209
+ return DualInfinityQueerCrystalOfTableaux(cartan_type)
210
+ return super().__classcall__(cls, cartan_type)
211
+
212
+ def __init__(self, cartan_type):
213
+ """
214
+ Initialize ``self``.
215
+
216
+ EXAMPLES::
217
+
218
+ sage: B = crystals.infinity.Tableaux(['A',2])
219
+ sage: TestSuite(B).run() # long time
220
+ """
221
+ Parent.__init__(self, category=(HighestWeightCrystals(),
222
+ InfiniteEnumeratedSets()))
223
+ self._cartan_type = cartan_type
224
+ self.letters = CrystalOfLetters(cartan_type)
225
+ self.module_generators = (self.module_generator(),)
226
+
227
+ def _repr_(self):
228
+ """
229
+ Return a string representation of ``self``.
230
+
231
+ EXAMPLES::
232
+
233
+ sage: B = crystals.infinity.Tableaux(['A',4]); B
234
+ The infinity crystal of tableaux of type ['A', 4]
235
+ """
236
+ return "The infinity crystal of tableaux of type %s" % self._cartan_type
237
+
238
+ @cached_method
239
+ def module_generator(self):
240
+ r"""
241
+ Return the module generator (or highest weight element) of ``self``.
242
+
243
+ The module generator is the unique tableau of shape `(n, n-1, \ldots,
244
+ 2, 1)` with weight `0`.
245
+
246
+ EXAMPLES::
247
+
248
+ sage: T = crystals.infinity.Tableaux(['A',3])
249
+ sage: T.module_generator()
250
+ [[1, 1, 1], [2, 2], [3]]
251
+ """
252
+ n = self._cartan_type.rank()
253
+ p = Partition(list(reversed(range(1, n + 1))))
254
+ # The column canonical tableau, read by columns
255
+ module_generator = flatten([[p[j]-i for i in range(p[j])] for j in range(n)])
256
+ return self(list=[self.letters(x) for x in module_generator])
257
+
258
+ def _element_constructor_(self, *args, **options):
259
+ """
260
+ Construct an element of ``self`` from the input data.
261
+
262
+ EXAMPLES::
263
+
264
+ sage: T = crystals.Tableaux(['A',3], shape = [2,2])
265
+ sage: T(rows=[[1,2],[3,4]])
266
+ [[1, 2], [3, 4]]
267
+ sage: T(columns=[[3,1],[4,2]])
268
+ [[1, 2], [3, 4]]
269
+ """
270
+ return self.element_class(self, *args, **options)
271
+
272
+ def _coerce_map_from_(self, P):
273
+ """
274
+ Return ``True`` or the coerce map from ``P`` if a map exists.
275
+
276
+ EXAMPLES::
277
+
278
+ sage: T = crystals.infinity.Tableaux(['A',3])
279
+ sage: RC = crystals.infinity.RiggedConfigurations(['A',3])
280
+ sage: T._coerce_map_from_(RC)
281
+ Crystal Isomorphism morphism:
282
+ From: The infinity crystal of rigged configurations of type ['A', 3]
283
+ To: The infinity crystal of tableaux of type ['A', 3]
284
+ """
285
+ from sage.combinat.rigged_configurations.rc_infinity import (InfinityCrystalOfRiggedConfigurations,
286
+ InfinityCrystalOfNonSimplyLacedRC)
287
+ if (isinstance(P, InfinityCrystalOfRiggedConfigurations)
288
+ and (self.cartan_type().is_simply_laced()
289
+ or isinstance(P, InfinityCrystalOfNonSimplyLacedRC))):
290
+ from sage.combinat.rigged_configurations.bij_infinity import FromRCIsomorphism
291
+ return FromRCIsomorphism(Hom(P, self))
292
+ return super()._coerce_map_from_(P)
293
+
294
+ class Element(InfinityCrystalOfTableauxElement):
295
+ r"""
296
+ Elements in `\mathcal{B}(\infty)` crystal of tableaux.
297
+ """
298
+
299
+ def phi(self, i):
300
+ r"""
301
+ Return `\varphi_i` of ``self``.
302
+
303
+ Let `T \in \mathcal{B}(\infty)` Define `\varphi_i(T) :=
304
+ \varepsilon_i(T) + \langle h_i, \mathrm{wt}(T) \rangle`, where `h_i`
305
+ is the `i`-th simple coroot and `\mathrm{wt}(T)` is the :meth:`weight`
306
+ of `T`.
307
+
308
+ INPUT:
309
+
310
+ - ``i`` -- an element of the index set
311
+
312
+ EXAMPLES::
313
+
314
+ sage: B = crystals.infinity.Tableaux("A3")
315
+ sage: [B.highest_weight_vector().f_string([1,3,2,3,1,3,2,1]).phi(i) for i in B.index_set()]
316
+ [-3, 4, -3]
317
+
318
+ sage: B = crystals.infinity.Tableaux("G2")
319
+ sage: [B.highest_weight_vector().f_string([2,2,1,2,1,1,1,2]).phi(i) for i in B.index_set()]
320
+ [5, -3]
321
+ """
322
+ P = self.parent().weight_lattice_realization()
323
+ h = P.simple_coroots()
324
+ return self.epsilon(i) + P(self.weight()).scalar(h[i])
325
+
326
+ @cached_method
327
+ def weight(self):
328
+ r"""
329
+ Return the weight of ``self``.
330
+
331
+ From the definition of a crystal and that the highest weight
332
+ element `b_{\infty}` of `\mathcal{B}(\infty)` is `0`, the weight of
333
+ `T \in \mathcal{B}(\infty)` can be defined as `\mathrm{wt}(T)
334
+ := -\sum_j \alpha_{i_j}` where `\widetilde{e}_{i_1} \cdots
335
+ \widetilde{e}_{i_{\ell}} T = b_{\infty}` and `\{\alpha_i\}` is the
336
+ set of simple roots. (Note that the weight is independent of the
337
+ path chosen to get to the highest weight.)
338
+
339
+ However we can also take advantage of the fact that
340
+ `\rho \colon R_{\lambda} \otimes \mathcal{B}(\infty) \longrightarrow
341
+ B(\lambda)`, where `\lambda` is the shape of `T`, preserves the
342
+ tableau representation of `T`. Therefore
343
+
344
+ .. MATH::
345
+
346
+ \mathrm{wt}(T) = \mathrm{wt}\bigl( \rho(T) \bigr) - \lambda
347
+
348
+ where `\mathrm{wt}\bigl( \rho(T) \bigr)` is just the usual weight of
349
+ the tableau `T`.
350
+
351
+ Let `\Lambda_i` be the `i`-th fundamental weight. In type `D`, the
352
+ height `n-1` columns corresponds to `\Lambda_{n-1} + \Lambda_n` and
353
+ the in type `B`, the height `n` columns corresponds to
354
+ `2 \Lambda_n`.
355
+
356
+ EXAMPLES::
357
+
358
+ sage: B = crystals.infinity.Tableaux("C7")
359
+ sage: b = B.highest_weight_vector().f_string([1,6,4,7,4,2,4,6,2,4,6,7,1,2,4,7])
360
+ sage: b.weight()
361
+ (-2, -1, 3, -5, 5, -3, -3)
362
+
363
+ Check that the definitions agree::
364
+
365
+ sage: P = B.weight_lattice_realization()
366
+ sage: alpha = P.simple_roots()
367
+ sage: b.weight() == -2*alpha[1] - 3*alpha[2] - 5*alpha[4] - 3*alpha[6] - 3*alpha[7]
368
+ True
369
+
370
+ Check that it works for type `B`::
371
+
372
+ sage: B = crystals.infinity.Tableaux("B2")
373
+ sage: B.highest_weight_vector().weight()
374
+ (0, 0)
375
+ sage: b = B.highest_weight_vector().f_string([1,2,2,2,1,2])
376
+ sage: P = B.weight_lattice_realization()
377
+ sage: alpha = P.simple_roots()
378
+ sage: b.weight() == -2*alpha[1] - 4*alpha[2]
379
+ True
380
+
381
+ Check that it works for type `D`::
382
+
383
+ sage: B = crystals.infinity.Tableaux("D4")
384
+ sage: B.highest_weight_vector().weight()
385
+ (0, 0, 0, 0)
386
+ sage: b = B.highest_weight_vector().f_string([1,4,4,2,4,3,2,4,1,3,2,4])
387
+ sage: P = B.weight_lattice_realization()
388
+ sage: alpha = P.simple_roots()
389
+ sage: b.weight() == -2*alpha[1] - 3*alpha[2] - 2*alpha[3] - 5*alpha[4]
390
+ True
391
+ """
392
+ P = self.parent().weight_lattice_realization()
393
+ La = P.fundamental_weights()
394
+ cur_col_len = 1
395
+ shape_wt = P.zero()
396
+ n = self.cartan_type().rank()
397
+ ty = self.cartan_type().type()
398
+ for i in range(1, len(self)):
399
+ if self[i-1] < self[i] or (self[i-1].value != 0 and self[i-1] == self[i]):
400
+ if (cur_col_len == n - 1 and ty == 'D') or \
401
+ (cur_col_len == n and ty == 'B'):
402
+ shape_wt += La[n]
403
+ shape_wt += La[cur_col_len]
404
+ cur_col_len = 1
405
+ else:
406
+ cur_col_len += 1
407
+ shape_wt += La[1]
408
+ # Since we miss the last column (which is always height 1)
409
+ return CrystalOfTableauxElement.weight(self) - shape_wt
410
+
411
+ def reduced_form(self):
412
+ r"""
413
+ Return the reduced form of ``self``.
414
+
415
+ The reduced form of a tableaux `T \in \mathcal{T}(\infty)` is the
416
+ (not necessarily semistandard) tableaux obtained from `T` by
417
+ removing all `i`-boxes in the `i`-th row, subject to the condition
418
+ that if the row is empty, a `\ast` is put as a placeholder.
419
+ This is described in [BN2010]_ and [LS2012]_.
420
+
421
+ EXAMPLES::
422
+
423
+ sage: B = crystals.infinity.Tableaux(['A',3])
424
+ sage: b = B.highest_weight_vector().f_string([2,2,2,3,3,3,3,3])
425
+ sage: b.pp()
426
+ 1 1 1 1 1 1 1 1
427
+ 2 2 2 2 4 4 4
428
+ 3 4 4
429
+ sage: b.reduced_form()
430
+ [['*'], [4, 4, 4], [4, 4]]
431
+ """
432
+ oldtab = self.to_tableau()
433
+ newtab = []
434
+ for i, row in enumerate(oldtab):
435
+ j = 0
436
+ row = list(row)
437
+ while j < len(row):
438
+ if row[j] == i+1:
439
+ row.pop(j)
440
+ if not row:
441
+ row.append('*')
442
+ else:
443
+ j += 1
444
+ newtab.append(row)
445
+ from sage.misc.stopgap import stopgap
446
+ stopgap("Return value is no longer a Tableau.", 17997)
447
+ return newtab
448
+
449
+ def seg(self):
450
+ r"""
451
+ Return the statistic `\mathrm{seg}` of ``self``.
452
+
453
+ More precisely, following [LS2012]_, define a `k`-segment of a
454
+ tableau `T` in `\mathcal{B}(\infty)` to be a maximal string
455
+ of `k`-boxes in a single row of `T`. Set `\mathrm{seg}^{\prime}(T)`
456
+ to be the number of `k`-segments in `T`, as `k` varies over
457
+ all possible values. Then `\mathrm{seg}(T)` is determined
458
+ type-by-type.
459
+
460
+ - In types `A_n` and `C_n`, define `\mathrm{seg}(T) :=
461
+ \mathrm{seg}^{\prime}(T)`.
462
+
463
+ - In types `B_n` and `G_2`, set `e(T)` to be the number of rows in
464
+ `T` which contain both a `0`-box and an `\overline{\imath}`-box.
465
+ Define `\mathrm{seg}(T) := \mathrm{seg}^{\prime}(T) - e(T)`.
466
+
467
+ - In type `D_n`, set `d(T)` to be the number of rows in `T` which
468
+ contain an `\overline{\imath}`-box, but no `n`-box nor
469
+ `\overline{n}`-box. Define `\mathrm{seg}(T) :=
470
+ \mathrm{seg}^{\prime}(T) + d(T)`.
471
+
472
+ EXAMPLES::
473
+
474
+ sage: B = crystals.infinity.Tableaux(['A',3])
475
+ sage: b = B.highest_weight_vector().f_string([1,3,2,2,3,1,1,3])
476
+ sage: b.pp()
477
+ 1 1 1 1 1 1 2 2 4
478
+ 2 2 2 2 3
479
+ 3 4 4
480
+ sage: b.seg()
481
+ 4
482
+
483
+ sage: B = crystals.infinity.Tableaux(['D',4])
484
+ sage: b = B(rows=[[1,1,1,1,1,1,3,-2,-1],[2,2,2,4,-2],[3,3],[4]])
485
+ sage: b.pp()
486
+ 1 1 1 1 1 1 3 -2 -1
487
+ 2 2 2 4 -2
488
+ 3 3
489
+ 4
490
+ sage: b.seg()
491
+ 6
492
+
493
+ sage: B = crystals.infinity.Tableaux(['G',2])
494
+ sage: b = B.highest_weight_vector().f_string([2,1,1,1,2,1,2,2,1,2,2,2,1,2,2,1])
495
+ sage: b.pp()
496
+ 1 1 1 1 1 1 1 1 2 3 0 -3
497
+ 2 3 3 3 3 3 3
498
+ sage: b.seg()
499
+ 5
500
+ """
501
+ tab = self.to_tableau()
502
+ segments = []
503
+ for r in range(len(tab)):
504
+ for c in range(len(tab[r])):
505
+ if tab[r][c] != r+1:
506
+ if [r,tab[r][c]] not in segments:
507
+ segments.append([r,tab[r][c]])
508
+ if self.parent().cartan_type().type() == 'B':
509
+ for r in range(len(tab)):
510
+ for c in range(len(tab[r])):
511
+ if tab[r][c] == 0 and tab[r][-1] == -r-1:
512
+ segments.remove([r,tab[r][c]])
513
+ if self.parent().cartan_type().type() == 'D':
514
+ n = self.parent().cartan_type().rank()
515
+ add = []
516
+ for r in range(len(tab)):
517
+ if tab[r][-1] == -1*(r+1):
518
+ for c in range(len(tab[r])):
519
+ if tab[r][c] != n and tab[r][c] != -n:
520
+ if [r,n] not in add:
521
+ add.append([r,n])
522
+ if len(add) > 0:
523
+ segments.append([r,n])
524
+ if self.parent().cartan_type().type() == 'G':
525
+ for c in range(len(tab[0])):
526
+ if tab[0][c] == 0 and tab[0][-1] == -1:
527
+ segments.remove([0,tab[0][c]])
528
+ return len(segments)
529
+
530
+ def content(self):
531
+ r"""
532
+ Return the content of ``self``.
533
+
534
+ The content `|T|` of `T \in \mathcal{B}(\infty)` is the number of
535
+ blocks added to the highest weight to obtain `T` with any
536
+ `\overline{\imath}`-boxes in the `i`-th row counted with
537
+ multiplicity `2` provided the underlying Cartan type is of type
538
+ `B`, `D`, or `G`.
539
+
540
+ EXAMPLES::
541
+
542
+ sage: B = crystals.infinity.Tableaux("D5")
543
+ sage: b = B.highest_weight_vector().f_string([5,4,3,1,1,3,4,5,3,4,5,1,4,5,2,3,5,3,2,4])
544
+ sage: b.content()
545
+ 13
546
+
547
+ sage: B = crystals.infinity.Tableaux("B2")
548
+ sage: b = B(rows=[[1,1,1,1,1,1,2,2,2,-2,-2],[2,0,-2,-2,-2]])
549
+ sage: b.content()
550
+ 12
551
+
552
+ sage: B = crystals.infinity.Tableaux("C2")
553
+ sage: b = B(rows=[[1,1,1,1,1,1,2,2,2,-2,-2],[2,-2,-2,-2]])
554
+ sage: b.content()
555
+ 8
556
+ """
557
+ tab = self.to_tableau()
558
+ count = 0
559
+ ct = self.parent().cartan_type().type()
560
+ for i,row in enumerate(tab):
561
+ for entry in row:
562
+ if entry == -i-1 and ct in ('B', 'D', 'G'):
563
+ count += 2
564
+ elif entry != i+1:
565
+ count += 1
566
+ return count
567
+
568
+
569
+ class InfinityCrystalOfTableauxTypeD(InfinityCrystalOfTableaux):
570
+ r"""
571
+ `\mathcal{B}(\infty)` crystal of tableaux for type `D_n`.
572
+
573
+ This is the set `\mathcal{T}(\infty)` of marginally large semistandard
574
+ tableaux with exactly `n-1` rows over the alphabet `\{1 \prec \cdots
575
+ \prec n, \overline{n} \prec \cdots \prec \overline{1} \}` and subject
576
+ to the following constraints:
577
+
578
+ - for each `1 \le i \le n`, the contents of the boxes in the `i`-th
579
+ row are `\preceq \overline{i}`,
580
+
581
+ - the entries `n` and `\overline{n}` may not appear simultaneously in
582
+ a single row.
583
+
584
+ For more information, see
585
+ :class:`~sage.combinat.crystals.infinity_crystals.InfinityCrystalOfTableaux`.
586
+
587
+ EXAMPLES::
588
+
589
+ sage: B = crystals.infinity.Tableaux("D4")
590
+ sage: b = B.highest_weight_vector().f_string([4,3,2,1,4])
591
+ sage: b.pp()
592
+ 1 1 1 1 1 1 2
593
+ 2 2 2 2 3
594
+ 3 -4 -3
595
+ sage: b.weight()
596
+ (-1, 0, -2, -1)
597
+ """
598
+ @staticmethod
599
+ def __classcall_private__(cls, cartan_type):
600
+ """
601
+ Normalize input to ensure a unique representation.
602
+
603
+ EXAMPLES::
604
+
605
+ sage: B = crystals.infinity.Tableaux(['D',4])
606
+ sage: B2 = crystals.infinity.Tableaux(CartanType(['D',4]))
607
+ sage: B is B2
608
+ True
609
+ """
610
+ return super().__classcall__(cls, CartanType(cartan_type))
611
+
612
+ @cached_method
613
+ def module_generator(self):
614
+ r"""
615
+ Return the module generator (or highest weight element) of ``self``.
616
+
617
+ The module generator is the unique tableau of shape `(n-1, \ldots, 2,
618
+ 1)` with weight `0`.
619
+
620
+ EXAMPLES::
621
+
622
+ sage: T = crystals.infinity.Tableaux(['D',4])
623
+ sage: T.module_generator()
624
+ [[1, 1, 1], [2, 2], [3]]
625
+ """
626
+ n = self._cartan_type.rank()
627
+ p = Partition(list(reversed(range(1, n))))
628
+ # The column canonical tableau, read by columns
629
+ module_generator = flatten([[p[j]-i for i in range(p[j])] for j in range(n-1)])
630
+ return self(list=[self.letters(x) for x in module_generator])
631
+
632
+ class Element(InfinityCrystalOfTableauxElementTypeD, InfinityCrystalOfTableaux.Element):
633
+ r"""
634
+ Elements in `\mathcal{B}(\infty)` crystal of tableaux for type `D_n`.
635
+ """
636
+ pass
637
+
638
+
639
+ #########################################################
640
+ ## Queer superalgebra
641
+
642
+ class DualInfinityQueerCrystalOfTableaux(CrystalOfWords):
643
+ @staticmethod
644
+ def __classcall_private__(cls, cartan_type):
645
+ """
646
+ Normalize input to ensure a unique representation.
647
+
648
+ EXAMPLES::
649
+
650
+ sage: B = crystals.infinity.Tableaux(['A',4])
651
+ sage: B2 = crystals.infinity.Tableaux(CartanType(['A',4]))
652
+ sage: B is B2
653
+ True
654
+ """
655
+ cartan_type = CartanType(cartan_type)
656
+ return super().__classcall__(cls, cartan_type)
657
+
658
+ def __init__(self, cartan_type):
659
+ """
660
+ Initialize ``self``.
661
+
662
+ EXAMPLES::
663
+
664
+ sage: B = crystals.infinity.Tableaux(['A',2])
665
+ sage: TestSuite(B).run() # long time
666
+ """
667
+ Parent.__init__(self, category=(SuperCrystals(), InfiniteEnumeratedSets()))
668
+ self._cartan_type = cartan_type
669
+ self.letters = CrystalOfLetters(cartan_type)
670
+ self.module_generators = (self.module_generator(),)
671
+
672
+ def _repr_(self):
673
+ """
674
+ Return a string representation of ``self``.
675
+
676
+ EXAMPLES::
677
+
678
+ sage: B = crystals.infinity.Tableaux(['A',4]); B
679
+ The infinity crystal of tableaux of type ['A', 4]
680
+ """
681
+ return "The dual infinity crystal of tableaux of type %s" % self._cartan_type
682
+
683
+ @cached_method
684
+ def module_generator(self):
685
+ r"""
686
+ Return the module generator (or highest weight element) of ``self``.
687
+
688
+ The module generator is the unique semistandard hook tableau of shape
689
+ `(n, n-1, \ldots,2, 1)` with weight `0`.
690
+
691
+ EXAMPLES::
692
+
693
+ sage: B = crystals.infinity.Tableaux(["Q",5])
694
+ sage: B.module_generator()
695
+ [[5, 5, 5, 5, 5], [4, 4, 4, 4], [3, 3, 3], [2, 2], [1]]
696
+ """
697
+ n = self._cartan_type.rank() + 1
698
+ row_lens = list(reversed(range(1, n+1)))
699
+ module_generator = flatten([[val]*val for val in row_lens])
700
+ return self.element_class(self, [self.letters(x) for x in module_generator], row_lens)
701
+
702
+ @cached_method
703
+ def index_set(self):
704
+ r"""
705
+ Return the index set of ``self``.
706
+
707
+ EXAMPLES::
708
+
709
+ sage: B = crystals.infinity.Tableaux(["Q",3])
710
+ sage: B.index_set()
711
+ (1, 2, -1)
712
+ """
713
+ n = self._cartan_type.rank()
714
+ return tuple(range(1, n+1)) + (-1,)
715
+
716
+ def _element_constructor_(self, *args, **options):
717
+ """
718
+ Construct an element of ``self`` from the input data.
719
+
720
+ EXAMPLES::
721
+
722
+ sage: B = crystals.infinity.Tableaux(["Q",4])
723
+ sage: t = B([[4,4,4,4,2,1],[3,3,3],[2,2],[1]])
724
+ sage: t
725
+ [[4, 4, 4, 4, 2, 1], [3, 3, 3], [2, 2], [1]]
726
+ """
727
+ return self.element_class(self, *args, **options)
728
+
729
+ class Element(InfinityQueerCrystalOfTableauxElement):
730
+ pass