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,564 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ r"""
3
+ Subwords
4
+
5
+ A subword of a word `w` is a word obtained by deleting the letters at some
6
+ (non necessarily adjacent) positions in `w`. It is not to be confused with the
7
+ notion of factor where one keeps adjacent positions in `w`. Sometimes it is
8
+ useful to allow repeated uses of the same letter of `w` in a "generalized"
9
+ subword. We call this a subword with repetitions.
10
+
11
+ For example:
12
+
13
+ - "bnjr" is a subword of the word "bonjour" but not a factor;
14
+
15
+ - "njo" is both a factor and a subword of the word "bonjour";
16
+
17
+ - "nr" is a subword of "bonjour";
18
+
19
+ - "rn" is not a subword of "bonjour";
20
+
21
+ - "nnu" is not a subword of "bonjour";
22
+
23
+ - "nnu" is a subword with repetitions of "bonjour";
24
+
25
+ A word can be given either as a string, as a list or as a tuple.
26
+
27
+ As repetition can occur in the initial word, in general subwords
28
+ of a given word form an enumerated multiset rather than a set!
29
+
30
+ .. TODO::
31
+
32
+ - implement subwords with repetitions
33
+
34
+ - implement the category of ``EnumeratedMultiset`` and inheritate from
35
+ it when needed (i.e. the initial word has repeated letters)
36
+
37
+ AUTHORS:
38
+
39
+ - Mike Hansen: initial version
40
+
41
+ - Florent Hivert (2009/02/06): doc improvements + new methods + bug fixes
42
+ """
43
+ # ****************************************************************************
44
+ # Copyright (C) 2007 Mike Hansen <mhansen@gmail.com>,
45
+ # 2014 Vincent Delecroix <20100.delecroix@gmail.com>,
46
+ #
47
+ # Distributed under the terms of the GNU General Public License (GPL)
48
+ #
49
+ # This code is distributed in the hope that it will be useful,
50
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
51
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
52
+ # General Public License for more details.
53
+ #
54
+ # The full text of the GPL is available at:
55
+ #
56
+ # https://www.gnu.org/licenses/
57
+ # ****************************************************************************
58
+ from __future__ import annotations
59
+ from collections.abc import Iterator
60
+ import itertools
61
+
62
+ from sage.structure.parent import Parent
63
+
64
+ from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
65
+
66
+ import sage.misc.prandom as prandom
67
+ from sage.rings.integer import Integer
68
+ from sage.sets.finite_enumerated_set import FiniteEnumeratedSet
69
+
70
+
71
+ def _stringification(data):
72
+ r"""
73
+ TESTS::
74
+
75
+ sage: from sage.combinat.subword import _stringification
76
+ sage: _stringification(['a','b','c'])
77
+ 'abc'
78
+ """
79
+ return ''.join(data)
80
+
81
+
82
+ def Subwords(w, k=None, element_constructor=None):
83
+ """
84
+ Return the set of subwords of ``w``.
85
+
86
+ INPUT:
87
+
88
+ - ``w`` -- a word (can be a list, a string, a tuple or a word)
89
+
90
+ - ``k`` -- an optional integer to specify the length of subwords
91
+
92
+ - ``element_constructor`` -- an optional function that will be used
93
+ to build the subwords
94
+
95
+ EXAMPLES::
96
+
97
+ sage: S = Subwords(['a','b','c']); S
98
+ Subwords of ['a', 'b', 'c']
99
+ sage: S.first()
100
+ []
101
+ sage: S.last()
102
+ ['a', 'b', 'c']
103
+ sage: S.list()
104
+ [[], ['a'], ['b'], ['c'], ['a', 'b'], ['a', 'c'], ['b', 'c'], ['a', 'b', 'c']]
105
+
106
+ The same example using string, tuple or a word::
107
+
108
+ sage: S = Subwords('abc'); S
109
+ Subwords of 'abc'
110
+ sage: S.list()
111
+ ['', 'a', 'b', 'c', 'ab', 'ac', 'bc', 'abc']
112
+
113
+ sage: S = Subwords((1,2,3)); S
114
+ Subwords of (1, 2, 3)
115
+ sage: S.list()
116
+ [(), (1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]
117
+
118
+ sage: w = Word([1,2,3])
119
+ sage: S = Subwords(w); S
120
+ Subwords of word: 123
121
+ sage: S.list()
122
+ [word: , word: 1, word: 2, word: 3, word: 12, word: 13, word: 23, word: 123]
123
+
124
+ Using word with specified length::
125
+
126
+ sage: S = Subwords(['a','b','c'], 2); S
127
+ Subwords of ['a', 'b', 'c'] of length 2
128
+ sage: S.list()
129
+ [['a', 'b'], ['a', 'c'], ['b', 'c']]
130
+
131
+ An example that uses the ``element_constructor`` argument::
132
+
133
+ sage: p = Permutation([3,2,1])
134
+ sage: Subwords(p, element_constructor=tuple).list()
135
+ [(), (3,), (2,), (1,), (3, 2), (3, 1), (2, 1), (3, 2, 1)]
136
+ sage: Subwords(p, 2, element_constructor=tuple).list()
137
+ [(3, 2), (3, 1), (2, 1)]
138
+ """
139
+ if element_constructor is None:
140
+ datatype = type(w) # 'datatype' is the type of w
141
+ if datatype is list or datatype is tuple:
142
+ element_constructor = datatype
143
+ elif datatype is str:
144
+ element_constructor = _stringification
145
+ else:
146
+ from sage.combinat.words.words import Words
147
+ try:
148
+ alphabet = w.parent().alphabet()
149
+ element_constructor = Words(alphabet)
150
+ except AttributeError:
151
+ element_constructor = list
152
+
153
+ if k is None:
154
+ return Subwords_w(w, element_constructor)
155
+ if not isinstance(k, (int, Integer)):
156
+ raise ValueError("k should be an integer")
157
+ if k < 0 or k > len(w):
158
+ return FiniteEnumeratedSet([])
159
+ return Subwords_wk(w, k, element_constructor)
160
+
161
+
162
+ class Subwords_w(Parent):
163
+ r"""
164
+ Subwords of a given word.
165
+ """
166
+
167
+ def __init__(self, w, element_constructor):
168
+ """
169
+ TESTS::
170
+
171
+ sage: TestSuite(Subwords([1,2,3])).run()
172
+ sage: TestSuite(Subwords('sage')).run()
173
+ """
174
+ Parent.__init__(self, category=FiniteEnumeratedSets())
175
+ self._w = w
176
+ self._build = element_constructor
177
+
178
+ def __eq__(self, other) -> bool:
179
+ r"""
180
+ Equality test.
181
+
182
+ TESTS::
183
+
184
+ sage: Subwords([1,2,3]) == Subwords([1,2,3])
185
+ True
186
+ sage: Subwords([1,2,3]) == Subwords([1,3,2])
187
+ False
188
+ """
189
+ return self.__class__ == other.__class__ and self._w == other._w and self._build == other._build
190
+
191
+ def __ne__(self, other) -> bool:
192
+ r"""
193
+ TESTS::
194
+
195
+ sage: Subwords([1,2,3]) != Subwords([1,2,3])
196
+ False
197
+ sage: Subwords([1,2,3]) != Subwords([1,3,2])
198
+ True
199
+ """
200
+ return not self == other
201
+
202
+ def __reduce__(self):
203
+ r"""
204
+ Pickle (how to construct back the object).
205
+
206
+ TESTS::
207
+
208
+ sage: S = Subwords((1,2,3))
209
+ sage: S == loads(dumps(S))
210
+ True
211
+ sage: S = Subwords('123')
212
+ sage: S == loads(dumps(S))
213
+ True
214
+ sage: S = Subwords(('a',(1,2,3),('a','b'),'ir'))
215
+ sage: S == loads(dumps(S))
216
+ True
217
+ """
218
+ return (Subwords_w, (self._w, self._build))
219
+
220
+ def _repr_(self) -> str:
221
+ """
222
+ TESTS::
223
+
224
+ sage: repr(Subwords([1,2,3])) # indirect doctest
225
+ 'Subwords of [1, 2, 3]'
226
+ """
227
+ return "Subwords of {!r}".format(self._w)
228
+
229
+ def __contains__(self, w) -> bool:
230
+ """
231
+ TESTS::
232
+
233
+ sage: [] in Subwords([1,2,3,4,3,4,4])
234
+ True
235
+ sage: [2,3,3,4] in Subwords([1,2,3,4,3,4,4])
236
+ True
237
+ sage: [5,5,3] in Subwords([1,3,3,5,4,5,3,5])
238
+ True
239
+ sage: [3,5,5,3] in Subwords([1,3,3,5,4,5,3,5])
240
+ True
241
+ sage: [3,5,5,3,4] in Subwords([1,3,3,5,4,5,3,5])
242
+ False
243
+ sage: [2,3,3,4] in Subwords([1,2,3,4,3,4,4])
244
+ True
245
+ sage: [2,3,3,1] in Subwords([1,2,3,4,3,4,4])
246
+ False
247
+ """
248
+ return smallest_positions(self._w, w) is not False
249
+
250
+ def cardinality(self) -> Integer:
251
+ """
252
+ EXAMPLES::
253
+
254
+ sage: Subwords([1,2,3]).cardinality()
255
+ 8
256
+ """
257
+ return Integer(1) << len(self._w)
258
+
259
+ def first(self):
260
+ """
261
+ EXAMPLES::
262
+
263
+ sage: Subwords([1,2,3]).first()
264
+ []
265
+ sage: Subwords((1,2,3)).first()
266
+ ()
267
+ sage: Subwords('123').first()
268
+ ''
269
+ """
270
+ return self._build([])
271
+
272
+ def last(self):
273
+ """
274
+ EXAMPLES::
275
+
276
+ sage: Subwords([1,2,3]).last()
277
+ [1, 2, 3]
278
+ sage: Subwords((1,2,3)).last()
279
+ (1, 2, 3)
280
+ sage: Subwords('123').last()
281
+ '123'
282
+ """
283
+ return self._build(self._w)
284
+
285
+ def random_element(self):
286
+ r"""
287
+ Return a random subword with uniform law.
288
+
289
+ EXAMPLES::
290
+
291
+ sage: S1 = Subwords([1,2,3,2,1,3])
292
+ sage: S2 = Subwords([4,6,6,6,7,4,5,5])
293
+ sage: for i in range(100):
294
+ ....: w = S1.random_element()
295
+ ....: if w in S2:
296
+ ....: assert not w
297
+ sage: for i in range(100):
298
+ ....: w = S2.random_element()
299
+ ....: if w in S1:
300
+ ....: assert not w
301
+ """
302
+ return self._build(elt for elt in self._w if prandom.randint(0, 1))
303
+
304
+ def __iter__(self) -> Iterator:
305
+ r"""
306
+ EXAMPLES::
307
+
308
+ sage: Subwords([1,2,3]).list()
309
+ [[], [1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]
310
+ sage: Subwords((1,2,3)).list()
311
+ [(), (1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]
312
+ sage: Subwords('123').list()
313
+ ['', '1', '2', '3', '12', '13', '23', '123']
314
+ """
315
+ return itertools.chain(*[Subwords_wk(self._w, i, self._build)
316
+ for i in range(len(self._w) + 1)])
317
+
318
+
319
+ class Subwords_wk(Subwords_w):
320
+ r"""
321
+ Subwords with fixed length of a given word.
322
+ """
323
+
324
+ def __init__(self, w, k, element_constructor):
325
+ """
326
+ TESTS::
327
+
328
+ sage: S = Subwords([1,2,3],2)
329
+ sage: S == loads(dumps(S))
330
+ True
331
+ sage: TestSuite(S).run()
332
+ """
333
+ Subwords_w.__init__(self, w, element_constructor)
334
+ self._k = k
335
+
336
+ def __eq__(self, other) -> bool:
337
+ r"""
338
+ Equality test.
339
+
340
+ TESTS::
341
+
342
+ sage: Subwords([1,2,3],2) == Subwords([1,2,3],2)
343
+ True
344
+ sage: Subwords([1,2,3],2) == Subwords([1,3,2],2)
345
+ False
346
+ sage: Subwords([1,2,3],2) == Subwords([1,2,3],3)
347
+ False
348
+ """
349
+ return Subwords_w.__eq__(self, other) and self._k == other._k
350
+
351
+ def __ne__(self, other) -> bool:
352
+ r"""
353
+ TESTS::
354
+
355
+ sage: Subwords([1,2,3], 2) != Subwords([1,2,3], 2)
356
+ False
357
+ sage: Subwords([1,2,3], 2) != Subwords([1,3,2], 1)
358
+ True
359
+ """
360
+ return not self == other
361
+
362
+ def __reduce__(self):
363
+ r"""
364
+ Pickle (how to construct back the object).
365
+
366
+ TESTS::
367
+
368
+ sage: S = Subwords('abc',2)
369
+ sage: S == loads(dumps(S))
370
+ True
371
+ sage: S = Subwords(('a',1,'45',(1,2)))
372
+ sage: S == loads(dumps(S))
373
+ True
374
+ """
375
+ return (Subwords_wk, (self._w, self._k, self._build))
376
+
377
+ def _repr_(self) -> str:
378
+ """
379
+ TESTS::
380
+
381
+ sage: repr(Subwords([1,2,3],2)) # indirect doctest
382
+ 'Subwords of [1, 2, 3] of length 2'
383
+ """
384
+ return "{} of length {}".format(Subwords_w._repr_(self), self._k)
385
+
386
+ def __contains__(self, w) -> bool:
387
+ """
388
+ TESTS::
389
+
390
+ sage: [] in Subwords([1, 3, 3, 5, 4, 5, 3, 5],0)
391
+ True
392
+ sage: [2,3,3,4] in Subwords([1,2,3,4,3,4,4],4)
393
+ True
394
+ sage: [2,3,3,4] in Subwords([1,2,3,4,3,4,4],3)
395
+ False
396
+ sage: [5,5,3] in Subwords([1,3,3,5,4,5,3,5],3)
397
+ True
398
+ sage: [5,5,3] in Subwords([1,3,3,5,4,5,3,5],4)
399
+ False
400
+ """
401
+ return len(w) == self._k and Subwords_w.__contains__(self, w)
402
+
403
+ def cardinality(self) -> Integer:
404
+ r"""
405
+ Return the number of subwords of w of length k.
406
+
407
+ EXAMPLES::
408
+
409
+ sage: Subwords([1,2,3], 2).cardinality()
410
+ 3
411
+ """
412
+ return Integer(len(self._w)).binomial(self._k)
413
+
414
+ def first(self):
415
+ r"""
416
+ EXAMPLES::
417
+
418
+ sage: Subwords([1,2,3],2).first()
419
+ [1, 2]
420
+ sage: Subwords([1,2,3],0).first()
421
+ []
422
+ sage: Subwords((1,2,3),2).first()
423
+ (1, 2)
424
+ sage: Subwords((1,2,3),0).first()
425
+ ()
426
+ sage: Subwords('123',2).first()
427
+ '12'
428
+ sage: Subwords('123',0).first()
429
+ ''
430
+ """
431
+ return self._build(self._w[i] for i in range(self._k))
432
+
433
+ def last(self):
434
+ r"""
435
+ EXAMPLES::
436
+
437
+ sage: Subwords([1,2,3],2).last()
438
+ [2, 3]
439
+ sage: Subwords([1,2,3],0).last()
440
+ []
441
+ sage: Subwords((1,2,3),2).last()
442
+ (2, 3)
443
+ sage: Subwords((1,2,3),0).last()
444
+ ()
445
+ sage: Subwords('123',2).last()
446
+ '23'
447
+ sage: Subwords('123',0).last()
448
+ ''
449
+
450
+ TESTS::
451
+
452
+ sage: Subwords('123', 0).last() # trac 10534
453
+ ''
454
+ """
455
+ n = len(self._w)
456
+ return self._build(self._w[i] for i in range(n - self._k, n))
457
+
458
+ def random_element(self):
459
+ r"""
460
+ Return a random subword of given length with uniform law.
461
+
462
+ EXAMPLES::
463
+
464
+ sage: S1 = Subwords([1,2,3,2,1],3)
465
+ sage: S2 = Subwords([4,4,5,5,4,5,4,4],3)
466
+ sage: for i in range(100):
467
+ ....: w = S1.random_element()
468
+ ....: if w in S2:
469
+ ....: assert not w
470
+ sage: for i in range(100):
471
+ ....: w = S2.random_element()
472
+ ....: if w in S1:
473
+ ....: assert not w
474
+ """
475
+ sample = prandom.sample(self._w, self._k)
476
+ if self._build is list:
477
+ return sample
478
+ return self._build(sample)
479
+
480
+ def __iter__(self) -> Iterator:
481
+ """
482
+ EXAMPLES::
483
+
484
+ sage: Subwords([1,2,3],2).list()
485
+ [[1, 2], [1, 3], [2, 3]]
486
+ sage: Subwords([1,2,3],0).list()
487
+ [[]]
488
+ sage: Subwords((1,2,3),2).list()
489
+ [(1, 2), (1, 3), (2, 3)]
490
+ sage: Subwords((1,2,3),0).list()
491
+ [()]
492
+ sage: Subwords('abc',2).list()
493
+ ['ab', 'ac', 'bc']
494
+ sage: Subwords('abc',0).list()
495
+ ['']
496
+ """
497
+ if self._k > len(self._w):
498
+ return iter([])
499
+ iterator = itertools.combinations(self._w, self._k)
500
+ if self._build is tuple:
501
+ return iterator
502
+ return (self._build(x) for x in iterator)
503
+
504
+
505
+ def smallest_positions(word, subword, pos=0) -> list | bool:
506
+ """
507
+ Return the smallest positions for which ``subword`` appears as a
508
+ subword of ``word``.
509
+
510
+ If ``pos`` is specified, then it returns the positions
511
+ of the first appearance of subword starting at ``pos``.
512
+
513
+ If ``subword`` is not found in ``word``, then return ``False``.
514
+
515
+ EXAMPLES::
516
+
517
+ sage: sage.combinat.subword.smallest_positions([1,2,3,4], [2,4])
518
+ [1, 3]
519
+ sage: sage.combinat.subword.smallest_positions([1,2,3,4,4], [2,4])
520
+ [1, 3]
521
+ sage: sage.combinat.subword.smallest_positions([1,2,3,3,4,4], [3,4])
522
+ [2, 4]
523
+ sage: sage.combinat.subword.smallest_positions([1,2,3,3,4,4], [3,4],2)
524
+ [2, 4]
525
+ sage: sage.combinat.subword.smallest_positions([1,2,3,3,4,4], [3,4],3)
526
+ [3, 4]
527
+ sage: sage.combinat.subword.smallest_positions([1,2,3,4], [2,3])
528
+ [1, 2]
529
+ sage: sage.combinat.subword.smallest_positions([1,2,3,4], [5,5])
530
+ False
531
+ sage: sage.combinat.subword.smallest_positions([1,3,3,4,5],[3,5])
532
+ [1, 4]
533
+ sage: sage.combinat.subword.smallest_positions([1,3,3,5,4,5,3,5],[3,5,3])
534
+ [1, 3, 6]
535
+ sage: sage.combinat.subword.smallest_positions([1,3,3,5,4,5,3,5],[3,5,3],2)
536
+ [2, 3, 6]
537
+ sage: sage.combinat.subword.smallest_positions([1,2,3,4,3,4,4],[2,3,3,1])
538
+ False
539
+ sage: sage.combinat.subword.smallest_positions([1,3,3,5,4,5,3,5],[3,5,3],3)
540
+ False
541
+
542
+ TESTS:
543
+
544
+ We check for :issue:`5534`::
545
+
546
+ sage: w = ["a", "b", "c", "d"]; ww = ["b", "d"]
547
+ sage: x = sage.combinat.subword.smallest_positions(w, ww); ww
548
+ ['b', 'd']
549
+ """
550
+ pos -= 1
551
+ n = len(word)
552
+ res = [None] * len(subword)
553
+ for i, swi in enumerate(subword):
554
+ for j in range(pos + 1, n + 1):
555
+ if j == n:
556
+ return False
557
+ if word[j] == swi:
558
+ pos = j
559
+ break
560
+ if pos != j:
561
+ return False
562
+ res[i] = pos
563
+
564
+ return res