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,268 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.groups sage.libs.flint
3
+ """
4
+ Permutation 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 .structure import GenericSpeciesStructure
23
+ from sage.structure.unique_representation import UniqueRepresentation
24
+ from sage.combinat.permutation import Permutation, Permutations
25
+ from sage.combinat.species.misc import accept_size
26
+
27
+
28
+ class PermutationSpeciesStructure(GenericSpeciesStructure):
29
+ def canonical_label(self):
30
+ """
31
+ EXAMPLES::
32
+
33
+ sage: P = species.PermutationSpecies()
34
+ sage: S = P.structures(["a", "b", "c"])
35
+ sage: [s.canonical_label() for s in S]
36
+ [['a', 'b', 'c'],
37
+ ['b', 'a', 'c'],
38
+ ['b', 'a', 'c'],
39
+ ['b', 'c', 'a'],
40
+ ['b', 'c', 'a'],
41
+ ['b', 'a', 'c']]
42
+ """
43
+ P = self.parent()
44
+ return P._canonical_rep_from_partition(self.__class__, self._labels, Permutation(self._list).cycle_type())
45
+
46
+ def permutation_group_element(self):
47
+ """
48
+ Return ``self`` as a permutation group element.
49
+
50
+ EXAMPLES::
51
+
52
+ sage: p = PermutationGroupElement((2,3,4))
53
+ sage: P = species.PermutationSpecies()
54
+ sage: a = P.structures(["a", "b", "c", "d"])[2]; a
55
+ ['a', 'c', 'b', 'd']
56
+ sage: a.permutation_group_element()
57
+ (2,3)
58
+ """
59
+ return Permutation(self._list).to_permutation_group_element()
60
+
61
+ def transport(self, perm):
62
+ """
63
+ Return the transport of this structure along the permutation
64
+ perm.
65
+
66
+ EXAMPLES::
67
+
68
+ sage: p = PermutationGroupElement((2,3,4))
69
+ sage: P = species.PermutationSpecies()
70
+ sage: a = P.structures(["a", "b", "c", "d"])[2]; a
71
+ ['a', 'c', 'b', 'd']
72
+ sage: a.transport(p)
73
+ ['a', 'd', 'c', 'b']
74
+ """
75
+ p = self.permutation_group_element()
76
+ p = perm*p*~perm
77
+ return self.__class__(self.parent(), self._labels, p.domain())
78
+
79
+ def automorphism_group(self):
80
+ """
81
+ Return the group of permutations whose action on this structure
82
+ leave it fixed.
83
+
84
+ EXAMPLES::
85
+
86
+ sage: set_random_seed(0)
87
+ sage: p = PermutationGroupElement((2,3,4))
88
+ sage: P = species.PermutationSpecies()
89
+ sage: a = P.structures(["a", "b", "c", "d"])[2]; a
90
+ ['a', 'c', 'b', 'd']
91
+ sage: a.automorphism_group()
92
+ Permutation Group with generators [(2,3), (1,4)]
93
+
94
+ ::
95
+
96
+ sage: [a.transport(perm) for perm in a.automorphism_group()]
97
+ [['a', 'c', 'b', 'd'],
98
+ ['a', 'c', 'b', 'd'],
99
+ ['a', 'c', 'b', 'd'],
100
+ ['a', 'c', 'b', 'd']]
101
+ """
102
+ from sage.groups.perm_gps.permgroup_named import SymmetricGroup
103
+ from sage.groups.perm_gps.permgroup import PermutationGroup
104
+ S = SymmetricGroup(len(self._labels))
105
+ p = self.permutation_group_element()
106
+ return PermutationGroup(S.centralizer(p).gens())
107
+
108
+
109
+ class PermutationSpecies(GenericCombinatorialSpecies, UniqueRepresentation):
110
+ @staticmethod
111
+ @accept_size
112
+ def __classcall__(cls, *args, **kwds):
113
+ """
114
+ EXAMPLES::
115
+
116
+ sage: P = species.PermutationSpecies(); P
117
+ Permutation species
118
+ """
119
+ return super().__classcall__(cls, *args, **kwds)
120
+
121
+ def __init__(self, min=None, max=None, weight=None):
122
+ """
123
+ Return the species of permutations.
124
+
125
+ EXAMPLES::
126
+
127
+ sage: P = species.PermutationSpecies()
128
+ sage: P.generating_series()[0:5]
129
+ [1, 1, 1, 1, 1]
130
+ sage: P.isotype_generating_series()[0:5]
131
+ [1, 1, 2, 3, 5]
132
+
133
+ sage: P = species.PermutationSpecies()
134
+ sage: c = P.generating_series()[0:3]
135
+ sage: P._check()
136
+ True
137
+ sage: P == loads(dumps(P))
138
+ True
139
+ """
140
+ GenericCombinatorialSpecies.__init__(self, min=min, max=max, weight=weight)
141
+ self._name = "Permutation species"
142
+
143
+ _default_structure_class = PermutationSpeciesStructure
144
+
145
+ def _structures(self, structure_class, labels):
146
+ """
147
+ EXAMPLES::
148
+
149
+ sage: P = species.PermutationSpecies()
150
+ sage: P.structures([1,2,3]).list()
151
+ [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
152
+ """
153
+ if labels == []:
154
+ yield structure_class(self, labels, [])
155
+ else:
156
+ for p in Permutations(len(labels)):
157
+ yield structure_class(self, labels, list(p))
158
+
159
+ def _isotypes(self, structure_class, labels):
160
+ """
161
+ EXAMPLES::
162
+
163
+ sage: P = species.PermutationSpecies()
164
+ sage: P.isotypes([1,2,3]).list()
165
+ [[2, 3, 1], [2, 1, 3], [1, 2, 3]]
166
+ """
167
+ from sage.combinat.partition import Partitions
168
+ if labels == []:
169
+ yield structure_class(self, labels, [])
170
+ return
171
+
172
+ for p in Partitions(len(labels)):
173
+ yield self._canonical_rep_from_partition(structure_class, labels, p)
174
+
175
+ def _canonical_rep_from_partition(self, structure_class, labels, p):
176
+ """
177
+ EXAMPLES::
178
+
179
+ sage: P = species.PermutationSpecies()
180
+ sage: P._canonical_rep_from_partition(P._default_structure_class, ["a","b","c"], [2,1])
181
+ ['b', 'a', 'c']
182
+ """
183
+ indices = list(range(1, len(labels) + 1))
184
+ breaks = [sum(p[:i]) for i in range(len(p)+1)]
185
+ cycles = tuple(tuple(indices[breaks[i]:breaks[i+1]]) for i in range(len(p)))
186
+ perm = list(Permutation(cycles))
187
+ return structure_class(self, labels, perm)
188
+
189
+ def _gs_list(self, base_ring, n):
190
+ r"""
191
+ The generating series for the species of linear orders is
192
+ `\frac{1}{1-x}`.
193
+
194
+ EXAMPLES::
195
+
196
+ sage: P = species.PermutationSpecies()
197
+ sage: g = P.generating_series()
198
+ sage: g[0:10]
199
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
200
+ """
201
+ return base_ring.one()
202
+
203
+ def _itgs_callable(self, base_ring, n):
204
+ r"""
205
+ The isomorphism type generating series is given by
206
+ `\frac{1}{1-x}`.
207
+
208
+ EXAMPLES::
209
+
210
+ sage: P = species.PermutationSpecies()
211
+ sage: g = P.isotype_generating_series()
212
+ sage: [g.coefficient(i) for i in range(10)]
213
+ [1, 1, 2, 3, 5, 7, 11, 15, 22, 30]
214
+ """
215
+ from sage.combinat.partition import number_of_partitions
216
+ return base_ring(number_of_partitions(n))
217
+
218
+ def _cis(self, series_ring, base_ring):
219
+ r"""
220
+ The cycle index series for the species of permutations is given by.
221
+
222
+ .. MATH::
223
+
224
+ \prod{n=1}^\infty \frac{1}{1-x_n}.
225
+
226
+ EXAMPLES::
227
+
228
+ sage: P = species.PermutationSpecies()
229
+ sage: g = P.cycle_index_series() # needs sage.modules
230
+ sage: g[0:5] # needs sage.modules
231
+ [p[],
232
+ p[1],
233
+ p[1, 1] + p[2],
234
+ p[1, 1, 1] + p[2, 1] + p[3],
235
+ p[1, 1, 1, 1] + p[2, 1, 1] + p[2, 2] + p[3, 1] + p[4]]
236
+ """
237
+ from sage.combinat.sf.sf import SymmetricFunctions
238
+ from sage.combinat.partition import Partitions
239
+ p = SymmetricFunctions(base_ring).p()
240
+ CIS = series_ring
241
+ return CIS(lambda n: sum(p(la) for la in Partitions(n)))
242
+
243
+ def _cis_gen(self, base_ring, m, n):
244
+ """
245
+ EXAMPLES::
246
+
247
+ sage: P = species.PermutationSpecies()
248
+ sage: [P._cis_gen(QQ, 2, i) for i in range(10)] # needs sage.modules
249
+ [p[], 0, p[2], 0, p[2, 2], 0, p[2, 2, 2], 0, p[2, 2, 2, 2], 0]
250
+ """
251
+ from sage.combinat.sf.sf import SymmetricFunctions
252
+ p = SymmetricFunctions(base_ring).power()
253
+
254
+ pn = p([m])
255
+
256
+ if not n:
257
+ return p(1)
258
+ if m == 1:
259
+ if n % 2:
260
+ return base_ring.zero()
261
+ return pn**(n//2)
262
+ elif n % m:
263
+ return base_ring.zero()
264
+ return pn**(n//m)
265
+
266
+
267
+ #Backward compatibility
268
+ PermutationSpecies_class = PermutationSpecies
@@ -0,0 +1,423 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ """
3
+ Product 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
+ from .species import GenericCombinatorialSpecies
20
+ from .structure import GenericSpeciesStructure
21
+ from .subset_species import SubsetSpecies
22
+ from sage.structure.unique_representation import UniqueRepresentation
23
+
24
+
25
+ class ProductSpeciesStructure(GenericSpeciesStructure):
26
+ def __init__(self, parent, labels, subset, left, right):
27
+ """
28
+ TESTS::
29
+
30
+ sage: S = species.SetSpecies()
31
+ sage: F = S * S
32
+ sage: a = F.structures(['a','b','c']).random_element()
33
+ sage: a == loads(dumps(a))
34
+ True
35
+ """
36
+ self._subset = subset
37
+ GenericSpeciesStructure.__init__(self, parent, labels, [left, right])
38
+
39
+ def __repr__(self):
40
+ """
41
+ Return the string representation of this object.
42
+
43
+ EXAMPLES::
44
+
45
+ sage: S = species.SetSpecies()
46
+ sage: (S*S).structures(['a','b','c'])[0]
47
+ {}*{'a', 'b', 'c'}
48
+ sage: (S*S*S).structures(['a','b','c'])[13]
49
+ ({'c'}*{'a'})*{'b'}
50
+ """
51
+ left, right = map(repr, self._list)
52
+ if "*" in left:
53
+ left = "(%s)" % left
54
+ if "*" in right:
55
+ right = "(%s)" % right
56
+ return "%s*%s" % (left, right)
57
+
58
+ def transport(self, perm):
59
+ """
60
+ EXAMPLES::
61
+
62
+ sage: # needs sage.groups
63
+ sage: p = PermutationGroupElement((2,3))
64
+ sage: S = species.SetSpecies()
65
+ sage: F = S * S
66
+ sage: a = F.structures(['a','b','c'])[4]; a
67
+ {'a', 'b'}*{'c'}
68
+ sage: a.transport(p)
69
+ {'a', 'c'}*{'b'}
70
+ """
71
+ left, right = self._list
72
+ new_subset = self._subset.transport(perm)
73
+ left_labels = new_subset.label_subset()
74
+ right_labels = new_subset.complement().label_subset()
75
+
76
+ return self.__class__(self.parent(), self._labels,
77
+ new_subset,
78
+ left.change_labels(left_labels),
79
+ right.change_labels(right_labels))
80
+
81
+ def canonical_label(self):
82
+ """
83
+ EXAMPLES::
84
+
85
+ sage: S = species.SetSpecies()
86
+ sage: F = S * S
87
+ sage: S = F.structures(['a','b','c']).list(); S
88
+ [{}*{'a', 'b', 'c'},
89
+ {'a'}*{'b', 'c'},
90
+ {'b'}*{'a', 'c'},
91
+ {'c'}*{'a', 'b'},
92
+ {'a', 'b'}*{'c'},
93
+ {'a', 'c'}*{'b'},
94
+ {'b', 'c'}*{'a'},
95
+ {'a', 'b', 'c'}*{}]
96
+
97
+ ::
98
+
99
+ sage: F.isotypes(['a','b','c']).cardinality()
100
+ 4
101
+ sage: [s.canonical_label() for s in S]
102
+ [{}*{'a', 'b', 'c'},
103
+ {'a'}*{'b', 'c'},
104
+ {'a'}*{'b', 'c'},
105
+ {'a'}*{'b', 'c'},
106
+ {'a', 'b'}*{'c'},
107
+ {'a', 'b'}*{'c'},
108
+ {'a', 'b'}*{'c'},
109
+ {'a', 'b', 'c'}*{}]
110
+ """
111
+ left, right = self._list
112
+ new_subset = self._subset.canonical_label()
113
+ left_labels = new_subset.label_subset()
114
+ right_labels = new_subset.complement().label_subset()
115
+
116
+ return self.__class__(self.parent(), self._labels,
117
+ new_subset,
118
+ left.canonical_label().change_labels(left_labels),
119
+ right.canonical_label().change_labels(right_labels))
120
+
121
+ def change_labels(self, labels):
122
+ """
123
+ Return a relabelled structure.
124
+
125
+ INPUT:
126
+
127
+ - ``labels`` -- list of labels
128
+
129
+ OUTPUT:
130
+
131
+ A structure with the `i`-th label of ``self`` replaced with the `i`-th
132
+ label of the list.
133
+
134
+ EXAMPLES::
135
+
136
+ sage: S = species.SetSpecies()
137
+ sage: F = S * S
138
+ sage: a = F.structures(['a','b','c'])[0]; a
139
+ {}*{'a', 'b', 'c'}
140
+ sage: a.change_labels([1,2,3])
141
+ {}*{1, 2, 3}
142
+ """
143
+ left, right = self._list
144
+ new_subset = self._subset.change_labels(labels)
145
+ left_labels = new_subset.label_subset()
146
+ right_labels = new_subset.complement().label_subset()
147
+ return self.__class__(self.parent(), labels,
148
+ new_subset,
149
+ left.change_labels(left_labels),
150
+ right.change_labels(right_labels))
151
+
152
+ def automorphism_group(self):
153
+ """
154
+ EXAMPLES::
155
+
156
+ sage: # needs sage.groups
157
+ sage: p = PermutationGroupElement((2,3))
158
+ sage: S = species.SetSpecies()
159
+ sage: F = S * S
160
+ sage: a = F.structures([1,2,3,4])[1]; a
161
+ {1}*{2, 3, 4}
162
+ sage: a.automorphism_group()
163
+ Permutation Group with generators [(2,3), (2,3,4)]
164
+
165
+ ::
166
+
167
+ sage: [a.transport(g) for g in a.automorphism_group()] # needs sage.groups
168
+ [{1}*{2, 3, 4},
169
+ {1}*{2, 3, 4},
170
+ {1}*{2, 3, 4},
171
+ {1}*{2, 3, 4},
172
+ {1}*{2, 3, 4},
173
+ {1}*{2, 3, 4}]
174
+
175
+ ::
176
+
177
+ sage: a = F.structures([1,2,3,4])[8]; a # needs sage.groups
178
+ {2, 3}*{1, 4}
179
+ sage: [a.transport(g) for g in a.automorphism_group()] # needs sage.groups
180
+ [{2, 3}*{1, 4}, {2, 3}*{1, 4}, {2, 3}*{1, 4}, {2, 3}*{1, 4}]
181
+ """
182
+ from sage.groups.perm_gps.constructor import PermutationGroupElement
183
+ from sage.groups.perm_gps.permgroup import PermutationGroup
184
+ from sage.combinat.species.misc import change_support
185
+
186
+ left, right = self._list
187
+
188
+ # Get the supports for each of the sides
189
+ l_support = self._subset._list
190
+ r_support = self._subset.complement()._list
191
+
192
+ # Get the automorphism group for the left object and
193
+ # make it have the correct support. Do the same to the
194
+ # right side.
195
+ l_aut = change_support(left.automorphism_group(), l_support)
196
+ r_aut = change_support(right.automorphism_group(), r_support)
197
+
198
+ identity = PermutationGroupElement([])
199
+
200
+ gens = l_aut.gens() + r_aut.gens()
201
+ gens = [g for g in gens if g != identity]
202
+ gens = sorted(set(gens)) if gens else [[]]
203
+ return PermutationGroup(gens)
204
+
205
+
206
+ class ProductSpecies(GenericCombinatorialSpecies, UniqueRepresentation):
207
+ def __init__(self, F, G, min=None, max=None, weight=None):
208
+ """
209
+ EXAMPLES::
210
+
211
+ sage: X = species.SingletonSpecies()
212
+ sage: A = X*X
213
+ sage: A.generating_series()[0:4]
214
+ [0, 0, 1, 0]
215
+
216
+ sage: P = species.PermutationSpecies()
217
+ sage: F = P * P; F
218
+ Product of (Permutation species) and (Permutation species)
219
+ sage: F == loads(dumps(F))
220
+ True
221
+ sage: F._check() # needs sage.libs.flint
222
+ True
223
+
224
+ TESTS::
225
+
226
+ sage: X = species.SingletonSpecies()
227
+ sage: X*X is X*X
228
+ True
229
+ """
230
+ self._F = F
231
+ self._G = G
232
+ self._state_info = [F, G]
233
+ GenericCombinatorialSpecies.__init__(self, min=None, max=None, weight=weight)
234
+
235
+ _default_structure_class = ProductSpeciesStructure
236
+
237
+ def left_factor(self):
238
+ """
239
+ Return the left factor of this product.
240
+
241
+ EXAMPLES::
242
+
243
+ sage: P = species.PermutationSpecies()
244
+ sage: X = species.SingletonSpecies()
245
+ sage: F = P*X
246
+ sage: F.left_factor()
247
+ Permutation species
248
+ """
249
+ return self._F
250
+
251
+ def right_factor(self):
252
+ """
253
+ Return the right factor of this product.
254
+
255
+ EXAMPLES::
256
+
257
+ sage: P = species.PermutationSpecies()
258
+ sage: X = species.SingletonSpecies()
259
+ sage: F = P*X
260
+ sage: F.right_factor()
261
+ Singleton species
262
+ """
263
+ return self._G
264
+
265
+ def _name(self):
266
+ """
267
+ Note that we use a function to return the name of this species
268
+ because we can't do it in the __init__ method due to it
269
+ requiring that self.left_factor() and self.right_factor()
270
+ already be unpickled.
271
+
272
+ EXAMPLES::
273
+
274
+ sage: P = species.PermutationSpecies()
275
+ sage: F = P * P
276
+ sage: F._name()
277
+ 'Product of (Permutation species) and (Permutation species)'
278
+ """
279
+ return "Product of (%s) and (%s)" % (self.left_factor(), self.right_factor())
280
+
281
+ def _structures(self, structure_class, labels):
282
+ """
283
+ EXAMPLES::
284
+
285
+ sage: S = species.SetSpecies()
286
+ sage: F = S * S
287
+ sage: F.structures([1,2]).list()
288
+ [{}*{1, 2}, {1}*{2}, {2}*{1}, {1, 2}*{}]
289
+ """
290
+ return self._times_gen(structure_class, "structures", labels)
291
+
292
+ def _isotypes(self, structure_class, labels):
293
+ """
294
+ EXAMPLES::
295
+
296
+ sage: S = species.SetSpecies()
297
+ sage: F = S * S
298
+ sage: F.isotypes([1,2,3]).list()
299
+ [{}*{1, 2, 3}, {1}*{2, 3}, {1, 2}*{3}, {1, 2, 3}*{}]
300
+ """
301
+ return self._times_gen(structure_class, "isotypes", labels)
302
+
303
+ def _times_gen(self, structure_class, attr, labels):
304
+ """
305
+ EXAMPLES::
306
+
307
+ sage: S = species.SetSpecies()
308
+ sage: F = S * S
309
+ sage: list(F._times_gen(F._default_structure_class, 'structures',[1,2]))
310
+ [{}*{1, 2}, {1}*{2}, {2}*{1}, {1, 2}*{}]
311
+ """
312
+ def c(F, n):
313
+ return F.generating_series().coefficient(n)
314
+ S = SubsetSpecies()
315
+
316
+ for u in getattr(S, attr)(labels):
317
+ vl = u.complement().label_subset()
318
+ ul = u.label_subset()
319
+ if c(self.left_factor(), len(ul)) == 0 or c(self.right_factor(), len(vl)) == 0:
320
+ continue
321
+ for x in getattr(self.left_factor(), attr)(ul):
322
+ for y in getattr(self.right_factor(), attr)(vl):
323
+ yield structure_class(self, labels, u, x, y)
324
+
325
+ def _gs(self, series_ring, base_ring):
326
+ """
327
+ EXAMPLES::
328
+
329
+ sage: P = species.PermutationSpecies()
330
+ sage: F = P * P
331
+ sage: F.generating_series()[0:5]
332
+ [1, 2, 3, 4, 5]
333
+ """
334
+ res = (self.left_factor().generating_series(base_ring) *
335
+ self.right_factor().generating_series(base_ring))
336
+ if self.is_weighted():
337
+ res = self._weight * res
338
+ return res
339
+
340
+ def _itgs(self, series_ring, base_ring):
341
+ """
342
+ EXAMPLES::
343
+
344
+ sage: P = species.PermutationSpecies()
345
+ sage: F = P * P
346
+ sage: F.isotype_generating_series()[0:5] # needs sage.libs.flint
347
+ [1, 2, 5, 10, 20]
348
+ """
349
+ res = (self.left_factor().isotype_generating_series(base_ring) *
350
+ self.right_factor().isotype_generating_series(base_ring))
351
+ if self.is_weighted():
352
+ res = self._weight * res
353
+ return res
354
+
355
+ def _cis(self, series_ring, base_ring):
356
+ """
357
+ EXAMPLES::
358
+
359
+ sage: P = species.PermutationSpecies()
360
+ sage: F = P * P
361
+ sage: F.cycle_index_series()[0:5] # needs sage.modules
362
+ [p[],
363
+ 2*p[1],
364
+ 3*p[1, 1] + 2*p[2],
365
+ 4*p[1, 1, 1] + 4*p[2, 1] + 2*p[3],
366
+ 5*p[1, 1, 1, 1] + 6*p[2, 1, 1] + 3*p[2, 2] + 4*p[3, 1] + 2*p[4]]
367
+ """
368
+ res = (self.left_factor().cycle_index_series(base_ring) *
369
+ self.right_factor().cycle_index_series(base_ring))
370
+ if self.is_weighted():
371
+ res = self._weight * res
372
+ return res
373
+
374
+ def weight_ring(self):
375
+ """
376
+ Return the weight ring for this species. This is determined by
377
+ asking Sage's coercion model what the result is when you multiply
378
+ (and add) elements of the weight rings for each of the operands.
379
+
380
+ EXAMPLES::
381
+
382
+ sage: S = species.SetSpecies()
383
+ sage: C = S*S
384
+ sage: C.weight_ring()
385
+ Rational Field
386
+
387
+ ::
388
+
389
+ sage: S = species.SetSpecies(weight=QQ['t'].gen())
390
+ sage: C = S*S
391
+ sage: C.weight_ring()
392
+ Univariate Polynomial Ring in t over Rational Field
393
+
394
+ ::
395
+
396
+ sage: S = species.SetSpecies()
397
+ sage: C = (S*S).weighted(QQ['t'].gen())
398
+ sage: C.weight_ring()
399
+ Univariate Polynomial Ring in t over Rational Field
400
+ """
401
+ return self._common_parent([self.left_factor().weight_ring(),
402
+ self.right_factor().weight_ring(),
403
+ self._weight.parent()])
404
+
405
+ def _equation(self, var_mapping):
406
+ """
407
+ Return the right hand side of an algebraic equation satisfied by
408
+ this species. This is a utility function called by the
409
+ algebraic_equation_system method.
410
+
411
+ EXAMPLES::
412
+
413
+ sage: X = species.SingletonSpecies()
414
+ sage: S = X * X
415
+ sage: S.algebraic_equation_system() # needs sage.graphs
416
+ [node0 + (-z^2)]
417
+ """
418
+ from sage.misc.misc_c import prod
419
+ return prod(var_mapping[operand] for operand in self._state_info)
420
+
421
+
422
+ # Backward compatibility
423
+ ProductSpecies_class = ProductSpecies