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,148 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ """
3
+ Examples of combinatorial species
4
+ """
5
+ # ****************************************************************************
6
+ # Copyright (C) 2008 Mike Hansen <mhansen@gmail.com>,
7
+ #
8
+ # Distributed under the terms of the GNU General Public License (GPL)
9
+ #
10
+ # This code is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # General Public License for more details.
14
+ #
15
+ # The full text of the GPL is available at:
16
+ #
17
+ # https://www.gnu.org/licenses/
18
+ # ****************************************************************************
19
+
20
+ from .set_species import SetSpecies
21
+ from .partition_species import PartitionSpecies
22
+ from .subset_species import SubsetSpecies
23
+ from .recursive_species import CombinatorialSpecies
24
+ from .characteristic_species import CharacteristicSpecies, SingletonSpecies, EmptySetSpecies
25
+ from .cycle_species import CycleSpecies
26
+ from .linear_order_species import LinearOrderSpecies
27
+ from .permutation_species import PermutationSpecies
28
+ from .empty_species import EmptySpecies
29
+ from .sum_species import SumSpecies
30
+ from .product_species import ProductSpecies
31
+ from .composition_species import CompositionSpecies
32
+ from .functorial_composition_species import FunctorialCompositionSpecies
33
+
34
+ from sage.misc.cachefunc import cached_function
35
+
36
+
37
+ @cached_function
38
+ def SimpleGraphSpecies():
39
+ """
40
+ Return the species of simple graphs.
41
+
42
+ EXAMPLES::
43
+
44
+ sage: S = species.SimpleGraphSpecies()
45
+ sage: S.generating_series().counts(10)
46
+ [1, 1, 2, 8, 64, 1024, 32768, 2097152, 268435456, 68719476736]
47
+ sage: S.cycle_index_series()[:5] # needs sage.libs.pari sage.modules
48
+ [p[],
49
+ p[1],
50
+ p[1, 1] + p[2],
51
+ 4/3*p[1, 1, 1] + 2*p[2, 1] + 2/3*p[3],
52
+ 8/3*p[1, 1, 1, 1] + 4*p[2, 1, 1] + 2*p[2, 2] + 4/3*p[3, 1] + p[4]]
53
+ sage: S.isotype_generating_series()[:6] # needs sage.libs.pari sage.modules
54
+ [1, 1, 2, 4, 11, 34]
55
+
56
+ TESTS::
57
+
58
+ sage: seq = S.isotype_generating_series().counts(6)[1:] # needs sage.modules
59
+ sage: oeis(seq)[0] # optional - internet # needs sage.modules
60
+ A000088: ...
61
+
62
+ ::
63
+
64
+ sage: seq = S.generating_series().counts(10)[1:] # needs sage.modules
65
+ sage: oeis(seq)[0] # optional - internet # needs sage.modules
66
+ A006125: a(n) = 2^(n*(n-1)/2).
67
+ """
68
+ E = SetSpecies()
69
+ E2 = SetSpecies(size=2)
70
+ WP = SubsetSpecies()
71
+ P2 = E2 * E
72
+ return WP.functorial_composition(P2)
73
+
74
+
75
+ @cached_function
76
+ def BinaryTreeSpecies():
77
+ r"""
78
+ Return the species of binary trees on `n` leaves.
79
+
80
+ The species of binary trees `B` is defined by `B = X + B \cdot B`,
81
+ where `X` is the singleton species.
82
+
83
+ EXAMPLES::
84
+
85
+ sage: B = species.BinaryTreeSpecies()
86
+ sage: B.generating_series().counts(10)
87
+ [0, 1, 2, 12, 120, 1680, 30240, 665280, 17297280, 518918400]
88
+ sage: B.isotype_generating_series().counts(10)
89
+ [0, 1, 1, 2, 5, 14, 42, 132, 429, 1430]
90
+ sage: B._check()
91
+ True
92
+
93
+ ::
94
+
95
+ sage: B = species.BinaryTreeSpecies()
96
+ sage: a = B.structures([1,2,3,4,5])[187]; a
97
+ 2*((5*3)*(4*1))
98
+ sage: a.automorphism_group() # needs sage.groups
99
+ Permutation Group with generators [()]
100
+
101
+ TESTS::
102
+
103
+ sage: seq = B.isotype_generating_series().counts(10)[1:]
104
+ sage: oeis(seq)[0] # optional -- internet
105
+ A000108: Catalan numbers: ...
106
+ """
107
+ B = CombinatorialSpecies(min=1)
108
+ X = SingletonSpecies()
109
+ B.define(X + B * B)
110
+ return B
111
+
112
+
113
+ @cached_function
114
+ def BinaryForestSpecies():
115
+ """
116
+ Return the species of binary forests.
117
+
118
+ Binary forests are defined as sets of binary trees.
119
+
120
+ EXAMPLES::
121
+
122
+ sage: F = species.BinaryForestSpecies()
123
+ sage: F.generating_series().counts(10)
124
+ [1, 1, 3, 19, 193, 2721, 49171, 1084483, 28245729, 848456353]
125
+ sage: F.isotype_generating_series().counts(10) # needs sage.modules
126
+ [1, 1, 2, 4, 10, 26, 77, 235, 758, 2504]
127
+ sage: F.cycle_index_series()[:7] # needs sage.modules
128
+ [p[],
129
+ p[1],
130
+ 3/2*p[1, 1] + 1/2*p[2],
131
+ 19/6*p[1, 1, 1] + 1/2*p[2, 1] + 1/3*p[3],
132
+ 193/24*p[1, 1, 1, 1] + 3/4*p[2, 1, 1] + 5/8*p[2, 2] + 1/3*p[3, 1] + 1/4*p[4],
133
+ 907/40*p[1, 1, 1, 1, 1] + 19/12*p[2, 1, 1, 1] + 5/8*p[2, 2, 1] + 1/2*p[3, 1, 1] + 1/6*p[3, 2] + 1/4*p[4, 1] + 1/5*p[5],
134
+ 49171/720*p[1, 1, 1, 1, 1, 1] + 193/48*p[2, 1, 1, 1, 1] + 15/16*p[2, 2, 1, 1] + 61/48*p[2, 2, 2] + 19/18*p[3, 1, 1, 1] + 1/6*p[3, 2, 1] + 7/18*p[3, 3] + 3/8*p[4, 1, 1] + 1/8*p[4, 2] + 1/5*p[5, 1] + 1/6*p[6]]
135
+
136
+ TESTS::
137
+
138
+ sage: seq = F.isotype_generating_series().counts(10)[1:] # needs sage.modules
139
+ sage: oeis(seq)[0] # optional - internet # needs sage.modules
140
+ A052854: Number of forests of ordered trees on n total nodes.
141
+ """
142
+ B = BinaryTreeSpecies()
143
+ S = SetSpecies()
144
+ F = S(B)
145
+ return F
146
+
147
+
148
+ del cached_function # so it doesn't get picked up by tab completion
@@ -0,0 +1,169 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ """
3
+ Linear-order species
4
+ """
5
+ # ****************************************************************************
6
+ # Copyright (C) 2008 Mike Hansen <mhansen@gmail.com>,
7
+ #
8
+ # Distributed under the terms of the GNU General Public License (GPL)
9
+ #
10
+ # This code is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # General Public License for more details.
14
+ #
15
+ # The full text of the GPL is available at:
16
+ #
17
+ # http://www.gnu.org/licenses/
18
+ # ****************************************************************************
19
+ from .species import GenericCombinatorialSpecies
20
+ from .structure import GenericSpeciesStructure
21
+ from sage.structure.unique_representation import UniqueRepresentation
22
+ from sage.combinat.species.misc import accept_size
23
+
24
+
25
+ class LinearOrderSpeciesStructure(GenericSpeciesStructure):
26
+ def canonical_label(self):
27
+ """
28
+ EXAMPLES::
29
+
30
+ sage: P = species.LinearOrderSpecies()
31
+ sage: s = P.structures(["a", "b", "c"]).random_element()
32
+ sage: s.canonical_label()
33
+ ['a', 'b', 'c']
34
+ """
35
+ return self.__class__(self.parent(), self._labels, range(1, len(self._labels)+1))
36
+
37
+ def transport(self, perm):
38
+ """
39
+ Return the transport of this structure along the permutation
40
+ perm.
41
+
42
+ EXAMPLES::
43
+
44
+ sage: F = species.LinearOrderSpecies()
45
+ sage: a = F.structures(["a", "b", "c"])[0]; a
46
+ ['a', 'b', 'c']
47
+ sage: p = PermutationGroupElement((1,2)) # needs sage.groups
48
+ sage: a.transport(p) # needs sage.groups
49
+ ['b', 'a', 'c']
50
+ """
51
+ return LinearOrderSpeciesStructure(self.parent(), self._labels, [perm(i) for i in self._list])
52
+
53
+ def automorphism_group(self):
54
+ """
55
+ Return the group of permutations whose action on this structure
56
+ leave it fixed. For the species of linear orders, there is no
57
+ non-trivial automorphism.
58
+
59
+ EXAMPLES::
60
+
61
+ sage: F = species.LinearOrderSpecies()
62
+ sage: a = F.structures(["a", "b", "c"])[0]; a
63
+ ['a', 'b', 'c']
64
+ sage: a.automorphism_group() # needs sage.groups
65
+ Symmetric group of order 1! as a permutation group
66
+ """
67
+ from sage.groups.perm_gps.permgroup_named import SymmetricGroup
68
+ return SymmetricGroup(1)
69
+
70
+
71
+ class LinearOrderSpecies(GenericCombinatorialSpecies, UniqueRepresentation):
72
+ @staticmethod
73
+ @accept_size
74
+ def __classcall__(cls, *args, **kwds):
75
+ r"""
76
+ EXAMPLES::
77
+
78
+ sage: L = species.LinearOrderSpecies(); L
79
+ Linear order species
80
+ """
81
+ return super().__classcall__(cls, *args, **kwds)
82
+
83
+ def __init__(self, min=None, max=None, weight=None):
84
+ """
85
+ Return the species of linear orders.
86
+
87
+ EXAMPLES::
88
+
89
+ sage: L = species.LinearOrderSpecies()
90
+ sage: L.generating_series()[0:5]
91
+ [1, 1, 1, 1, 1]
92
+
93
+ sage: L = species.LinearOrderSpecies()
94
+ sage: L._check()
95
+ True
96
+ sage: L == loads(dumps(L))
97
+ True
98
+ """
99
+ GenericCombinatorialSpecies.__init__(self, min=min, max=max, weight=None)
100
+ self._name = "Linear order species"
101
+
102
+ _default_structure_class = LinearOrderSpeciesStructure
103
+
104
+ def _structures(self, structure_class, labels):
105
+ """
106
+ EXAMPLES::
107
+
108
+ sage: L = species.LinearOrderSpecies()
109
+ sage: L.structures([1,2,3]).list()
110
+ [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
111
+ """
112
+ from sage.combinat.permutation import Permutations
113
+ for p in Permutations(len(labels)):
114
+ yield structure_class(self, labels, p._list)
115
+
116
+ def _isotypes(self, structure_class, labels):
117
+ """
118
+ EXAMPLES::
119
+
120
+ sage: L = species.LinearOrderSpecies()
121
+ sage: L.isotypes([1,2,3]).list()
122
+ [[1, 2, 3]]
123
+ """
124
+ yield structure_class(self, labels, range(1, len(labels)+1))
125
+
126
+ def _gs_list(self, base_ring, n):
127
+ r"""
128
+ The generating series for the species of linear orders is
129
+ `\frac{1}{1-x}`.
130
+
131
+ EXAMPLES::
132
+
133
+ sage: L = species.LinearOrderSpecies()
134
+ sage: g = L.generating_series()
135
+ sage: g[0:10]
136
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
137
+ """
138
+ return base_ring.one()
139
+
140
+ def _itgs_list(self, base_ring, n):
141
+ r"""
142
+ The isomorphism type generating series is given by
143
+ `\frac{1}{1-x}`.
144
+
145
+ EXAMPLES::
146
+
147
+ sage: L = species.LinearOrderSpecies()
148
+ sage: g = L.isotype_generating_series()
149
+ sage: g[0:10]
150
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
151
+ """
152
+ return base_ring.one()
153
+
154
+ def _cis_callable(self, base_ring, n):
155
+ """
156
+ EXAMPLES::
157
+
158
+ sage: L = species.LinearOrderSpecies()
159
+ sage: g = L.cycle_index_series() # needs sage.modules
160
+ sage: g[0:5] # needs sage.modules
161
+ [p[], p[1], p[1, 1], p[1, 1, 1], p[1, 1, 1, 1]]
162
+ """
163
+ from sage.combinat.sf.sf import SymmetricFunctions
164
+ p = SymmetricFunctions(base_ring).power()
165
+ return p([1]*n)
166
+
167
+
168
+ #Backward compatibility
169
+ LinearOrderSpecies_class = LinearOrderSpecies
@@ -0,0 +1,83 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.groups
3
+ """
4
+ Miscellaneous functions
5
+ """
6
+ # ****************************************************************************
7
+ # Copyright (C) 2008 Mike Hansen <mhansen@gmail.com>,
8
+ #
9
+ # Distributed under the terms of the GNU General Public License (GPL)
10
+ #
11
+ # This code is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # General Public License for more details.
15
+ #
16
+ # The full text of the GPL is available at:
17
+ #
18
+ # http://www.gnu.org/licenses/
19
+ # ****************************************************************************
20
+
21
+ from functools import wraps
22
+
23
+ from sage.misc.misc_c import prod
24
+ from sage.misc.lazy_import import lazy_import
25
+
26
+ lazy_import('sage.groups.perm_gps.permgroup', ['PermutationGroup', 'PermutationGroup_generic'])
27
+ lazy_import('sage.groups.perm_gps.constructor', 'PermutationGroupElement')
28
+ lazy_import('sage.groups.perm_gps.permgroup_named', 'SymmetricGroup')
29
+
30
+
31
+ def change_support(perm, support, change_perm=None):
32
+ """
33
+ Changes the support of a permutation defined on [1, ..., n] to
34
+ support.
35
+
36
+ EXAMPLES::
37
+
38
+ sage: from sage.combinat.species.misc import change_support
39
+ sage: p = PermutationGroupElement((1,2,3)); p
40
+ (1,2,3)
41
+ sage: change_support(p, [3,4,5])
42
+ (3,4,5)
43
+ """
44
+ if change_perm is None:
45
+ change_perm = prod([PermutationGroupElement((i+1, support[i]))
46
+ for i in range(len(support))
47
+ if i+1 != support[i]],
48
+ PermutationGroupElement([], SymmetricGroup(support)))
49
+
50
+ if isinstance(perm, PermutationGroup_generic):
51
+ return PermutationGroup([change_support(g, support, change_perm) for g in perm.gens()])
52
+
53
+ return change_perm*perm*~change_perm
54
+
55
+
56
+ def accept_size(f):
57
+ """
58
+ The purpose of this decorator is to change calls like
59
+ species.SetSpecies(size=1) to species.SetSpecies(min=1, max=2).
60
+ This is to make caching species easier and to restrict the number
61
+ of parameters that the lower level code needs to know about.
62
+
63
+ EXAMPLES::
64
+
65
+ sage: from sage.combinat.species.misc import accept_size
66
+ sage: def f(*args, **kwds):
67
+ ....: print("{} {}".format(args, sorted(kwds.items())))
68
+ sage: f = accept_size(f)
69
+ sage: f(min=1)
70
+ () [('min', 1)]
71
+ sage: f(size=2)
72
+ () [('max', 3), ('min', 2)]
73
+ """
74
+ @wraps(f)
75
+ def new_func(*args, **kwds):
76
+ if 'size' in kwds:
77
+ if 'min' in kwds or 'max' in kwds:
78
+ raise ValueError("cannot specify both size and (min or max)")
79
+ kwds['min'] = kwds['size']
80
+ kwds['max'] = kwds['size'] + 1
81
+ del kwds['size']
82
+ return f(*args, **kwds)
83
+ return new_func
@@ -0,0 +1,290 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.libs.flint
3
+ """
4
+ Partition species
5
+ """
6
+ # ****************************************************************************
7
+ # Copyright (C) 2008 Mike Hansen <mhansen@gmail.com>,
8
+ #
9
+ # Distributed under the terms of the GNU General Public License (GPL)
10
+ #
11
+ # This code is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # General Public License for more details.
15
+ #
16
+ # The full text of the GPL is available at:
17
+ #
18
+ # http://www.gnu.org/licenses/
19
+ # ****************************************************************************
20
+
21
+ from .species import GenericCombinatorialSpecies
22
+ from sage.arith.misc import factorial
23
+ from .subset_species import SubsetSpeciesStructure
24
+ from .set_species import SetSpecies
25
+ from .structure import GenericSpeciesStructure
26
+ from sage.combinat.species.misc import accept_size
27
+ from functools import reduce
28
+
29
+
30
+ class PartitionSpeciesStructure(GenericSpeciesStructure):
31
+ def __init__(self, parent, labels, list):
32
+ """
33
+ EXAMPLES::
34
+
35
+ sage: from sage.combinat.species.partition_species import PartitionSpeciesStructure
36
+ sage: P = species.PartitionSpecies()
37
+ sage: s = PartitionSpeciesStructure(P, ['a','b','c'], [[1,2],[3]]); s
38
+ {{'a', 'b'}, {'c'}}
39
+ sage: s == loads(dumps(s))
40
+ True
41
+ """
42
+ list = [SubsetSpeciesStructure(parent, labels, block) if not isinstance(block, SubsetSpeciesStructure) else block for block in list]
43
+ list.sort(key=lambda block:(-len(block), block))
44
+ GenericSpeciesStructure.__init__(self, parent, labels, list)
45
+
46
+ def __repr__(self):
47
+ """
48
+ EXAMPLES::
49
+
50
+ sage: S = species.PartitionSpecies()
51
+ sage: a = S.structures(["a","b","c"])[0]; a
52
+ {{'a', 'b', 'c'}}
53
+ """
54
+ s = GenericSpeciesStructure.__repr__(self)
55
+ return "{"+s[1:-1]+"}"
56
+
57
+ def canonical_label(self):
58
+ """
59
+ EXAMPLES::
60
+
61
+ sage: P = species.PartitionSpecies()
62
+ sage: S = P.structures(["a", "b", "c"])
63
+ sage: [s.canonical_label() for s in S]
64
+ [{{'a', 'b', 'c'}},
65
+ {{'a', 'b'}, {'c'}},
66
+ {{'a', 'b'}, {'c'}},
67
+ {{'a', 'b'}, {'c'}},
68
+ {{'a'}, {'b'}, {'c'}}]
69
+ """
70
+ P = self.parent()
71
+ p = [len(block) for block in self._list]
72
+ return P._canonical_rep_from_partition(self.__class__, self._labels, p)
73
+
74
+ def transport(self, perm):
75
+ """
76
+ Return the transport of this set partition along the permutation
77
+ perm. For set partitions, this is the direct product of the
78
+ automorphism groups for each of the blocks.
79
+
80
+ EXAMPLES::
81
+
82
+ sage: p = PermutationGroupElement((2,3))
83
+ sage: from sage.combinat.species.partition_species import PartitionSpeciesStructure
84
+ sage: a = PartitionSpeciesStructure(None, [2,3,4], [[1,2],[3]]); a
85
+ {{2, 3}, {4}}
86
+ sage: a.transport(p)
87
+ {{2, 4}, {3}}
88
+ """
89
+ l = [block.transport(perm)._list for block in self._list]
90
+ l.sort(key=lambda block:(-len(block), block))
91
+ return PartitionSpeciesStructure(self.parent(), self._labels, l)
92
+
93
+ def automorphism_group(self):
94
+ """
95
+ Return the group of permutations whose action on this set
96
+ partition leave it fixed.
97
+
98
+ EXAMPLES::
99
+
100
+ sage: p = PermutationGroupElement((2,3))
101
+ sage: from sage.combinat.species.partition_species import PartitionSpeciesStructure
102
+ sage: a = PartitionSpeciesStructure(None, [2,3,4], [[1,2],[3]]); a
103
+ {{2, 3}, {4}}
104
+ sage: a.automorphism_group()
105
+ Permutation Group with generators [(1,2)]
106
+ """
107
+ from sage.groups.perm_gps.permgroup_named import SymmetricGroup
108
+ return reduce(lambda a,b: a.direct_product(b, maps=False),
109
+ [SymmetricGroup(block._list) for block in self._list])
110
+
111
+ def change_labels(self, labels):
112
+ """
113
+ Return a relabelled structure.
114
+
115
+ INPUT:
116
+
117
+ - ``labels`` -- list of labels
118
+
119
+ OUTPUT:
120
+
121
+ A structure with the `i`-th label of ``self`` replaced with the `i`-th
122
+ label of the list.
123
+
124
+ EXAMPLES::
125
+
126
+ sage: p = PermutationGroupElement((2,3))
127
+ sage: from sage.combinat.species.partition_species import PartitionSpeciesStructure
128
+ sage: a = PartitionSpeciesStructure(None, [2,3,4], [[1,2],[3]]); a
129
+ {{2, 3}, {4}}
130
+ sage: a.change_labels([1,2,3])
131
+ {{1, 2}, {3}}
132
+ """
133
+ return PartitionSpeciesStructure(self.parent(), labels, [block.change_labels(labels) for block in self._list])
134
+
135
+
136
+ class PartitionSpecies(GenericCombinatorialSpecies):
137
+ @staticmethod
138
+ @accept_size
139
+ def __classcall__(cls, *args, **kwds):
140
+ """
141
+ EXAMPLES::
142
+
143
+ sage: P = species.PartitionSpecies(); P
144
+ Partition species
145
+ """
146
+ return super().__classcall__(cls, *args, **kwds)
147
+
148
+ def __init__(self, min=None, max=None, weight=None):
149
+ """
150
+ Return the species of partitions.
151
+
152
+ EXAMPLES::
153
+
154
+ sage: P = species.PartitionSpecies()
155
+ sage: P.generating_series()[0:5]
156
+ [1, 1, 1, 5/6, 5/8]
157
+ sage: P.isotype_generating_series()[0:5]
158
+ [1, 1, 2, 3, 5]
159
+
160
+ sage: P = species.PartitionSpecies()
161
+ sage: P._check()
162
+ True
163
+ sage: P == loads(dumps(P))
164
+ True
165
+ """
166
+ GenericCombinatorialSpecies.__init__(self, min=min, max=max, weight=weight)
167
+ self._name = "Partition species"
168
+
169
+ _default_structure_class = PartitionSpeciesStructure
170
+
171
+ def _structures(self, structure_class, labels):
172
+ """
173
+ EXAMPLES::
174
+
175
+ sage: P = species.PartitionSpecies()
176
+ sage: P.structures([1,2,3]).list()
177
+ [{{1, 2, 3}}, {{1, 3}, {2}}, {{1, 2}, {3}}, {{2, 3}, {1}}, {{1}, {2}, {3}}]
178
+ """
179
+ from sage.combinat.restricted_growth import RestrictedGrowthArrays
180
+ n = len(labels)
181
+
182
+ if n == 0:
183
+ yield structure_class(self, labels, [])
184
+ return
185
+
186
+ u = list(range(n, 0, -1))
187
+ s0 = u.pop()
188
+
189
+ # Reconstruct the set partitions from
190
+ # restricted growth arrays
191
+ for a in RestrictedGrowthArrays(n):
192
+ m = a.pop(0)
193
+ r = [[] for _ in range(m)]
194
+ i = n
195
+ for i, z in enumerate(u):
196
+ r[a[i]].append(z)
197
+ r[0].append(s0)
198
+
199
+ for sp in r:
200
+ sp.reverse()
201
+
202
+ r.sort(key=len, reverse=True)
203
+
204
+ yield structure_class(self, labels, r)
205
+
206
+ def _isotypes(self, structure_class, labels):
207
+ """
208
+ EXAMPLES::
209
+
210
+ sage: P = species.PartitionSpecies()
211
+ sage: P.isotypes([1,2,3,4]).list()
212
+ [{{1, 2, 3, 4}},
213
+ {{1, 2, 3}, {4}},
214
+ {{1, 2}, {3, 4}},
215
+ {{1, 2}, {3}, {4}},
216
+ {{1}, {2}, {3}, {4}}]
217
+ """
218
+ from sage.combinat.partition import Partitions
219
+ for p in Partitions(len(labels)):
220
+ yield self._canonical_rep_from_partition(structure_class, labels, p)
221
+
222
+ def _canonical_rep_from_partition(self, structure_class, labels, p):
223
+ """
224
+ Return the canonical representative corresponding to the partition
225
+ p.
226
+
227
+ EXAMPLES::
228
+
229
+ sage: P = species.PartitionSpecies()
230
+ sage: P._canonical_rep_from_partition(P._default_structure_class,[1,2,3],[2,1])
231
+ {{1, 2}, {3}}
232
+ """
233
+ breaks = [sum(p[:i]) for i in range(len(p) + 1)]
234
+ return structure_class(self, labels, [list(range(breaks[i]+1, breaks[i+1]+1)) for i in range(len(p))])
235
+
236
+ def _gs_callable(self, base_ring, n):
237
+ r"""
238
+ EXAMPLES::
239
+
240
+ sage: P = species.PartitionSpecies()
241
+ sage: g = P.generating_series()
242
+ sage: [g.coefficient(i) for i in range(5)]
243
+ [1, 1, 1, 5/6, 5/8]
244
+ """
245
+ from sage.combinat.combinat import bell_number
246
+ return self._weight * base_ring(bell_number(n) / factorial(n))
247
+
248
+ def _itgs_callable(self, base_ring, n):
249
+ r"""
250
+ The isomorphism type generating series is given by
251
+ `\frac{1}{1-x}`.
252
+
253
+ EXAMPLES::
254
+
255
+ sage: P = species.PartitionSpecies()
256
+ sage: g = P.isotype_generating_series()
257
+ sage: [g.coefficient(i) for i in range(10)]
258
+ [1, 1, 2, 3, 5, 7, 11, 15, 22, 30]
259
+ """
260
+ from sage.combinat.partition import number_of_partitions
261
+ return self._weight*base_ring(number_of_partitions(n))
262
+
263
+ def _cis(self, series_ring, base_ring):
264
+ r"""
265
+ The cycle index series for the species of partitions is given by.
266
+
267
+ .. MATH::
268
+
269
+ exp \sum_{n \ge 1} \frac{1}{n} \left( exp \left( \sum_{k \ge 1} \frac{x_{kn}}{k} \right) -1 \right).
270
+
271
+ EXAMPLES::
272
+
273
+ sage: P = species.PartitionSpecies()
274
+ sage: g = P.cycle_index_series() # needs sage.modules
275
+ sage: g[0:5] # needs sage.modules
276
+ [p[],
277
+ p[1],
278
+ p[1, 1] + p[2],
279
+ 5/6*p[1, 1, 1] + 3/2*p[2, 1] + 2/3*p[3],
280
+ 5/8*p[1, 1, 1, 1] + 7/4*p[2, 1, 1] + 7/8*p[2, 2] + p[3, 1] + 3/4*p[4]]
281
+ """
282
+ ciset = SetSpecies().cycle_index_series(base_ring)
283
+ res = ciset(ciset - 1)
284
+ if self.is_weighted():
285
+ res *= self._weight
286
+ return res
287
+
288
+
289
+ #Backward compatibility
290
+ PartitionSpecies_class = PartitionSpecies