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,236 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.modules
3
+ """
4
+ Lie Conformal Algebra Element
5
+
6
+ AUTHORS:
7
+
8
+ - Reimundo Heluani (2019-08-09): Initial implementation.
9
+ """
10
+ # *****************************************************************************
11
+ # Copyright (C) 2019 Reimundo Heluani <heluani@potuz.net>
12
+ #
13
+ # This program is free software: you can redistribute it and/or modify
14
+ # it under the terms of the GNU General Public License as published by
15
+ # the Free Software Foundation, either version 2 of the License, or
16
+ # (at your option) any later version.
17
+ # https://www.gnu.org/licenses/
18
+ # ****************************************************************************
19
+ from sage.arith.misc import factorial
20
+ from sage.misc.misc_c import prod
21
+ from sage.misc.repr import repr_lincomb
22
+ from sage.misc.latex import latex
23
+ from sage.modules.with_basis.indexed_element import IndexedFreeModuleElement
24
+
25
+
26
+ class LCAWithGeneratorsElement(IndexedFreeModuleElement):
27
+ """
28
+ The element class of a Lie conformal algebra with a
29
+ preferred set of generators.
30
+ """
31
+ def T(self, n=1):
32
+ r"""
33
+ The `n`-th derivative of this element.
34
+
35
+ INPUT:
36
+
37
+ - ``n`` -- nonnegative integer (default: `1`); how many
38
+ times to apply `T` to this element
39
+
40
+ We use the *divided powers* notation
41
+ `T^{(j)} = \frac{T^j}{j!}`.
42
+
43
+ EXAMPLES::
44
+
45
+ sage: Vir = lie_conformal_algebras.Virasoro(QQ)
46
+ sage: Vir.inject_variables()
47
+ Defining L, C
48
+ sage: L.T()
49
+ TL
50
+ sage: L.T(3)
51
+ 6*T^(3)L
52
+ sage: C.T()
53
+ 0
54
+
55
+ sage: R = lie_conformal_algebras.NeveuSchwarz(QQbar); R.inject_variables()
56
+ Defining L, G, C
57
+ sage: (L + 2*G.T() + 4*C).T(2)
58
+ 2*T^(2)L + 12*T^(3)G
59
+ """
60
+ from sage.rings.integer_ring import ZZ
61
+ if n not in ZZ or n < 0:
62
+ raise ValueError("n must be a nonnegative Integer")
63
+ if n == 0 or self.is_zero():
64
+ return self
65
+ # it's faster to sum than to use recursion
66
+ if self.is_monomial():
67
+ p = self.parent()
68
+ a, m = self.index()
69
+ coef = self._monomial_coefficients[(a, m)]
70
+ if (a, m + n) in p._indices:
71
+ return coef * prod(range(m + 1, m + n + 1))\
72
+ * p.monomial((a, m + n))
73
+ else:
74
+ return p.zero()
75
+ return sum(mon.T(n) for mon in self.terms())
76
+
77
+ def is_monomial(self):
78
+ """
79
+ Whether this element is a monomial.
80
+
81
+ EXAMPLES::
82
+
83
+ sage: Vir = lie_conformal_algebras.Virasoro(QQ); L = Vir.0
84
+ sage: (L + L.T()).is_monomial()
85
+ False
86
+ sage: L.T().is_monomial()
87
+ True
88
+ """
89
+ return len(self._monomial_coefficients) == 1 or self.is_zero()
90
+
91
+
92
+ class LCAStructureCoefficientsElement(LCAWithGeneratorsElement):
93
+ """
94
+ An element of a Lie conformal algebra given by structure
95
+ coefficients.
96
+ """
97
+ def _bracket_(self, right):
98
+ """
99
+ The lambda bracket of these two elements.
100
+
101
+ The result is a dictionary with nonnegative integer keys.
102
+ The value corresponding to the entry `j` is ``self_{(j)}right``.
103
+
104
+ EXAMPLES::
105
+
106
+ sage: Vir = lie_conformal_algebras.Virasoro(QQ); L = Vir.0
107
+ sage: L.bracket(L)
108
+ {0: TL, 1: 2*L, 3: 1/2*C}
109
+ sage: L.T().bracket(L)
110
+ {1: -TL, 2: -4*L, 4: -2*C}
111
+
112
+ sage: R = lie_conformal_algebras.Affine(QQbar, 'A1', names=('e','h','f')); R
113
+ The affine Lie conformal algebra of type ['A', 1] over Algebraic Field
114
+ sage: R.inject_variables()
115
+ Defining e, h, f, K
116
+ sage: e.bracket(f)
117
+ {0: h, 1: K}
118
+ sage: h.bracket(h.T())
119
+ {2: 4*K}
120
+ """
121
+ p = self.parent()
122
+ if self.is_monomial() and right.is_monomial():
123
+ if self.is_zero() or right.is_zero():
124
+ return {}
125
+ s_coeff = p._s_coeff
126
+ a, k = self.index()
127
+ coefa = self.monomial_coefficients()[(a, k)]
128
+ b, m = right.index()
129
+ coefb = right.monomial_coefficients()[(b, m)]
130
+ try:
131
+ mbr = dict(s_coeff[(a, b)])
132
+ except KeyError:
133
+ return {}
134
+ pole = max(mbr.keys())
135
+ ret = {l: coefa * coefb * (-1)**k / factorial(k) *
136
+ sum(factorial(l) / factorial(m + k + j - l)
137
+ / factorial(l - k - j) / factorial(j)
138
+ * mbr[j].T(m + k + j - l)
139
+ for j in mbr if l - m - k <= j <= l - k)
140
+ for l in range(m + k + pole + 1)}
141
+ return {k: v for k, v in ret.items() if v}
142
+
143
+ diclist = [i._bracket_(j) for i in self.terms()
144
+ for j in right.terms()]
145
+ ret = {}
146
+ pz = p.zero()
147
+ for d in diclist:
148
+ for k in d:
149
+ ret[k] = ret.get(k, pz) + d[k]
150
+ return {k: v for k, v in ret.items() if v}
151
+
152
+ def _repr_(self):
153
+ r"""
154
+ A visual representation of this element.
155
+
156
+ For a free generator `L`, the element `\frac{T^{j}}{j!}L` is
157
+ denoted by ``T^(j)L``.
158
+
159
+ EXAMPLES::
160
+
161
+ sage: V = lie_conformal_algebras.Virasoro(QQ); V.inject_variables()
162
+ Defining L, C
163
+ sage: v = L.T(5).nproduct(L,6); v
164
+ -1440*L
165
+ sage: L.T(2) + L + C
166
+ 2*T^(2)L + L + C
167
+ sage: L.T(4)
168
+ 24*T^(4)L
169
+
170
+ sage: R = lie_conformal_algebras.Affine(QQ, 'B3')
171
+ sage: R.2.T()+3*R.3
172
+ TB[alpha[1]] + 3*B[alpha[2] + alpha[3]]
173
+ """
174
+ if self.is_zero():
175
+ return "0"
176
+ p = self.parent()
177
+ if p._names:
178
+ terms = [("T^({}){}".format(k1, p._names[p._index_to_pos[k0]]), v) if k1 > 1
179
+ else ("T{}".format(p._names[p._index_to_pos[k0]]), v) if k1 == 1
180
+ else ("{}".format(p._names[p._index_to_pos[k0]]), v)
181
+ for (k0, k1), v in self.monomial_coefficients().items()]
182
+ else:
183
+ terms = [("T^({}){}".format(k1, p._repr_generator(k0)), v) if k1 > 1
184
+ else ("T{}".format(p._repr_generator(k0)), v) if k1 == 1
185
+ else ("{}".format(p._repr_generator(k0)), v)
186
+ for (k0, k1), v in self.monomial_coefficients().items()]
187
+
188
+ return repr_lincomb(terms, strip_one=True)
189
+
190
+ def _latex_(self):
191
+ r"""
192
+ A visual representation of this element.
193
+
194
+ For a free generator `L`, the element `\frac{T^{j}}{j!}L` is
195
+ denoted by ``T^(j)L``.
196
+
197
+ EXAMPLES::
198
+
199
+ sage: V = lie_conformal_algebras.Virasoro(QQ); V.inject_variables()
200
+ Defining L, C
201
+ sage: latex(L.T(2))
202
+ 2 T^{(2)}L
203
+
204
+ sage: R = lie_conformal_algebras.Affine(QQbar, 'A1', names=('e','h','f')); R.inject_variables()
205
+ Defining e, h, f, K
206
+ sage: latex(e.bracket(f))
207
+ \left\{0 : h, 1 : K\right\}
208
+ sage: latex(e.T(3))
209
+ 6 T^{(3)}e
210
+
211
+ sage: R = lie_conformal_algebras.Affine(QQbar, 'A1')
212
+ sage: latex(R.0.bracket(R.2))
213
+ \left\{0 : \alpha^\vee_{1}, 1 : \text{\texttt{K}}\right\}
214
+
215
+ sage: R = lie_conformal_algebras.Affine(QQ, 'A1'); latex(R.0.T(3))
216
+ 6 T^{(3)}\alpha_{1}
217
+ """
218
+ if self.is_zero():
219
+ return "0"
220
+ p = self.parent()
221
+ try:
222
+ names = p.latex_variable_names()
223
+ except ValueError:
224
+ names = None
225
+ if names:
226
+ terms = [("T^{{({})}}{}".format(k1, names[p._index_to_pos[k0]]), v) if k1 > 1
227
+ else ("T{}".format(names[p._index_to_pos[k0]]), v) if k1 == 1
228
+ else ("{}".format(names[p._index_to_pos[k0]]), v)
229
+ for (k0, k1), v in self.monomial_coefficients().items()]
230
+ else:
231
+ terms = [("T^{{({})}}{}".format(k1, latex(k0)), v) if k1 > 1
232
+ else ("T{}".format(latex(k0)), v) if k1 == 1
233
+ else ("{}".format(latex(k0)), v)
234
+ for (k0, k1), v in self.monomial_coefficients().items()]
235
+
236
+ return repr_lincomb(terms, is_latex=True, strip_one=True)
@@ -0,0 +1,78 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.modules
3
+ """
4
+ Lie Conformal Algebras With Basis
5
+
6
+ AUTHORS:
7
+
8
+ - Reimundo Heluani (2019-08-09): Initial implementation
9
+ """
10
+
11
+ #******************************************************************************
12
+ # Copyright (C) 2019 Reimundo Heluani <heluani@potuz.net>
13
+ #
14
+ # This program is free software: you can redistribute it and/or modify
15
+ # it under the terms of the GNU General Public License as published by
16
+ # the Free Software Foundation, either version 2 of the License, or
17
+ # (at your option) any later version.
18
+ # http://www.gnu.org/licenses/
19
+ #*****************************************************************************
20
+
21
+ from sage.categories.lie_conformal_algebras import LieConformalAlgebras
22
+ from sage.combinat.free_module import CombinatorialFreeModule
23
+
24
+
25
+ class LieConformalAlgebraWithBasis(CombinatorialFreeModule):
26
+ """
27
+ Abstract base class for a Lie conformal algebra with a
28
+ preferred basis.
29
+
30
+ This class provides no functionality, it simply passes the
31
+ arguments to :class:`CombinatorialFreeModule`.
32
+
33
+ EXAMPLES::
34
+
35
+ sage: R = lie_conformal_algebras.Virasoro(QQbar);R
36
+ The Virasoro Lie conformal algebra over Algebraic Field
37
+
38
+ TESTS::
39
+
40
+ sage: R = lie_conformal_algebras.Virasoro(QQ)
41
+ sage: R.0
42
+ L
43
+ sage: R._repr_generator(R.0)
44
+ 'L'
45
+ sage: R = lie_conformal_algebras.Affine(QQ, 'A1')
46
+ sage: R.0
47
+ B[alpha[1]]
48
+ sage: R._repr_generator(R.0)
49
+ 'B[alpha[1]]'
50
+ sage: R = lie_conformal_algebras.Affine(QQ, 'A1', names = ('e', 'h','f'))
51
+ sage: R.0
52
+ e
53
+ sage: R._repr_generator(R.0)
54
+ 'e'
55
+ """
56
+ def __init__(self, R, basis_keys=None, element_class=None, category=None,
57
+ prefix=None, **kwds):
58
+ """
59
+ Initialize ``self``.
60
+
61
+ TESTS::
62
+
63
+ sage: V = lie_conformal_algebras.Affine(QQ,'A1')
64
+ sage: TestSuite(V).run()
65
+ """
66
+ if prefix is None:
67
+ prefix = ''
68
+ kwds['bracket'] = ''
69
+ kwds['string_quotes'] = False
70
+
71
+ default_category = LieConformalAlgebras(R).WithBasis()
72
+ try:
73
+ category = default_category.or_subcategory(category)
74
+ except ValueError:
75
+ category = default_category.Super().or_subcategory(category)
76
+
77
+ super().__init__(R, basis_keys=basis_keys, element_class=element_class,
78
+ category=category, prefix=prefix, names=None, **kwds)
@@ -0,0 +1,328 @@
1
+ # sage_setup: distribution = sagemath-combinat
2
+ # sage.doctest: needs sage.combinat sage.modules
3
+ """
4
+ Lie Conformal Algebras With Structure Coefficients
5
+
6
+ AUTHORS:
7
+
8
+ - Reimundo Heluani (2019-08-09): Initial implementation.
9
+ """
10
+
11
+ # *****************************************************************************
12
+ # Copyright (C) 2019 Reimundo Heluani <heluani@potuz.net>
13
+ #
14
+ # This program is free software: you can redistribute it and/or modify
15
+ # it under the terms of the GNU General Public License as published by
16
+ # the Free Software Foundation, either version 2 of the License, or
17
+ # (at your option) any later version.
18
+ # https://www.gnu.org/licenses/
19
+ # ****************************************************************************
20
+
21
+ from sage.arith.misc import binomial
22
+ from sage.sets.family import Family
23
+ from .lie_conformal_algebra_element import LCAStructureCoefficientsElement
24
+ from sage.categories.lie_conformal_algebras import LieConformalAlgebras
25
+ from .finitely_freely_generated_lca import FinitelyFreelyGeneratedLCA
26
+ from sage.sets.disjoint_union_enumerated_sets import DisjointUnionEnumeratedSets
27
+ from sage.structure.indexed_generators import (IndexedGenerators,
28
+ standardize_names_index_set)
29
+
30
+
31
+ class LieConformalAlgebraWithStructureCoefficients(
32
+ FinitelyFreelyGeneratedLCA):
33
+ r"""
34
+ A Lie conformal algebra with a set of specified structure
35
+ coefficients.
36
+
37
+ INPUT:
38
+
39
+ - ``R`` -- a ring (default: ``None``); the base ring of this Lie
40
+ conformal algebra. Behaviour is undefined if it is not a field
41
+ of characteristic zero.
42
+
43
+ - ``s_coeff`` -- dictionary (default: ``None``);
44
+ a dictionary containing the `\lambda` brackets of the
45
+ generators of this Lie conformal algebra. The family encodes a
46
+ dictionary whose keys
47
+ are pairs of either names or indices of the generators
48
+ and the values are themselves dictionaries. For a pair of
49
+ generators `a` and `b`, the value of ``s_coeff[('a','b')]`` is
50
+ a dictionary whose keys are positive integer numbers and the
51
+ corresponding value for the key `j` is a dictionary itself
52
+ representing the `j`-th product `a_{(j)}b`.
53
+ Thus, for a positive integer number `j`, the value of
54
+ ``s_coeff[('a','b')][j]`` is a dictionary whose entries are
55
+ pairs ``('c',n)`` where ``'c'`` is the name of a generator
56
+ and `n` is a positive number. The value for this key is the
57
+ coefficient of `\frac{T^{n}}{n!} c` in `a_{(j)}b`. For example
58
+ the ``s_coeff`` for the *Virasoro* Lie conformal algebra is::
59
+
60
+ {('L','L'):{0:{('L',1):1}, 1:{('L',0):2}, 3:{('C',0):1/2}}}
61
+
62
+
63
+ Do not include central elements in this dictionary. Also, if
64
+ the key ``('a','b')`` is present, there is no need to include
65
+ ``('b','a')`` as it is defined by skew-symmetry.
66
+ Any missing pair (besides the ones
67
+ defined by skew-symmetry) is assumed to have vanishing
68
+ `\lambda`-bracket.
69
+
70
+ - ``names`` -- tuple of strings (default: ``None``); the list of
71
+ names for generators of this Lie conformal algebra. Do not
72
+ include central elements in this list.
73
+
74
+ - ``central_elements`` -- tuple of strings (default: ``None``);
75
+ a list of names for central elements of this Lie conformal algebra
76
+
77
+ - ``index_set`` -- enumerated set (default: ``None``);
78
+ an indexing set for the generators of this Lie
79
+ conformal algebra. Do not include central elements in this
80
+ list.
81
+
82
+ - ``parity`` -- tuple of `0` or `1` (default: tuple of `0`);
83
+ a tuple specifying the parity of each non-central generator
84
+
85
+ EXAMPLES:
86
+
87
+ - We construct the `\beta-\gamma` system by directly giving the
88
+ `\lambda`-brackets of the generators::
89
+
90
+ sage: betagamma_dict = {('b','a'):{0:{('K',0):1}}}
91
+ sage: V = LieConformalAlgebra(QQ, betagamma_dict, names=('a','b'),
92
+ ....: weights=(1,0), central_elements=('K',))
93
+ sage: V.category()
94
+ Category of H-graded finitely generated Lie conformal algebras
95
+ with basis over Rational Field
96
+ sage: V.inject_variables()
97
+ Defining a, b, K
98
+ sage: a.bracket(b)
99
+ {0: -K}
100
+
101
+ - We construct the centerless Virasoro Lie conformal algebra::
102
+
103
+ sage: virdict = {('L','L'):{0:{('L',1):1}, 1:{('L',0): 2}}}
104
+ sage: R = LieConformalAlgebra(QQbar, virdict, names='L')
105
+ sage: R.inject_variables()
106
+ Defining L
107
+ sage: L.bracket(L)
108
+ {0: TL, 1: 2*L}
109
+
110
+ - The construction checks that skew-symmetry is violated::
111
+
112
+ sage: wrongdict = {('L','L'):{0:{('L',1):2}, 1:{('L',0): 2}}}
113
+ sage: LieConformalAlgebra(QQbar, wrongdict, names='L')
114
+ Traceback (most recent call last):
115
+ ...
116
+ ValueError: two distinct values given for one and the same bracket. Skew-symmetry is not satisfied?
117
+ """
118
+ @staticmethod
119
+ def _standardize_s_coeff(s_coeff, index_set, ce, parity=None):
120
+ """
121
+ Convert an input dictionary to structure constants of this
122
+ Lie conformal algebra.
123
+
124
+ INPUT:
125
+
126
+ - ``s_coeff`` -- dictionary as in
127
+ :class:`~sage.algebras.lie_conformal_algebras.lie_conformal_algebra_with_structure_coefficients.LieConformalAlgebraWithStructureCoefficients`
128
+ - ``index_set`` -- a finite enumerated set indexing the
129
+ generators (not counting the central elements).
130
+ - ``ce`` -- tuple of strings; a list of names for the central
131
+ generators of this Lie conformal algebra
132
+ - ``parity`` -- tuple of `0` or `1` (default: tuple of `0`);
133
+ this tuple specifies the parity of each non-central generator
134
+
135
+ OUTPUT:
136
+
137
+ A finite Family representing ``s_coeff`` in the input.
138
+ It contains superfluous information that can be obtained by
139
+ skew-symmetry but that improves speed in computing OPE for
140
+ vertex algebras.
141
+
142
+ EXAMPLES::
143
+
144
+ sage: virdict = {('L','L'):{0:{('L',1):1}, 1:{('L',0): 2},3:{('C', 0):1/2}}}
145
+ sage: Vir = lie_conformal_algebras.Virasoro(QQ)
146
+ sage: Vir._standardize_s_coeff(virdict, Family(('L',)), ('C',))
147
+ Finite family {('L', 'L'): ((0, ((('L', 1), 1),)), (1, ((('L', 0), 2),)), (3, ((('C', 0), 1/2),)))}
148
+ """
149
+ if parity is None:
150
+ parity = (0,) * index_set.cardinality()
151
+ index_to_parity = dict(zip(index_set, parity))
152
+ sc = {}
153
+ # mypair has a pair of generators
154
+ for mypair, v in s_coeff.items():
155
+ # e.g. v = { 0: { (L,2):3, (G,3):1}, 1:{(L,1),2} }
156
+ key = tuple(mypair)
157
+ vals = {}
158
+ for l in v:
159
+ lth_product = {k: y for k, y in v[l].items() if y}
160
+ if lth_product:
161
+ vals[l] = lth_product
162
+
163
+ myvals = tuple((k, tuple(v.items())) for k, v in vals.items() if v)
164
+
165
+ if key in sc and sorted(sc[key]) != sorted(myvals):
166
+ raise ValueError("two distinct values given for one "
167
+ "and the same bracket, skew-symmetry"
168
+ "is not satisfied?")
169
+ if myvals:
170
+ sc[key] = myvals
171
+
172
+ # We now add the skew-symmetric part to optimize
173
+ # brackets computations later
174
+ key = (mypair[1], mypair[0])
175
+ if index_to_parity[mypair[0]]*index_to_parity[mypair[1]]:
176
+ parsgn = -1
177
+ else:
178
+ parsgn = 1
179
+ maxpole = max(v)
180
+ vals = {}
181
+ for k in range(maxpole+1):
182
+ kth_product = {}
183
+ for j in range(maxpole+1-k):
184
+ if k+j in v.keys():
185
+ for i in v[k+j]:
186
+ if (i[0] not in ce) or (
187
+ i[0] in ce and i[1] + j == 0):
188
+ kth_product[(i[0], i[1] + j)] = \
189
+ kth_product.get((i[0], i[1] + j), 0)
190
+ kth_product[(i[0], i[1] + j)] += parsgn *\
191
+ v[k+j][i]*(-1)**(k+j+1)*binomial(i[1]+j, j)
192
+ kth_product = {k: v for k, v in kth_product.items() if v}
193
+ if kth_product:
194
+ vals[k] = kth_product
195
+
196
+ myvals = tuple((k, tuple(v.items())) for k, v in vals.items() if v)
197
+
198
+ if key in sc and sorted(sc[key]) != sorted(myvals):
199
+ raise ValueError("two distinct values given for one "
200
+ "and the same bracket. "
201
+ "Skew-symmetry is not satisfied?")
202
+ if myvals:
203
+ sc[key] = myvals
204
+ return Family(sc)
205
+
206
+ def __init__(self, R, s_coeff, index_set=None, central_elements=None,
207
+ category=None, element_class=None, prefix=None, names=None,
208
+ latex_names=None, parity=None, **kwds):
209
+ """
210
+ Initialize ``self``.
211
+
212
+ TESTS::
213
+
214
+ sage: V = lie_conformal_algebras.NeveuSchwarz(QQ)
215
+ sage: TestSuite(V).run()
216
+ """
217
+ names, index_set = standardize_names_index_set(names, index_set)
218
+ if central_elements is None:
219
+ central_elements = ()
220
+
221
+ if names is not None and names != tuple(index_set):
222
+ names2 = names + tuple(central_elements)
223
+ index_set2 = DisjointUnionEnumeratedSets((index_set,
224
+ Family(tuple(central_elements))))
225
+ d = {x: index_set2[i] for i, x in enumerate(names2)}
226
+ try:
227
+ # If we are given a dictionary with names as keys,
228
+ # convert to index_set as keys
229
+ s_coeff = {(d[k[0]], d[k[1]]):
230
+ {a: {(d[x[1]], x[2]): sck[a][x] for x in sck[a]}
231
+ for a in s_coeff[k]}
232
+ for k, sck in s_coeff.items()}
233
+
234
+ except KeyError:
235
+ # We assume the dictionary was given with keys in the
236
+ # index_set
237
+ pass
238
+
239
+ issuper = kwds.pop('super', False)
240
+ if parity is None:
241
+ parity = (0,) * index_set.cardinality()
242
+ else:
243
+ issuper = True
244
+
245
+ try:
246
+ assert len(parity) == index_set.cardinality()
247
+ except AssertionError:
248
+ raise ValueError("parity should have the same length as the "
249
+ f"number of generators, got {parity}")
250
+
251
+ s_coeff = LieConformalAlgebraWithStructureCoefficients\
252
+ ._standardize_s_coeff(s_coeff, index_set, central_elements,
253
+ parity)
254
+
255
+ if names is not None and central_elements is not None:
256
+ names += tuple(central_elements)
257
+
258
+ self._index_to_pos = {k: i for i, k in enumerate(index_set)}
259
+ # Add central parameters to index_to_pos so that we can
260
+ # represent names
261
+ if central_elements is not None:
262
+ for i, ce in enumerate(central_elements):
263
+ self._index_to_pos[ce] = len(index_set) + i
264
+
265
+ default_category = LieConformalAlgebras(R).WithBasis().FinitelyGenerated()
266
+ if issuper:
267
+ category = default_category.Super().or_subcategory(category)
268
+ else:
269
+ category = default_category.or_subcategory(category)
270
+
271
+ if element_class is None:
272
+ element_class = LCAStructureCoefficientsElement
273
+
274
+ FinitelyFreelyGeneratedLCA.__init__(
275
+ self, R, index_set=index_set, central_elements=central_elements,
276
+ category=category, element_class=element_class,
277
+ prefix=prefix, names=names, latex_names=latex_names, **kwds)
278
+
279
+ s_coeff = dict(s_coeff)
280
+ self._s_coeff = Family({k:
281
+ tuple((j, sum(c * self.monomial(i)
282
+ for i, c in v)) for j, v in sck)
283
+ for k, sck in s_coeff.items()})
284
+ self._parity = dict(zip(self.gens(),
285
+ parity + (0,) * len(central_elements)))
286
+
287
+ def structure_coefficients(self):
288
+ """
289
+ The structure coefficients of this Lie conformal algebra.
290
+
291
+ EXAMPLES::
292
+
293
+ sage: Vir = lie_conformal_algebras.Virasoro(AA)
294
+ sage: Vir.structure_coefficients()
295
+ Finite family {('L', 'L'): ((0, TL), (1, 2*L), (3, 1/2*C))}
296
+
297
+ sage: lie_conformal_algebras.NeveuSchwarz(QQ).structure_coefficients()
298
+ Finite family {('G', 'G'): ((0, 2*L), (2, 2/3*C)),
299
+ ('G', 'L'): ((0, 1/2*TG), (1, 3/2*G)),
300
+ ('L', 'G'): ((0, TG), (1, 3/2*G)),
301
+ ('L', 'L'): ((0, TL), (1, 2*L), (3, 1/2*C))}
302
+ """
303
+ return self._s_coeff
304
+
305
+ def _repr_generator(self, x) -> str:
306
+ """
307
+ String representation of the generator ``x``.
308
+
309
+ INPUT:
310
+
311
+ - ``x`` -- an index parametrizing a generator or a generator of
312
+ this Lie conformal algebra
313
+
314
+ EXAMPLES::
315
+
316
+ sage: Vir = lie_conformal_algebras.Virasoro(QQbar)
317
+ sage: Vir._repr_generator(Vir.0)
318
+ 'L'
319
+ sage: R = lie_conformal_algebras.Affine(QQ, 'A1')
320
+ sage: R._repr_generator(R.0)
321
+ 'B[alpha[1]]'
322
+ sage: R = lie_conformal_algebras.Affine(QQ, 'A1', names=('e','h','f'))
323
+ sage: R._repr_generator(R.0)
324
+ 'e'
325
+ """
326
+ if x in self:
327
+ return repr(x)
328
+ return IndexedGenerators._repr_generator(self, x)