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,476 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ """
3
+ Recursive 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 sage.combinat.species.species import GenericCombinatorialSpecies
20
+ from sage.combinat.species.structure import SpeciesStructureWrapper
21
+ from sage.rings.rational_field import QQ
22
+
23
+
24
+ class CombinatorialSpeciesStructure(SpeciesStructureWrapper):
25
+ pass
26
+
27
+
28
+ class CombinatorialSpecies(GenericCombinatorialSpecies):
29
+ def __init__(self, min=None):
30
+ """
31
+ EXAMPLES::
32
+
33
+ sage: F = CombinatorialSpecies()
34
+ sage: loads(dumps(F))
35
+ Combinatorial species
36
+
37
+ ::
38
+
39
+ sage: X = species.SingletonSpecies()
40
+ sage: E = species.EmptySetSpecies()
41
+ sage: L = CombinatorialSpecies()
42
+ sage: L.define(E+X*L)
43
+ sage: L.generating_series()[0:4]
44
+ [1, 1, 1, 1]
45
+ sage: LL = loads(dumps(L))
46
+ sage: LL.generating_series()[0:4]
47
+ [1, 1, 1, 1]
48
+ """
49
+ self._generating_series = {}
50
+ self._isotype_generating_series = {}
51
+ self._cycle_index_series = {}
52
+ GenericCombinatorialSpecies.__init__(self, min=min, max=None, weight=None)
53
+
54
+ _default_structure_class = CombinatorialSpeciesStructure
55
+
56
+ def __hash__(self):
57
+ """
58
+ EXAMPLES::
59
+
60
+ sage: hash(CombinatorialSpecies) #random
61
+ 53751280
62
+
63
+ ::
64
+
65
+ sage: X = species.SingletonSpecies()
66
+ sage: E = species.EmptySetSpecies()
67
+ sage: L = CombinatorialSpecies()
68
+ sage: L.define(E+X*L)
69
+ sage: hash(L) #random
70
+ -826511807095108317
71
+ """
72
+ try:
73
+ return hash(('CombinatorialSpecies', id(self._reference)))
74
+ except AttributeError:
75
+ return hash('CombinatorialSpecies')
76
+
77
+ def __eq__(self, other):
78
+ """
79
+ TESTS::
80
+
81
+ sage: A = species.CombinatorialSpecies()
82
+ sage: B = species.CombinatorialSpecies()
83
+ sage: A == B
84
+ False
85
+ sage: X = species.SingletonSpecies()
86
+ sage: A.define(X+A*A)
87
+ sage: B.define(X+B*B)
88
+ sage: A == B
89
+ True
90
+
91
+ sage: C = species.CombinatorialSpecies()
92
+ sage: E = species.EmptySetSpecies()
93
+ sage: C.define(E+X*C*C)
94
+ sage: A == C
95
+ False
96
+ """
97
+ if not isinstance(other, CombinatorialSpecies):
98
+ return False
99
+ if not hasattr(self, "_reference"):
100
+ return False
101
+ if hasattr(self, '_computing_eq'):
102
+ return True
103
+
104
+ self._computing_eq = True
105
+ res = self._unique_info() == other._unique_info()
106
+ del self._computing_eq
107
+ return res
108
+
109
+ def __ne__(self, other):
110
+ """
111
+ Check whether ``self`` is not equal to ``other``.
112
+
113
+ EXAMPLES::
114
+
115
+ sage: A = species.CombinatorialSpecies()
116
+ sage: B = species.CombinatorialSpecies()
117
+ sage: A != B
118
+ True
119
+ sage: X = species.SingletonSpecies()
120
+ sage: A.define(X+A*A)
121
+ sage: B.define(X+B*B)
122
+ sage: A != B
123
+ False
124
+
125
+ sage: C = species.CombinatorialSpecies()
126
+ sage: E = species.EmptySetSpecies()
127
+ sage: C.define(E+X*C*C)
128
+ sage: A != C
129
+ True
130
+ """
131
+ return not (self == other)
132
+
133
+ def _unique_info(self):
134
+ """
135
+ Return a tuple which should uniquely identify the species.
136
+
137
+ EXAMPLES::
138
+
139
+ sage: F = CombinatorialSpecies()
140
+ sage: F._unique_info()
141
+ (<class 'sage.combinat.species.recursive_species.CombinatorialSpecies'>,)
142
+
143
+ ::
144
+
145
+ sage: X = species.SingletonSpecies()
146
+ sage: E = species.EmptySetSpecies()
147
+ sage: L = CombinatorialSpecies()
148
+ sage: L.define(E+X*L)
149
+ sage: L._unique_info()
150
+ (<class 'sage.combinat.species.recursive_species.CombinatorialSpecies'>,
151
+ <class 'sage.combinat.species.sum_species.SumSpecies'>,
152
+ None,
153
+ None,
154
+ 1,
155
+ Empty set species,
156
+ Product of (Singleton species) and (Combinatorial species))
157
+ """
158
+ if hasattr(self, "_reference"):
159
+ return (self.__class__,) + self._reference._unique_info()
160
+ else:
161
+ return (self.__class__,)
162
+
163
+ def __getstate__(self):
164
+ """
165
+ EXAMPLES::
166
+
167
+ sage: X = species.SingletonSpecies()
168
+ sage: E = species.EmptySetSpecies()
169
+ sage: L = CombinatorialSpecies()
170
+ sage: L.define(E+X*L)
171
+ sage: L.__getstate__()
172
+ {'reference': Sum of (Empty set species) and (Product of (Singleton species) and (Combinatorial species))}
173
+ """
174
+ state = {}
175
+ if hasattr(self, '_reference'):
176
+ state['reference'] = self._reference
177
+ return state
178
+
179
+ def __setstate__(self, state):
180
+ """
181
+ EXAMPLES::
182
+
183
+ sage: X = species.SingletonSpecies()
184
+ sage: E = species.EmptySetSpecies()
185
+ sage: L = CombinatorialSpecies()
186
+ sage: L.define(E+X*L)
187
+ sage: state = L.__getstate__(); state
188
+ {'reference': Sum of (Empty set species) and (Product of (Singleton species) and (Combinatorial species))}
189
+ sage: L._reference = None
190
+ sage: L.__setstate__(state)
191
+ sage: L._reference
192
+ Sum of (Empty set species) and (Product of (Singleton species) and (Combinatorial species))
193
+ """
194
+ CombinatorialSpecies.__init__(self)
195
+ if 'reference' in state:
196
+ self.define(state['reference'])
197
+
198
+ def _structures(self, structure_class, labels):
199
+ """
200
+ EXAMPLES::
201
+
202
+ sage: F = CombinatorialSpecies()
203
+ sage: list(F._structures(F._default_structure_class, [1,2,3]))
204
+ Traceback (most recent call last):
205
+ ...
206
+ NotImplementedError
207
+ """
208
+ if not hasattr(self, "_reference"):
209
+ raise NotImplementedError
210
+ for s in self._reference.structures(labels):
211
+ yield structure_class(self, s)
212
+
213
+ def _isotypes(self, structure_class, labels):
214
+ """
215
+ EXAMPLES::
216
+
217
+ sage: F = CombinatorialSpecies()
218
+ sage: list(F._isotypes(F._default_structure_class, [1,2,3]))
219
+ Traceback (most recent call last):
220
+ ...
221
+ NotImplementedError
222
+ """
223
+ if not hasattr(self, "_reference"):
224
+ raise NotImplementedError
225
+ for s in self._reference.isotypes(labels):
226
+ yield structure_class(self, s)
227
+
228
+ def _gs(self, series_ring, base_ring):
229
+ """
230
+ EXAMPLES::
231
+
232
+ sage: F = CombinatorialSpecies()
233
+ sage: F.generating_series()
234
+ Uninitialized Lazy Series
235
+ """
236
+ if base_ring not in self._generating_series:
237
+ self._generating_series[base_ring] = series_ring.undefined(valuation=(0 if self._min is None else self._min))
238
+
239
+ res = self._generating_series[base_ring]
240
+ if hasattr(self, "_reference") and not hasattr(res, "_reference"):
241
+ res._reference = None
242
+ res.define(self._reference.generating_series(base_ring))
243
+ return res
244
+
245
+ def _itgs(self, series_ring, base_ring):
246
+ """
247
+ EXAMPLES::
248
+
249
+ sage: F = CombinatorialSpecies()
250
+ sage: F.isotype_generating_series()
251
+ Uninitialized Lazy Series
252
+ """
253
+ if base_ring not in self._isotype_generating_series:
254
+ self._isotype_generating_series[base_ring] = series_ring.undefined(valuation=(0 if self._min is None else self._min))
255
+
256
+ res = self._isotype_generating_series[base_ring]
257
+ if hasattr(self, "_reference") and not hasattr(res, "_reference"):
258
+ res._reference = None
259
+ res.define(self._reference.isotype_generating_series(base_ring))
260
+ return res
261
+
262
+ def _cis(self, series_ring, base_ring):
263
+ """
264
+ EXAMPLES::
265
+
266
+ sage: F = CombinatorialSpecies()
267
+ sage: F.cycle_index_series() # needs sage.modules
268
+ Uninitialized Lazy Series
269
+ """
270
+ if base_ring not in self._cycle_index_series:
271
+ self._cycle_index_series[base_ring] = series_ring.undefined(valuation=(0 if self._min is None else self._min))
272
+
273
+ res = self._cycle_index_series[base_ring]
274
+ if hasattr(self, "_reference") and not hasattr(res, "_reference"):
275
+ res._reference = None
276
+ res.define(self._reference.cycle_index_series(base_ring))
277
+ return res
278
+
279
+ def weight_ring(self):
280
+ """
281
+ EXAMPLES::
282
+
283
+ sage: F = species.CombinatorialSpecies()
284
+ sage: F.weight_ring()
285
+ Rational Field
286
+
287
+ ::
288
+
289
+ sage: X = species.SingletonSpecies()
290
+ sage: E = species.EmptySetSpecies()
291
+ sage: L = CombinatorialSpecies()
292
+ sage: L.define(E+X*L)
293
+ sage: L.weight_ring()
294
+ Rational Field
295
+ """
296
+ if not hasattr(self, "_reference"):
297
+ return QQ
298
+
299
+ if hasattr(self, "_weight_ring_been_called"):
300
+ return QQ
301
+ else:
302
+ self._weight_ring_been_called = True
303
+ res = self._reference.weight_ring()
304
+ del self._weight_ring_been_called
305
+ return res
306
+
307
+ def define(self, x):
308
+ """
309
+ Define ``self`` to be equal to the combinatorial species ``x``.
310
+
311
+ This is used to define combinatorial species recursively. All of the
312
+ real work is done by calling the ``.set()`` method for each of the
313
+ series associated to ``self``.
314
+
315
+ EXAMPLES: The species of linear orders `L` can be recursively defined
316
+ by `L = 1 + X*L` where 1 represents the empty set species
317
+ and `X` represents the singleton species::
318
+
319
+ sage: X = species.SingletonSpecies()
320
+ sage: E = species.EmptySetSpecies()
321
+ sage: L = CombinatorialSpecies()
322
+ sage: L.define(E+X*L)
323
+ sage: L.generating_series()[0:4]
324
+ [1, 1, 1, 1]
325
+ sage: L.structures([1,2,3]).cardinality()
326
+ 6
327
+ sage: L.structures([1,2,3]).list()
328
+ [1*(2*(3*{})),
329
+ 1*(3*(2*{})),
330
+ 2*(1*(3*{})),
331
+ 2*(3*(1*{})),
332
+ 3*(1*(2*{})),
333
+ 3*(2*(1*{}))]
334
+
335
+ ::
336
+
337
+ sage: L = species.LinearOrderSpecies()
338
+ sage: L.generating_series()[0:4]
339
+ [1, 1, 1, 1]
340
+ sage: L.structures([1,2,3]).cardinality()
341
+ 6
342
+ sage: L.structures([1,2,3]).list()
343
+ [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
344
+
345
+ TESTS::
346
+
347
+ sage: A = CombinatorialSpecies()
348
+ sage: A.define(E+X*A*A)
349
+ sage: A.generating_series()[0:6]
350
+ [1, 1, 2, 5, 14, 42]
351
+ sage: A.generating_series().counts(6)
352
+ [1, 1, 4, 30, 336, 5040]
353
+ sage: len(A.structures([1,2,3,4]).list())
354
+ 336
355
+ sage: A.isotype_generating_series()[0:6]
356
+ [1, 1, 2, 5, 14, 42]
357
+ sage: len(A.isotypes([1,2,3,4]).list())
358
+ 14
359
+
360
+ ::
361
+
362
+ sage: A = CombinatorialSpecies(min=1)
363
+ sage: A.define(X+A*A)
364
+ sage: A.generating_series()[0:6]
365
+ [0, 1, 1, 2, 5, 14]
366
+ sage: A.generating_series().counts(6)
367
+ [0, 1, 2, 12, 120, 1680]
368
+ sage: len(A.structures([1,2,3]).list())
369
+ 12
370
+ sage: A.isotype_generating_series()[0:6]
371
+ [0, 1, 1, 2, 5, 14]
372
+ sage: len(A.isotypes([1,2,3,4]).list())
373
+ 5
374
+
375
+ ::
376
+
377
+ sage: X2 = X*X
378
+ sage: X5 = X2*X2*X
379
+ sage: A = CombinatorialSpecies(min=1)
380
+ sage: B = CombinatorialSpecies(min=1)
381
+ sage: C = CombinatorialSpecies(min=1)
382
+ sage: A.define(X5+B*B)
383
+ sage: B.define(X5+C*C)
384
+ sage: C.define(X2+C*C+A*A)
385
+ sage: A.generating_series()[0:15]
386
+ [0, 0, 0, 0, 0, 1, 0, 0, 1, 2, 5, 4, 14, 10, 48]
387
+ sage: B.generating_series()[0:15]
388
+ [0, 0, 0, 0, 1, 1, 2, 0, 5, 0, 14, 0, 44, 0, 138]
389
+ sage: C.generating_series()[0:15]
390
+ [0, 0, 1, 0, 1, 0, 2, 0, 5, 0, 15, 0, 44, 2, 142]
391
+
392
+ ::
393
+
394
+ sage: F = CombinatorialSpecies()
395
+ sage: F.define(E+X+(X*F+X*X*F))
396
+ sage: F.generating_series().counts(10)
397
+ [1, 2, 6, 30, 192, 1560, 15120, 171360, 2217600, 32296320]
398
+ sage: F.generating_series()[0:10]
399
+ [1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
400
+ sage: F.isotype_generating_series()[0:10]
401
+ [1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
402
+
403
+ Check that :issue:`35071` is fixed::
404
+
405
+ sage: X = species.SingletonSpecies()
406
+ sage: E = species.SetSpecies(max=3)
407
+ sage: B = species.CombinatorialSpecies(min=1)
408
+ sage: B.define(X*E(B))
409
+ sage: B.generating_series()
410
+ z + z^2 + 3/2*z^3 + 5/2*z^4 + 9/2*z^5 + 17/2*z^6 + 133/8*z^7 + O(z^8)
411
+ """
412
+ if not isinstance(x, GenericCombinatorialSpecies):
413
+ raise TypeError("x must be a combinatorial species")
414
+
415
+ if self.__class__ is not CombinatorialSpecies:
416
+ raise TypeError("only undefined combinatorial species can be set")
417
+
418
+ self._reference = x
419
+
420
+ def _add_to_digraph(self, d):
421
+ """
422
+ Add this species as a vertex to the digraph d along with any
423
+ 'children' of this species.
424
+
425
+ Note that to avoid infinite recursion, we just return if this
426
+ species already occurs in the digraph d.
427
+
428
+ EXAMPLES::
429
+
430
+ sage: d = DiGraph(multiedges=True) # needs sage.graphs
431
+ sage: X = species.SingletonSpecies()
432
+ sage: B = species.CombinatorialSpecies()
433
+ sage: B.define(X+B*B)
434
+ sage: B._add_to_digraph(d); d # needs sage.graphs
435
+ Multi-digraph on 4 vertices
436
+
437
+ TESTS::
438
+
439
+ sage: C = species.CombinatorialSpecies()
440
+ sage: C._add_to_digraph(d) # needs sage.graphs
441
+ Traceback (most recent call last):
442
+ ...
443
+ NotImplementedError
444
+ """
445
+ if self in d:
446
+ return
447
+ try:
448
+ d.add_edge(self, self._reference)
449
+ self._reference._add_to_digraph(d)
450
+ except AttributeError:
451
+ raise NotImplementedError
452
+
453
+ def _equation(self, var_mapping):
454
+ """
455
+ Return the right hand side of an algebraic equation satisfied by
456
+ this species. This is a utility function called by the
457
+ algebraic_equation_system method.
458
+
459
+ EXAMPLES::
460
+
461
+ sage: C = species.CombinatorialSpecies()
462
+ sage: C.algebraic_equation_system() # needs sage.graphs
463
+ Traceback (most recent call last):
464
+ ...
465
+ NotImplementedError
466
+
467
+ ::
468
+
469
+ sage: B = species.BinaryTreeSpecies()
470
+ sage: B.algebraic_equation_system() # needs sage.graphs
471
+ [-node3^2 + node1, -node1 + node3 + (-z)]
472
+ """
473
+ try:
474
+ return var_mapping[self._reference]
475
+ except AttributeError:
476
+ raise NotImplementedError
@@ -0,0 +1,192 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ """
3
+ Set 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
+
20
+ from .species import GenericCombinatorialSpecies
21
+ from sage.combinat.species.structure import GenericSpeciesStructure
22
+ from sage.combinat.species.misc import accept_size
23
+ from sage.structure.unique_representation import UniqueRepresentation
24
+ from sage.arith.misc import factorial
25
+
26
+
27
+ class SetSpeciesStructure(GenericSpeciesStructure):
28
+ def __repr__(self):
29
+ """
30
+ EXAMPLES::
31
+
32
+ sage: S = species.SetSpecies()
33
+ sage: a = S.structures(["a","b","c"]).random_element(); a
34
+ {'a', 'b', 'c'}
35
+ """
36
+ s = GenericSpeciesStructure.__repr__(self)
37
+ return "{"+s[1:-1]+"}"
38
+
39
+ def canonical_label(self):
40
+ """
41
+ EXAMPLES::
42
+
43
+ sage: S = species.SetSpecies()
44
+ sage: a = S.structures(["a","b","c"]).random_element(); a
45
+ {'a', 'b', 'c'}
46
+ sage: a.canonical_label()
47
+ {'a', 'b', 'c'}
48
+ """
49
+ rng = list(range(1, len(self._labels) + 1))
50
+ return SetSpeciesStructure(self.parent(), self._labels, rng)
51
+
52
+ def transport(self, perm):
53
+ """
54
+ Return the transport of this set along the permutation perm.
55
+
56
+ EXAMPLES::
57
+
58
+ sage: F = species.SetSpecies()
59
+ sage: a = F.structures(["a", "b", "c"]).random_element(); a
60
+ {'a', 'b', 'c'}
61
+ sage: p = PermutationGroupElement((1,2)) # needs sage.groups
62
+ sage: a.transport(p) # needs sage.groups
63
+ {'a', 'b', 'c'}
64
+ """
65
+ return self
66
+
67
+ def automorphism_group(self):
68
+ """
69
+ Return the group of permutations whose action on this set leave it
70
+ fixed. For the species of sets, there is only one isomorphism
71
+ class, so every permutation is in its automorphism group.
72
+
73
+ EXAMPLES::
74
+
75
+ sage: F = species.SetSpecies()
76
+ sage: a = F.structures(["a", "b", "c"]).random_element(); a
77
+ {'a', 'b', 'c'}
78
+ sage: a.automorphism_group() # needs sage.groups
79
+ Symmetric group of order 3! as a permutation group
80
+ """
81
+ from sage.groups.perm_gps.permgroup_named import SymmetricGroup
82
+ return SymmetricGroup(max(1,len(self._labels)))
83
+
84
+
85
+ class SetSpecies(GenericCombinatorialSpecies, UniqueRepresentation):
86
+ @staticmethod
87
+ @accept_size
88
+ def __classcall__(cls, *args, **kwds):
89
+ """
90
+ EXAMPLES::
91
+
92
+ sage: E = species.SetSpecies(); E
93
+ Set species
94
+ """
95
+ return super().__classcall__(cls, *args, **kwds)
96
+
97
+ def __init__(self, min=None, max=None, weight=None):
98
+ """
99
+ Return the species of sets.
100
+
101
+ EXAMPLES::
102
+
103
+ sage: E = species.SetSpecies()
104
+ sage: E.structures([1,2,3]).list()
105
+ [{1, 2, 3}]
106
+ sage: E.isotype_generating_series()[0:4]
107
+ [1, 1, 1, 1]
108
+
109
+ sage: S = species.SetSpecies()
110
+ sage: c = S.generating_series()[0:3]
111
+ sage: S._check()
112
+ True
113
+ sage: S == loads(dumps(S))
114
+ True
115
+ """
116
+ GenericCombinatorialSpecies.__init__(self, min=min, max=max, weight=weight)
117
+ self._name = "Set species"
118
+
119
+ _default_structure_class = SetSpeciesStructure
120
+
121
+ def _structures(self, structure_class, labels):
122
+ """
123
+ EXAMPLES::
124
+
125
+ sage: S = species.SetSpecies()
126
+ sage: S.structures([1,2,3]).list()
127
+ [{1, 2, 3}]
128
+ """
129
+ n = len(labels)
130
+ yield structure_class(self, labels, range(1,n+1))
131
+
132
+ _isotypes = _structures
133
+
134
+ def _gs_callable(self, base_ring, n):
135
+ r"""
136
+ The generating series for the species of sets is given by
137
+ `e^x`.
138
+
139
+ EXAMPLES::
140
+
141
+ sage: S = species.SetSpecies()
142
+ sage: g = S.generating_series()
143
+ sage: [g.coefficient(i) for i in range(10)]
144
+ [1, 1, 1/2, 1/6, 1/24, 1/120, 1/720, 1/5040, 1/40320, 1/362880]
145
+ sage: [g.count(i) for i in range(10)]
146
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
147
+ """
148
+ return base_ring(self._weight / factorial(n))
149
+
150
+ def _itgs_list(self, base_ring, n):
151
+ r"""
152
+ The isomorphism type generating series for the species of sets is
153
+ `\frac{1}{1-x}`.
154
+
155
+ EXAMPLES::
156
+
157
+ sage: S = species.SetSpecies()
158
+ sage: g = S.isotype_generating_series()
159
+ sage: g[0:10]
160
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
161
+ sage: [g.count(i) for i in range(10)]
162
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
163
+ """
164
+ return base_ring(self._weight)
165
+
166
+ def _cis(self, series_ring, base_ring):
167
+ r"""
168
+ The cycle index series for the species of sets is given by
169
+ `exp\( \sum_{n=1}{\infty} = \frac{x_n}{n} \)`.
170
+
171
+ EXAMPLES::
172
+
173
+ sage: S = species.SetSpecies()
174
+ sage: g = S.cycle_index_series() # needs sage.modules
175
+ sage: g[0:5] # needs sage.modules
176
+ [p[],
177
+ p[1],
178
+ 1/2*p[1, 1] + 1/2*p[2],
179
+ 1/6*p[1, 1, 1] + 1/2*p[2, 1] + 1/3*p[3],
180
+ 1/24*p[1, 1, 1, 1] + 1/4*p[2, 1, 1] + 1/8*p[2, 2] + 1/3*p[3, 1] + 1/4*p[4]]
181
+ """
182
+ from .generating_series import ExponentialCycleIndexSeries
183
+ res = ExponentialCycleIndexSeries(base_ring)
184
+
185
+ if self.is_weighted():
186
+ res *= self._weight
187
+
188
+ return res
189
+
190
+
191
+ #Backward compatibility
192
+ SetSpecies_class = SetSpecies