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,476 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ r"""
3
+ Frieze patterns
4
+
5
+ This implements the original frieze patterns due to Conway and Coxeter.
6
+ Such a frieze pattern is considered as a sequence of nonnegative
7
+ integers following [CoCo1]_ and [CoCo2]_ using
8
+ :class:`sage.combinat.path_tableaux.path_tableau`.
9
+
10
+ AUTHORS:
11
+
12
+ - Bruce Westbury (2019): initial version
13
+ """
14
+ # ****************************************************************************
15
+ # Copyright (C) 2019 Bruce Westbury <bruce.westbury@gmail.com>,
16
+ #
17
+ # This program is free software: you can redistribute it and/or modify
18
+ # it under the terms of the GNU General Public License as published by
19
+ # the Free Software Foundation, either version 2 of the License, or
20
+ # (at your option) any later version.
21
+ # https://www.gnu.org/licenses/
22
+ # ****************************************************************************
23
+
24
+ from sage.misc.inherit_comparison import InheritComparisonClasscallMetaclass
25
+ from sage.structure.parent import Parent
26
+ from sage.categories.sets_cat import Sets
27
+ from sage.combinat.path_tableaux.path_tableau import PathTableau, PathTableaux, CylindricalDiagram
28
+ from sage.categories.fields import Fields
29
+ from sage.rings.integer_ring import ZZ
30
+ from sage.rings.rational_field import QQ
31
+
32
+
33
+ class FriezePattern(PathTableau, metaclass=InheritComparisonClasscallMetaclass):
34
+ r"""
35
+ A frieze pattern.
36
+
37
+ We encode a frieze pattern as a sequence in a fixed ground field.
38
+
39
+ INPUT:
40
+
41
+ - ``fp`` -- a sequence of elements of ``field``
42
+ - ``field`` -- (default: ``QQ``) the ground field
43
+
44
+ EXAMPLES::
45
+
46
+ sage: t = path_tableaux.FriezePattern([1,2,1,2,3,1])
47
+ sage: path_tableaux.CylindricalDiagram(t)
48
+ [0, 1, 2, 1, 2, 3, 1, 0]
49
+ [ , 0, 1, 1, 3, 5, 2, 1, 0]
50
+ [ , , 0, 1, 4, 7, 3, 2, 1, 0]
51
+ [ , , , 0, 1, 2, 1, 1, 1, 1, 0]
52
+ [ , , , , 0, 1, 1, 2, 3, 4, 1, 0]
53
+ [ , , , , , 0, 1, 3, 5, 7, 2, 1, 0]
54
+ [ , , , , , , 0, 1, 2, 3, 1, 1, 1, 0]
55
+ [ , , , , , , , 0, 1, 2, 1, 2, 3, 1, 0]
56
+
57
+ sage: TestSuite(t).run()
58
+
59
+ sage: t = path_tableaux.FriezePattern([1,2,7,5,3,7,4,1])
60
+ sage: path_tableaux.CylindricalDiagram(t)
61
+ [0, 1, 2, 7, 5, 3, 7, 4, 1, 0]
62
+ [ , 0, 1, 4, 3, 2, 5, 3, 1, 1, 0]
63
+ [ , , 0, 1, 1, 1, 3, 2, 1, 2, 1, 0]
64
+ [ , , , 0, 1, 2, 7, 5, 3, 7, 4, 1, 0]
65
+ [ , , , , 0, 1, 4, 3, 2, 5, 3, 1, 1, 0]
66
+ [ , , , , , 0, 1, 1, 1, 3, 2, 1, 2, 1, 0]
67
+ [ , , , , , , 0, 1, 2, 7, 5, 3, 7, 4, 1, 0]
68
+ [ , , , , , , , 0, 1, 4, 3, 2, 5, 3, 1, 1, 0]
69
+ [ , , , , , , , , 0, 1, 1, 1, 3, 2, 1, 2, 1, 0]
70
+ [ , , , , , , , , , 0, 1, 2, 7, 5, 3, 7, 4, 1, 0]
71
+
72
+ sage: TestSuite(t).run()
73
+
74
+ sage: t = path_tableaux.FriezePattern([1,3,4,5,1])
75
+ sage: path_tableaux.CylindricalDiagram(t)
76
+ [ 0, 1, 3, 4, 5, 1, 0]
77
+ [ , 0, 1, 5/3, 7/3, 2/3, 1, 0]
78
+ [ , , 0, 1, 2, 1, 3, 1, 0]
79
+ [ , , , 0, 1, 1, 4, 5/3, 1, 0]
80
+ [ , , , , 0, 1, 5, 7/3, 2, 1, 0]
81
+ [ , , , , , 0, 1, 2/3, 1, 1, 1, 0]
82
+ [ , , , , , , 0, 1, 3, 4, 5, 1, 0]
83
+
84
+ sage: TestSuite(t).run()
85
+
86
+ This constructs the examples from [HJ18]_::
87
+
88
+ sage: # needs sage.rings.number_field
89
+ sage: x = polygen(ZZ, 'x')
90
+ sage: K.<sqrt3> = NumberField(x^2 - 3)
91
+ sage: t = path_tableaux.FriezePattern([1, sqrt3, 2, sqrt3, 1, 1], field=K)
92
+ sage: path_tableaux.CylindricalDiagram(t)
93
+ [ 0, 1, sqrt3, 2, sqrt3, 1, 1, 0]
94
+ [ , 0, 1, sqrt3, 2, sqrt3, sqrt3 + 1, 1, 0]
95
+ [ , , 0, 1, sqrt3, 2, sqrt3 + 2, sqrt3, 1, 0]
96
+ [ , , , 0, 1, sqrt3, sqrt3 + 2, 2, sqrt3, 1, 0]
97
+ [ , , , , 0, 1, sqrt3 + 1, sqrt3, 2, sqrt3, 1, 0]
98
+ [ , , , , , 0, 1, 1, sqrt3, 2, sqrt3, 1, 0]
99
+ [ , , , , , , 0, 1, sqrt3 + 1, sqrt3 + 2, sqrt3 + 2, sqrt3 + 1, 1, 0]
100
+ [ , , , , , , , 0, 1, sqrt3, 2, sqrt3, 1, 1, 0]
101
+ sage: TestSuite(t).run()
102
+
103
+ sage: # needs sage.rings.number_field
104
+ sage: K.<sqrt2> = NumberField(x^2 - 2)
105
+ sage: t = path_tableaux.FriezePattern([1, sqrt2, 1, sqrt2, 3, 2*sqrt2, 5, 3*sqrt2, 1],
106
+ ....: field=K)
107
+ sage: path_tableaux.CylindricalDiagram(t)
108
+ [ 0, 1, sqrt2, 1, sqrt2, 3, 2*sqrt2, 5, 3*sqrt2, 1, 0]
109
+ [ , 0, 1, sqrt2, 3, 5*sqrt2, 7, 9*sqrt2, 11, 2*sqrt2, 1, 0]
110
+ [ , , 0, 1, 2*sqrt2, 7, 5*sqrt2, 13, 8*sqrt2, 3, sqrt2, 1, 0]
111
+ [ , , , 0, 1, 2*sqrt2, 3, 4*sqrt2, 5, sqrt2, 1, sqrt2, 1, 0]
112
+ [ , , , , 0, 1, sqrt2, 3, 2*sqrt2, 1, sqrt2, 3, 2*sqrt2, 1, 0]
113
+ [ , , , , , 0, 1, 2*sqrt2, 3, sqrt2, 3, 5*sqrt2, 7, 2*sqrt2, 1, 0]
114
+ [ , , , , , , 0, 1, sqrt2, 1, 2*sqrt2, 7, 5*sqrt2, 3, sqrt2, 1, 0]
115
+ [ , , , , , , , 0, 1, sqrt2, 5, 9*sqrt2, 13, 4*sqrt2, 3, 2*sqrt2, 1, 0]
116
+ [ , , , , , , , , 0, 1, 3*sqrt2, 11, 8*sqrt2, 5, 2*sqrt2, 3, sqrt2, 1, 0]
117
+ [ , , , , , , , , , 0, 1, 2*sqrt2, 3, sqrt2, 1, sqrt2, 1, sqrt2, 1, 0]
118
+ [ , , , , , , , , , , 0, 1, sqrt2, 1, sqrt2, 3, 2*sqrt2, 5, 3*sqrt2, 1, 0]
119
+ sage: TestSuite(t).run()
120
+ """
121
+ @staticmethod
122
+ def __classcall_private__(cls, fp, field=QQ):
123
+ r"""
124
+ This is the preprocessing for creating friezes.
125
+
126
+ EXAMPLES::
127
+
128
+ sage: path_tableaux.FriezePattern([1,2,1,2,3,1])
129
+ [1, 2, 1, 2, 3, 1]
130
+
131
+ TESTS::
132
+
133
+ sage: path_tableaux.FriezePattern(2)
134
+ Traceback (most recent call last):
135
+ ...
136
+ ValueError: invalid input 2
137
+
138
+ sage: x = polygen(ZZ, 'x')
139
+ sage: K.<sqrt3> = NumberField(x^2 - 3) # needs sage.rings.number_field
140
+ sage: t = path_tableaux.FriezePattern([1,sqrt3,2,sqrt3,1,1]) # needs sage.rings.number_field
141
+ Traceback (most recent call last):
142
+ ...
143
+ ValueError: [1, sqrt3, 2, sqrt3, 1, 1] is not a sequence in the field Rational Field
144
+
145
+ sage: path_tableaux.FriezePattern([1,2,1,2,3,1], field=Integers())
146
+ Traceback (most recent call last):
147
+ ...
148
+ ValueError: Integer Ring must be a field
149
+ """
150
+ if field not in Fields():
151
+ raise ValueError(f"{field} must be a field")
152
+
153
+ if isinstance(fp, (list, tuple)):
154
+ try:
155
+ fp = [field(a) for a in fp]
156
+ except TypeError:
157
+ raise ValueError(f"{fp} is not a sequence in the field {field}")
158
+ else:
159
+ raise ValueError(f"invalid input {fp}")
160
+
161
+ fp.insert(0, field(0))
162
+ fp.append(field(0))
163
+ return FriezePatterns(field)(tuple(fp))
164
+
165
+ def check(self):
166
+ r"""
167
+ Check that ``self`` is a valid frieze pattern.
168
+
169
+ TESTS::
170
+
171
+ sage: path_tableaux.FriezePattern([1,2,1,2,3,1]) # indirect test
172
+ [1, 2, 1, 2, 3, 1]
173
+ """
174
+ # Nothing to check
175
+ pass
176
+
177
+ def _repr_(self):
178
+ r"""
179
+ Return the string representation of ``self``.
180
+
181
+ This removes the leading and trailing zero.
182
+
183
+ TESTS::
184
+
185
+ sage: t = path_tableaux.FriezePattern([1,2,1,2,3,1])
186
+ sage: repr(t) == t._repr_() # indirect test
187
+ True
188
+ """
189
+ return repr(self[1:-1])
190
+
191
+ def local_rule(self, i):
192
+ r"""
193
+ Return the `i`-th local rule on ``self``.
194
+
195
+ This interprets ``self`` as a list of objects. This method first takes
196
+ the list of objects of length three consisting of the `(i-1)`-st,
197
+ `i`-th and `(i+1)`-term and applies the rule. It then replaces
198
+ the `i`-th object by the object returned by the rule.
199
+
200
+ EXAMPLES::
201
+
202
+ sage: t = path_tableaux.FriezePattern([1,2,1,2,3,1])
203
+ sage: t.local_rule(3)
204
+ [1, 2, 5, 2, 3, 1]
205
+
206
+ sage: t = path_tableaux.FriezePattern([1,2,1,2,3,1])
207
+ sage: t.local_rule(0)
208
+ Traceback (most recent call last):
209
+ ...
210
+ ValueError: 0 is not a valid integer
211
+ """
212
+ def _rule(x):
213
+ """
214
+ This is the rule on a sequence of three scalars.
215
+ """
216
+ return (x[0] * x[2] + 1) / x[1]
217
+
218
+ if not (0 < i < len(self) - 1):
219
+ raise ValueError(f"{i} is not a valid integer")
220
+
221
+ with self.clone() as result:
222
+ result[i] = _rule(self[i-1:i+2])
223
+
224
+ return result
225
+
226
+ def is_skew(self):
227
+ r"""
228
+ Return ``True`` if ``self`` is skew and ``False`` if not.
229
+
230
+ EXAMPLES::
231
+
232
+ sage: path_tableaux.FriezePattern([1,2,1,2,3,1]).is_skew()
233
+ False
234
+
235
+ sage: path_tableaux.FriezePattern([2,2,1,2,3,1]).is_skew()
236
+ True
237
+ """
238
+ return self[1] != 1
239
+
240
+ def width(self):
241
+ r"""
242
+ Return the width of ``self``.
243
+
244
+ If the first and last terms of ``self`` are 1 then this is the
245
+ length of ``self`` plus two and otherwise is undefined.
246
+
247
+ EXAMPLES::
248
+
249
+ sage: path_tableaux.FriezePattern([1,2,1,2,3,1]).width()
250
+ 8
251
+
252
+ sage: path_tableaux.FriezePattern([1,2,1,2,3,4]).width() is None
253
+ True
254
+ """
255
+ if self[1] == 1 and self[-2] == 1:
256
+ return len(self)
257
+ else:
258
+ return None
259
+
260
+ def is_positive(self):
261
+ r"""
262
+ Return ``True`` if all elements of ``self`` are positive.
263
+
264
+ This implies that all entries of ``CylindricalDiagram(self)``
265
+ are positive.
266
+
267
+ .. WARNING::
268
+
269
+ There are orders on all fields. These may not be ordered fields
270
+ as they may not be compatible with the field operations. This
271
+ method is intended to be used with ordered fields only.
272
+
273
+ EXAMPLES::
274
+
275
+ sage: path_tableaux.FriezePattern([1,2,7,5,3,7,4,1]).is_positive()
276
+ True
277
+
278
+ sage: path_tableaux.FriezePattern([1,-3,4,5,1]).is_positive()
279
+ False
280
+
281
+ sage: x = polygen(ZZ, 'x')
282
+ sage: K.<sqrt3> = NumberField(x^2 - 3) # needs sage.rings.number_field
283
+ sage: path_tableaux.FriezePattern([1,sqrt3,1], K).is_positive() # needs sage.rings.number_field
284
+ True
285
+ """
286
+ return all(a > 0 for a in self[1:-1])
287
+
288
+ def is_integral(self):
289
+ r"""
290
+ Return ``True`` if all entries of the frieze pattern are
291
+ positive integers.
292
+
293
+ EXAMPLES::
294
+
295
+ sage: path_tableaux.FriezePattern([1,2,7,5,3,7,4,1]).is_integral()
296
+ True
297
+
298
+ sage: path_tableaux.FriezePattern([1,3,4,5,1]).is_integral()
299
+ False
300
+ """
301
+ n = len(self)
302
+ cd = CylindricalDiagram(self).diagram
303
+ return all(k in ZZ for i, a in enumerate(cd)
304
+ for k in a[i + 1:n + i - 2])
305
+
306
+ def triangulation(self):
307
+ r"""
308
+ Plot a regular polygon with some diagonals.
309
+
310
+ If ``self`` is positive and integral then this will be a triangulation.
311
+
312
+ .. PLOT::
313
+ :width: 400 px
314
+
315
+ G = path_tableaux.FriezePattern([1,2,7,5,3,7,4,1]).triangulation()
316
+ sphinx_plot(G)
317
+
318
+ EXAMPLES::
319
+
320
+ sage: path_tableaux.FriezePattern([1,2,7,5,3,7,4,1]).triangulation() # needs sage.plot sage.symbolic
321
+ Graphics object consisting of 25 graphics primitives
322
+
323
+ sage: path_tableaux.FriezePattern([1,2,1/7,5,3]).triangulation() # needs sage.plot sage.symbolic
324
+ Graphics object consisting of 12 graphics primitives
325
+
326
+
327
+ sage: x = polygen(ZZ, 'x')
328
+ sage: K.<sqrt2> = NumberField(x^2 - 2) # needs sage.rings.number_field
329
+ sage: path_tableaux.FriezePattern([1,sqrt2,1,sqrt2,3,2*sqrt2,5,3*sqrt2,1], # needs sage.plot sage.rings.number_field sage.symbolic
330
+ ....: field=K).triangulation()
331
+ Graphics object consisting of 24 graphics primitives
332
+ """
333
+ n = len(self)-1
334
+ cd = CylindricalDiagram(self).diagram
335
+ from sage.plot.plot import Graphics
336
+ from sage.plot.line import line
337
+ from sage.plot.text import text
338
+ from sage.functions.trig import sin, cos
339
+ from sage.symbolic.constants import pi
340
+ G = Graphics()
341
+ G.set_aspect_ratio(1.0)
342
+
343
+ vt = [(cos(2*theta*pi/(n)), sin(2*theta*pi/(n)))
344
+ for theta in range(n+1)]
345
+ for i, p in enumerate(vt):
346
+ G += text(str(i), [1.05*p[0], 1.05*p[1]])
347
+
348
+ for i, r in enumerate(cd):
349
+ for j, a in enumerate(r[:n]):
350
+ if a == 1:
351
+ G += line([vt[i], vt[j]])
352
+
353
+ G.axes(False)
354
+ return G
355
+
356
+ def plot(self, model='UHP'):
357
+ r"""
358
+ Plot the frieze as an ideal hyperbolic polygon.
359
+
360
+ This is only defined up to isometry of the hyperbolic plane.
361
+
362
+ We are identifying the boundary of the hyperbolic plane with the
363
+ real projective line.
364
+
365
+ The option ``model`` must be one of
366
+
367
+ * ``'UHP'`` -- (default) for the upper half plane model
368
+ * ``'PD'`` -- for the Poincare disk model
369
+ * ``'KM'`` -- for the Klein model
370
+
371
+ The hyperboloid model is not an option as this does not implement
372
+ boundary points.
373
+
374
+ .. PLOT::
375
+ :width: 400 px
376
+
377
+ t = path_tableaux.FriezePattern([1,2,7,5,3,7,4,1])
378
+ sphinx_plot(t.plot())
379
+
380
+ EXAMPLES::
381
+
382
+ sage: # needs sage.plot sage.symbolic
383
+ sage: t = path_tableaux.FriezePattern([1,2,7,5,3,7,4,1])
384
+ sage: t.plot()
385
+ Graphics object consisting of 18 graphics primitives
386
+ sage: t.plot(model='UHP')
387
+ Graphics object consisting of 18 graphics primitives
388
+ sage: t.plot(model='PD')
389
+ Traceback (most recent call last):
390
+ ...
391
+ TypeError: '>' not supported between instances of 'NotANumber' and 'Pi'
392
+ sage: t.plot(model='KM')
393
+ Graphics object consisting of 18 graphics primitives
394
+ """
395
+ from sage.geometry.hyperbolic_space.hyperbolic_interface import HyperbolicPlane
396
+ from sage.plot.plot import Graphics
397
+ models = {
398
+ 'UHP': HyperbolicPlane().UHP(),
399
+ 'PD': HyperbolicPlane().PD(),
400
+ 'KM': HyperbolicPlane().KM(),
401
+ }
402
+ if model not in models:
403
+ raise ValueError(f"{model} must be one of ``UHP``, ``PD``, ``KM``")
404
+ M = models[model]
405
+
406
+ U = HyperbolicPlane().UHP()
407
+ cd = CylindricalDiagram(self).diagram
408
+ num = cd[0][:-1]
409
+ den = cd[1][2:]
410
+ vt = [M(U.get_point(x / (x+y))) for x, y in zip(num, den)]
411
+ gd = [M.get_geodesic(vt[i-1], vt[i]) for i in range(len(vt))]
412
+ return sum([a.plot() for a in gd], Graphics()).plot()
413
+
414
+ def change_ring(self, R):
415
+ r"""
416
+ Return ``self`` as a frieze pattern with coefficients in ``R``.
417
+
418
+ This assumes that there is a canonical coerce map from the base ring of ``self``
419
+ to ``R``.
420
+
421
+ EXAMPLES::
422
+
423
+ sage: fp = path_tableaux.FriezePattern([1,2,7,5,3,7,4,1])
424
+ sage: fp.change_ring(RealField()) # needs sage.rings.real_mpfr
425
+ [0.000000000000000, 1.00000000000000, ...
426
+ 4.00000000000000, 1.00000000000000, 0.000000000000000]
427
+ sage: fp.change_ring(GF(7))
428
+ Traceback (most recent call last):
429
+ ...
430
+ TypeError: no base extension defined
431
+ """
432
+ if R.has_coerce_map_from(self.parent().base_ring()):
433
+ return FriezePattern(list(self), field=R)
434
+ else:
435
+ raise TypeError("no base extension defined")
436
+
437
+
438
+ class FriezePatterns(PathTableaux):
439
+ """
440
+ The set of all frieze patterns.
441
+
442
+ EXAMPLES::
443
+
444
+ sage: P = path_tableaux.FriezePatterns(QQ)
445
+ sage: fp = P((1, 1, 1))
446
+ sage: fp
447
+ [1]
448
+ sage: path_tableaux.CylindricalDiagram(fp)
449
+ [1, 1, 1]
450
+ [ , 1, 2, 1]
451
+ [ , , 1, 1, 1]
452
+ """
453
+
454
+ def __init__(self, field):
455
+ r"""
456
+ Initialize ``self``.
457
+
458
+ TESTS::
459
+
460
+ sage: P = path_tableaux.FriezePatterns(QQ)
461
+ sage: TestSuite(P).run()
462
+ """
463
+ Parent.__init__(self, base=field, category=Sets())
464
+
465
+ def _an_element_(self):
466
+ """
467
+ Return an element of ``self``.
468
+
469
+ EXAMPLES::
470
+
471
+ sage: path_tableaux.FriezePatterns(QQ)._an_element_()
472
+ [1, 1, 1]
473
+ """
474
+ return FriezePattern((1, 1, 1))
475
+
476
+ Element = FriezePattern