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,769 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ r"""
3
+ Word classes
4
+
5
+ AUTHORS:
6
+
7
+ - Arnaud Bergeron
8
+ - Amy Glen
9
+ - Sébastien Labbé
10
+ - Franco Saliola
11
+ """
12
+ #*****************************************************************************
13
+ # Copyright (C) 2008 Arnaud Bergeron <abergeron@gmail.com>,
14
+ # Amy Glen <amy.glen@gmail.com>,
15
+ # Sébastien Labbé <slabqc@gmail.com>,
16
+ # Franco Saliola <saliola@gmail.com>
17
+ #
18
+ # This program is free software: you can redistribute it and/or modify
19
+ # it under the terms of the GNU General Public License as published by
20
+ # the Free Software Foundation, either version 2 of the License, or
21
+ # (at your option) any later version.
22
+ # http://www.gnu.org/licenses/
23
+ #*****************************************************************************
24
+ from sage.misc.lazy_import import lazy_import
25
+ from sage.combinat.words.word_char import WordDatatype_char
26
+ from sage.combinat.words.abstract_word import Word_class
27
+ from sage.combinat.words.finite_word import FiniteWord_class
28
+ from sage.combinat.words.infinite_word import InfiniteWord_class
29
+ from .word_datatypes import (WordDatatype_str,
30
+ WordDatatype_list,
31
+ WordDatatype_tuple)
32
+ from .word_infinite_datatypes import (
33
+ WordDatatype_iter_with_caching,
34
+ WordDatatype_iter,
35
+ WordDatatype_callable_with_caching,
36
+ WordDatatype_callable)
37
+ from .morphic import WordDatatype_morphic
38
+
39
+ lazy_import('sage.monoids.free_monoid_element', 'FreeMonoidElement')
40
+
41
+ # TODO. Word needs to be replaced by Word. Consider renaming
42
+ # Word_class to Word and imbedding Word as its __call__ method.
43
+
44
+
45
+ def Word(data=None, alphabet=None, length=None, datatype=None, caching=True, RSK_data=None):
46
+ r"""
47
+ Construct a word.
48
+
49
+ INPUT:
50
+
51
+ - ``data`` -- (default: ``None``) list, string, tuple, iterator, free
52
+ monoid element, ``None`` (shorthand for ``[]``), or a callable defined
53
+ on ``[0,1,...,length]``
54
+
55
+ - ``alphabet`` -- any argument accepted by Words
56
+
57
+ - ``length`` -- (default: ``None``) this is dependent on the type of data.
58
+ It is ignored for words defined by lists, strings, tuples,
59
+ etc., because they have a naturally defined length.
60
+ For callables, this defines the domain of definition,
61
+ which is assumed to be ``[0, 1, 2, ..., length-1]``.
62
+ For iterators: Infinity if you know the iterator will not
63
+ terminate (default); ``'unknown'`` if you do not know whether the
64
+ iterator terminates; ``'finite'`` if you know that the iterator
65
+ terminates, but do not know the length.
66
+
67
+ - ``datatype`` -- (default: ``None``) ``None``, ``'list'``, ``'str'``,
68
+ ``'tuple'``, ``'iter'``, ``'callable'``; if ``None``, then the function
69
+ tries to guess this from the data
70
+
71
+ - ``caching`` -- boolean (default: ``True``); whether to
72
+ keep a cache of the letters computed by an iterator or callable
73
+
74
+ - ``RSK_data`` -- (default: ``None``) semistandard and a
75
+ standard Young tableau to run the inverse RSK bijection on
76
+
77
+ .. NOTE::
78
+
79
+ Be careful when defining words using callables and iterators. It
80
+ appears that islice does not pickle correctly causing various errors
81
+ when reloading. Also, most iterators do not support copying and
82
+ should not support pickling by extension.
83
+
84
+ EXAMPLES:
85
+
86
+ Empty word::
87
+
88
+ sage: Word()
89
+ word:
90
+
91
+ Word with string::
92
+
93
+ sage: Word("abbabaab")
94
+ word: abbabaab
95
+
96
+ Word with string constructed from other types::
97
+
98
+ sage: Word([0,1,1,0,1,0,0,1], datatype='str')
99
+ word: 01101001
100
+ sage: Word((0,1,1,0,1,0,0,1), datatype='str')
101
+ word: 01101001
102
+
103
+ Word with list::
104
+
105
+ sage: Word([0,1,1,0,1,0,0,1])
106
+ word: 01101001
107
+
108
+ Word with list constructed from other types::
109
+
110
+ sage: Word("01101001", datatype='list')
111
+ word: 01101001
112
+ sage: Word((0,1,1,0,1,0,0,1), datatype='list')
113
+ word: 01101001
114
+
115
+ Word with tuple::
116
+
117
+ sage: Word((0,1,1,0,1,0,0,1))
118
+ word: 01101001
119
+
120
+ Word with tuple constructed from other types::
121
+
122
+ sage: Word([0,1,1,0,1,0,0,1], datatype='tuple')
123
+ word: 01101001
124
+ sage: Word("01101001", datatype='str')
125
+ word: 01101001
126
+
127
+ Word with iterator::
128
+
129
+ sage: from itertools import count
130
+ sage: Word(count())
131
+ word: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,...
132
+ sage: Word(iter("abbabaab")) # iterators default to infinite words
133
+ word: abbabaab
134
+ sage: Word(iter("abbabaab"), length='unknown')
135
+ word: abbabaab
136
+ sage: Word(iter("abbabaab"), length='finite')
137
+ word: abbabaab
138
+
139
+ Word with function (a 'callable')::
140
+
141
+ sage: f = lambda n : add(Integer(n).digits(2)) % 2
142
+ sage: Word(f)
143
+ word: 0110100110010110100101100110100110010110...
144
+ sage: Word(f, length=8)
145
+ word: 01101001
146
+
147
+ Word over a string with a parent::
148
+
149
+ sage: w = Word("abbabaab", alphabet='abc'); w
150
+ word: abbabaab
151
+ sage: w.parent()
152
+ Finite words over {'a', 'b', 'c'}
153
+
154
+ Word from a free monoid element::
155
+
156
+ sage: M.<x,y,z> = FreeMonoid(3)
157
+ sage: Word(x^3*y*x*z^2*x)
158
+ word: xxxyxzzx
159
+
160
+ The default parent is the combinatorial class of all words::
161
+
162
+ sage: w = Word("abbabaab"); w
163
+ word: abbabaab
164
+ sage: w.parent()
165
+ Finite words over Set of Python objects of class 'object'
166
+
167
+ We can also input a semistandard tableau and a standard tableau to
168
+ obtain a word from the inverse RSK algorithm using the
169
+ ``RSK_data`` option::
170
+
171
+ sage: p = Tableau([[1,2,2],[3]]); q = Tableau([[1,2,4],[3]])
172
+ sage: Word(RSK_data=[p, q])
173
+ word: 1322
174
+
175
+ TESTS::
176
+
177
+ sage: Word(5)
178
+ Traceback (most recent call last):
179
+ ...
180
+ ValueError: cannot guess a datatype from data (=5); please specify one
181
+
182
+ ::
183
+
184
+ sage: W = Words()
185
+ sage: w = W('abc')
186
+ sage: w is W(w)
187
+ True
188
+ sage: w is Word(w, alphabet='abc')
189
+ False
190
+ """
191
+ if isinstance(data, FreeMonoidElement):
192
+ return data.to_word(alphabet)
193
+
194
+ if RSK_data is not None:
195
+ #if a list of a semistandard and a standard tableau or a pair of lists
196
+ from sage.combinat.tableau import Tableau
197
+ if isinstance(RSK_data, (tuple, list)) and len(RSK_data) == 2 and \
198
+ all(isinstance(x, Tableau) for x in RSK_data):
199
+ from sage.combinat.rsk import RSK_inverse
200
+ return RSK_inverse(*RSK_data, output='word')
201
+ elif isinstance(RSK_data, (tuple, list)) and len(RSK_data) == 2 and \
202
+ all(isinstance(x, (list, tuple)) for x in RSK_data):
203
+ from sage.combinat.rsk import RSK_inverse
204
+ P,Q = map(Tableau, RSK_data)
205
+ return RSK_inverse(P, Q, 'word')
206
+ raise ValueError("Invalid input. Must be a pair of tableaux")
207
+
208
+ # Create the parent object
209
+ from .words import Words
210
+ parent = Words(alphabet)
211
+
212
+ return parent(data=data, length=length, datatype=datatype, caching=caching)
213
+
214
+ #######################################################################
215
+ # #
216
+ # Concrete word classes #
217
+ # #
218
+ #######################################################################
219
+
220
+ ##### Finite Words #####
221
+
222
+
223
+ class FiniteWord_char(WordDatatype_char, FiniteWord_class):
224
+ r"""
225
+ Finite word represented by an array ``unsigned char *`` (i.e. integers
226
+ between 0 and 255).
227
+
228
+ For any word ``w``, type ``w.<TAB>`` to see the functions that can be applied
229
+ to ``w``.
230
+
231
+ EXAMPLES::
232
+
233
+ sage: W = Words(range(20))
234
+
235
+ sage: w = W(list(range(1, 10)) * 2)
236
+ sage: type(w)
237
+ <class 'sage.combinat.words.word.FiniteWord_char'>
238
+ sage: w
239
+ word: 123456789123456789
240
+
241
+ sage: w.is_palindrome()
242
+ False
243
+ sage: (w*w[::-1]).is_palindrome()
244
+ True
245
+ sage: (w[:-1:]*w[::-1]).is_palindrome()
246
+ True
247
+
248
+ sage: w.is_lyndon()
249
+ False
250
+ sage: W(list(range(10)) + [10, 10]).is_lyndon()
251
+ True
252
+
253
+ sage: w.is_square_free()
254
+ False
255
+ sage: w[:-1].is_square_free()
256
+ True
257
+
258
+ sage: u = W([randint(0,10) for i in range(10)])
259
+ sage: (u*u).is_square()
260
+ True
261
+ sage: (u*u*u).is_cube()
262
+ True
263
+
264
+ sage: len(w.factor_set())
265
+ 127
266
+ sage: w.rauzy_graph(5) # needs sage.graphs
267
+ Looped digraph on 9 vertices
268
+
269
+ sage: u = W([1,2,3])
270
+ sage: w.first_occurrence(u)
271
+ 0
272
+ sage: w.first_occurrence(u, start=1)
273
+ 9
274
+
275
+ TESTS::
276
+
277
+ sage: W = Words([0,1,2])
278
+ sage: w = W([0,1,1,0])
279
+ sage: w == loads(dumps(w))
280
+ True
281
+ """
282
+ pass
283
+
284
+
285
+ class FiniteWord_list(WordDatatype_list, FiniteWord_class):
286
+ r"""
287
+ Finite word represented by a Python list.
288
+
289
+ For any word `w`, type ``w.`` and hit :kbd:`Tab` key to see the list of
290
+ functions defined on `w`.
291
+
292
+ EXAMPLES::
293
+
294
+ sage: w = Word(range(10))
295
+ sage: w.iterated_right_palindromic_closure()
296
+ word: 0102010301020104010201030102010501020103...
297
+
298
+ TESTS::
299
+
300
+ sage: w = Word([0,1,1,0])
301
+ sage: w == loads(dumps(w))
302
+ True
303
+ """
304
+ pass
305
+
306
+
307
+ class FiniteWord_str(WordDatatype_str, FiniteWord_class):
308
+ r"""
309
+ Finite word represented by a Python str.
310
+
311
+ For such word `w`, type ``w.`` and hit :kbd:`Tab` key to see the list of
312
+ functions defined on `w`.
313
+
314
+ EXAMPLES::
315
+
316
+ sage: w = Word('abcdef')
317
+ sage: w.is_square()
318
+ False
319
+
320
+ TESTS::
321
+
322
+ sage: w = Word('abba')
323
+ sage: w == loads(dumps(w))
324
+ True
325
+ """
326
+ pass
327
+
328
+
329
+ class FiniteWord_tuple(WordDatatype_tuple, FiniteWord_class):
330
+ r"""
331
+ Finite word represented by a Python tuple.
332
+
333
+ For such word `w`, type ``w.`` and hit :kbd:`Tab` key to see the list of
334
+ functions defined on `w`.
335
+
336
+ EXAMPLES::
337
+
338
+ sage: w = Word(())
339
+ sage: w.is_empty()
340
+ True
341
+
342
+ TESTS::
343
+
344
+ sage: w = Word((0,1,1,0))
345
+ sage: w == loads(dumps(w))
346
+ True
347
+ """
348
+ pass
349
+
350
+
351
+ class FiniteWord_iter_with_caching(WordDatatype_iter_with_caching, FiniteWord_class):
352
+ r"""
353
+ Finite word represented by an iterator (with caching).
354
+
355
+ For such word `w`, type ``w.`` and hit :kbd:`Tab` key to see the list of
356
+ functions defined on `w`.
357
+
358
+ EXAMPLES::
359
+
360
+ sage: w = Word(iter('abcdef'))
361
+ sage: w.conjugate(2)
362
+ word: cdefab
363
+
364
+ TESTS::
365
+
366
+ sage: w = Word(iter(range(10)))
367
+ sage: type(w)
368
+ <class 'sage.combinat.words.word.FiniteWord_iter_with_caching'>
369
+ sage: z = loads(dumps(w))
370
+ sage: w == z
371
+ True
372
+ sage: type(z)
373
+ <class 'sage.combinat.words.word.FiniteWord_list'>
374
+ """
375
+ pass
376
+
377
+
378
+ class FiniteWord_iter(WordDatatype_iter, FiniteWord_class):
379
+ r"""
380
+ Finite word represented by an iterator.
381
+
382
+ For such word `w`, type ``w.`` and hit :kbd:`Tab` key to see the list of
383
+ functions defined on `w`.
384
+
385
+ EXAMPLES::
386
+
387
+ sage: w = Word(iter(range(10)), caching=False)
388
+ sage: w
389
+ word: 0123456789
390
+ sage: w.finite_differences()
391
+ word: 111111111
392
+
393
+ TESTS::
394
+
395
+ sage: w = Word(iter(range(10)), caching=False)
396
+ sage: type(w)
397
+ <class 'sage.combinat.words.word.FiniteWord_iter'>
398
+ sage: z = loads(dumps(w))
399
+ sage: w == z
400
+ True
401
+ sage: type(z)
402
+ <class 'sage.combinat.words.word.FiniteWord_list'>
403
+ """
404
+ pass
405
+
406
+
407
+ class FiniteWord_callable_with_caching(WordDatatype_callable_with_caching, FiniteWord_class):
408
+ r"""
409
+ Finite word represented by a callable (with caching).
410
+
411
+ For such word `w`, type ``w.`` and hit :kbd:`Tab` key to see the list of
412
+ functions defined on `w`.
413
+
414
+ EXAMPLES::
415
+
416
+ sage: f = lambda n : n % 3
417
+ sage: w = Word(f, length=32)
418
+ sage: w
419
+ word: 01201201201201201201201201201201
420
+ sage: w.border()
421
+ word: 01201201201201201201201201201
422
+
423
+ TESTS::
424
+
425
+ sage: w = Word(lambda n:n, length=10)
426
+ sage: type(w)
427
+ <class 'sage.combinat.words.word.FiniteWord_callable_with_caching'>
428
+ sage: z = loads(dumps(w))
429
+ sage: w == z
430
+ True
431
+ sage: type(z)
432
+ <class 'sage.combinat.words.word.FiniteWord_callable_with_caching'>
433
+
434
+ Pickle also works for concatenation of words::
435
+
436
+ sage: w = Word(range(10)) * Word('abcdef')
437
+ sage: type(w)
438
+ <class 'sage.combinat.words.word.FiniteWord_callable_with_caching'>
439
+ sage: z = loads(dumps(w))
440
+ sage: w == z
441
+ True
442
+ sage: type(z)
443
+ <class 'sage.combinat.words.word.FiniteWord_list'>
444
+
445
+ Pickle also works for power of words::
446
+
447
+ sage: w = Word(range(10)) ^ 2
448
+ sage: type(w)
449
+ <class 'sage.combinat.words.word.FiniteWord_callable_with_caching'>
450
+ sage: z = loads(dumps(w))
451
+ sage: w == z
452
+ True
453
+ sage: type(z)
454
+ <class 'sage.combinat.words.word.FiniteWord_list'>
455
+ """
456
+ pass
457
+
458
+
459
+ class FiniteWord_callable(WordDatatype_callable, FiniteWord_class):
460
+ r"""
461
+ Finite word represented by a callable.
462
+
463
+ For such word `w`, type ``w.`` and hit :kbd:`Tab` key to see the list of
464
+ functions defined on `w`.
465
+
466
+ EXAMPLES::
467
+
468
+ sage: f = lambda n : 3 if n > 8 else 6
469
+ sage: w = Word(f, length=30, caching=False)
470
+ sage: w
471
+ word: 666666666333333333333333333333
472
+ sage: w.is_symmetric()
473
+ True
474
+
475
+ TESTS::
476
+
477
+ sage: w = Word(lambda n:n, length=10, caching=False)
478
+ sage: type(w)
479
+ <class 'sage.combinat.words.word.FiniteWord_callable'>
480
+ sage: z = loads(dumps(w))
481
+ sage: w == z
482
+ True
483
+ sage: type(z)
484
+ <class 'sage.combinat.words.word.FiniteWord_callable'>
485
+ """
486
+ pass
487
+
488
+
489
+ ##### Infinite Words #####
490
+
491
+ class InfiniteWord_iter_with_caching(WordDatatype_iter_with_caching, InfiniteWord_class):
492
+ r"""
493
+ Infinite word represented by an iterable (with caching).
494
+
495
+ For such word `w`, type ``w.`` and hit :kbd:`Tab` key to see the list of
496
+ functions defined on `w`.
497
+
498
+ Infinite words behave like a Python list : they can be sliced using
499
+ square braquets to define for example a prefix or a factor.
500
+
501
+ EXAMPLES::
502
+
503
+ sage: from itertools import cycle
504
+ sage: w = Word(cycle([9,8,4]))
505
+ sage: w
506
+ word: 9849849849849849849849849849849849849849...
507
+ sage: prefix = w[:23]
508
+ sage: prefix
509
+ word: 98498498498498498498498
510
+ sage: prefix.minimal_period()
511
+ 3
512
+
513
+ TESTS::
514
+
515
+ sage: from itertools import count
516
+ sage: w = Word(count())
517
+ sage: type(w)
518
+ <class 'sage.combinat.words.word.Word_iter_with_caching'>
519
+
520
+ Pickle is not supported for infinite word defined by an iterator::
521
+
522
+ sage: try:
523
+ ....: dumps(w)
524
+ ....: except TypeError as e:
525
+ ....: if "pickle" in str(e) and "generator" in str(e):
526
+ ....: print("TypeError raised in dumps() as expected")
527
+ TypeError raised in dumps() as expected
528
+ """
529
+ pass
530
+
531
+
532
+ class InfiniteWord_iter(WordDatatype_iter, InfiniteWord_class):
533
+ r"""
534
+ Infinite word represented by an iterable.
535
+
536
+ For such word `w`, type ``w.`` and hit :kbd:`Tab` key to see the list of
537
+ functions defined on `w`.
538
+
539
+ Infinite words behave like a Python list : they can be sliced using
540
+ square braquets to define for example a prefix or a factor.
541
+
542
+ EXAMPLES::
543
+
544
+ sage: from itertools import chain, cycle
545
+ sage: w = Word(chain('letsgo', cycle('forever')), caching=False)
546
+ sage: w
547
+ word: letsgoforeverforeverforeverforeverforeve...
548
+ sage: prefix = w[:100]
549
+ sage: prefix
550
+ word: letsgoforeverforeverforeverforeverforeve...
551
+ sage: prefix.is_lyndon()
552
+ False
553
+
554
+ TESTS::
555
+
556
+ sage: from itertools import count
557
+ sage: w = Word(count(), caching=False)
558
+ sage: type(w)
559
+ <class 'sage.combinat.words.word.Word_iter'>
560
+
561
+ Pickle is not supported for infinite word defined by an iterator::
562
+
563
+ sage: try:
564
+ ....: dumps(w)
565
+ ....: except TypeError as e:
566
+ ....: if "pickle" in str(e) and "generator" in str(e):
567
+ ....: print("TypeError raised in dumps() as expected")
568
+ TypeError raised in dumps() as expected
569
+ """
570
+ pass
571
+
572
+
573
+ class InfiniteWord_callable_with_caching(WordDatatype_callable_with_caching, InfiniteWord_class):
574
+ r"""
575
+ Infinite word represented by a callable (with caching).
576
+
577
+ For such word `w`, type ``w.`` and hit :kbd:`Tab` key to see the list of
578
+ functions defined on `w`.
579
+
580
+ Infinite words behave like a Python list : they can be sliced using
581
+ square braquets to define for example a prefix or a factor.
582
+
583
+ EXAMPLES::
584
+
585
+ sage: w = Word(lambda n:n)
586
+ sage: factor = w[4:13]
587
+ sage: factor
588
+ word: 4,5,6,7,8,9,10,11,12
589
+
590
+ TESTS::
591
+
592
+ sage: w = Word(lambda n:n)
593
+ sage: type(w)
594
+ <class 'sage.combinat.words.word.InfiniteWord_callable_with_caching'>
595
+ sage: z = loads(dumps(w))
596
+ sage: z
597
+ word: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,...
598
+ sage: type(z)
599
+ <class 'sage.combinat.words.word.InfiniteWord_callable_with_caching'>
600
+ """
601
+ pass
602
+
603
+
604
+ class InfiniteWord_callable(WordDatatype_callable, InfiniteWord_class):
605
+ r"""
606
+ Infinite word represented by a callable.
607
+
608
+ For such word `w`, type ``w.`` and hit :kbd:`Tab` key to see the list of
609
+ functions defined on `w`.
610
+
611
+ Infinite words behave like a Python list : they can be sliced using
612
+ square braquets to define for example a prefix or a factor.
613
+
614
+ EXAMPLES::
615
+
616
+ sage: w = Word(lambda n:n, caching=False)
617
+ sage: w
618
+ word: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,...
619
+ sage: w.iterated_right_palindromic_closure()
620
+ word: 0102010301020104010201030102010501020103...
621
+
622
+ TESTS::
623
+
624
+ sage: w = Word(lambda n:n, caching=False)
625
+ sage: type(w)
626
+ <class 'sage.combinat.words.word.InfiniteWord_callable'>
627
+ sage: z = loads(dumps(w))
628
+ sage: z
629
+ word: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,...
630
+ sage: type(z)
631
+ <class 'sage.combinat.words.word.InfiniteWord_callable'>
632
+ """
633
+ pass
634
+
635
+
636
+ ##### Words of unknown length #####
637
+
638
+ class Word_iter_with_caching(WordDatatype_iter_with_caching, Word_class):
639
+ r"""
640
+ Word of unknown length (finite or infinite) represented by an
641
+ iterable (with caching).
642
+
643
+ For such word `w`, type ``w.`` and hit :kbd:`Tab` key to see the list of
644
+ functions defined on `w`.
645
+
646
+ Words behave like a Python list : they can be sliced using
647
+ square braquets to define for example a prefix or a factor.
648
+
649
+ EXAMPLES::
650
+
651
+ sage: w = Word(iter([1,2,3]*1000), length='unknown')
652
+ sage: w
653
+ word: 1231231231231231231231231231231231231231...
654
+ sage: w.finite_differences(mod=2)
655
+ word: 1101101101101101101101101101101101101101...
656
+
657
+ TESTS::
658
+
659
+ sage: w = Word(iter('abcd'*100), length='unknown')
660
+ sage: type(w)
661
+ <class 'sage.combinat.words.word.Word_iter_with_caching'>
662
+ sage: w
663
+ word: abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd...
664
+
665
+ Pickle is not supported for word of unknown length defined by an iterator::
666
+
667
+ sage: try:
668
+ ....: dumps(w)
669
+ ....: except TypeError as e:
670
+ ....: if "pickle" in str(e) and "generator" in str(e):
671
+ ....: print("TypeError raised in dumps() as expected")
672
+ TypeError raised in dumps() as expected
673
+ """
674
+ pass
675
+
676
+
677
+ class Word_iter(WordDatatype_iter, Word_class):
678
+ r"""
679
+ Word of unknown length (finite or infinite) represented by an
680
+ iterable.
681
+
682
+ For such word `w`, type ``w.`` and hit :kbd:`Tab` key to see the list of
683
+ functions defined on `w`.
684
+
685
+ Words behave like a Python list : they can be sliced using
686
+ square braquets to define for example a prefix or a factor.
687
+
688
+ EXAMPLES::
689
+
690
+ sage: w = Word(iter([1,1,4,9]*1000), length='unknown', caching=False)
691
+ sage: w
692
+ word: 1149114911491149114911491149114911491149...
693
+ sage: w.delta()
694
+ word: 2112112112112112112112112112112112112112...
695
+
696
+ TESTS::
697
+
698
+ sage: w = Word(iter('abcd'*100), length='unknown', caching=False)
699
+ sage: type(w)
700
+ <class 'sage.combinat.words.word.Word_iter'>
701
+ sage: w
702
+ word: abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd...
703
+
704
+ Pickle is not supported for word of unknown length defined by an iterator::
705
+
706
+ sage: try:
707
+ ....: dumps(w)
708
+ ....: except TypeError as e:
709
+ ....: if "pickle" in str(e) and "generator" in str(e):
710
+ ....: print("TypeError raised in dumps() as expected")
711
+ TypeError raised in dumps() as expected
712
+ """
713
+ pass
714
+
715
+
716
+ ##### Morphic Words #####
717
+
718
+ class FiniteWord_morphic(WordDatatype_morphic, FiniteWord_class):
719
+ r"""
720
+ Finite morphic word.
721
+
722
+ For such word `w`, type ``w.`` and hit :kbd:`Tab` key to see the list of
723
+ functions defined on `w`.
724
+
725
+ EXAMPLES::
726
+
727
+ sage: m = WordMorphism("a->ab,b->")
728
+ sage: w = m.fixed_point("a")
729
+ sage: w
730
+ word: ab
731
+
732
+
733
+ TESTS::
734
+
735
+ sage: m = WordMorphism("a->ab,b->")
736
+ sage: w = m.fixed_point("a")
737
+ sage: type(w)
738
+ <class 'sage.combinat.words.word.FiniteWord_morphic'>
739
+ sage: loads(dumps(w))
740
+ word: ab
741
+ """
742
+ pass
743
+
744
+
745
+ class InfiniteWord_morphic(WordDatatype_morphic, InfiniteWord_class):
746
+ r"""
747
+ Morphic word of infinite length.
748
+
749
+ For such word `w`, type ``w.`` and hit :kbd:`Tab` key to see the list of
750
+ functions defined on `w`.
751
+
752
+ Infinite words behave like a Python list : they can be sliced using
753
+ square braquets to define for example a prefix or a factor.
754
+
755
+ EXAMPLES::
756
+
757
+ sage: m = WordMorphism('a->ab,b->a')
758
+ sage: w = m.fixed_point('a')
759
+ sage: w
760
+ word: abaababaabaababaababaabaababaabaababaaba...
761
+
762
+ TESTS:
763
+
764
+ Pickle is supported::
765
+
766
+ sage: loads(dumps(w))
767
+ word: abaababaabaababaababaabaababaabaababaaba...
768
+ """
769
+ pass