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,543 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.modules
3
+ r"""
4
+ Boundedness of `k`-Regular Sequences
5
+
6
+ This module contains a collection of algorithms to check for boundedness.
7
+ This is done
8
+ - based on eigenvalues and
9
+ - by the criterion presented in [MS1977a]_.
10
+
11
+ Various
12
+ =======
13
+
14
+ .. SEEALSO::
15
+
16
+ :mod:`sage.combinat.regular_sequence`,
17
+ :mod:`recognizable series <sage.combinat.recognizable_series>`,
18
+ :mod:`sage.rings.cfinite_sequence`,
19
+ :mod:`sage.combinat.binary_recurrence_sequences`.
20
+
21
+
22
+ AUTHORS:
23
+
24
+ - Gabriel Lipnik (2017)
25
+
26
+ ACKNOWLEDGEMENT:
27
+
28
+ - Gabriel Lipnik is supported by the
29
+ Austrian Science Fund (FWF): P 24644-N26.
30
+ """
31
+ #*****************************************************************************
32
+ # Copyright (C) 2017 Gabriel Lipnik <devel@gabriellipnik.at>
33
+ #
34
+ # This program is free software: You can redistribute it and/or modify
35
+ # it under the terms of the GNU General Public License as published by
36
+ # the Free Software Foundation, either version 3 of the License, or
37
+ # (at your option) any later version.
38
+ # http://www.gnu.org/licenses/
39
+ #*****************************************************************************
40
+
41
+
42
+ def multiply_reduce(A, B):
43
+ r"""
44
+ Return the matrix `A\cdot B` with entries `\min{(A\cdot B)_{ij},2}`.
45
+
46
+ INPUT:
47
+
48
+ - ``A`` -- an `m \times n` matrix
49
+ - ``B`` -- an `n \times p` matrix
50
+
51
+ OUTPUT:
52
+
53
+ An `m \times p` matrix with entries `\min{(A\cdot B)_{ij},2}`.
54
+
55
+ EXAMPLES::
56
+
57
+ sage: from sage.combinat.regular_sequence_bounded import multiply_reduce
58
+ sage: A = Matrix([[2, 0], [0, 2]])
59
+ sage: B = Matrix([[-2, 0], [0, 2]])
60
+ sage: A*B
61
+ [-4 0]
62
+ [ 0 4]
63
+ sage: multiply_reduce(A, B)
64
+ [-4 0]
65
+ [ 0 2]
66
+
67
+ ::
68
+
69
+ sage: A = Matrix([[1, 2, 3], [-1, -2, -3], [1, 2, 3]])
70
+ sage: B = Matrix([[1, 2, 3], [2, 3, 4], [1, 2, 3]])
71
+ sage: A*B
72
+ [ 8 14 20]
73
+ [ -8 -14 -20]
74
+ [ 8 14 20]
75
+ sage: multiply_reduce(A, B)
76
+ [ 2 2 2]
77
+ [ -8 -14 -20]
78
+ [ 2 2 2]
79
+ """
80
+ return (A*B).apply_map(lambda m: min(m, 2))
81
+
82
+
83
+ def construct_phi(matrices):
84
+ r"""
85
+ Return the set `\phi(S)` as defined in [MS1977a]_.
86
+
87
+ INPUT:
88
+
89
+ - ``matrices`` -- a list of non-negative square matrices
90
+ in the same dimension
91
+
92
+ OUTPUT:
93
+
94
+ A list of matrices.
95
+
96
+ EXAMPLES::
97
+
98
+ sage: from sage.combinat.regular_sequence_bounded import construct_phi
99
+ sage: L = [Matrix([[2, 2], [1, 3]]), Matrix([[0, 2], [1, 1]])]
100
+ sage: construct_phi(L)
101
+ [
102
+ [2 2] [2 2] [0 2]
103
+ [2 2], [1 2], [1 1]
104
+ ]
105
+
106
+ ::
107
+
108
+ sage: L = [Matrix([[42, 1, 0], [5, 0, 1], [0, 0, 1]]), Matrix([[0, 1, 1],
109
+ ....: [4, 1, 1], [1, 2, 2]]), Matrix([[5, 1, 1], [1, 7, 1], [0, 1, 32]])]
110
+ sage: construct_phi(L)
111
+ [
112
+ [2 2 1] [1 2 2] [2 2 2] [2 2 2] [2 2 2] [2 2 2] [2 0 2] [2 2 2]
113
+ [2 2 1] [2 2 2] [2 2 2] [2 2 2] [2 2 2] [2 2 2] [2 2 2] [2 1 2]
114
+ [0 0 1], [2 2 2], [2 2 2], [0 1 2], [2 0 2], [0 0 1], [2 1 2], [2 1 2],
115
+ <BLANKLINE>
116
+ [2 1 2] [2 2 2] [2 2 2] [2 2 2] [2 1 1] [2 2 2] [0 1 1] [2 1 0]
117
+ [2 2 2] [1 2 2] [2 2 2] [2 2 2] [1 2 1] [2 1 2] [2 1 1] [2 0 1]
118
+ [2 2 2], [1 2 2], [1 2 2], [2 1 2], [0 1 2], [2 0 2], [1 2 2], [0 0 1]
119
+ ]
120
+
121
+ TESTS::
122
+
123
+ sage: L = [Matrix([[20, 1, 0], [2, 0, 0], [117, 0, 8]]),
124
+ ....: Matrix([[0, 2, 1], [1, 0, 0], [1,1,2]]), Matrix([[8, 1, 0],
125
+ ....: [0, 0, 3], [0, 1, 0]])]
126
+ sage: construct_phi(L)
127
+ [
128
+ [2 1 0] [2 2 2] [2 1 2] [2 2 2] [2 2 2] [2 0 2] [1 2 2] [2 1 2]
129
+ [2 0 0] [2 2 2] [2 2 2] [2 2 2] [0 2 0] [2 2 2] [2 2 2] [0 2 1]
130
+ [2 0 2], [2 2 2], [2 1 0], [2 0 0], [0 0 2], [2 2 2], [1 0 0], [2 2 2],
131
+ <BLANKLINE>
132
+ [2 2 2] [2 2 2] [2 2 0] [2 2 2] [0 2 2] [2 0 2] [2 1 2] [2 2 2]
133
+ [0 1 2] [2 2 2] [2 2 0] [0 2 2] [2 2 2] [2 1 0] [2 0 2] [2 2 2]
134
+ [2 2 2], [2 0 2], [2 2 2], [2 2 2], [2 2 2], [2 1 2], [2 2 2], [2 1 0],
135
+ <BLANKLINE>
136
+ [2 2 2] [2 2 0] [2 2 2] [0 1 2] [2 2 2] [1 2 2] [2 2 0] [2 2 2]
137
+ [2 2 0] [2 2 2] [2 0 0] [2 1 0] [2 2 2] [0 2 2] [2 0 2] [2 2 2]
138
+ [2 2 0], [2 2 0], [2 2 2], [2 2 2], [0 1 2], [2 2 2], [2 0 0], [2 1 2],
139
+ <BLANKLINE>
140
+ [2 2 0] [2 2 2] [2 2 2] [2 1 0] [2 2 2] [2 2 2] [2 2 2] [2 0 2]
141
+ [2 2 2] [2 2 0] [1 2 2] [0 0 2] [2 0 0] [2 2 2] [2 2 2] [2 2 0]
142
+ [2 2 2], [2 2 2], [2 2 2], [0 1 0], [2 0 2], [0 2 1], [2 2 0], [2 2 2],
143
+ <BLANKLINE>
144
+ [2 2 2] [2 2 2] [2 2 2] [0 2 1] [2 2 2] [2 2 2] [2 2 2]
145
+ [2 0 2] [0 0 2] [2 2 2] [1 0 0] [2 0 2] [2 1 2] [2 2 2]
146
+ [2 2 2], [0 2 0], [0 2 2], [1 1 2], [2 0 0], [2 2 2], [1 2 2]
147
+ ]
148
+ """
149
+ from sage.arith.srange import srange
150
+ length = len(matrices)
151
+
152
+ def get_immutable(M):
153
+ M.set_immutable()
154
+ return M
155
+
156
+ phi = set(get_immutable(M.apply_map(lambda m: min(m, 2))) for M in matrices)
157
+ for counter in range(1000000):
158
+ phi.update([get_immutable(multiply_reduce(A, B)) for A in matrices for B in phi])
159
+ if len(phi) == length:
160
+ return list(phi)
161
+ else:
162
+ length = len(phi)
163
+ raise RuntimeError('Phi too large.')
164
+
165
+
166
+ def is_integer_valued(matrices):
167
+ r"""
168
+ Return whether every matrix in ``matrices`` is integer-valued.
169
+
170
+ INPUT:
171
+
172
+ - ``matrices`` -- a list of square matrices in the same dimension
173
+
174
+ OUTPUT:
175
+
176
+ A boolean.
177
+
178
+ EXAMPLES::
179
+
180
+ sage: from sage.combinat.regular_sequence_bounded import is_integer_valued
181
+ sage: matrices = [Matrix([[1, 2], [-1, 0]]), Matrix([[42, -42], [0, 0]])]
182
+ sage: is_integer_valued(matrices)
183
+ True
184
+
185
+ ::
186
+
187
+ sage: matrices = [Matrix([[1, pi], [-1, 0]])] # needs sage.symbolic
188
+ sage: is_integer_valued(matrices) # needs sage.symbolic
189
+ False
190
+
191
+ ::
192
+
193
+ sage: matrices = [Matrix([[1, 1/2], [2/4, 0]])]
194
+ sage: is_integer_valued(matrices)
195
+ False
196
+
197
+ ::
198
+
199
+ sage: matrices = [Matrix([[1, 4/2], [-1, 0]])]
200
+ sage: is_integer_valued(matrices)
201
+ True
202
+ """
203
+ from sage.matrix.matrix_space import MatrixSpace
204
+ from sage.rings.integer_ring import ZZ
205
+ M = MatrixSpace(ZZ, matrices[0].nrows(), matrices[0].ncols())
206
+ return all(mat in M for mat in matrices)
207
+
208
+
209
+ def is_non_negative(matrices):
210
+ r"""
211
+ Return whether every matrix in ``matrices`` is non-negative.
212
+
213
+ INPUT:
214
+
215
+ - ``matrices`` -- a list of square matrices in the same dimension
216
+
217
+ OUTPUT:
218
+
219
+ A boolean.
220
+
221
+ EXAMPLES::
222
+
223
+ sage: from sage.combinat.regular_sequence_bounded import is_non_negative
224
+ sage: matrices = [Matrix([[1, 2], [1, 0]]), Matrix([[42, -42], [0, 0]])]
225
+ sage: is_non_negative(matrices)
226
+ False
227
+
228
+ ::
229
+
230
+ sage: matrices = [Matrix([[0]])]
231
+ sage: is_non_negative(matrices)
232
+ True
233
+
234
+ ::
235
+
236
+ sage: matrices = [Matrix([[1, 1/2], [2/4, 0]])]
237
+ sage: is_non_negative(matrices)
238
+ True
239
+ """
240
+ return all(min(mat.list()) >= 0 for mat in matrices)
241
+
242
+
243
+ def is_bounded_via_mandel_simon_algorithm(matrices):
244
+ r"""
245
+ Return whether the semigroup generated whether the semigroup of all
246
+ possible products of ``matrices`` is finite/bounded.
247
+
248
+ INPUT:
249
+
250
+ - ``matrices`` -- a list of non-negative square matrices
251
+ in the same dimension
252
+
253
+ OUTPUT:
254
+
255
+ A boolean.
256
+
257
+ ALGORITHM:
258
+
259
+ A criterion based on [MS1977a]_ is used here.
260
+
261
+ EXAMPLES::
262
+
263
+ sage: from sage.combinat.regular_sequence_bounded import is_bounded_via_mandel_simon_algorithm
264
+ sage: J = [Matrix([[1, 0, 1], [0, 1, 1], [0, 0, 0]])]
265
+ sage: is_bounded_via_mandel_simon_algorithm(J)
266
+ True
267
+
268
+ ::
269
+
270
+ sage: from sage.combinat.regular_sequence_bounded import is_bounded_via_mandel_simon_algorithm
271
+ sage: K = [Matrix([[1, 1], [1, 1]])]
272
+ sage: is_bounded_via_mandel_simon_algorithm(K)
273
+ False
274
+
275
+ ::
276
+
277
+ sage: L = [Matrix([[1, 0], [0, 1]]), Matrix([[1, 0], [0, 0]])]
278
+ sage: is_bounded_via_mandel_simon_algorithm(L)
279
+ True
280
+
281
+ ::
282
+
283
+ sage: M = [Matrix([[1, 0], [0, 2]]), Matrix([[1, 0], [0, 0]])]
284
+ sage: is_bounded_via_mandel_simon_algorithm(M)
285
+ False
286
+
287
+ Non-integer-valued input::
288
+
289
+ sage: N = [Matrix([[0.5, 0], [1, 0]])]
290
+ sage: is_bounded_via_mandel_simon_algorithm(N)
291
+ Traceback (most recent call last):
292
+ ...
293
+ ValueError: Not all matrices are integer-valued.
294
+ """
295
+ if not is_integer_valued(matrices):
296
+ raise ValueError('Not all matrices are integer-valued.')
297
+
298
+ phi = construct_phi(matrices)
299
+ return not any(multiply_reduce(M, M) == M and not M**2 == M**3
300
+ for M in phi)
301
+
302
+
303
+ def has_bounded_matrix_powers(matrices) -> bool:
304
+ r"""
305
+ Return whether `M^n` is bounded for `n \to \infty`
306
+ for all `M` in ``matrices``.
307
+
308
+ INPUT:
309
+
310
+ - ``matrices`` -- a list of square matrices
311
+
312
+ ALGORITHM:
313
+
314
+ Eigenvalues are used for the check.
315
+
316
+ EXAMPLES:
317
+
318
+ Maximum of the absolute value of the eigenvalues `=1`,
319
+ algebraic multiplicity equals geometric multiplicity
320
+ for all eigenvalues with absolute value `=1`::
321
+
322
+ sage: from sage.combinat.regular_sequence_bounded import has_bounded_matrix_powers
323
+ sage: matrices = [Matrix([[-1, 1, 1], [-1, 1, 1], [1, -1, 1]]),
324
+ ....: Matrix([[-1, 1, 1], [-1, 0, 0], [1, 1, 1]])]
325
+ sage: has_bounded_matrix_powers(matrices) # needs sage.rings.number_field
326
+ True
327
+
328
+ Maximum of the absolute value of the eigenvalues `>1`::
329
+
330
+ sage: matrices = [Matrix([[1, 1], [1/2, -1]])]
331
+ sage: has_bounded_matrix_powers(matrices) # needs sage.rings.number_field
332
+ False
333
+
334
+ Maximum of the absolute value of the eigenvalues `=1`,
335
+ algebraic and geometric multiplicities different for eigenvalue `1`::
336
+
337
+ sage: matrices = [Matrix([[1,1],[0,1]])]
338
+ sage: has_bounded_matrix_powers(matrices) # needs sage.rings.number_field
339
+ False
340
+
341
+ Maximum of the absolute value of the eigenvalues `<1`::
342
+
343
+ sage: matrices = [Matrix([[1, -1], [1/2, -1]])]
344
+ sage: has_bounded_matrix_powers(matrices) # needs sage.rings.number_field
345
+ True
346
+ """
347
+ return all(abs(eVn[0]) < 1 or
348
+ (abs(eVn[0]) == 1 and len(eVn[1]) == eVn[2])
349
+ for mat in matrices
350
+ for eVn in mat.eigenvectors_right())
351
+
352
+
353
+ def make_positive(matrices) -> list:
354
+ r"""
355
+ Return a list of non-negative matrices
356
+
357
+ INPUT:
358
+
359
+ - ``matrices`` -- a list of matrices where every matrix is either
360
+ non-negative or non-positive.
361
+
362
+ OUTPUT:
363
+
364
+ A list of matrices containing every non-negative matrix of ``matrices``,
365
+ and `-M` if `M` is a non-positive matrix of ``matrices``.
366
+
367
+ EXAMPLES::
368
+
369
+ sage: from sage.combinat.regular_sequence_bounded import make_positive
370
+ sage: matrices = [Matrix([[1, 2], [1, 0]]), Matrix([[42, 42], [0, 0]])]
371
+ sage: make_positive(matrices)
372
+ [
373
+ [1 2] [42 42]
374
+ [1 0], [ 0 0]
375
+ ]
376
+
377
+ ::
378
+
379
+ sage: matrices = [Matrix([[1, 2], [1, 0]]), Matrix([[-42, -42], [0, 0]])]
380
+ sage: make_positive(matrices)
381
+ [
382
+ [1 2] [42 42]
383
+ [1 0], [ 0 0]
384
+ ]
385
+
386
+ ::
387
+
388
+ sage: matrices = [Matrix([[1, 2], [1, 0]]), Matrix([[42, -42], [0, 0]])]
389
+ sage: make_positive(matrices)
390
+ Traceback (most recent call last):
391
+ ...
392
+ ValueError: There is a matrix which is neither non-negative nor non-positive.
393
+ """
394
+ from sage.arith.srange import srange
395
+
396
+ def do(mat):
397
+ if is_non_negative(mat):
398
+ return mat
399
+ elif is_non_negative(-mat):
400
+ return -mat
401
+ else:
402
+ raise ValueError('There is a matrix which is neither non-negative nor non-positive.')
403
+
404
+ return list(do(mat) for mat in matrices)
405
+
406
+
407
+ def regular_sequence_is_bounded(S):
408
+ r"""
409
+ Return whether this `k`-regular sequence is bounded.
410
+
411
+ INPUT:
412
+
413
+ - ``S`` -- a `k`-regular sequence
414
+
415
+ OUTPUT:
416
+
417
+ A boolean.
418
+
419
+ EXAMPLES:
420
+
421
+ Thue--Morse Sequence::
422
+
423
+ sage: from sage.combinat.regular_sequence_bounded import regular_sequence_is_bounded
424
+ sage: Seq2 = RegularSequenceRing(2, ZZ)
425
+ sage: TM = Seq2([Matrix([[1, 0], [0, 1]]), Matrix([[0, 1], [1, 0]])],
426
+ ....: left=vector([1, 0]), right=vector([0, 1]))
427
+ sage: regular_sequence_is_bounded(TM)
428
+ True
429
+
430
+ Binary Sum of Digits::
431
+
432
+ sage: SD = Seq2([Matrix([[1, 0], [0, 1]]), Matrix([[0, -1], [1, 2]])],
433
+ ....: left=vector([0, 1]), right=vector([1, 0]))
434
+ sage: regular_sequence_is_bounded(SD) # needs sage.rings.number_field
435
+ False
436
+
437
+ Sequence of All Natural Numbers::
438
+
439
+ sage: N = Seq2([Matrix([[2, 0], [2, 1]]), Matrix([[0, 1], [-2, 3]])],
440
+ ....: left=vector([1, 0]), right=vector([0, 1]))
441
+ sage: regular_sequence_is_bounded(N) # needs sage.rings.number_field
442
+ False
443
+
444
+ Indicator Function of Even Integers::
445
+
446
+ sage: E = Seq2([Matrix([[0, 1], [0, 1]]), Matrix([[0, 0], [0, 1]])],
447
+ ....: left=vector([1, 0]), right=vector([1, 1]))
448
+ sage: regular_sequence_is_bounded(E) # needs sage.rings.number_field
449
+ True
450
+
451
+ Indicator Function of Odd Integers::
452
+
453
+ sage: O = Seq2([Matrix([[0, 0], [0, 1]]), Matrix([[0, 1], [0, 1]])],
454
+ ....: left=vector([1, 0]), right=vector([0, 1]))
455
+ sage: regular_sequence_is_bounded(O) # needs sage.rings.number_field
456
+ True
457
+
458
+ Number of Odd Entries in Pascal's Triangle::
459
+
460
+ sage: U = Seq2([Matrix([[3, 0], [6, 1]]), Matrix([[0, 1], [-6, 5]])],
461
+ ....: left=vector([1, 0]), right=vector([0, 1]))
462
+ sage: regular_sequence_is_bounded(U) # needs sage.rings.number_field
463
+ False
464
+
465
+ Counting '10' in the Binary Representation::
466
+
467
+ sage: C = Seq2([Matrix([[0, 1, 0, 0], [0, 0, 0, 1],
468
+ ....: [-1, 0, 1, 1], [0, 0, 0, 1]]),
469
+ ....: Matrix([[0, 0, 1, 0], [0, 1, 0, 0],
470
+ ....: [0, 0, 1, 0], [-1, 0, 1, 1]])],
471
+ ....: left=vector([1, 0, 0, 0]),
472
+ ....: right=vector([0, 0, 1, 0]))
473
+ sage: regular_sequence_is_bounded(C) # needs sage.rings.number_field
474
+ False
475
+
476
+ Numbers Starting with '10'::
477
+
478
+ sage: D = Seq2([Matrix([[0, 1, 0, 0], [0, 0, 1, 0],
479
+ ....: [0, -2, 3, 0], [0, -2, 2, 1]]),
480
+ ....: Matrix([[2, 0, 0, 0], [0, 0, 0, 1],
481
+ ....: [0, 2, 0, 1], [0, -2, 0, 3]])],
482
+ ....: left=vector([1, 0, 0, 0]),
483
+ ....: right=vector([2, 2, 2, 5]))
484
+ sage: regular_sequence_is_bounded(D) # needs sage.rings.number_field
485
+ False
486
+
487
+ Signum Function::
488
+
489
+ sage: S = Seq2([Matrix([[1, 0], [0, 1]]), Matrix([[0, 1], [0, 1]])],
490
+ ....: left=vector([1, 0]), right=vector([0, 1]))
491
+ sage: regular_sequence_is_bounded(S) # needs sage.rings.number_field
492
+ True
493
+
494
+ Number of Digits from the Right to the First '1'::
495
+
496
+ sage: S = Seq2([Matrix([[0, 1, 0], [-1, 2, 0], [0, 0, 1]]),
497
+ ....: Matrix([[0, 0, 1], [0, 0, 2], [0, 0, 1]])],
498
+ ....: left=vector([1, 0, 0]), right=vector([0, 0, 1]))
499
+ sage: regular_sequence_is_bounded(S) # needs sage.rings.number_field
500
+ False
501
+
502
+ TESTS::
503
+
504
+ sage: S = Seq2((Matrix([[0, 1, 0], [0, 0, 1], [-1, 2, 0]]),
505
+ ....: Matrix([[-1, 0, 0], [-3/4, -1/4, 3/4], [-1/4, 1/4, -3/4]])),
506
+ ....: left=vector([1, 0, 0]), right=vector([-4, -4, -4]))
507
+ sage: regular_sequence_is_bounded(S) # needs sage.rings.number_field
508
+ False
509
+
510
+ ::
511
+
512
+ sage: S = Seq2((Matrix([[1, 0], [1, 0]]), Matrix([[0, 1],[1, 0]])),
513
+ ....: left = vector([1, 1]), right = vector([1, 0]),
514
+ ....: allow_degenerated_sequence=True)
515
+ sage: regular_sequence_is_bounded(S) # needs sage.rings.number_field
516
+ True
517
+ """
518
+ from sage.arith.srange import srange
519
+
520
+ matrices = list(S.mu)
521
+ length = len(matrices)
522
+ try:
523
+ return is_bounded_via_mandel_simon_algorithm(make_positive(matrices))
524
+ except ValueError:
525
+ pass
526
+
527
+ matrices = list(S.minimized().mu)
528
+ if not has_bounded_matrix_powers(matrices):
529
+ return False
530
+
531
+ matricesProd = list(ell*em for ell in matrices for em in matrices
532
+ if ell != em)
533
+ if not has_bounded_matrix_powers(matricesProd):
534
+ return False
535
+
536
+ try:
537
+ if not is_bounded_via_mandel_simon_algorithm(make_positive(matricesProd)):
538
+ return False
539
+ except ValueError:
540
+ pass
541
+
542
+ raise RuntimeError('It is not decidable with this implementation ' +
543
+ 'whether the sequence is bounded or not.')
@@ -0,0 +1,81 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ """
3
+ Restricted growth arrays
4
+
5
+ These combinatorial objects are in bijection with set partitions.
6
+ """
7
+ #*****************************************************************************
8
+ # Copyright (C) 2008 Mike Hansen <mhansen@gmail.com>,
9
+ #
10
+ # Distributed under the terms of the GNU General Public License (GPL)
11
+ #
12
+ # This code is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ # General Public License for more details.
16
+ #
17
+ # The full text of the GPL is available at:
18
+ #
19
+ # http://www.gnu.org/licenses/
20
+ #*****************************************************************************
21
+ from sage.combinat.combinat import bell_number
22
+ from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
23
+ from sage.structure.parent import Parent
24
+ from sage.structure.unique_representation import UniqueRepresentation
25
+ import copy
26
+
27
+
28
+ class RestrictedGrowthArrays(UniqueRepresentation, Parent):
29
+ def __init__(self, n):
30
+ """
31
+ EXAMPLES::
32
+
33
+ sage: from sage.combinat.restricted_growth import RestrictedGrowthArrays
34
+ sage: R = RestrictedGrowthArrays(3)
35
+ sage: R == loads(dumps(R))
36
+ True
37
+ sage: TestSuite(R).run(skip=['_test_an_element', # needs sage.libs.flint
38
+ ....: '_test_enumerated_set_contains', '_test_some_elements'])
39
+ """
40
+ self._n = n
41
+ self._name = "Restricted growth arrays of size %s" % n
42
+ Parent.__init__(self, category=FiniteEnumeratedSets())
43
+
44
+ def __iter__(self):
45
+ """
46
+ EXAMPLES::
47
+
48
+ sage: from sage.combinat.restricted_growth import RestrictedGrowthArrays
49
+ sage: R = RestrictedGrowthArrays(3)
50
+ sage: R.list()
51
+ [[1, 0, 0], [2, 0, 1], [2, 1, 0], [2, 1, 1], [3, 1, 2]]
52
+ """
53
+ n = self._n
54
+ a = [1] + [0] * (n - 1)
55
+ m = [0] + [1] * (n - 1)
56
+ while True:
57
+ yield copy.copy(a)
58
+ # Search for maximum i with a[i] != m[i]
59
+ i = n - 1
60
+ while a[i] == m[i] and i >= 0:
61
+ i -= 1
62
+ if i == 0:
63
+ break
64
+ # Update arrays a and m
65
+ a[i] += 1
66
+ a[0] = a[i] + 1 if a[i] == m[i] else m[i]
67
+ mi = a[0]
68
+ for j in range(i + 1, n):
69
+ a[j] = 0
70
+ m[j] = mi
71
+
72
+ def cardinality(self):
73
+ """
74
+ EXAMPLES::
75
+
76
+ sage: from sage.combinat.restricted_growth import RestrictedGrowthArrays
77
+ sage: R = RestrictedGrowthArrays(6)
78
+ sage: R.cardinality() # needs sage.libs.flint
79
+ 203
80
+ """
81
+ return bell_number(self._n)
@@ -0,0 +1,20 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ r"""
3
+ Ribbons
4
+ """
5
+ #*****************************************************************************
6
+ # Copyright (C) 2007 Mike Hansen <mhansen@gmail.com>,
7
+ #
8
+ # Distributed under the terms of the GNU General Public License (GPL)
9
+ #
10
+ # This code is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # General Public License for more details.
14
+ #
15
+ # The full text of the GPL is available at:
16
+ #
17
+ # http://www.gnu.org/licenses/
18
+ #*****************************************************************************
19
+
20
+ from .ribbon_shaped_tableau import RibbonShapedTableau, StandardRibbonShapedTableaux