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,405 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ """
3
+ Abstract SAT Solver
4
+
5
+ All SAT solvers must inherit from this class.
6
+
7
+ .. NOTE::
8
+
9
+ Our SAT solver interfaces are 1-based, i.e., literals start at
10
+ 1. This is consistent with the popular DIMACS format for SAT
11
+ solving but not with Python's 0-based convention. However, this
12
+ also allows to construct clauses using simple integers.
13
+
14
+ AUTHORS:
15
+
16
+ - Martin Albrecht (2012): first version
17
+ """
18
+
19
+ cdef class SatSolver:
20
+ def __cinit__(self, *args, **kwds):
21
+ """
22
+ Construct a new SATSolver.
23
+
24
+ EXAMPLES::
25
+
26
+ sage: from sage.sat.solvers.satsolver import SatSolver
27
+ sage: solver = SatSolver()
28
+ """
29
+ pass
30
+
31
+ def var(self, decision=None):
32
+ """
33
+ Return a *new* variable.
34
+
35
+ INPUT:
36
+
37
+ - ``decision`` -- is this variable a decision variable?
38
+
39
+ EXAMPLES::
40
+
41
+ sage: from sage.sat.solvers.satsolver import SatSolver
42
+ sage: solver = SatSolver()
43
+ sage: solver.var()
44
+ Traceback (most recent call last):
45
+ ...
46
+ NotImplementedError
47
+ """
48
+ raise NotImplementedError
49
+
50
+ def nvars(self):
51
+ """
52
+ Return the number of variables.
53
+
54
+ EXAMPLES::
55
+
56
+ sage: from sage.sat.solvers.satsolver import SatSolver
57
+ sage: solver = SatSolver()
58
+ sage: solver.nvars()
59
+ Traceback (most recent call last):
60
+ ...
61
+ NotImplementedError
62
+ """
63
+ raise NotImplementedError
64
+
65
+ def add_clause(self, lits):
66
+ """
67
+ Add a new clause to set of clauses.
68
+
69
+ INPUT:
70
+
71
+ - ``lits`` -- tuple of nonzero integers
72
+
73
+ .. NOTE::
74
+
75
+ If any element ``e`` in ``lits`` has ``abs(e)`` greater
76
+ than the number of variables generated so far, then new
77
+ variables are created automatically.
78
+
79
+ EXAMPLES::
80
+
81
+ sage: from sage.sat.solvers.satsolver import SatSolver
82
+ sage: solver = SatSolver()
83
+ sage: solver.add_clause( (1, -2 , 3) )
84
+ Traceback (most recent call last):
85
+ ...
86
+ NotImplementedError
87
+ """
88
+ raise NotImplementedError
89
+
90
+ def read(self, filename):
91
+ r"""
92
+ Reads DIMAC files.
93
+
94
+ Reads in DIMAC formatted lines (lazily) from a file or file object and
95
+ adds the corresponding clauses into this solver instance. Note that the
96
+ DIMACS format is not well specified, see
97
+ http://people.sc.fsu.edu/~jburkardt/data/cnf/cnf.html,
98
+ https://web.archive.org/web/20090305015900/http://www.satcompetition.org/2009/format-benchmarks2009.html, and
99
+ http://elis.dvo.ru/~lab_11/glpk-doc/cnfsat.pdf.
100
+
101
+ The differences were summarized in the discussion on the issue
102
+ :issue:`16924`. This method assumes the following DIMACS format:
103
+
104
+ - Any line starting with "c" is a comment
105
+ - Any line starting with "p" is a header
106
+ - Any variable 1-n can be used
107
+ - Every line containing a clause must end with a "0"
108
+
109
+ The format is extended to allow lines starting with "x" defining ``xor``
110
+ clauses, with the notation introduced in cryptominisat, see
111
+ https://www.msoos.org/xor-clauses/
112
+
113
+ INPUT:
114
+
115
+ - ``filename`` -- the name of a file as a string or a file object
116
+
117
+ EXAMPLES::
118
+
119
+ sage: from io import StringIO
120
+ sage: file_object = StringIO("c A sample .cnf file.\np cnf 3 2\n1 -3 0\n2 3 -1 0 ")
121
+ sage: from sage.sat.solvers.dimacs import DIMACS
122
+ sage: solver = DIMACS()
123
+ sage: solver.read(file_object)
124
+ sage: solver.clauses()
125
+ [((1, -3), False, None), ((2, 3, -1), False, None)]
126
+
127
+ With xor clauses::
128
+
129
+ sage: from io import StringIO
130
+ sage: file_object = StringIO("c A sample .cnf file with xor clauses.\np cnf 3 3\n1 2 0\n3 0\nx1 2 3 0")
131
+ sage: from sage.sat.solvers.cryptominisat import CryptoMiniSat # optional - pycryptosat
132
+ sage: solver = CryptoMiniSat() # optional - pycryptosat
133
+ sage: solver.read(file_object) # optional - pycryptosat
134
+ sage: solver.clauses() # optional - pycryptosat
135
+ [((1, 2), False, None), ((3,), False, None), ((1, 2, 3), True, True)]
136
+ sage: solver() # optional - pycryptosat
137
+ (None, True, True, True)
138
+
139
+ TESTS::
140
+
141
+ sage: from io import StringIO
142
+ sage: file_object = StringIO("c A sample .cnf file with xor clauses.\np cnf 3 3\n1 2 0\n3 0\nx1 2 3 0")
143
+ sage: from sage.sat.solvers.sat_lp import SatLP # needs sage.numerical.mip
144
+ sage: solver = SatLP() # needs sage.numerical.mip
145
+ sage: solver.read(file_object) # needs sage.numerical.mip
146
+ Traceback (most recent call last):
147
+ ...
148
+ NotImplementedError: the solver "an ILP-based SAT Solver" does not support xor clauses
149
+ """
150
+ if isinstance(filename, str):
151
+ file_object = open(filename, "r")
152
+ else:
153
+ file_object = filename
154
+ for line in file_object:
155
+ if line.startswith("c"):
156
+ continue # comment
157
+ if line.startswith("p"):
158
+ continue # header
159
+ if line.startswith("x"):
160
+ line = line[1:].split(" ")
161
+ clause = [int(e) for e in line if e]
162
+ clause = clause[:-1] # strip trailing zero
163
+ try:
164
+ self.add_xor_clause(clause)
165
+ except AttributeError:
166
+ file_object.close()
167
+ raise NotImplementedError('the solver "{}" does not support xor clauses'.format(self))
168
+ else:
169
+ line = line.split(" ")
170
+ clause = [int(e) for e in line if e]
171
+ clause = clause[:-1] # strip trailing zero
172
+ self.add_clause(clause)
173
+
174
+ def __call__(self, assumptions=None):
175
+ """
176
+ Solve this instance.
177
+
178
+ INPUT:
179
+
180
+ - ``assumptions`` -- assumed variable assignments (default: ``None``)
181
+
182
+ OUTPUT:
183
+
184
+ - If this instance is SAT: A tuple of length ``nvars()+1``
185
+ where the ``i``-th entry holds an assignment for the
186
+ ``i``-th variables (the ``0``-th entry is always ``None``).
187
+
188
+ - If this instance is UNSAT: ``False``
189
+
190
+ - If the solver was interrupted before deciding satisfiability
191
+ ``None``.
192
+
193
+ EXAMPLES::
194
+
195
+ sage: from sage.sat.solvers.satsolver import SatSolver
196
+ sage: solver = SatSolver()
197
+ sage: solver()
198
+ Traceback (most recent call last):
199
+ ...
200
+ NotImplementedError
201
+ """
202
+ raise NotImplementedError
203
+
204
+ def conflict_clause(self):
205
+ """
206
+ Return conflict clause if this instance is UNSAT and the last
207
+ call used assumptions.
208
+
209
+ EXAMPLES::
210
+
211
+ sage: from sage.sat.solvers.satsolver import SatSolver
212
+ sage: solver = SatSolver()
213
+ sage: solver.conflict_clause()
214
+ Traceback (most recent call last):
215
+ ...
216
+ NotImplementedError
217
+ """
218
+ raise NotImplementedError
219
+
220
+ def learnt_clauses(self, unitary_only=False):
221
+ """
222
+ Return learnt clauses.
223
+
224
+ INPUT:
225
+
226
+ - ``unitary_only`` -- return only unitary learnt clauses (default: ``False``)
227
+
228
+ EXAMPLES::
229
+
230
+ sage: from sage.sat.solvers.satsolver import SatSolver
231
+ sage: solver = SatSolver()
232
+ sage: solver.learnt_clauses()
233
+ Traceback (most recent call last):
234
+ ...
235
+ NotImplementedError
236
+
237
+ sage: solver.learnt_clauses(unitary_only=True)
238
+ Traceback (most recent call last):
239
+ ...
240
+ NotImplementedError
241
+ """
242
+ raise NotImplementedError
243
+
244
+ def __repr__(self):
245
+ """
246
+ TESTS::
247
+
248
+ sage: from sage.sat.solvers.satsolver import SatSolver
249
+ sage: solver = SatSolver()
250
+ sage: solver
251
+ a generic SAT solver (don't use me, inherit from me)
252
+ """
253
+ return "a generic SAT solver (don't use me, inherit from me)"
254
+
255
+ def clauses(self, filename=None):
256
+ """
257
+ Return original clauses.
258
+
259
+ INPUT:
260
+
261
+ - ``filename'' -- if not ``None`` clauses are written to ``filename`` in
262
+ DIMACS format (default: ``None``)
263
+
264
+ OUTPUT:
265
+
266
+ If ``filename`` is ``None`` then a list of ``lits, is_xor, rhs``
267
+ tuples is returned, where ``lits`` is a tuple of literals,
268
+ ``is_xor`` is always ``False`` and ``rhs`` is always ``None``.
269
+
270
+ If ``filename`` points to a writable file, then the list of original
271
+ clauses is written to that file in DIMACS format.
272
+
273
+ EXAMPLES::
274
+
275
+ sage: from sage.sat.solvers.satsolver import SatSolver
276
+ sage: solver = SatSolver()
277
+ sage: solver.clauses()
278
+ Traceback (most recent call last):
279
+ ...
280
+ NotImplementedError
281
+ """
282
+ raise NotImplementedError
283
+
284
+ def __getattr__(self, name):
285
+ """
286
+ EXAMPLES::
287
+
288
+ sage: from sage.sat.solvers.satsolver import SatSolver
289
+ sage: solver = SatSolver()
290
+ sage: solver.gens() # __getattr__ points this to clauses
291
+ Traceback (most recent call last):
292
+ ...
293
+ NotImplementedError
294
+ """
295
+ if name == "gens":
296
+ return self.clauses
297
+ raise AttributeError("'%s' object has no attribute '%s'" % (self.__class__.__name__, name))
298
+
299
+ def __dir__(self):
300
+ """
301
+ Custom dir for tab-completion.
302
+
303
+ EXAMPLES::
304
+
305
+ sage: from sage.sat.solvers.satsolver import SatSolver
306
+ sage: solver = SatSolver()
307
+ sage: 'gens' in solver.__dir__()
308
+ True
309
+ """
310
+ return ['add_clause', 'clauses', 'conflict_clause', 'gens',
311
+ 'learnt_clauses', 'nvars', 'read', 'var']
312
+
313
+
314
+ def SAT(solver=None, *args, **kwds):
315
+ r"""
316
+ Return a :class:`SatSolver` instance.
317
+
318
+ Through this class, one can define and solve
319
+ :wikipedia:`SAT problems <Boolean_satisfiability_problem>`.
320
+
321
+ INPUT:
322
+
323
+ - ``solver`` -- string; select a solver. Admissible values are:
324
+
325
+ - ``'cryptominisat'`` -- note that the pycryptosat package must be
326
+ installed
327
+
328
+ - ``'picosat'`` -- note that the pycosat package must be installed
329
+
330
+ - ``'glucose'`` -- note that the glucose package must be installed
331
+
332
+ - ``'glucose-syrup'`` -- note that the glucose package must be installed
333
+
334
+ - ``'LP'`` -- use :class:`~sage.sat.solvers.sat_lp.SatLP` to solve the
335
+ SAT instance
336
+
337
+ - ``None`` -- default; use CryptoMiniSat if available, else PicoSAT if
338
+ available, and a LP solver otherwise
339
+
340
+ EXAMPLES::
341
+
342
+ sage: SAT(solver='LP') # needs sage.numerical.mip
343
+ an ILP-based SAT Solver
344
+
345
+ TESTS::
346
+
347
+ sage: SAT(solver='Wouhouuuuuu')
348
+ Traceback (most recent call last):
349
+ ...
350
+ ValueError: Solver 'Wouhouuuuuu' is not available
351
+
352
+ Forcing CryptoMiniSat::
353
+
354
+ sage: SAT(solver='cryptominisat') # optional - pycryptosat
355
+ CryptoMiniSat solver: 0 variables, 0 clauses.
356
+
357
+ Forcing PicoSat::
358
+
359
+ sage: SAT(solver='picosat') # optional - pycosat
360
+ PicoSAT solver: 0 variables, 0 clauses.
361
+
362
+ Forcing Glucose::
363
+
364
+ sage: SAT(solver='glucose')
365
+ DIMACS Solver: 'glucose -verb=0 -model {input}'
366
+
367
+ Forcing Glucose Syrup::
368
+
369
+ sage: SAT(solver='glucose-syrup')
370
+ DIMACS Solver: 'glucose-syrup -model -verb=0 {input}'
371
+
372
+ Forcing Kissat::
373
+
374
+ sage: SAT(solver='kissat')
375
+ DIMACS Solver: 'kissat -q {input}'
376
+ """
377
+ if solver is None:
378
+ from importlib.util import find_spec
379
+ if find_spec('pycryptosat') is not None:
380
+ solver = "cryptominisat"
381
+ elif find_spec('pycosat') is not None:
382
+ solver = "picosat"
383
+ else:
384
+ solver = "LP"
385
+
386
+ if solver == 'cryptominisat':
387
+ from sage.sat.solvers.cryptominisat import CryptoMiniSat
388
+ return CryptoMiniSat(*args, **kwds)
389
+ elif solver == 'picosat':
390
+ from sage.sat.solvers.picosat import PicoSAT
391
+ return PicoSAT(*args, **kwds)
392
+ elif solver == "LP":
393
+ from sage.sat.solvers.sat_lp import SatLP
394
+ return SatLP()
395
+ elif solver == 'glucose':
396
+ from sage.sat.solvers.dimacs import Glucose
397
+ return Glucose(*args, **kwds)
398
+ elif solver == 'glucose-syrup':
399
+ from sage.sat.solvers.dimacs import GlucoseSyrup
400
+ return GlucoseSyrup(*args, **kwds)
401
+ elif solver == 'kissat':
402
+ from sage.sat.solvers.dimacs import Kissat
403
+ return Kissat(*args, **kwds)
404
+ else:
405
+ raise ValueError("Solver '{}' is not available".format(solver))