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,518 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.graphs sage.modules
3
+ r"""
4
+ Affine factorization crystal of type `A`
5
+ """
6
+ #*****************************************************************************
7
+ # Copyright (C) 2014 Anne Schilling <anne at math.ucdavis.edu>
8
+ #
9
+ # Distributed under the terms of the GNU General Public License (GPL)
10
+ # http://www.gnu.org/licenses/
11
+ #******************************************************************************
12
+
13
+ from sage.misc.lazy_attribute import lazy_attribute
14
+ from sage.misc.lazy_import import lazy_import
15
+ from sage.structure.parent import Parent
16
+ from sage.structure.element_wrapper import ElementWrapper
17
+ from sage.structure.unique_representation import UniqueRepresentation
18
+ from sage.categories.classical_crystals import ClassicalCrystals
19
+ from sage.categories.crystals import CrystalMorphism
20
+ from sage.categories.enumerated_sets import EnumeratedSets
21
+ from sage.categories.homset import Hom
22
+ from sage.combinat.root_system.cartan_type import CartanType
23
+ from sage.combinat.rsk import RSK
24
+
25
+ lazy_import('sage.combinat.root_system.weyl_group', 'WeylGroup')
26
+
27
+
28
+ class AffineFactorizationCrystal(UniqueRepresentation, Parent):
29
+ r"""
30
+ The crystal on affine factorizations with a cut-point, as introduced
31
+ by [MS2015]_.
32
+
33
+ INPUT:
34
+
35
+ - ``w`` -- an element in an (affine) Weyl group or a skew shape of `k`-bounded partitions (if `k` was specified)
36
+
37
+ - ``n`` -- the number of factors in the factorization
38
+
39
+ - ``x`` -- (default: ``None``) the cut point; if not specified it is determined as the minimal missing residue in ``w``
40
+
41
+ - ``k`` -- (default: ``None``) positive integer, specifies that ``w`` is `k`-bounded or a `k+1`-core when specified
42
+
43
+ EXAMPLES::
44
+
45
+ sage: W = WeylGroup(['A',3,1], prefix='s')
46
+ sage: w = W.from_reduced_word([2,3,2,1])
47
+ sage: B = crystals.AffineFactorization(w,3); B
48
+ Crystal on affine factorizations of type A2 associated to s2*s3*s2*s1
49
+ sage: B.list()
50
+ [(1, s2, s3*s2*s1),
51
+ (1, s3*s2, s3*s1),
52
+ (1, s3*s2*s1, s3),
53
+ (s3, s2, s3*s1),
54
+ (s3, s2*s1, s3),
55
+ (s3*s2, s1, s3),
56
+ (s3*s2*s1, 1, s3),
57
+ (s3*s2*s1, s3, 1),
58
+ (s3*s2, 1, s3*s1),
59
+ (s3*s2, s3, s1),
60
+ (s3*s2, s3*s1, 1),
61
+ (s2, 1, s3*s2*s1),
62
+ (s2, s3, s2*s1),
63
+ (s2, s3*s2, s1),
64
+ (s2, s3*s2*s1, 1)]
65
+
66
+ We can also access the crystal by specifying a skew shape in terms of `k`-bounded partitions::
67
+
68
+ sage: crystals.AffineFactorization([[3,1,1],[1]], 3, k=3)
69
+ Crystal on affine factorizations of type A2 associated to s2*s3*s2*s1
70
+
71
+ We can compute the highest weight elements::
72
+
73
+ sage: hw = [w for w in B if w.is_highest_weight()]
74
+ sage: hw
75
+ [(1, s2, s3*s2*s1)]
76
+ sage: hw[0].weight()
77
+ (3, 1, 0)
78
+
79
+ And show that this crystal is isomorphic to the tableau model of the same weight::
80
+
81
+ sage: C = crystals.Tableaux(['A',2],shape=[3,1])
82
+ sage: GC = C.digraph()
83
+ sage: GB = B.digraph()
84
+ sage: GC.is_isomorphic(GB, edge_labels=True)
85
+ True
86
+
87
+ The crystal operators themselves move elements between adjacent factors::
88
+
89
+ sage: b = hw[0];b
90
+ (1, s2, s3*s2*s1)
91
+ sage: b.f(1)
92
+ (1, s3*s2, s3*s1)
93
+
94
+ The cut point `x` is not supposed to occur in the reduced words for `w`::
95
+
96
+ sage: B = crystals.AffineFactorization([[3,2],[2]],4,x=0,k=3)
97
+ Traceback (most recent call last):
98
+ ...
99
+ ValueError: x cannot be in reduced word of s0*s3*s2
100
+ """
101
+ @staticmethod
102
+ def __classcall_private__(cls, w, n, x=None, k=None):
103
+ r"""
104
+ Classcall to mend the input.
105
+
106
+ TESTS::
107
+
108
+ sage: A = crystals.AffineFactorization([[3,1],[1]], 4, k=3); A
109
+ Crystal on affine factorizations of type A3 associated to s3*s2*s1
110
+ sage: AC = crystals.AffineFactorization([Core([4,1],4),Core([1],4)], 4, k=3)
111
+ sage: AC is A
112
+ True
113
+ """
114
+ if k is not None:
115
+ from sage.combinat.core import Core
116
+ from sage.combinat.partition import Partition
117
+ W = WeylGroup(['A',k,1], prefix='s')
118
+ if isinstance(w[0], Core):
119
+ w = [w[0].to_bounded_partition(), w[1].to_bounded_partition()]
120
+ else:
121
+ w = [Partition(w[0]), Partition(w[1])]
122
+ w0 = W.from_reduced_word(w[0].from_kbounded_to_reduced_word(k))
123
+ w1 = W.from_reduced_word(w[1].from_kbounded_to_reduced_word(k))
124
+ w = w0*(w1.inverse())
125
+ return super().__classcall__(cls, w, n, x)
126
+
127
+ def __init__(self, w, n, x=None):
128
+ r"""
129
+ EXAMPLES::
130
+
131
+ sage: B = crystals.AffineFactorization([[3,2],[2]],4,x=0,k=3)
132
+ Traceback (most recent call last):
133
+ ...
134
+ ValueError: x cannot be in reduced word of s0*s3*s2
135
+
136
+ sage: B = crystals.AffineFactorization([[3,2],[2]],4,k=3)
137
+ sage: B.x
138
+ 1
139
+ sage: B.w
140
+ s0*s3*s2
141
+ sage: B.k
142
+ 3
143
+ sage: B.n
144
+ 4
145
+
146
+ TESTS::
147
+
148
+ sage: W = WeylGroup(['A',3,1], prefix='s')
149
+ sage: w = W.from_reduced_word([2,3,2,1])
150
+ sage: B = crystals.AffineFactorization(w,3)
151
+ sage: TestSuite(B).run() # long time
152
+ """
153
+ Parent.__init__(self, category=ClassicalCrystals())
154
+ self.n = n
155
+ self.k = w.parent().n-1
156
+ self.w = w
157
+ cartan_type = CartanType(['A',n-1])
158
+ self._cartan_type = cartan_type
159
+ from sage.combinat.sf.sf import SymmetricFunctions
160
+ from sage.rings.rational_field import QQ
161
+ Sym = SymmetricFunctions(QQ)
162
+ s = Sym.schur()
163
+ support = s(w.stanley_symmetric_function()).support()
164
+ support = [ [0]*(n-len(mu))+[mu[len(mu)-i-1] for i in range(len(mu))] for mu in support]
165
+ generators = [tuple(p) for mu in support for p in affine_factorizations(w,n,mu)]
166
+ #generators = [tuple(p) for p in affine_factorizations(w, n)]
167
+ self.module_generators = [self(t) for t in generators]
168
+ if x is None:
169
+ if generators:
170
+ x = min( set(range(self.k+1)).difference(set(
171
+ sum([i.reduced_word() for i in generators[0]],[]))))
172
+ else:
173
+ x = 0
174
+ if x in set(w.reduced_word()):
175
+ raise ValueError("x cannot be in reduced word of {}".format(w))
176
+ self.x = x
177
+
178
+ def _repr_(self):
179
+ r"""
180
+ EXAMPLES::
181
+
182
+ sage: W = WeylGroup(['A',3,1], prefix='s')
183
+ sage: w = W.from_reduced_word([3,2,1])
184
+ sage: crystals.AffineFactorization(w,4)
185
+ Crystal on affine factorizations of type A3 associated to s3*s2*s1
186
+
187
+ sage: crystals.AffineFactorization([[3,1],[1]], 4, k=3)
188
+ Crystal on affine factorizations of type A3 associated to s3*s2*s1
189
+ """
190
+ return "Crystal on affine factorizations of type A{} associated to {}".format(self.n-1, self.w)
191
+
192
+ # temporary workaround while an_element is overridden by Parent
193
+ _an_element_ = EnumeratedSets.ParentMethods._an_element_
194
+
195
+ @lazy_attribute
196
+ def _tableaux_isomorphism(self):
197
+ """
198
+ Return the isomorphism from ``self`` to the tableaux model.
199
+
200
+ EXAMPLES::
201
+
202
+ sage: W = WeylGroup(['A',3,1], prefix='s')
203
+ sage: w = W.from_reduced_word([3,2,1])
204
+ sage: B = crystals.AffineFactorization(w,4)
205
+ sage: B._tableaux_isomorphism
206
+ ['A', 3] Crystal morphism:
207
+ From: Crystal on affine factorizations of type A3 associated to s3*s2*s1
208
+ To: The crystal of tableaux of type ['A', 3] and shape(s) [[3]]
209
+
210
+ sage: W = WeylGroup(['A',3,1], prefix='s')
211
+ sage: w = W.from_reduced_word([2,1,3,2])
212
+ sage: B = crystals.AffineFactorization(w,3)
213
+ sage: B._tableaux_isomorphism
214
+ ['A', 2] Crystal morphism:
215
+ From: Crystal on affine factorizations of type A2 associated to s2*s3*s1*s2
216
+ To: The crystal of tableaux of type ['A', 2] and shape(s) [[2, 2]]
217
+ """
218
+ # Constructing the tableaux crystal
219
+ from sage.combinat.crystals.tensor_product import CrystalOfTableaux
220
+
221
+ def mg_to_shape(mg):
222
+ l = list(mg.weight().to_vector())
223
+ while l and l[-1] == 0:
224
+ l.pop()
225
+ return l
226
+ sh = [mg_to_shape(mg) for mg in self.highest_weight_vectors()]
227
+ C = CrystalOfTableaux(self.cartan_type(), shapes=sh)
228
+ phi = FactorizationToTableaux(Hom(self, C, category=self.category()))
229
+ phi.register_as_coercion()
230
+ return phi
231
+
232
+ class Element(ElementWrapper):
233
+
234
+ def e(self, i):
235
+ r"""
236
+ Return the action of `e_i` on ``self``.
237
+
238
+ EXAMPLES::
239
+
240
+ sage: B = crystals.AffineFactorization([[3,1],[1]], 4, k=3)
241
+ sage: W = B.w.parent()
242
+ sage: t = B((W.one(),W.one(),W.from_reduced_word([3]),W.from_reduced_word([2,1]))); t
243
+ (1, 1, s3, s2*s1)
244
+ sage: t.e(1)
245
+ (1, 1, 1, s3*s2*s1)
246
+ """
247
+ if i not in self.index_set():
248
+ raise ValueError("i must be in the index set")
249
+ b = self.bracketing(i)
250
+ if not b[0]:
251
+ return None
252
+ W = self.parent().w.parent()
253
+ x = self.parent().x
254
+ k = self.parent().k
255
+ n = self.parent().n
256
+ a = min(b[0])
257
+ left = [j for j in (self.value[n-i-1]).reduced_word() if j != (a+x) % (k+1)]
258
+ right = [(j-x) % (k+1) for j in (self.value[n-i]).reduced_word()]
259
+ m = max([j for j in range(a) if (j+x) % (k+1) not in left])
260
+ right += [m+1]
261
+ right.sort(reverse=True)
262
+ right = [(j+x) % (k+1) for j in right]
263
+ t = [self.value[j] for j in range(n-i-1)] + [W.from_reduced_word(left)] + [W.from_reduced_word(right)] + [self.value[j] for j in range(n-i+1,n)]
264
+ return self.parent()(tuple(t))
265
+
266
+ def f(self, i):
267
+ r"""
268
+ Return the action of `f_i` on ``self``.
269
+
270
+ EXAMPLES::
271
+
272
+ sage: B = crystals.AffineFactorization([[3,1],[1]], 4, k=3)
273
+ sage: W = B.w.parent()
274
+ sage: t = B((W.one(),W.one(),W.from_reduced_word([3]),W.from_reduced_word([2,1]))); t
275
+ (1, 1, s3, s2*s1)
276
+ sage: t.f(2)
277
+ (1, s3, 1, s2*s1)
278
+ sage: t.f(1)
279
+ (1, 1, s3*s2, s1)
280
+ """
281
+ if i not in self.index_set():
282
+ raise ValueError("i must be in the index set")
283
+ b = self.bracketing(i)
284
+ if not b[1]:
285
+ return None
286
+ W = self.parent().w.parent()
287
+ x = self.parent().x
288
+ k = self.parent().k
289
+ n = self.parent().n
290
+ a = max(b[1])
291
+ right = [j for j in (self.value[n-i]).reduced_word() if j != (a+x) % (k+1)]
292
+ left = [(j-x) % (k+1) for j in (self.value[n-i-1]).reduced_word()]
293
+ m = min([j for j in range(a+1,k+2) if (j+x) % (k+1) not in right])
294
+ left += [m-1]
295
+ left.sort(reverse=True)
296
+ left = [(j+x) % (k+1) for j in left]
297
+ t = [self.value[j] for j in range(n-i-1)] + [W.from_reduced_word(left)] + [W.from_reduced_word(right)] + [self.value[j] for j in range(n-i+1,n)]
298
+ return self.parent()(tuple(t))
299
+
300
+ def bracketing(self, i):
301
+ r"""
302
+ Removes all bracketed letters between `i`-th and `i+1`-th entry.
303
+
304
+ EXAMPLES::
305
+
306
+ sage: B = crystals.AffineFactorization([[3,1],[1]], 3, k=3, x=4)
307
+ sage: W = B.w.parent()
308
+ sage: t = B((W.one(),W.from_reduced_word([3]),W.from_reduced_word([2,1]))); t
309
+ (1, s3, s2*s1)
310
+ sage: t.bracketing(1)
311
+ [[3], [2, 1]]
312
+ """
313
+ n = self.parent().n
314
+ x = self.parent().x
315
+ k = self.parent().k
316
+ right = (self.value[n-i]).reduced_word()
317
+ left = (self.value[n-i-1]).reduced_word()
318
+ right_n = [(j-x) % (k+1) for j in right]
319
+ left_n = [(j-x) % (k+1) for j in left]
320
+ left_unbracketed = []
321
+ while left_n:
322
+ m = max(left_n)
323
+ left_n.remove(m)
324
+ l = [j for j in right_n if j > m]
325
+ if l:
326
+ right_n.remove(min(l))
327
+ else:
328
+ left_unbracketed += [m]
329
+ return [list(left_unbracketed), list(right_n)]
330
+
331
+ def to_tableau(self):
332
+ """
333
+ Return the tableau representation of ``self``.
334
+
335
+ Uses the recording tableau of a minor variation of
336
+ Edelman-Greene insertion. See Theorem 4.11 in [MS2015]_.
337
+
338
+ EXAMPLES::
339
+
340
+ sage: W = WeylGroup(['A',3,1], prefix='s')
341
+ sage: w = W.from_reduced_word([2,1,3,2])
342
+ sage: B = crystals.AffineFactorization(w,3)
343
+ sage: for x in B:
344
+ ....: x
345
+ ....: x.to_tableau().pp()
346
+ (1, s2*s1, s3*s2)
347
+ 1 1
348
+ 2 2
349
+ (s2, s1, s3*s2)
350
+ 1 1
351
+ 2 3
352
+ (s2, s3*s1, s2)
353
+ 1 2
354
+ 2 3
355
+ (s2*s1, 1, s3*s2)
356
+ 1 1
357
+ 3 3
358
+ (s2*s1, s3, s2)
359
+ 1 2
360
+ 3 3
361
+ (s2*s1, s3*s2, 1)
362
+ 2 2
363
+ 3 3
364
+ """
365
+ return self.parent()._tableaux_isomorphism(self)
366
+
367
+
368
+ def affine_factorizations(w, l, weight=None):
369
+ r"""
370
+ Return all factorizations of `w` into `l` factors or of weight ``weight``.
371
+
372
+ INPUT:
373
+
374
+ - ``w`` -- an (affine) permutation or element of the (affine) Weyl group
375
+
376
+ - ``l`` -- nonnegative integer
377
+
378
+ - ``weight`` -- (default: ``None``) tuple of nonnegative integers
379
+ specifying the length of the factors
380
+
381
+ EXAMPLES::
382
+
383
+ sage: W = WeylGroup(['A',3,1], prefix='s')
384
+ sage: w = W.from_reduced_word([3,2,3,1,0,1])
385
+ sage: from sage.combinat.crystals.affine_factorization import affine_factorizations
386
+ sage: affine_factorizations(w,4)
387
+ [[s2, s3, s0, s2*s1*s0],
388
+ [s2, s3, s2*s0, s1*s0],
389
+ [s2, s3, s2*s1*s0, s1],
390
+ [s2, s3*s2, s0, s1*s0],
391
+ [s2, s3*s2, s1*s0, s1],
392
+ [s2, s3*s2*s1, s0, s1],
393
+ [s3*s2, s3, s0, s1*s0],
394
+ [s3*s2, s3, s1*s0, s1],
395
+ [s3*s2, s3*s1, s0, s1],
396
+ [s3*s2*s1, s3, s0, s1]]
397
+
398
+ sage: W = WeylGroup(['A',2], prefix='s')
399
+ sage: w0 = W.long_element()
400
+ sage: affine_factorizations(w0,3)
401
+ [[1, s1, s2*s1],
402
+ [1, s2*s1, s2],
403
+ [s1, 1, s2*s1],
404
+ [s1, s2, s1],
405
+ [s1, s2*s1, 1],
406
+ [s2, s1, s2],
407
+ [s2*s1, 1, s2],
408
+ [s2*s1, s2, 1]]
409
+ sage: affine_factorizations(w0,3,(0,1,2))
410
+ [[1, s1, s2*s1]]
411
+ sage: affine_factorizations(w0,3,(1,1,1))
412
+ [[s1, s2, s1], [s2, s1, s2]]
413
+ sage: W = WeylGroup(['A',3], prefix='s')
414
+ sage: w0 = W.long_element()
415
+ sage: affine_factorizations(w0,6,(1,1,1,1,1,1)) # long time
416
+ [[s1, s2, s1, s3, s2, s1],
417
+ [s1, s2, s3, s1, s2, s1],
418
+ [s1, s2, s3, s2, s1, s2],
419
+ [s1, s3, s2, s1, s3, s2],
420
+ [s1, s3, s2, s3, s1, s2],
421
+ [s2, s1, s2, s3, s2, s1],
422
+ [s2, s1, s3, s2, s1, s3],
423
+ [s2, s1, s3, s2, s3, s1],
424
+ [s2, s3, s1, s2, s1, s3],
425
+ [s2, s3, s1, s2, s3, s1],
426
+ [s2, s3, s2, s1, s2, s3],
427
+ [s3, s1, s2, s1, s3, s2],
428
+ [s3, s1, s2, s3, s1, s2],
429
+ [s3, s2, s1, s2, s3, s2],
430
+ [s3, s2, s1, s3, s2, s3],
431
+ [s3, s2, s3, s1, s2, s3]]
432
+ sage: affine_factorizations(w0,6,(0,0,0,1,2,3))
433
+ [[1, 1, 1, s1, s2*s1, s3*s2*s1]]
434
+ """
435
+ if weight is None:
436
+ if l == 0:
437
+ if w.is_one():
438
+ return [[]]
439
+ else:
440
+ return []
441
+ else:
442
+ return [[u]+p for (u,v) in w.left_pieri_factorizations() for p in affine_factorizations(v,l-1) ]
443
+ else:
444
+ if l != len(weight):
445
+ return []
446
+ if l == 0:
447
+ if w.is_one():
448
+ return [[]]
449
+ else:
450
+ return []
451
+ else:
452
+ return [[u]+p for (u,v) in w.left_pieri_factorizations(max_length=weight[0]) if u.length() == weight[0]
453
+ for p in affine_factorizations(v,l-1,weight[1:]) ]
454
+
455
+ #####################################################################
456
+ ## Crystal isomorphisms
457
+
458
+
459
+ class FactorizationToTableaux(CrystalMorphism):
460
+ def _call_(self, x):
461
+ """
462
+ Return the image of ``x`` under ``self``.
463
+
464
+ TESTS::
465
+
466
+ sage: W = WeylGroup(['A',3,1], prefix='s')
467
+ sage: w = W.from_reduced_word([2,1,3,2])
468
+ sage: B = crystals.AffineFactorization(w,3)
469
+ sage: phi = B._tableaux_isomorphism
470
+ sage: [phi(b) for b in B]
471
+ [[[1, 1], [2, 2]],
472
+ [[1, 1], [2, 3]],
473
+ [[1, 2], [2, 3]],
474
+ [[1, 1], [3, 3]],
475
+ [[1, 2], [3, 3]],
476
+ [[2, 2], [3, 3]]]
477
+ """
478
+ p = []
479
+ q = []
480
+ for i, factor in enumerate(reversed(x.value)):
481
+ word = factor.reduced_word()
482
+ p += [i + 1] * len(word)
483
+ # We sort for those pesky commutative elements
484
+ # The word is most likely in reverse order to begin with
485
+ q += sorted(reversed(word))
486
+ C = self.codomain()
487
+ return C(RSK(p, q, insertion=RSK.rules.EG)[1])
488
+
489
+ def is_isomorphism(self) -> bool:
490
+ """
491
+ Return ``True`` as this is an isomorphism.
492
+
493
+ EXAMPLES::
494
+
495
+ sage: W = WeylGroup(['A',3,1], prefix='s')
496
+ sage: w = W.from_reduced_word([2,1,3,2])
497
+ sage: B = crystals.AffineFactorization(w,3)
498
+ sage: phi = B._tableaux_isomorphism
499
+ sage: phi.is_isomorphism()
500
+ True
501
+
502
+ TESTS::
503
+
504
+ sage: W = WeylGroup(['A',4,1], prefix='s')
505
+ sage: w = W.from_reduced_word([2,1,3,2,4,3,2,1])
506
+ sage: B = crystals.AffineFactorization(w, 4) # long time
507
+ sage: phi = B._tableaux_isomorphism # long time
508
+ sage: all(phi(b).e(i) == phi(b.e(i)) and # long time
509
+ ....: phi(b).f(i) == phi(b.f(i))
510
+ ....: for b in B for i in B.index_set())
511
+ True
512
+ sage: set(phi(b) for b in B) == set(phi.codomain()) # long time
513
+ True
514
+ """
515
+ return True
516
+
517
+ is_embedding = is_isomorphism
518
+ is_surjective = is_isomorphism