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,15 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ from sage.structure.sage_object cimport SageObject
3
+
4
+ cdef class RiggedPartition(SageObject):
5
+ cdef public list _list
6
+ cdef public list vacancy_numbers
7
+ cdef public list rigging
8
+ cdef long _hash
9
+
10
+ cpdef get_num_cells_to_column(self, int end_column, t=*)
11
+ cpdef insert_cell(self, int max_width)
12
+ cpdef remove_cell(self, row, int num_cells=*)
13
+
14
+ cdef class RiggedPartitionTypeB(RiggedPartition):
15
+ pass
@@ -0,0 +1,680 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.graphs sage.modules
3
+ r"""
4
+ Rigged partitions
5
+
6
+ Class and methods of the rigged partition which are used by the rigged
7
+ configuration class. This is an internal class used by the rigged
8
+ configurations and KR tableaux during the bijection, and is not to be used by
9
+ the end-user.
10
+
11
+ We hold the partitions as a 1-dim array of positive integers where each
12
+ value corresponds to the length of the row. This is the shape of the
13
+ partition which can be accessed by the regular index.
14
+
15
+ The data for the vacancy number is also stored in a 1-dim array which each
16
+ entry corresponds to the row of the tableau, and similarly for the
17
+ partition values.
18
+
19
+ .. TODO::
20
+
21
+ Convert this to using multiplicities `m_i` (perhaps with a dictionary?)?
22
+
23
+ AUTHORS:
24
+
25
+ - Travis Scrimshaw (2010-09-26): initial version
26
+ """
27
+
28
+ # ***************************************************************************
29
+ # Copyright (C) 2010-2012 Travis Scrimshaw <tscrim@ucdavis.edu>
30
+ #
31
+ # Distributed under the terms of the GNU General Public License (GPL)
32
+ #
33
+ # This code is distributed in the hope that it will be useful,
34
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
35
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
36
+ # General Public License for more details.
37
+ #
38
+ # The full text of the GPL is available at:
39
+ #
40
+ # https://www.gnu.org/licenses/
41
+ # ***************************************************************************
42
+
43
+ from sage.misc.latex import latex
44
+ from sage.structure.richcmp cimport richcmp
45
+
46
+ cdef class RiggedPartition(SageObject):
47
+ r"""
48
+ The RiggedPartition class which is the data structure of a rigged (i.e.
49
+ marked or decorated) Young diagram of a partition.
50
+
51
+ Note that this class as a stand-alone object does not make sense since the
52
+ vacancy numbers are calculated using the entire rigged configuration. For
53
+ more, see :class:`RiggedConfigurations`.
54
+
55
+ EXAMPLES::
56
+
57
+ sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 2]])
58
+ sage: RP = RC(partition_list=[[2],[2,2],[2,1],[2]])[2]
59
+ sage: RP
60
+ 0[ ][ ]0
61
+ -1[ ]-1
62
+ <BLANKLINE>
63
+ """
64
+
65
+ def __init__(self, shape=None, rigging_list=None, vacancy_nums=None):
66
+ r"""
67
+ Initialize by the rigged partition.
68
+
69
+ Note that this only performs checks to see that the sizes match up.
70
+
71
+ INPUT:
72
+
73
+ - ``shape`` -- (default: ``None``) the shape
74
+ - ``rigging_list`` -- (default: ``None``) the riggings
75
+ - ``vacancy_nums`` -- (default: ``None``) the vacancy numbers
76
+
77
+ TESTS::
78
+
79
+ sage: from sage.combinat.rigged_configurations.rigged_partition import RiggedPartition
80
+ sage: RiggedPartition()
81
+ (/)
82
+ <BLANKLINE>
83
+ sage: RP = RiggedPartition([2,1], [0,0], [1, 0])
84
+ sage: RP
85
+ 1[ ][ ]0
86
+ 0[ ]0
87
+ <BLANKLINE>
88
+ sage: TestSuite(RP).run()
89
+ """
90
+ self._hash = 0
91
+
92
+ if shape is None:
93
+ self._list = []
94
+ self.vacancy_numbers = []
95
+ self.rigging = []
96
+ return
97
+
98
+ self._list = list(shape)
99
+
100
+ if vacancy_nums is not None:
101
+ if len(shape) != len(vacancy_nums):
102
+ raise ValueError("mismatch between shape and vacancy numbers")
103
+
104
+ self.vacancy_numbers = list(vacancy_nums)
105
+ else:
106
+ self.vacancy_numbers = [None] * len(shape)
107
+
108
+ if rigging_list is not None:
109
+
110
+ if len(shape) != len(rigging_list):
111
+ raise ValueError("mismatch between shape and rigging list")
112
+
113
+ self.rigging = list(rigging_list)
114
+ else:
115
+ self.rigging = [None] * len(shape)
116
+
117
+ def _repr_(self):
118
+ """
119
+ Return a string representation of ``self``.
120
+
121
+ EXAMPLES::
122
+
123
+ sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 2]])
124
+ sage: elt = RC(partition_list=[[2],[2,2],[2,1],[2]])[2]
125
+ sage: elt
126
+ 0[ ][ ]0
127
+ -1[ ]-1
128
+ <BLANKLINE>
129
+ sage: Partitions.options.convention="french"
130
+ sage: elt
131
+ -1[ ]-1
132
+ 0[ ][ ]0
133
+ <BLANKLINE>
134
+ sage: Partitions.options._reset()
135
+ """
136
+ # If it is empty, return saying so
137
+ if not self._list:
138
+ return "(/)\n"
139
+
140
+ from sage.combinat.partition import Partitions
141
+ if Partitions.options.convention == "French":
142
+ itr = reversed(list(enumerate(self._list)))
143
+ else:
144
+ itr = enumerate(self._list)
145
+ ret_str = ""
146
+ vac_num_width = max(len(str(vac_num)) for vac_num in self.vacancy_numbers)
147
+ for i, val in itr:
148
+ ret_str += ("{:>" + str(vac_num_width) + "}").format(str(self.vacancy_numbers[i]))
149
+ ret_str += "[ ]"*val
150
+ ret_str += str(self.rigging[i])
151
+ ret_str += "\n"
152
+ return ret_str
153
+
154
+ def _latex_(self):
155
+ r"""
156
+ Return LaTeX representation of ``self``.
157
+
158
+ EXAMPLES::
159
+
160
+ sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 2]])
161
+ sage: latex(RC(partition_list=[[2],[2,2],[2,1],[2]])[2])
162
+ {
163
+ \begin{array}[t]{r|c|c|l}
164
+ \cline{2-3} 0 &\phantom{|}&\phantom{|}& 0 \\
165
+ \cline{2-3} -1 &\phantom{|}& \multicolumn{2 }{l}{ -1 } \\
166
+ \cline{2-2}
167
+ \end{array}
168
+ }
169
+
170
+ TESTS:
171
+
172
+ Check that this prints using the French convention::
173
+
174
+ sage: RC = RiggedConfigurations(['D',5,1], [[2,1], [1,2]])
175
+ sage: RiggedConfigurations.options.convention='French'
176
+ sage: latex(RC(partition_list=[[3],[3,1],[1,1],[1],[1]])[1])
177
+ {
178
+ \begin{array}[t]{r|c|c|c|l}
179
+ \cline{2-2} 0 &\phantom{|}& \multicolumn{3 }{l}{ 0 } \\
180
+ \cline{2-4} -2 &\phantom{|}&\phantom{|}&\phantom{|}& -2 \\
181
+ \cline{2-4}
182
+ \end{array}
183
+ }
184
+ sage: RiggedConfigurations.options._reset()
185
+ """
186
+ num_rows = len(self._list)
187
+ if num_rows == 0:
188
+ return "{\\emptyset}"
189
+
190
+ num_cols = self._list[0]
191
+ ret_string = "{\n\\begin{array}[t]{r|" + "c|"*num_cols + "l}\n"
192
+
193
+ from sage.combinat.rigged_configurations.rigged_configurations import RiggedConfigurations
194
+ if RiggedConfigurations.options.convention == 'English':
195
+ ret_string += "\\cline{2-%s} " % (1+num_cols) + latex(self.vacancy_numbers[0])
196
+ for i, row_len in enumerate(self._list):
197
+
198
+ ret_string += " &" + "\\phantom{|}&"*row_len
199
+
200
+ if num_cols == row_len:
201
+ ret_string += " " + latex(self.rigging[i])
202
+ else:
203
+ ret_string += " \\multicolumn{" + repr(num_cols - row_len + 1)
204
+ ret_string += "}{l}{" + latex(self.rigging[i]) + "}"
205
+
206
+ ret_string += " \\\\\n"
207
+
208
+ ret_string += "\\cline{2-" + repr(1 + row_len) + "} "
209
+ if i != num_rows - 1 and row_len != self._list[i + 1]:
210
+ ret_string += latex(self.vacancy_numbers[i + 1])
211
+ ret_string += "\n\\end{array}\n}"
212
+ else:
213
+ for i, row_len in enumerate(reversed(self._list)):
214
+ ret_string += "\\cline{2-%s} " % (1 + row_len) + latex(self.vacancy_numbers[-i-1])
215
+ ret_string += " &" + "\\phantom{|}&"*row_len
216
+
217
+ if num_cols == row_len:
218
+ ret_string += " " + latex(self.rigging[-i-1])
219
+ else:
220
+ ret_string += " \\multicolumn{" + repr(num_cols - row_len + 1)
221
+ ret_string += "}{l}{" + latex(self.rigging[-i-1]) + "}"
222
+
223
+ ret_string += " \\\\\n"
224
+ ret_string += "\\cline{2-%s}\n\\end{array}\n}" % (1 + num_cols)
225
+
226
+ return ret_string
227
+
228
+ def _clone(self):
229
+ r"""
230
+ Makes a (deep) copy of this rigged partition.
231
+
232
+ TESTS::
233
+
234
+ sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 2]])
235
+ sage: RP = RC(partition_list=[[2],[2,2],[2,1],[2]])[2]; RP
236
+ 0[ ][ ]0
237
+ -1[ ]-1
238
+ <BLANKLINE>
239
+ sage: RP2 = RP._clone(); RP2
240
+ 0[ ][ ]0
241
+ -1[ ]-1
242
+ <BLANKLINE>
243
+ sage: RP == RP2
244
+ True
245
+ sage: RP is RP2
246
+ False
247
+ """
248
+ # TODO: Perhaps we can be better by not copying data as much and do it
249
+ # more on-demand
250
+ cdef RiggedPartition res
251
+ cdef type t = type(self)
252
+ res = t.__new__(t)
253
+ res._list = self._list[:]
254
+ res.rigging = self.rigging[:]
255
+ res.vacancy_numbers = self.vacancy_numbers[:]
256
+ res._hash = self._hash
257
+ return res
258
+
259
+ def __richcmp__(self, other, int op):
260
+ r"""
261
+ Return true if ``self`` equals ``rhs``.
262
+
263
+ TESTS::
264
+
265
+ sage: RC = RiggedConfigurations(['A',2,1], [[1,1],[1,1],[1,1]])
266
+ sage: x = RC(partition_list=[[1], []], rigging_list=[[0], []])
267
+ sage: y = RC(partition_list=[[1], []], rigging_list=[[1], []])
268
+ sage: x == y
269
+ False
270
+ """
271
+ if not (isinstance(self, RiggedPartition) and isinstance(other, RiggedPartition)):
272
+ return False
273
+
274
+ cdef left = <RiggedPartition> self
275
+ cdef right = <RiggedPartition> other
276
+ return richcmp((left._list, left.rigging), (right._list, right.rigging), op)
277
+
278
+ # TODO: Cythonize CombinatorialObject?
279
+
280
+ def __hash__(self):
281
+ """
282
+ TESTS::
283
+
284
+ sage: from sage.combinat.rigged_configurations.rigged_partition import RiggedPartition
285
+ sage: nu = RiggedPartition()
286
+ sage: h = hash(nu)
287
+ sage: _ = nu.insert_cell(2)
288
+ sage: h == hash(nu)
289
+ False
290
+ """
291
+ if self._hash == 0:
292
+ self._hash = hash(tuple(self._list))
293
+ return self._hash
294
+
295
+ def __bool__(self):
296
+ """
297
+ TESTS::
298
+
299
+ sage: from sage.combinat.rigged_configurations.rigged_partition import RiggedPartition
300
+ sage: nu = RiggedPartition()
301
+ sage: bool(nu)
302
+ False
303
+ sage: nu = RiggedPartition([1])
304
+ sage: bool(nu)
305
+ True
306
+ """
307
+ return bool(self._list)
308
+
309
+ def __len__(self):
310
+ """
311
+ TESTS::
312
+
313
+ sage: from sage.combinat.rigged_configurations.rigged_partition import RiggedPartition
314
+ sage: nu = RiggedPartition()
315
+ sage: len(nu)
316
+ 0
317
+ sage: nu = RiggedPartition([3,2,2,1])
318
+ sage: len(nu)
319
+ 4
320
+ """
321
+ return len(self._list)
322
+
323
+ def __getitem__(self, key):
324
+ """
325
+ TESTS::
326
+
327
+ sage: from sage.combinat.rigged_configurations.rigged_partition import RiggedPartition
328
+ sage: nu = RiggedPartition([3,2,1])
329
+ sage: nu[2]
330
+ 1
331
+ """
332
+ return self._list[key]
333
+
334
+ def __iter__(self):
335
+ """
336
+ TESTS::
337
+
338
+ sage: from sage.combinat.rigged_configurations.rigged_partition import RiggedPartition
339
+ sage: nu = RiggedPartition([3,2,1])
340
+ sage: list(nu)
341
+ [3, 2, 1]
342
+ """
343
+ return iter(self._list)
344
+
345
+ def __reduce__(self):
346
+ """
347
+ TESTS::
348
+
349
+ sage: from sage.combinat.rigged_configurations.rigged_partition import RiggedPartition
350
+ sage: nu = RiggedPartition([3,2,1])
351
+ sage: loads(dumps(nu)) == nu
352
+ True
353
+ """
354
+ return type(self), (self._list, self.rigging, self.vacancy_numbers)
355
+
356
+ # Should we move these functions to the CP -> RC bijections?
357
+
358
+ cpdef get_num_cells_to_column(self, int end_column, t=1):
359
+ r"""
360
+ Get the number of cells in all columns before the ``end_column``.
361
+
362
+ INPUT:
363
+
364
+ - ``end_column`` -- the index of the column to end at
365
+
366
+ - ``t`` -- the scaling factor
367
+
368
+ OUTPUT: the number of cells
369
+
370
+ EXAMPLES::
371
+
372
+ sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 2]])
373
+ sage: RP = RC(partition_list=[[2],[2,2],[2,1],[2]])[2]
374
+ sage: RP.get_num_cells_to_column(1)
375
+ 2
376
+ sage: RP.get_num_cells_to_column(2)
377
+ 3
378
+ sage: RP.get_num_cells_to_column(3)
379
+ 3
380
+ sage: RP.get_num_cells_to_column(3, 2)
381
+ 5
382
+ """
383
+ cdef Py_ssize_t sum_cells = 0
384
+ # Sum up from the reverse (the smallest row sizes)
385
+ cdef Py_ssize_t i = len(self._list) - 1
386
+ while i >= 0 and self._list[i]*t < end_column:
387
+ sum_cells += self._list[i]*t
388
+ i -= 1
389
+
390
+ # Add the remaining cells
391
+ if i > -1:
392
+ sum_cells += end_column * (i + 1)
393
+
394
+ return sum_cells
395
+
396
+ cpdef insert_cell(self, int max_width):
397
+ r"""
398
+ Insert a cell given at a singular value as long as its less than the
399
+ specified width.
400
+
401
+ Note that :meth:`insert_cell` does not update riggings or vacancy
402
+ numbers, but it does prepare the space for them. Returns the width of
403
+ the row we inserted at.
404
+
405
+ INPUT:
406
+
407
+ - ``max_width`` -- the maximum width (i.e. row length) that we can
408
+ insert the cell at
409
+
410
+ OUTPUT: the width of the row we inserted at
411
+
412
+ EXAMPLES::
413
+
414
+ sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 2]])
415
+ sage: RP = RC(partition_list=[[2],[2,2],[2,1],[2]])[2]
416
+ sage: RP.insert_cell(2)
417
+ 2
418
+ sage: RP
419
+ 0[ ][ ][ ]None
420
+ -1[ ]-1
421
+ <BLANKLINE>
422
+ """
423
+ cdef Py_ssize_t max_pos = -1
424
+ cdef Py_ssize_t i
425
+ self._hash = 0 # Reset the cached hash value
426
+ if max_width > 0:
427
+ for i, vac_num in enumerate(self.vacancy_numbers):
428
+ if self._list[i] <= max_width and vac_num == self.rigging[i]:
429
+ max_pos = i
430
+ break
431
+
432
+ if max_pos == -1: # No singular values, then add a new row
433
+ self._list.append(1)
434
+ self.vacancy_numbers.append(None)
435
+ # Go through our partition until we find a length of greater than 1
436
+ i = len(self._list) - 1
437
+ while i >= 0 and self._list[i] == 1:
438
+ i -= 1
439
+ self.rigging.insert(i + 1, None)
440
+ return 0
441
+
442
+ self._list[max_pos] += 1
443
+ self.rigging[max_pos] = None # State that we've changed this row
444
+ return self._list[max_pos] - 1
445
+
446
+ cpdef remove_cell(self, row, int num_cells=1):
447
+ r"""
448
+ Removes a cell at the specified ``row``.
449
+
450
+ Note that :meth:`remove_cell` does not set/update the vacancy numbers
451
+ or the riggings, but guarantees that the location has been allocated
452
+ in the returned index.
453
+
454
+ INPUT:
455
+
456
+ - ``row`` -- the row to remove the cell from
457
+
458
+ - ``num_cells`` -- (default: 1) the number of cells to remove
459
+
460
+ OUTPUT:
461
+
462
+ - The location of the newly constructed row or ``None`` if unable to
463
+ remove row or if deleted a row.
464
+
465
+ EXAMPLES::
466
+
467
+ sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 2]])
468
+ sage: RP = RC(partition_list=[[2],[2,2],[2,1],[2]])[2]
469
+ sage: RP.remove_cell(0)
470
+ 0
471
+ sage: RP
472
+ None[ ]None
473
+ -1[ ]-1
474
+ <BLANKLINE>
475
+ """
476
+ self._hash = 0 # Reset the cached hash value
477
+ if row is None:
478
+ return None
479
+
480
+ cdef Py_ssize_t r = row
481
+ if self._list[r] <= num_cells:
482
+ self._list.pop(r)
483
+ self.vacancy_numbers.pop(r)
484
+ self.rigging.pop(r)
485
+ return None
486
+
487
+ # Find the beginning of the next block we want
488
+ cdef Py_ssize_t block_len = self._list[r] - num_cells # The length of the desired block
489
+ if row + 1 == len(self._list):
490
+ # If we are at the end, just do a simple remove
491
+ self._list[r] = block_len
492
+ self.vacancy_numbers[r] = None
493
+ self.rigging[r] = None
494
+ return r
495
+
496
+ cdef Py_ssize_t i
497
+ for i in range(r + 1, len(self._list)):
498
+ if self._list[i] <= block_len:
499
+ if i == r + 1:
500
+ # If the next row is a block change, just reduce by num_cells
501
+ self._list[r] = block_len
502
+ self.vacancy_numbers[r] = None
503
+ self.rigging[r] = None
504
+ return row
505
+
506
+ # Otherwise we need to "move" the row
507
+ self._list.insert(i, block_len)
508
+ # These should be updated (so there should be no need to carry them over)
509
+ self.vacancy_numbers.insert(i, None)
510
+ self.rigging.insert(i, None)
511
+
512
+ self._list.pop(r)
513
+ self.vacancy_numbers.pop(r)
514
+ self.rigging.pop(r)
515
+ return i - 1
516
+
517
+ # We need to "move" the row to the end of the partition
518
+ self._list.pop(r)
519
+ self.vacancy_numbers.pop(r)
520
+ self.rigging.pop(r)
521
+
522
+ self._list.append(block_len)
523
+ # Placeholders as above
524
+ self.vacancy_numbers.append(None)
525
+ self.rigging.append(None)
526
+ return len(self._list) - 1
527
+
528
+ cdef class RiggedPartitionTypeB(RiggedPartition):
529
+ r"""
530
+ Rigged partitions for type `B_n^{(1)}` which has special printing rules
531
+ which comes from the fact that the `n`-th partition can have columns of
532
+ width `\frac{1}{2}`.
533
+ """
534
+ def __init__(self, arg0, arg1=None, arg2=None):
535
+ """
536
+ Initialize ``self``.
537
+
538
+ EXAMPLES::
539
+
540
+ sage: RP = sage.combinat.rigged_configurations.rigged_partition.RiggedPartition([2,1], [0,0], [1, 0])
541
+ sage: B = sage.combinat.rigged_configurations.rigged_partition.RiggedPartitionTypeB(RP); B
542
+ 1[][]0
543
+ 0[]0
544
+ <BLANKLINE>
545
+ sage: TestSuite(B).run()
546
+ """
547
+ if arg1 is not None:
548
+ RiggedPartition.__init__(self, arg0, arg1, arg2)
549
+ return
550
+
551
+ RiggedPartition.__init__(self,
552
+ arg0._list,
553
+ arg0.rigging,
554
+ arg0.vacancy_numbers)
555
+
556
+ def _repr_(self):
557
+ """
558
+ Return a string representation of ``self``.
559
+
560
+ INPUT:
561
+
562
+ - ``half_width_boxes`` -- (default: ``True``) display the partition
563
+ using half width boxes
564
+
565
+ EXAMPLES::
566
+
567
+ sage: RC = RiggedConfigurations(['B', 2, 1], [[2, 2]])
568
+ sage: elt = RC(partition_list=[[2],[2,1]])[1]
569
+ sage: elt
570
+ -2[][]-2
571
+ -2[]-2
572
+ <BLANKLINE>
573
+ sage: RiggedConfigurations.options.half_width_boxes_type_B=False
574
+ sage: elt
575
+ -2[ ][ ]-2
576
+ -2[ ]-2
577
+ <BLANKLINE>
578
+ sage: RiggedConfigurations.options._reset()
579
+ """
580
+ # If it is empty, return saying so
581
+ if not self._list:
582
+ return "(/)\n"
583
+
584
+ from sage.combinat.partition import Partitions
585
+ if Partitions.options.convention == "french":
586
+ itr = reversed(list(enumerate(self._list)))
587
+ else:
588
+ itr = enumerate(self._list)
589
+ ret_str = ""
590
+
591
+ from sage.combinat.rigged_configurations.rigged_configurations import RiggedConfigurations
592
+ if RiggedConfigurations.options.half_width_boxes_type_B:
593
+ box_str = "[]"
594
+ else:
595
+ box_str = "[ ]"
596
+
597
+ vac_num_width = max(len(str(vac_num)) for vac_num in self.vacancy_numbers)
598
+ for i, val in itr:
599
+ ret_str += ("{:>" + str(vac_num_width) + "}").format(self.vacancy_numbers[i])
600
+ ret_str += box_str*val
601
+ ret_str += str(self.rigging[i])
602
+ ret_str += "\n"
603
+ return ret_str
604
+
605
+ def _latex_(self):
606
+ r"""
607
+ Return a LaTeX representation of ``self``.
608
+
609
+ INPUT:
610
+
611
+ - ``half_width_boxes`` -- boolean (default: ``True``); display the partition
612
+ using half width boxes
613
+
614
+ EXAMPLES::
615
+
616
+ sage: RC = RiggedConfigurations(['B', 2, 1], [[1, 1]])
617
+ sage: RP = RC(partition_list=[[],[2]])[1]
618
+ sage: latex(RP)
619
+ {
620
+ \begin{array}[t]{r|c|c|l}
621
+ \cline{2-3} -4 &\phantom{a}&\phantom{a}& -4 \\
622
+ \cline{2-3}
623
+ \end{array}
624
+ }
625
+ sage: RiggedConfigurations.options.half_width_boxes_type_B=False
626
+ sage: latex(RP)
627
+ {
628
+ \begin{array}[t]{r|c|c|l}
629
+ \cline{2-3} -4 &\phantom{X|}&\phantom{X|}& -4 \\
630
+ \cline{2-3}
631
+ \end{array}
632
+ }
633
+ sage: RiggedConfigurations.options._reset()
634
+ """
635
+ num_rows = len(self._list)
636
+ if num_rows == 0:
637
+ return "{\\emptyset}"
638
+
639
+ from sage.combinat.rigged_configurations.rigged_configurations import RiggedConfigurations
640
+ if RiggedConfigurations.options.half_width_boxes_type_B:
641
+ box_str = "\\phantom{a}&"
642
+ else:
643
+ box_str = "\\phantom{X|}&"
644
+
645
+ num_cols = self._list[0]
646
+ ret_string = "{\n\\begin{array}[t]{r|" + "c|"*num_cols + "l}\n"
647
+
648
+ if RiggedConfigurations.options.convention == 'English':
649
+ ret_string += "\\cline{2-%s} " % (1+num_cols) + latex(self.vacancy_numbers[0])
650
+ for i, row_len in enumerate(self._list):
651
+ ret_string += " &" + box_str*row_len
652
+
653
+ if num_cols == row_len:
654
+ ret_string += " " + latex(self.rigging[i])
655
+ else:
656
+ ret_string += " \\multicolumn{" + repr(num_cols - row_len + 1)
657
+ ret_string += "}{l}{" + latex(self.rigging[i]) + "}"
658
+
659
+ ret_string += " \\\\\n"
660
+
661
+ ret_string += "\\cline{2-" + repr(1 + row_len) + "} "
662
+ if i != num_rows - 1 and row_len != self._list[i + 1]:
663
+ ret_string += latex(self.vacancy_numbers[i + 1])
664
+ ret_string += "\n\\end{array}\n}"
665
+ else:
666
+ for i, row_len in enumerate(reversed(self._list)):
667
+ ret_string += "\\cline{2-%s} " % (1 + row_len)
668
+ ret_string += latex(self.vacancy_numbers[-i-1])
669
+ ret_string += " &" + box_str*row_len
670
+
671
+ if num_cols == row_len:
672
+ ret_string += " " + latex(self.rigging[-i-1])
673
+ else:
674
+ ret_string += " \\multicolumn{" + repr(num_cols - row_len + 1)
675
+ ret_string += "}{l}{" + latex(self.rigging[-i-1]) + "}"
676
+
677
+ ret_string += " \\\\\n"
678
+ ret_string += "\\cline{2-%s}\n\\end{array}\n}" % (1 + num_cols)
679
+
680
+ return ret_string