passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_aarch64.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.

Potentially problematic release.


This version of passagemath-modules might be problematic. Click here for more details.

Files changed (807) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +807 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +5 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgcc_s-2d945d6c.so.1 +0 -0
  6. passagemath_modules.libs/libgfortran-67378ab2.so.5.0.0 +0 -0
  7. passagemath_modules.libs/libgmp-28992bcb.so.10.5.0 +0 -0
  8. passagemath_modules.libs/libgsl-23768756.so.28.0.0 +0 -0
  9. passagemath_modules.libs/libmpc-7897025b.so.3.3.1 +0 -0
  10. passagemath_modules.libs/libmpfr-e34bb864.so.6.2.1 +0 -0
  11. passagemath_modules.libs/libopenblasp-r0-503f0c35.3.29.so +0 -0
  12. sage/algebras/all__sagemath_modules.py +20 -0
  13. sage/algebras/catalog.py +148 -0
  14. sage/algebras/clifford_algebra.py +3107 -0
  15. sage/algebras/clifford_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  16. sage/algebras/clifford_algebra_element.pxd +16 -0
  17. sage/algebras/clifford_algebra_element.pyx +997 -0
  18. sage/algebras/commutative_dga.py +4252 -0
  19. sage/algebras/exterior_algebra_groebner.cpython-314-aarch64-linux-musl.so +0 -0
  20. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  21. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  22. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  23. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  29. sage/algebras/finite_gca.py +528 -0
  30. sage/algebras/group_algebra.py +232 -0
  31. sage/algebras/lie_algebras/abelian.py +197 -0
  32. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  33. sage/algebras/lie_algebras/all.py +25 -0
  34. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  35. sage/algebras/lie_algebras/bch.py +177 -0
  36. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  37. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  38. sage/algebras/lie_algebras/center_uea.py +767 -0
  39. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  40. sage/algebras/lie_algebras/examples.py +683 -0
  41. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  42. sage/algebras/lie_algebras/heisenberg.py +820 -0
  43. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  44. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  47. sage/algebras/lie_algebras/morphism.py +661 -0
  48. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  49. sage/algebras/lie_algebras/onsager.py +1324 -0
  50. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  51. sage/algebras/lie_algebras/quotient.py +462 -0
  52. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  53. sage/algebras/lie_algebras/representation.py +1040 -0
  54. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  55. sage/algebras/lie_algebras/subalgebra.py +967 -0
  56. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  57. sage/algebras/lie_algebras/verma_module.py +1630 -0
  58. sage/algebras/lie_algebras/virasoro.py +1186 -0
  59. sage/algebras/octonion_algebra.cpython-314-aarch64-linux-musl.so +0 -0
  60. sage/algebras/octonion_algebra.pxd +20 -0
  61. sage/algebras/octonion_algebra.pyx +987 -0
  62. sage/algebras/orlik_solomon.py +907 -0
  63. sage/algebras/orlik_terao.py +779 -0
  64. sage/algebras/steenrod/all.py +7 -0
  65. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  66. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  67. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  68. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  69. sage/algebras/weyl_algebra.py +1126 -0
  70. sage/all__sagemath_modules.py +62 -0
  71. sage/calculus/all__sagemath_modules.py +19 -0
  72. sage/calculus/expr.py +205 -0
  73. sage/calculus/integration.cpython-314-aarch64-linux-musl.so +0 -0
  74. sage/calculus/integration.pyx +698 -0
  75. sage/calculus/interpolation.cpython-314-aarch64-linux-musl.so +0 -0
  76. sage/calculus/interpolation.pxd +13 -0
  77. sage/calculus/interpolation.pyx +387 -0
  78. sage/calculus/interpolators.cpython-314-aarch64-linux-musl.so +0 -0
  79. sage/calculus/interpolators.pyx +326 -0
  80. sage/calculus/ode.cpython-314-aarch64-linux-musl.so +0 -0
  81. sage/calculus/ode.pxd +5 -0
  82. sage/calculus/ode.pyx +610 -0
  83. sage/calculus/riemann.cpython-314-aarch64-linux-musl.so +0 -0
  84. sage/calculus/riemann.pyx +1521 -0
  85. sage/calculus/test_sympy.py +201 -0
  86. sage/calculus/transforms/all.py +7 -0
  87. sage/calculus/transforms/dft.py +844 -0
  88. sage/calculus/transforms/dwt.cpython-314-aarch64-linux-musl.so +0 -0
  89. sage/calculus/transforms/dwt.pxd +7 -0
  90. sage/calculus/transforms/dwt.pyx +160 -0
  91. sage/calculus/transforms/fft.cpython-314-aarch64-linux-musl.so +0 -0
  92. sage/calculus/transforms/fft.pxd +12 -0
  93. sage/calculus/transforms/fft.pyx +487 -0
  94. sage/calculus/wester.py +662 -0
  95. sage/coding/abstract_code.py +1108 -0
  96. sage/coding/ag_code.py +868 -0
  97. sage/coding/ag_code_decoders.cpython-314-aarch64-linux-musl.so +0 -0
  98. sage/coding/ag_code_decoders.pyx +2639 -0
  99. sage/coding/all.py +15 -0
  100. sage/coding/bch_code.py +494 -0
  101. sage/coding/binary_code.cpython-314-aarch64-linux-musl.so +0 -0
  102. sage/coding/binary_code.pxd +124 -0
  103. sage/coding/binary_code.pyx +4139 -0
  104. sage/coding/bounds_catalog.py +43 -0
  105. sage/coding/channel.py +819 -0
  106. sage/coding/channels_catalog.py +29 -0
  107. sage/coding/code_bounds.py +755 -0
  108. sage/coding/code_constructions.py +804 -0
  109. sage/coding/codes_catalog.py +111 -0
  110. sage/coding/cyclic_code.py +1329 -0
  111. sage/coding/databases.py +316 -0
  112. sage/coding/decoder.py +373 -0
  113. sage/coding/decoders_catalog.py +88 -0
  114. sage/coding/delsarte_bounds.py +709 -0
  115. sage/coding/encoder.py +390 -0
  116. sage/coding/encoders_catalog.py +64 -0
  117. sage/coding/extended_code.py +468 -0
  118. sage/coding/gabidulin_code.py +1058 -0
  119. sage/coding/golay_code.py +404 -0
  120. sage/coding/goppa_code.py +441 -0
  121. sage/coding/grs_code.py +2371 -0
  122. sage/coding/guava.py +107 -0
  123. sage/coding/guruswami_sudan/all.py +1 -0
  124. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  125. sage/coding/guruswami_sudan/interpolation.py +409 -0
  126. sage/coding/guruswami_sudan/utils.py +176 -0
  127. sage/coding/hamming_code.py +176 -0
  128. sage/coding/information_set_decoder.py +1032 -0
  129. sage/coding/kasami_codes.cpython-314-aarch64-linux-musl.so +0 -0
  130. sage/coding/kasami_codes.pyx +351 -0
  131. sage/coding/linear_code.py +3067 -0
  132. sage/coding/linear_code_no_metric.py +1354 -0
  133. sage/coding/linear_rank_metric.py +961 -0
  134. sage/coding/parity_check_code.py +353 -0
  135. sage/coding/punctured_code.py +719 -0
  136. sage/coding/reed_muller_code.py +999 -0
  137. sage/coding/self_dual_codes.py +942 -0
  138. sage/coding/source_coding/all.py +2 -0
  139. sage/coding/source_coding/huffman.py +553 -0
  140. sage/coding/subfield_subcode.py +423 -0
  141. sage/coding/two_weight_db.py +399 -0
  142. sage/combinat/all__sagemath_modules.py +7 -0
  143. sage/combinat/cartesian_product.py +347 -0
  144. sage/combinat/family.py +11 -0
  145. sage/combinat/free_module.py +1977 -0
  146. sage/combinat/root_system/all.py +147 -0
  147. sage/combinat/root_system/ambient_space.py +527 -0
  148. sage/combinat/root_system/associahedron.py +471 -0
  149. sage/combinat/root_system/braid_move_calculator.py +143 -0
  150. sage/combinat/root_system/braid_orbit.cpython-314-aarch64-linux-musl.so +0 -0
  151. sage/combinat/root_system/braid_orbit.pyx +144 -0
  152. sage/combinat/root_system/branching_rules.py +2301 -0
  153. sage/combinat/root_system/cartan_matrix.py +1245 -0
  154. sage/combinat/root_system/cartan_type.py +3069 -0
  155. sage/combinat/root_system/coxeter_group.py +162 -0
  156. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  157. sage/combinat/root_system/coxeter_type.py +681 -0
  158. sage/combinat/root_system/dynkin_diagram.py +900 -0
  159. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  160. sage/combinat/root_system/fundamental_group.py +795 -0
  161. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  162. sage/combinat/root_system/integrable_representations.py +1227 -0
  163. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  164. sage/combinat/root_system/pieri_factors.py +1147 -0
  165. sage/combinat/root_system/plot.py +1615 -0
  166. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  167. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  168. sage/combinat/root_system/root_space.py +487 -0
  169. sage/combinat/root_system/root_system.py +882 -0
  170. sage/combinat/root_system/type_A.py +348 -0
  171. sage/combinat/root_system/type_A_affine.py +227 -0
  172. sage/combinat/root_system/type_A_infinity.py +241 -0
  173. sage/combinat/root_system/type_B.py +347 -0
  174. sage/combinat/root_system/type_BC_affine.py +287 -0
  175. sage/combinat/root_system/type_B_affine.py +216 -0
  176. sage/combinat/root_system/type_C.py +317 -0
  177. sage/combinat/root_system/type_C_affine.py +188 -0
  178. sage/combinat/root_system/type_D.py +357 -0
  179. sage/combinat/root_system/type_D_affine.py +208 -0
  180. sage/combinat/root_system/type_E.py +641 -0
  181. sage/combinat/root_system/type_E_affine.py +231 -0
  182. sage/combinat/root_system/type_F.py +387 -0
  183. sage/combinat/root_system/type_F_affine.py +137 -0
  184. sage/combinat/root_system/type_G.py +293 -0
  185. sage/combinat/root_system/type_G_affine.py +132 -0
  186. sage/combinat/root_system/type_H.py +105 -0
  187. sage/combinat/root_system/type_I.py +110 -0
  188. sage/combinat/root_system/type_Q.py +150 -0
  189. sage/combinat/root_system/type_affine.py +509 -0
  190. sage/combinat/root_system/type_dual.py +704 -0
  191. sage/combinat/root_system/type_folded.py +301 -0
  192. sage/combinat/root_system/type_marked.py +748 -0
  193. sage/combinat/root_system/type_reducible.py +601 -0
  194. sage/combinat/root_system/type_relabel.py +730 -0
  195. sage/combinat/root_system/type_super_A.py +837 -0
  196. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  197. sage/combinat/root_system/weight_space.py +639 -0
  198. sage/combinat/root_system/weyl_characters.py +2238 -0
  199. sage/crypto/__init__.py +4 -0
  200. sage/crypto/all.py +28 -0
  201. sage/crypto/block_cipher/all.py +7 -0
  202. sage/crypto/block_cipher/des.py +1065 -0
  203. sage/crypto/block_cipher/miniaes.py +2171 -0
  204. sage/crypto/block_cipher/present.py +909 -0
  205. sage/crypto/block_cipher/sdes.py +1527 -0
  206. sage/crypto/boolean_function.cpython-314-aarch64-linux-musl.so +0 -0
  207. sage/crypto/boolean_function.pxd +10 -0
  208. sage/crypto/boolean_function.pyx +1487 -0
  209. sage/crypto/cipher.py +78 -0
  210. sage/crypto/classical.py +3668 -0
  211. sage/crypto/classical_cipher.py +569 -0
  212. sage/crypto/cryptosystem.py +387 -0
  213. sage/crypto/key_exchange/all.py +7 -0
  214. sage/crypto/key_exchange/catalog.py +24 -0
  215. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  216. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  217. sage/crypto/lattice.py +312 -0
  218. sage/crypto/lfsr.py +295 -0
  219. sage/crypto/lwe.py +840 -0
  220. sage/crypto/mq/__init__.py +4 -0
  221. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  222. sage/crypto/mq/rijndael_gf.py +2345 -0
  223. sage/crypto/mq/sbox.py +7 -0
  224. sage/crypto/mq/sr.py +3344 -0
  225. sage/crypto/public_key/all.py +5 -0
  226. sage/crypto/public_key/blum_goldwasser.py +776 -0
  227. sage/crypto/sbox.cpython-314-aarch64-linux-musl.so +0 -0
  228. sage/crypto/sbox.pyx +2090 -0
  229. sage/crypto/sboxes.py +2090 -0
  230. sage/crypto/stream.py +390 -0
  231. sage/crypto/stream_cipher.py +297 -0
  232. sage/crypto/util.py +519 -0
  233. sage/ext/all__sagemath_modules.py +1 -0
  234. sage/ext/interpreters/__init__.py +1 -0
  235. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  236. sage/ext/interpreters/wrapper_cc.cpython-314-aarch64-linux-musl.so +0 -0
  237. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  238. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  239. sage/ext/interpreters/wrapper_cdf.cpython-314-aarch64-linux-musl.so +0 -0
  240. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  241. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  242. sage/ext/interpreters/wrapper_rdf.cpython-314-aarch64-linux-musl.so +0 -0
  243. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  244. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  245. sage/ext/interpreters/wrapper_rr.cpython-314-aarch64-linux-musl.so +0 -0
  246. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  247. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  248. sage/geometry/all__sagemath_modules.py +5 -0
  249. sage/geometry/toric_lattice.py +1745 -0
  250. sage/geometry/toric_lattice_element.cpython-314-aarch64-linux-musl.so +0 -0
  251. sage/geometry/toric_lattice_element.pyx +432 -0
  252. sage/groups/abelian_gps/abelian_group.py +1925 -0
  253. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  254. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  255. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  256. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  257. sage/groups/abelian_gps/element_base.py +341 -0
  258. sage/groups/abelian_gps/values.py +488 -0
  259. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  260. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  261. sage/groups/additive_abelian/all.py +4 -0
  262. sage/groups/additive_abelian/qmodnz.py +231 -0
  263. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  264. sage/groups/affine_gps/affine_group.py +535 -0
  265. sage/groups/affine_gps/all.py +1 -0
  266. sage/groups/affine_gps/catalog.py +17 -0
  267. sage/groups/affine_gps/euclidean_group.py +246 -0
  268. sage/groups/affine_gps/group_element.py +562 -0
  269. sage/groups/all__sagemath_modules.py +12 -0
  270. sage/groups/galois_group.py +479 -0
  271. sage/groups/matrix_gps/all.py +4 -0
  272. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  273. sage/groups/matrix_gps/catalog.py +26 -0
  274. sage/groups/matrix_gps/coxeter_group.py +927 -0
  275. sage/groups/matrix_gps/finitely_generated.py +487 -0
  276. sage/groups/matrix_gps/group_element.cpython-314-aarch64-linux-musl.so +0 -0
  277. sage/groups/matrix_gps/group_element.pxd +11 -0
  278. sage/groups/matrix_gps/group_element.pyx +431 -0
  279. sage/groups/matrix_gps/linear.py +440 -0
  280. sage/groups/matrix_gps/matrix_group.py +617 -0
  281. sage/groups/matrix_gps/named_group.py +296 -0
  282. sage/groups/matrix_gps/orthogonal.py +544 -0
  283. sage/groups/matrix_gps/symplectic.py +251 -0
  284. sage/groups/matrix_gps/unitary.py +436 -0
  285. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  286. sage/groups/misc_gps/argument_groups.py +1905 -0
  287. sage/groups/misc_gps/imaginary_groups.py +479 -0
  288. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  289. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-aarch64-linux-musl.so +0 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  293. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-aarch64-linux-musl.so +0 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  296. sage/homology/algebraic_topological_model.py +595 -0
  297. sage/homology/all.py +2 -0
  298. sage/homology/all__sagemath_modules.py +8 -0
  299. sage/homology/chain_complex.py +2148 -0
  300. sage/homology/chain_complex_homspace.py +165 -0
  301. sage/homology/chain_complex_morphism.py +629 -0
  302. sage/homology/chain_homotopy.py +604 -0
  303. sage/homology/chains.py +653 -0
  304. sage/homology/free_resolution.py +923 -0
  305. sage/homology/graded_resolution.py +567 -0
  306. sage/homology/hochschild_complex.py +756 -0
  307. sage/homology/homology_group.py +188 -0
  308. sage/homology/homology_morphism.py +422 -0
  309. sage/homology/homology_vector_space_with_basis.py +1454 -0
  310. sage/homology/koszul_complex.py +169 -0
  311. sage/homology/matrix_utils.py +205 -0
  312. sage/libs/all__sagemath_modules.py +1 -0
  313. sage/libs/gsl/__init__.py +1 -0
  314. sage/libs/gsl/airy.pxd +56 -0
  315. sage/libs/gsl/all.pxd +66 -0
  316. sage/libs/gsl/array.cpython-314-aarch64-linux-musl.so +0 -0
  317. sage/libs/gsl/array.pxd +5 -0
  318. sage/libs/gsl/array.pyx +102 -0
  319. sage/libs/gsl/bessel.pxd +208 -0
  320. sage/libs/gsl/blas.pxd +116 -0
  321. sage/libs/gsl/blas_types.pxd +34 -0
  322. sage/libs/gsl/block.pxd +52 -0
  323. sage/libs/gsl/chebyshev.pxd +37 -0
  324. sage/libs/gsl/clausen.pxd +12 -0
  325. sage/libs/gsl/combination.pxd +47 -0
  326. sage/libs/gsl/complex.pxd +151 -0
  327. sage/libs/gsl/coulomb.pxd +30 -0
  328. sage/libs/gsl/coupling.pxd +21 -0
  329. sage/libs/gsl/dawson.pxd +12 -0
  330. sage/libs/gsl/debye.pxd +24 -0
  331. sage/libs/gsl/dilog.pxd +14 -0
  332. sage/libs/gsl/eigen.pxd +46 -0
  333. sage/libs/gsl/elementary.pxd +12 -0
  334. sage/libs/gsl/ellint.pxd +48 -0
  335. sage/libs/gsl/elljac.pxd +8 -0
  336. sage/libs/gsl/erf.pxd +32 -0
  337. sage/libs/gsl/errno.pxd +26 -0
  338. sage/libs/gsl/exp.pxd +44 -0
  339. sage/libs/gsl/expint.pxd +44 -0
  340. sage/libs/gsl/fermi_dirac.pxd +44 -0
  341. sage/libs/gsl/fft.pxd +121 -0
  342. sage/libs/gsl/fit.pxd +50 -0
  343. sage/libs/gsl/gamma.pxd +94 -0
  344. sage/libs/gsl/gegenbauer.pxd +26 -0
  345. sage/libs/gsl/histogram.pxd +176 -0
  346. sage/libs/gsl/hyperg.pxd +52 -0
  347. sage/libs/gsl/integration.pxd +69 -0
  348. sage/libs/gsl/interp.pxd +109 -0
  349. sage/libs/gsl/laguerre.pxd +24 -0
  350. sage/libs/gsl/lambert.pxd +16 -0
  351. sage/libs/gsl/legendre.pxd +90 -0
  352. sage/libs/gsl/linalg.pxd +185 -0
  353. sage/libs/gsl/log.pxd +26 -0
  354. sage/libs/gsl/math.pxd +43 -0
  355. sage/libs/gsl/matrix.pxd +143 -0
  356. sage/libs/gsl/matrix_complex.pxd +130 -0
  357. sage/libs/gsl/min.pxd +67 -0
  358. sage/libs/gsl/monte.pxd +56 -0
  359. sage/libs/gsl/ntuple.pxd +32 -0
  360. sage/libs/gsl/odeiv.pxd +70 -0
  361. sage/libs/gsl/permutation.pxd +78 -0
  362. sage/libs/gsl/poly.pxd +40 -0
  363. sage/libs/gsl/pow_int.pxd +12 -0
  364. sage/libs/gsl/psi.pxd +28 -0
  365. sage/libs/gsl/qrng.pxd +29 -0
  366. sage/libs/gsl/random.pxd +257 -0
  367. sage/libs/gsl/rng.pxd +100 -0
  368. sage/libs/gsl/roots.pxd +72 -0
  369. sage/libs/gsl/sort.pxd +36 -0
  370. sage/libs/gsl/statistics.pxd +59 -0
  371. sage/libs/gsl/sum.pxd +55 -0
  372. sage/libs/gsl/synchrotron.pxd +16 -0
  373. sage/libs/gsl/transport.pxd +24 -0
  374. sage/libs/gsl/trig.pxd +58 -0
  375. sage/libs/gsl/types.pxd +137 -0
  376. sage/libs/gsl/vector.pxd +101 -0
  377. sage/libs/gsl/vector_complex.pxd +83 -0
  378. sage/libs/gsl/wavelet.pxd +49 -0
  379. sage/libs/gsl/zeta.pxd +28 -0
  380. sage/libs/mpc/__init__.pxd +114 -0
  381. sage/libs/mpc/types.pxd +28 -0
  382. sage/libs/mpfr/__init__.pxd +299 -0
  383. sage/libs/mpfr/types.pxd +26 -0
  384. sage/libs/mpmath/__init__.py +1 -0
  385. sage/libs/mpmath/all.py +27 -0
  386. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  387. sage/libs/mpmath/utils.cpython-314-aarch64-linux-musl.so +0 -0
  388. sage/libs/mpmath/utils.pxd +4 -0
  389. sage/libs/mpmath/utils.pyx +319 -0
  390. sage/matrix/action.cpython-314-aarch64-linux-musl.so +0 -0
  391. sage/matrix/action.pxd +26 -0
  392. sage/matrix/action.pyx +596 -0
  393. sage/matrix/all.py +9 -0
  394. sage/matrix/args.cpython-314-aarch64-linux-musl.so +0 -0
  395. sage/matrix/args.pxd +144 -0
  396. sage/matrix/args.pyx +1668 -0
  397. sage/matrix/benchmark.py +1258 -0
  398. sage/matrix/berlekamp_massey.py +95 -0
  399. sage/matrix/compute_J_ideal.py +926 -0
  400. sage/matrix/constructor.cpython-314-aarch64-linux-musl.so +0 -0
  401. sage/matrix/constructor.pyx +750 -0
  402. sage/matrix/docs.py +430 -0
  403. sage/matrix/echelon_matrix.cpython-314-aarch64-linux-musl.so +0 -0
  404. sage/matrix/echelon_matrix.pyx +155 -0
  405. sage/matrix/matrix.pxd +2 -0
  406. sage/matrix/matrix0.cpython-314-aarch64-linux-musl.so +0 -0
  407. sage/matrix/matrix0.pxd +68 -0
  408. sage/matrix/matrix0.pyx +6324 -0
  409. sage/matrix/matrix1.cpython-314-aarch64-linux-musl.so +0 -0
  410. sage/matrix/matrix1.pxd +8 -0
  411. sage/matrix/matrix1.pyx +2851 -0
  412. sage/matrix/matrix2.cpython-314-aarch64-linux-musl.so +0 -0
  413. sage/matrix/matrix2.pxd +25 -0
  414. sage/matrix/matrix2.pyx +20181 -0
  415. sage/matrix/matrix_cdv.cpython-314-aarch64-linux-musl.so +0 -0
  416. sage/matrix/matrix_cdv.pxd +4 -0
  417. sage/matrix/matrix_cdv.pyx +93 -0
  418. sage/matrix/matrix_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  419. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  420. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  421. sage/matrix/matrix_dense.cpython-314-aarch64-linux-musl.so +0 -0
  422. sage/matrix/matrix_dense.pxd +5 -0
  423. sage/matrix/matrix_dense.pyx +343 -0
  424. sage/matrix/matrix_domain_dense.pxd +5 -0
  425. sage/matrix/matrix_domain_sparse.pxd +5 -0
  426. sage/matrix/matrix_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  427. sage/matrix/matrix_double_dense.pxd +7 -0
  428. sage/matrix/matrix_double_dense.pyx +3906 -0
  429. sage/matrix/matrix_double_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  430. sage/matrix/matrix_double_sparse.pxd +6 -0
  431. sage/matrix/matrix_double_sparse.pyx +248 -0
  432. sage/matrix/matrix_generic_dense.cpython-314-aarch64-linux-musl.so +0 -0
  433. sage/matrix/matrix_generic_dense.pxd +7 -0
  434. sage/matrix/matrix_generic_dense.pyx +354 -0
  435. sage/matrix/matrix_generic_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  436. sage/matrix/matrix_generic_sparse.pxd +7 -0
  437. sage/matrix/matrix_generic_sparse.pyx +461 -0
  438. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  441. sage/matrix/matrix_misc.py +313 -0
  442. sage/matrix/matrix_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
  443. sage/matrix/matrix_numpy_dense.pxd +14 -0
  444. sage/matrix/matrix_numpy_dense.pyx +450 -0
  445. sage/matrix/matrix_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  446. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  447. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  448. sage/matrix/matrix_polynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
  449. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  450. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  451. sage/matrix/matrix_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  452. sage/matrix/matrix_real_double_dense.pxd +7 -0
  453. sage/matrix/matrix_real_double_dense.pyx +122 -0
  454. sage/matrix/matrix_space.py +2848 -0
  455. sage/matrix/matrix_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  456. sage/matrix/matrix_sparse.pxd +5 -0
  457. sage/matrix/matrix_sparse.pyx +1222 -0
  458. sage/matrix/matrix_window.cpython-314-aarch64-linux-musl.so +0 -0
  459. sage/matrix/matrix_window.pxd +37 -0
  460. sage/matrix/matrix_window.pyx +242 -0
  461. sage/matrix/misc_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  462. sage/matrix/misc_mpfr.pyx +80 -0
  463. sage/matrix/operation_table.py +1182 -0
  464. sage/matrix/special.py +3666 -0
  465. sage/matrix/strassen.cpython-314-aarch64-linux-musl.so +0 -0
  466. sage/matrix/strassen.pyx +851 -0
  467. sage/matrix/symplectic_basis.py +541 -0
  468. sage/matrix/template.pxd +6 -0
  469. sage/matrix/tests.py +71 -0
  470. sage/matroids/advanced.py +77 -0
  471. sage/matroids/all.py +13 -0
  472. sage/matroids/basis_exchange_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  473. sage/matroids/basis_exchange_matroid.pxd +96 -0
  474. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  475. sage/matroids/basis_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  476. sage/matroids/basis_matroid.pxd +45 -0
  477. sage/matroids/basis_matroid.pyx +1217 -0
  478. sage/matroids/catalog.py +44 -0
  479. sage/matroids/chow_ring.py +473 -0
  480. sage/matroids/chow_ring_ideal.py +849 -0
  481. sage/matroids/circuit_closures_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  482. sage/matroids/circuit_closures_matroid.pxd +16 -0
  483. sage/matroids/circuit_closures_matroid.pyx +559 -0
  484. sage/matroids/circuits_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  485. sage/matroids/circuits_matroid.pxd +38 -0
  486. sage/matroids/circuits_matroid.pyx +947 -0
  487. sage/matroids/constructor.py +1086 -0
  488. sage/matroids/database_collections.py +365 -0
  489. sage/matroids/database_matroids.py +5338 -0
  490. sage/matroids/dual_matroid.py +583 -0
  491. sage/matroids/extension.cpython-314-aarch64-linux-musl.so +0 -0
  492. sage/matroids/extension.pxd +34 -0
  493. sage/matroids/extension.pyx +519 -0
  494. sage/matroids/flats_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  495. sage/matroids/flats_matroid.pxd +28 -0
  496. sage/matroids/flats_matroid.pyx +715 -0
  497. sage/matroids/gammoid.py +600 -0
  498. sage/matroids/graphic_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  499. sage/matroids/graphic_matroid.pxd +39 -0
  500. sage/matroids/graphic_matroid.pyx +2024 -0
  501. sage/matroids/lean_matrix.cpython-314-aarch64-linux-musl.so +0 -0
  502. sage/matroids/lean_matrix.pxd +126 -0
  503. sage/matroids/lean_matrix.pyx +3667 -0
  504. sage/matroids/linear_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  505. sage/matroids/linear_matroid.pxd +180 -0
  506. sage/matroids/linear_matroid.pyx +6649 -0
  507. sage/matroids/matroid.cpython-314-aarch64-linux-musl.so +0 -0
  508. sage/matroids/matroid.pxd +243 -0
  509. sage/matroids/matroid.pyx +8759 -0
  510. sage/matroids/matroids_catalog.py +190 -0
  511. sage/matroids/matroids_plot_helpers.py +890 -0
  512. sage/matroids/minor_matroid.py +480 -0
  513. sage/matroids/minorfix.h +9 -0
  514. sage/matroids/named_matroids.py +5 -0
  515. sage/matroids/rank_matroid.py +268 -0
  516. sage/matroids/set_system.cpython-314-aarch64-linux-musl.so +0 -0
  517. sage/matroids/set_system.pxd +38 -0
  518. sage/matroids/set_system.pyx +800 -0
  519. sage/matroids/transversal_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  520. sage/matroids/transversal_matroid.pxd +14 -0
  521. sage/matroids/transversal_matroid.pyx +893 -0
  522. sage/matroids/union_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  523. sage/matroids/union_matroid.pxd +20 -0
  524. sage/matroids/union_matroid.pyx +331 -0
  525. sage/matroids/unpickling.cpython-314-aarch64-linux-musl.so +0 -0
  526. sage/matroids/unpickling.pyx +843 -0
  527. sage/matroids/utilities.py +809 -0
  528. sage/misc/all__sagemath_modules.py +20 -0
  529. sage/misc/c3.cpython-314-aarch64-linux-musl.so +0 -0
  530. sage/misc/c3.pyx +238 -0
  531. sage/misc/compat.py +87 -0
  532. sage/misc/element_with_label.py +173 -0
  533. sage/misc/func_persist.py +79 -0
  534. sage/misc/pickle_old.cpython-314-aarch64-linux-musl.so +0 -0
  535. sage/misc/pickle_old.pyx +19 -0
  536. sage/misc/proof.py +7 -0
  537. sage/misc/replace_dot_all.py +472 -0
  538. sage/misc/sagedoc_conf.py +168 -0
  539. sage/misc/sphinxify.py +167 -0
  540. sage/misc/test_class_pickling.py +85 -0
  541. sage/modules/all.py +42 -0
  542. sage/modules/complex_double_vector.py +25 -0
  543. sage/modules/diamond_cutting.py +380 -0
  544. sage/modules/fg_pid/all.py +1 -0
  545. sage/modules/fg_pid/fgp_element.py +456 -0
  546. sage/modules/fg_pid/fgp_module.py +2091 -0
  547. sage/modules/fg_pid/fgp_morphism.py +550 -0
  548. sage/modules/filtered_vector_space.py +1271 -0
  549. sage/modules/finite_submodule_iter.cpython-314-aarch64-linux-musl.so +0 -0
  550. sage/modules/finite_submodule_iter.pxd +27 -0
  551. sage/modules/finite_submodule_iter.pyx +452 -0
  552. sage/modules/fp_graded/all.py +1 -0
  553. sage/modules/fp_graded/element.py +346 -0
  554. sage/modules/fp_graded/free_element.py +298 -0
  555. sage/modules/fp_graded/free_homspace.py +53 -0
  556. sage/modules/fp_graded/free_module.py +1060 -0
  557. sage/modules/fp_graded/free_morphism.py +217 -0
  558. sage/modules/fp_graded/homspace.py +563 -0
  559. sage/modules/fp_graded/module.py +1340 -0
  560. sage/modules/fp_graded/morphism.py +1990 -0
  561. sage/modules/fp_graded/steenrod/all.py +1 -0
  562. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  563. sage/modules/fp_graded/steenrod/module.py +477 -0
  564. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  565. sage/modules/fp_graded/steenrod/profile.py +241 -0
  566. sage/modules/free_module.py +8447 -0
  567. sage/modules/free_module_element.cpython-314-aarch64-linux-musl.so +0 -0
  568. sage/modules/free_module_element.pxd +22 -0
  569. sage/modules/free_module_element.pyx +5445 -0
  570. sage/modules/free_module_homspace.py +369 -0
  571. sage/modules/free_module_integer.py +896 -0
  572. sage/modules/free_module_morphism.py +823 -0
  573. sage/modules/free_module_pseudohomspace.py +352 -0
  574. sage/modules/free_module_pseudomorphism.py +578 -0
  575. sage/modules/free_quadratic_module.py +1706 -0
  576. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  577. sage/modules/matrix_morphism.py +1745 -0
  578. sage/modules/misc.py +103 -0
  579. sage/modules/module_functors.py +192 -0
  580. sage/modules/multi_filtered_vector_space.py +719 -0
  581. sage/modules/ore_module.py +2208 -0
  582. sage/modules/ore_module_element.py +178 -0
  583. sage/modules/ore_module_homspace.py +147 -0
  584. sage/modules/ore_module_morphism.py +968 -0
  585. sage/modules/quotient_module.py +699 -0
  586. sage/modules/real_double_vector.py +22 -0
  587. sage/modules/submodule.py +255 -0
  588. sage/modules/tensor_operations.py +567 -0
  589. sage/modules/torsion_quadratic_module.py +1352 -0
  590. sage/modules/tutorial_free_modules.py +248 -0
  591. sage/modules/vector_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  592. sage/modules/vector_complex_double_dense.pxd +6 -0
  593. sage/modules/vector_complex_double_dense.pyx +117 -0
  594. sage/modules/vector_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  595. sage/modules/vector_double_dense.pxd +6 -0
  596. sage/modules/vector_double_dense.pyx +604 -0
  597. sage/modules/vector_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  598. sage/modules/vector_integer_dense.pxd +15 -0
  599. sage/modules/vector_integer_dense.pyx +361 -0
  600. sage/modules/vector_integer_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  601. sage/modules/vector_integer_sparse.pxd +29 -0
  602. sage/modules/vector_integer_sparse.pyx +406 -0
  603. sage/modules/vector_modn_dense.cpython-314-aarch64-linux-musl.so +0 -0
  604. sage/modules/vector_modn_dense.pxd +12 -0
  605. sage/modules/vector_modn_dense.pyx +394 -0
  606. sage/modules/vector_modn_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  607. sage/modules/vector_modn_sparse.pxd +21 -0
  608. sage/modules/vector_modn_sparse.pyx +298 -0
  609. sage/modules/vector_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
  610. sage/modules/vector_numpy_dense.pxd +15 -0
  611. sage/modules/vector_numpy_dense.pyx +304 -0
  612. sage/modules/vector_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  613. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  614. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  615. sage/modules/vector_rational_dense.cpython-314-aarch64-linux-musl.so +0 -0
  616. sage/modules/vector_rational_dense.pxd +15 -0
  617. sage/modules/vector_rational_dense.pyx +387 -0
  618. sage/modules/vector_rational_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  619. sage/modules/vector_rational_sparse.pxd +30 -0
  620. sage/modules/vector_rational_sparse.pyx +413 -0
  621. sage/modules/vector_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  622. sage/modules/vector_real_double_dense.pxd +6 -0
  623. sage/modules/vector_real_double_dense.pyx +126 -0
  624. sage/modules/vector_space_homspace.py +430 -0
  625. sage/modules/vector_space_morphism.py +989 -0
  626. sage/modules/with_basis/all.py +15 -0
  627. sage/modules/with_basis/cell_module.py +494 -0
  628. sage/modules/with_basis/indexed_element.cpython-314-aarch64-linux-musl.so +0 -0
  629. sage/modules/with_basis/indexed_element.pxd +13 -0
  630. sage/modules/with_basis/indexed_element.pyx +1058 -0
  631. sage/modules/with_basis/invariant.py +1075 -0
  632. sage/modules/with_basis/morphism.py +1636 -0
  633. sage/modules/with_basis/representation.py +2939 -0
  634. sage/modules/with_basis/subquotient.py +685 -0
  635. sage/numerical/all__sagemath_modules.py +6 -0
  636. sage/numerical/gauss_legendre.cpython-314-aarch64-linux-musl.so +0 -0
  637. sage/numerical/gauss_legendre.pyx +381 -0
  638. sage/numerical/optimize.py +910 -0
  639. sage/probability/all.py +10 -0
  640. sage/probability/probability_distribution.cpython-314-aarch64-linux-musl.so +0 -0
  641. sage/probability/probability_distribution.pyx +1242 -0
  642. sage/probability/random_variable.py +411 -0
  643. sage/quadratic_forms/all.py +4 -0
  644. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  645. sage/quadratic_forms/binary_qf.py +2042 -0
  646. sage/quadratic_forms/bqf_class_group.py +748 -0
  647. sage/quadratic_forms/constructions.py +93 -0
  648. sage/quadratic_forms/count_local_2.cpython-314-aarch64-linux-musl.so +0 -0
  649. sage/quadratic_forms/count_local_2.pyx +365 -0
  650. sage/quadratic_forms/extras.py +195 -0
  651. sage/quadratic_forms/quadratic_form.py +1753 -0
  652. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  653. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  654. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-aarch64-linux-musl.so +0 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  656. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  657. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  658. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  659. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  660. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  661. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  662. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  663. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  664. sage/quadratic_forms/random_quadraticform.py +209 -0
  665. sage/quadratic_forms/ternary.cpython-314-aarch64-linux-musl.so +0 -0
  666. sage/quadratic_forms/ternary.pyx +1154 -0
  667. sage/quadratic_forms/ternary_qf.py +2027 -0
  668. sage/rings/all__sagemath_modules.py +28 -0
  669. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  670. sage/rings/asymptotic/misc.py +1252 -0
  671. sage/rings/cc.py +4 -0
  672. sage/rings/cfinite_sequence.py +1306 -0
  673. sage/rings/complex_conversion.cpython-314-aarch64-linux-musl.so +0 -0
  674. sage/rings/complex_conversion.pxd +8 -0
  675. sage/rings/complex_conversion.pyx +23 -0
  676. sage/rings/complex_double.cpython-314-aarch64-linux-musl.so +0 -0
  677. sage/rings/complex_double.pxd +21 -0
  678. sage/rings/complex_double.pyx +2654 -0
  679. sage/rings/complex_mpc.cpython-314-aarch64-linux-musl.so +0 -0
  680. sage/rings/complex_mpc.pxd +21 -0
  681. sage/rings/complex_mpc.pyx +2576 -0
  682. sage/rings/complex_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  683. sage/rings/complex_mpfr.pxd +18 -0
  684. sage/rings/complex_mpfr.pyx +3602 -0
  685. sage/rings/derivation.py +2334 -0
  686. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  687. sage/rings/finite_rings/maps_finite_field.py +191 -0
  688. sage/rings/function_field/all__sagemath_modules.py +8 -0
  689. sage/rings/function_field/derivations.py +102 -0
  690. sage/rings/function_field/derivations_rational.py +132 -0
  691. sage/rings/function_field/differential.py +853 -0
  692. sage/rings/function_field/divisor.py +1107 -0
  693. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  694. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  695. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  696. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  697. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  698. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  699. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  700. sage/rings/function_field/hermite_form_polynomial.cpython-314-aarch64-linux-musl.so +0 -0
  701. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  702. sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-linux-musl.so +0 -0
  703. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  704. sage/rings/invariants/all.py +4 -0
  705. sage/rings/invariants/invariant_theory.py +4597 -0
  706. sage/rings/invariants/reconstruction.py +395 -0
  707. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  708. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  709. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-aarch64-linux-musl.so +0 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  712. sage/rings/polynomial/ore_function_element.py +952 -0
  713. sage/rings/polynomial/ore_function_field.py +1028 -0
  714. sage/rings/polynomial/ore_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
  715. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  716. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  717. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  718. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-aarch64-linux-musl.so +0 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  720. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  721. sage/rings/polynomial/skew_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
  722. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  723. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  724. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-aarch64-linux-musl.so +0 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  727. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-aarch64-linux-musl.so +0 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  730. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  731. sage/rings/real_double_element_gsl.cpython-314-aarch64-linux-musl.so +0 -0
  732. sage/rings/real_double_element_gsl.pxd +8 -0
  733. sage/rings/real_double_element_gsl.pyx +794 -0
  734. sage/rings/real_field.py +58 -0
  735. sage/rings/real_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  736. sage/rings/real_mpfr.pxd +29 -0
  737. sage/rings/real_mpfr.pyx +6122 -0
  738. sage/rings/ring_extension.cpython-314-aarch64-linux-musl.so +0 -0
  739. sage/rings/ring_extension.pxd +42 -0
  740. sage/rings/ring_extension.pyx +2779 -0
  741. sage/rings/ring_extension_conversion.cpython-314-aarch64-linux-musl.so +0 -0
  742. sage/rings/ring_extension_conversion.pxd +16 -0
  743. sage/rings/ring_extension_conversion.pyx +462 -0
  744. sage/rings/ring_extension_element.cpython-314-aarch64-linux-musl.so +0 -0
  745. sage/rings/ring_extension_element.pxd +21 -0
  746. sage/rings/ring_extension_element.pyx +1635 -0
  747. sage/rings/ring_extension_homset.py +64 -0
  748. sage/rings/ring_extension_morphism.cpython-314-aarch64-linux-musl.so +0 -0
  749. sage/rings/ring_extension_morphism.pxd +35 -0
  750. sage/rings/ring_extension_morphism.pyx +920 -0
  751. sage/schemes/all__sagemath_modules.py +1 -0
  752. sage/schemes/projective/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/coherent_sheaf.py +300 -0
  754. sage/schemes/projective/cohomology.py +510 -0
  755. sage/stats/all.py +15 -0
  756. sage/stats/basic_stats.py +489 -0
  757. sage/stats/distributions/all.py +7 -0
  758. sage/stats/distributions/catalog.py +34 -0
  759. sage/stats/distributions/dgs.h +50 -0
  760. sage/stats/distributions/dgs.pxd +111 -0
  761. sage/stats/distributions/dgs_bern.h +400 -0
  762. sage/stats/distributions/dgs_gauss.h +614 -0
  763. sage/stats/distributions/dgs_misc.h +104 -0
  764. sage/stats/distributions/discrete_gaussian_integer.cpython-314-aarch64-linux-musl.so +0 -0
  765. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  767. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  768. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  769. sage/stats/hmm/all.py +15 -0
  770. sage/stats/hmm/chmm.cpython-314-aarch64-linux-musl.so +0 -0
  771. sage/stats/hmm/chmm.pyx +1595 -0
  772. sage/stats/hmm/distributions.cpython-314-aarch64-linux-musl.so +0 -0
  773. sage/stats/hmm/distributions.pxd +29 -0
  774. sage/stats/hmm/distributions.pyx +531 -0
  775. sage/stats/hmm/hmm.cpython-314-aarch64-linux-musl.so +0 -0
  776. sage/stats/hmm/hmm.pxd +17 -0
  777. sage/stats/hmm/hmm.pyx +1388 -0
  778. sage/stats/hmm/util.cpython-314-aarch64-linux-musl.so +0 -0
  779. sage/stats/hmm/util.pxd +7 -0
  780. sage/stats/hmm/util.pyx +165 -0
  781. sage/stats/intlist.cpython-314-aarch64-linux-musl.so +0 -0
  782. sage/stats/intlist.pxd +14 -0
  783. sage/stats/intlist.pyx +588 -0
  784. sage/stats/r.py +49 -0
  785. sage/stats/time_series.cpython-314-aarch64-linux-musl.so +0 -0
  786. sage/stats/time_series.pxd +6 -0
  787. sage/stats/time_series.pyx +2546 -0
  788. sage/tensor/all.py +2 -0
  789. sage/tensor/modules/all.py +8 -0
  790. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  791. sage/tensor/modules/comp.py +5598 -0
  792. sage/tensor/modules/ext_pow_free_module.py +824 -0
  793. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  794. sage/tensor/modules/format_utilities.py +333 -0
  795. sage/tensor/modules/free_module_alt_form.py +858 -0
  796. sage/tensor/modules/free_module_automorphism.py +1207 -0
  797. sage/tensor/modules/free_module_basis.py +1074 -0
  798. sage/tensor/modules/free_module_element.py +284 -0
  799. sage/tensor/modules/free_module_homset.py +652 -0
  800. sage/tensor/modules/free_module_linear_group.py +564 -0
  801. sage/tensor/modules/free_module_morphism.py +1581 -0
  802. sage/tensor/modules/free_module_tensor.py +3289 -0
  803. sage/tensor/modules/reflexive_module.py +386 -0
  804. sage/tensor/modules/tensor_free_module.py +780 -0
  805. sage/tensor/modules/tensor_free_submodule.py +538 -0
  806. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  807. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,1147 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.graphs sage.libs.gap
3
+ r"""
4
+ Pieri factors
5
+ """
6
+ # ****************************************************************************
7
+ # Copyright (C) 2009-2010 Steven Pon <spon at math.ucdavis.edu>
8
+ # Anne Schilling < anne at math.ucdavis.edu>
9
+ # Nicolas M. Thiery <nthiery at users.sf.net>
10
+ #
11
+ # Distributed under the terms of the GNU General Public License (GPL)
12
+ # https://www.gnu.org/licenses/
13
+ # *****************************************************************************
14
+
15
+ from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
16
+ import sage.combinat.ranker
17
+ from sage.combinat.root_system.root_system import RootSystem
18
+ from sage.combinat.root_system.weyl_group import WeylGroup
19
+ from sage.misc.cachefunc import cached_method
20
+ from sage.misc.call import attrcall
21
+ from sage.misc.constant_function import ConstantFunction
22
+ from sage.misc.lazy_import import lazy_import
23
+ from sage.misc.misc_c import prod
24
+ from sage.rings.infinity import infinity
25
+ from sage.rings.integer import Integer
26
+ from sage.rings.rational_field import QQ
27
+ from sage.sets.recursively_enumerated_set import RecursivelyEnumeratedSet
28
+ from sage.structure.parent import Parent
29
+ from sage.structure.unique_representation import UniqueRepresentation
30
+
31
+ lazy_import('sage.graphs.digraph', 'DiGraph')
32
+ lazy_import('sage.combinat.root_system.dynkin_diagram', 'DynkinDiagram')
33
+
34
+
35
+ class PieriFactors(UniqueRepresentation, Parent):
36
+ r"""
37
+ An abstract class for sets of Pieri factors, used for constructing
38
+ Stanley symmetric functions. The set of Pieri factors for a given
39
+ type can be realized as an order ideal of the Bruhat order poset
40
+ generated by a certain set of maximal elements.
41
+
42
+ .. SEEALSO::
43
+
44
+ - :meth:`WeylGroups.ParentMethods.pieri_factors`
45
+ - :meth:`WeylGroups.ElementMethods.stanley_symmetric_function`
46
+
47
+ EXAMPLES::
48
+
49
+ sage: W = WeylGroup(['A',4])
50
+ sage: PF = W.pieri_factors()
51
+ sage: PF.an_element().reduced_word()
52
+ [4, 3, 2, 1]
53
+ sage: Waff = WeylGroup(['A',4,1])
54
+ sage: PFaff = Waff.pieri_factors()
55
+ sage: Waff.from_reduced_word(PF.an_element().reduced_word()) in PFaff
56
+ True
57
+
58
+ sage: W = WeylGroup(['B',3,1])
59
+ sage: PF = W.pieri_factors()
60
+ sage: W.from_reduced_word([2,3,2]) in PF.elements()
61
+ True
62
+ sage: PF.cardinality()
63
+ 47
64
+
65
+ sage: W = WeylGroup(['C',3,1])
66
+ sage: PF = W.pieri_factors()
67
+ sage: PF.generating_series()
68
+ 6*z^6 + 14*z^5 + 18*z^4 + 15*z^3 + 9*z^2 + 4*z + 1
69
+ sage: sorted(w.reduced_word() for w in PF if w.length() == 2)
70
+ [[0, 1], [1, 0], [1, 2], [2, 0], [2, 1],
71
+ [2, 3], [3, 0], [3, 1], [3, 2]]
72
+
73
+ REFERENCES:
74
+
75
+ - [FoSta1994]_
76
+ - [BH1994]_
77
+ - [Lam1996]_
78
+ - [Lam2008]_
79
+ - [LSS2009]_
80
+ - [Pon2010]_
81
+ """
82
+
83
+ def _repr_(self):
84
+ r"""
85
+ String representation.
86
+
87
+ EXAMPLES::
88
+
89
+ sage: WeylGroup(["A", 2, 1]).pieri_factors() # indirect doctest
90
+ Pieri factors for Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root space)
91
+ """
92
+ return "Pieri factors for %s" % self.W
93
+
94
+ def __contains__(self, w):
95
+ r"""
96
+ Test for containment.
97
+
98
+ EXAMPLES::
99
+
100
+ sage: W = WeylGroup(['C',3,1])
101
+ sage: w = W.from_reduced_word([3,2,1,0])
102
+ sage: PF = W.pieri_factors()
103
+ sage: w in PF
104
+ True
105
+ sage: w = W.from_reduced_word([1,0,1])
106
+ sage: w in PF
107
+ True
108
+ sage: w = W.from_reduced_word([1,0,1,0])
109
+ sage: w in PF
110
+ False
111
+ sage: w = W.from_reduced_word([0,1,2,3,2,1,0])
112
+ sage: w in PF
113
+ False
114
+ sage: w = W.from_reduced_word([2,0,3,2,1])
115
+ sage: w in PF
116
+ True
117
+
118
+ sage: W = WeylGroup(['B',4,1])
119
+ sage: PF = W.pieri_factors()
120
+ sage: w = W.from_reduced_word([1,2,4,3,1])
121
+ sage: w in PF
122
+ True
123
+ sage: w = W.from_reduced_word([1,2,4,3,1,0])
124
+ sage: w in PF
125
+ False
126
+ sage: w = W.from_reduced_word([2,3,4,3,2,1,0])
127
+ sage: w in PF
128
+ True
129
+
130
+ sage: W = WeylGroup(['A',4])
131
+ sage: PF = W.pieri_factors()
132
+ sage: W.from_reduced_word([4,3,1]) in PF
133
+ True
134
+ sage: W.from_reduced_word([1,2]) in PF
135
+ False
136
+ """
137
+ if w not in self.W:
138
+ return False
139
+ return any(w.bruhat_le(m) for m in self.maximal_elements())
140
+
141
+ @cached_method
142
+ def elements(self):
143
+ r"""
144
+ Return the elements of ``self``.
145
+
146
+ Those are constructed as the elements below the maximal
147
+ elements of ``self`` in Bruhat order.
148
+
149
+ OUTPUT: a :class:`RecursivelyEnumeratedSet_generic` object
150
+
151
+ EXAMPLES::
152
+
153
+ sage: PF = WeylGroup(['A',3]).pieri_factors()
154
+ sage: sorted(w.reduced_word() for w in PF.elements())
155
+ [[], [1], [2], [2, 1], [3], [3, 1], [3, 2], [3, 2, 1]]
156
+
157
+ .. SEEALSO:: :meth:`maximal_elements`
158
+
159
+ .. TODO::
160
+
161
+ Possibly remove this method and instead have this class
162
+ inherit from :class:`RecursivelyEnumeratedSet_generic`.
163
+ """
164
+ return RecursivelyEnumeratedSet(self.maximal_elements(),
165
+ attrcall('bruhat_lower_covers'), structure=None,
166
+ enumeration='naive')
167
+
168
+ def __iter__(self):
169
+ r"""
170
+ Return an iterator over the elements of ``self``.
171
+
172
+ EXAMPLES::
173
+
174
+ sage: PF = WeylGroup(['A',3,1]).pieri_factors()
175
+ sage: f = PF.__iter__()
176
+ sage: [next(f).reduced_word() for i in range(5)]
177
+ [[], [0], [1], [2], [3]]
178
+ """
179
+ return iter(self.elements())
180
+
181
+ def generating_series(self, weight=None):
182
+ r"""
183
+ Return a length generating series for the elements of ``self``.
184
+
185
+ EXAMPLES::
186
+
187
+ sage: PF = WeylGroup(['C',3,1]).pieri_factors()
188
+ sage: PF.generating_series()
189
+ 6*z^6 + 14*z^5 + 18*z^4 + 15*z^3 + 9*z^2 + 4*z + 1
190
+
191
+ sage: PF = WeylGroup(['B',4]).pieri_factors()
192
+ sage: PF.generating_series()
193
+ z^7 + 6*z^6 + 14*z^5 + 18*z^4 + 15*z^3 + 9*z^2 + 4*z + 1
194
+ """
195
+ if weight is None:
196
+ weight = self.default_weight()
197
+
198
+ return sum(weight(w.length()) for w in self)
199
+
200
+ @cached_method
201
+ def default_weight(self):
202
+ r"""
203
+ Return the function `i\mapsto z^i`, where `z` is the
204
+ generator of ``QQ['z']``.
205
+
206
+ EXAMPLES::
207
+
208
+ sage: W = WeylGroup(["A", 3, 1])
209
+ sage: weight = W.pieri_factors().default_weight()
210
+ sage: weight(1)
211
+ z
212
+ sage: weight(5)
213
+ z^5
214
+
215
+ TESTS::
216
+
217
+ sage: weight(4) in QQ['z']
218
+ True
219
+ sage: weight(0) in QQ['z']
220
+ True
221
+ sage: weight(0).parent() == QQ['z'] # todo: not implemented
222
+ True
223
+ """
224
+ R = QQ['z']
225
+ z = R.gen()
226
+ return lambda i: z**i
227
+
228
+ def _test_maximal_elements(self, **options):
229
+ r"""
230
+ Check that the conjectural type-free definition of Pieri
231
+ factors matches with the proven type-specific definition.
232
+
233
+ .. SEEALSO:: :class:`TestSuite`.
234
+
235
+ EXAMPLES::
236
+
237
+ sage: W = WeylGroup(['A',4,1])
238
+ sage: PF = W.pieri_factors()
239
+ sage: PF._test_maximal_elements()
240
+ sage: WeylGroup(['B',5]).pieri_factors()._test_maximal_elements()
241
+
242
+ TESTS::
243
+
244
+ sage: W = WeylGroup(['C',4,1])
245
+ sage: PF = W.pieri_factors()
246
+ sage: PF._test_maximal_elements()
247
+ sage: WeylGroup(['D',5,1]).pieri_factors()._test_maximal_elements()
248
+ sage: WeylGroup(['A',5,1]).pieri_factors()._test_maximal_elements()
249
+ sage: WeylGroup(['B',5,1]).pieri_factors()._test_maximal_elements()
250
+ """
251
+ tester = self._tester(**options)
252
+ tester.assertEqual(set(self.maximal_elements()),
253
+ set(self.maximal_elements_combinatorial()))
254
+
255
+ @cached_method
256
+ def max_length(self):
257
+ r"""
258
+ Return the maximal length of a Pieri factor.
259
+
260
+ EXAMPLES:
261
+
262
+ In type A and A affine, this is `n`::
263
+
264
+ sage: WeylGroup(['A',5]).pieri_factors().max_length()
265
+ 5
266
+ sage: WeylGroup(['A',5,1]).pieri_factors().max_length()
267
+ 5
268
+
269
+ In type B and B affine, this is `2n-1`::
270
+
271
+ sage: WeylGroup(['B',5,1]).pieri_factors().max_length()
272
+ 9
273
+ sage: WeylGroup(['B',5]).pieri_factors().max_length()
274
+ 9
275
+
276
+ In type C affine this is `2n`::
277
+
278
+ sage: WeylGroup(['C',5,1]).pieri_factors().max_length()
279
+ 10
280
+
281
+ In type D affine this is `2n-2`::
282
+
283
+ sage: WeylGroup(['D',5,1]).pieri_factors().max_length()
284
+ 8
285
+ """
286
+ return self.maximal_elements()[0].length()
287
+
288
+
289
+ class PieriFactors_finite_type(PieriFactors):
290
+ r"""
291
+ The Pieri factors of finite type A are the restriction of the
292
+ Pieri factors of affine type A to finite permutations (under the
293
+ canonical embedding of finite type A into the affine Weyl group),
294
+ and the Pieri factors of finite type B are the restriction of the
295
+ Pieri factors of affine type C. The finite type D Pieri factors
296
+ are (weakly) conjectured to be the restriction of the Pieri
297
+ factors of affine type D.
298
+ """
299
+
300
+ def maximal_elements(self):
301
+ r"""
302
+ The current algorithm uses the fact that the maximal Pieri factors
303
+ of affine type A,B,C, or D either contain a finite Weyl group
304
+ element, or contain an affine Weyl group element whose reflection
305
+ by `s_0` gets a finite Weyl group element, and that either of
306
+ these finite group elements will serve as a maximal element for
307
+ finite Pieri factors. A better algorithm is desirable.
308
+
309
+ EXAMPLES::
310
+
311
+ sage: PF = WeylGroup(['A',5]).pieri_factors()
312
+ sage: [v.reduced_word() for v in PF.maximal_elements()]
313
+ [[5, 4, 3, 2, 1]]
314
+
315
+ sage: WeylGroup(['B',4]).pieri_factors().maximal_elements()
316
+ [
317
+ [-1 0 0 0]
318
+ [ 0 1 0 0]
319
+ [ 0 0 1 0]
320
+ [ 0 0 0 1]
321
+ ]
322
+ """
323
+ ct = self.W.cartan_type()
324
+
325
+ # The following line may need to be changed when generalizing to more than types A and B.
326
+ if ct.type() != 'A' and ct.type() != 'B':
327
+ raise NotImplementedError("currently only implemented for finite types A and B")
328
+
329
+ ct_aff = ct.dual().affine()
330
+
331
+ max_elts_affine = WeylGroup(ct_aff).pieri_factors().maximal_elements()
332
+
333
+ for w in max_elts_affine:
334
+ if 0 not in w.reduced_word():
335
+ return [self.W.from_reduced_word(w.reduced_word())]
336
+ for w in max_elts_affine:
337
+ if 0 not in w.apply_simple_reflection(0).reduced_word():
338
+ return [self.W.from_reduced_word(w.apply_simple_reflection(0).reduced_word())]
339
+
340
+
341
+ class PieriFactors_affine_type(PieriFactors):
342
+
343
+ def maximal_elements(self):
344
+ r"""
345
+ Return the maximal elements of ``self`` with respect to Bruhat order.
346
+
347
+ The current implementation is via a conjectural type-free
348
+ formula. Use :meth:`maximal_elements_combinatorial` for proven
349
+ type-specific implementations. To compare type-free and
350
+ type-specific (combinatorial) implementations, use method
351
+ :meth:`_test_maximal_elements`.
352
+
353
+ EXAMPLES::
354
+
355
+ sage: W = WeylGroup(['A',4,1])
356
+ sage: PF = W.pieri_factors()
357
+ sage: sorted([w.reduced_word() for w in PF.maximal_elements()], key=str)
358
+ [[0, 4, 3, 2], [1, 0, 4, 3], [2, 1, 0, 4], [3, 2, 1, 0], [4, 3, 2, 1]]
359
+
360
+ sage: W = WeylGroup(RootSystem(["C",3,1]).weight_space())
361
+ sage: PF = W.pieri_factors()
362
+ sage: sorted([w.reduced_word() for w in PF.maximal_elements()], key=str)
363
+ [[0, 1, 2, 3, 2, 1], [1, 0, 1, 2, 3, 2], [1, 2, 3, 2, 1, 0],
364
+ [2, 1, 0, 1, 2, 3], [2, 3, 2, 1, 0, 1], [3, 2, 1, 0, 1, 2]]
365
+
366
+ sage: W = WeylGroup(RootSystem(["B",3,1]).weight_space())
367
+ sage: PF = W.pieri_factors()
368
+ sage: sorted([w.reduced_word() for w in PF.maximal_elements()], key=str)
369
+ [[0, 2, 3, 2, 0], [1, 0, 2, 3, 2], [1, 2, 3, 2, 1],
370
+ [2, 1, 0, 2, 3], [2, 3, 2, 1, 0], [3, 2, 1, 0, 2]]
371
+
372
+ sage: W = WeylGroup(['D',4,1])
373
+ sage: PF = W.pieri_factors()
374
+ sage: sorted([w.reduced_word() for w in PF.maximal_elements()], key=str)
375
+ [[0, 2, 4, 3, 2, 0], [1, 0, 2, 4, 3, 2], [1, 2, 4, 3, 2, 1],
376
+ [2, 1, 0, 2, 4, 3], [2, 4, 3, 2, 1, 0], [3, 2, 1, 0, 2, 3],
377
+ [4, 2, 1, 0, 2, 4], [4, 3, 2, 1, 0, 2]]
378
+ """
379
+ ct = self.W.cartan_type()
380
+ s = ct.translation_factors()[1]
381
+ R = RootSystem(ct).weight_space()
382
+ Lambda = R.fundamental_weights()
383
+ orbit = [R.reduced_word_of_translation(x)
384
+ for x in (s*(Lambda[1]-Lambda[1].level()*Lambda[0]))._orbit_iter()]
385
+ return [self.W.from_reduced_word(x) for x in orbit]
386
+
387
+
388
+ class PieriFactors_type_A(PieriFactors_finite_type):
389
+ r"""
390
+ The set of Pieri factors for finite type A.
391
+
392
+ This is the set of elements of the Weyl group that have a reduced
393
+ word that is strictly decreasing. This may also be viewed as the
394
+ restriction of affine type A Pieri factors to finite Weyl group
395
+ elements.
396
+ """
397
+
398
+ def __init__(self, W):
399
+ r"""
400
+ EXAMPLES::
401
+
402
+ sage: PF = WeylGroup(['A',5]).pieri_factors()
403
+ sage: PF
404
+ Pieri factors for Weyl Group of type ['A', 5] (as a matrix group acting on the ambient space)
405
+
406
+ TESTS::
407
+
408
+ sage: PF = WeylGroup(['A',3]).pieri_factors()
409
+ sage: PF.__class__
410
+ <class 'sage.combinat.root_system.pieri_factors.PieriFactors_type_A_with_category'>
411
+ sage: TestSuite(PF).run()
412
+ """
413
+ Parent.__init__(self, category=FiniteEnumeratedSets())
414
+ self.W = W
415
+
416
+ def maximal_elements_combinatorial(self):
417
+ r"""
418
+ Return the maximal Pieri factors, using the type A
419
+ combinatorial description.
420
+
421
+ EXAMPLES::
422
+
423
+ sage: W = WeylGroup(['A',4])
424
+ sage: PF = W.pieri_factors()
425
+ sage: PF.maximal_elements_combinatorial()[0].reduced_word()
426
+ [4, 3, 2, 1]
427
+ """
428
+ return [self.W.from_reduced_word(range(self.W.cartan_type().n, 0, -1))]
429
+
430
+ def stanley_symm_poly_weight(self, w):
431
+ r"""
432
+ EXAMPLES::
433
+
434
+ sage: W = WeylGroup(['A',4])
435
+ sage: PF = W.pieri_factors()
436
+ sage: PF.stanley_symm_poly_weight(W.from_reduced_word([3,1]))
437
+ 0
438
+ """
439
+ return 0
440
+
441
+
442
+ class PieriFactors_type_B(PieriFactors_finite_type):
443
+ r"""
444
+ The type B finite Pieri factors are realized as the set of
445
+ elements that have a reduced word that is a subword of
446
+ `12...(n-1)n(n-1)...21`. They are the restriction of the type C
447
+ affine Pieri factors to the set of finite Weyl group elements
448
+ under the usual embedding.
449
+ """
450
+
451
+ def __init__(self, W):
452
+ r"""
453
+ EXAMPLES::
454
+
455
+ sage: WeylGroup(['B',5]).pieri_factors()
456
+ Pieri factors for Weyl Group of type ['B', 5] (as a matrix group acting on the ambient space)
457
+
458
+ TESTS::
459
+
460
+ sage: PF = WeylGroup(['B',3]).pieri_factors()
461
+ sage: PF.__class__
462
+ <class 'sage.combinat.root_system.pieri_factors.PieriFactors_type_B_with_category'>
463
+ sage: TestSuite(PF).run()
464
+ """
465
+ Parent.__init__(self, category=FiniteEnumeratedSets())
466
+ self.W = W
467
+
468
+ def maximal_elements_combinatorial(self):
469
+ r"""
470
+ Return the maximal Pieri factors, using the type B
471
+ combinatorial description.
472
+
473
+ EXAMPLES::
474
+
475
+ sage: PF = WeylGroup(['B',4]).pieri_factors()
476
+ sage: PF.maximal_elements_combinatorial()[0].reduced_word()
477
+ [1, 2, 3, 4, 3, 2, 1]
478
+ """
479
+ N = self.W.cartan_type().n
480
+ li = list(range(1, N)) + list(range(N, 0, -1))
481
+ return [self.W.from_reduced_word(li)]
482
+
483
+ def stanley_symm_poly_weight(self, w):
484
+ r"""
485
+ Weight used in computing Stanley symmetric polynomials of type `B`.
486
+
487
+ The weight for finite type B is the number of components
488
+ of the support of an element minus the number of occurrences
489
+ of `n` in a reduced word.
490
+
491
+ EXAMPLES::
492
+
493
+ sage: W = WeylGroup(['B',5])
494
+ sage: PF = W.pieri_factors()
495
+ sage: PF.stanley_symm_poly_weight(W.from_reduced_word([3,1,5]))
496
+ 2
497
+ sage: PF.stanley_symm_poly_weight(W.from_reduced_word([3,4,5]))
498
+ 0
499
+ sage: PF.stanley_symm_poly_weight(W.from_reduced_word([1,2,3,4,5,4]))
500
+ 0
501
+ """
502
+ r = w.reduced_word().count(self.W.n)
503
+ return WeylGroup(self.W.cartan_type().dual().affine()).pieri_factors().stanley_symm_poly_weight(w) - r
504
+
505
+
506
+ class PieriFactors_type_A_affine(PieriFactors_affine_type):
507
+ r"""
508
+ The set of Pieri factors for type A affine, that is the set of
509
+ elements of the Weyl Group which are cyclically decreasing.
510
+
511
+ Those are used for constructing (affine) Stanley symmetric functions.
512
+
513
+ The Pieri factors are in bijection with the proper subsets of the
514
+ ``index_set``. The bijection is given by the support. Namely, let `f`
515
+ be a Pieri factor, and `red` a reduced word for `f`. No simple
516
+ reflection appears twice in red, and the support `S` of `red`
517
+ (that is the `i` such that `s_i` appears in `red`) does not depend
518
+ on the reduced word).
519
+ """
520
+
521
+ @staticmethod
522
+ def __classcall__(cls, W, min_length=0, max_length=infinity,
523
+ min_support=frozenset(), max_support=None):
524
+ r"""
525
+ TESTS::
526
+
527
+ sage: W = WeylGroup(['A',5,1])
528
+ sage: PF1 = sage.combinat.root_system.pieri_factors.PieriFactors_type_A_affine(W)
529
+ sage: PF2 = W.pieri_factors()
530
+ sage: PF3 = W.pieri_factors(min_support = [])
531
+ sage: PF4 = W.pieri_factors(max_support = [0,1,2,3,4,5])
532
+ sage: PF5 = W.pieri_factors(max_length = 10)
533
+ sage: PF6 = W.pieri_factors(min_length = 0)
534
+ sage: PF2 is PF1, PF3 is PF1, PF4 is PF1, PF5 is PF1, PF6 is PF1
535
+ (True, True, True, True, True)
536
+ """
537
+ assert W.cartan_type().is_affine() and W.cartan_type().letter == 'A'
538
+
539
+ # We use Python's frozenset's rather that Sage's Set's because
540
+ # the latter do not yet support the issubset method
541
+ min_support = frozenset(min_support)
542
+ if max_support is None:
543
+ max_support = frozenset(W.index_set())
544
+ else:
545
+ max_support = frozenset(max_support)
546
+ min_length = max(min_length, len(min_support))
547
+ max_length = min(len(max_support), max_length, len(W.index_set()) - 1)
548
+ return super().__classcall__(cls, W, min_length, max_length, min_support, max_support)
549
+
550
+ def __init__(self, W, min_length, max_length, min_support, max_support):
551
+ r"""
552
+ INPUT:
553
+
554
+ - ``W`` -- a Weyl group of affine type `A`
555
+ - ``min_length``, ``max_length`` -- nonnegative integers
556
+ - ``min_support``, ``max_support`` -- subsets of the index set of `W`
557
+
558
+ EXAMPLES::
559
+
560
+ sage: PF = WeylGroup(["A", 3, 1]).pieri_factors(); PF
561
+ Pieri factors for Weyl Group of type ['A', 3, 1] (as a matrix group acting on the root space)
562
+
563
+ TESTS::
564
+
565
+ sage: PF = WeylGroup(['A',3,1]).pieri_factors()
566
+ sage: PF.__class__
567
+ <class 'sage.combinat.root_system.pieri_factors.PieriFactors_type_A_affine_with_category'>
568
+ sage: TestSuite(PF).run()
569
+
570
+ sage: PF = WeylGroup(['A',3,1]).pieri_factors(min_length = 3)
571
+ sage: [w.reduced_word() for w in PF]
572
+ [[2, 1, 0], [1, 0, 3], [0, 3, 2], [3, 2, 1]]
573
+
574
+ sage: PF = WeylGroup(['A',4,1]).pieri_factors(min_support = [0,2])
575
+ sage: [w.reduced_word() for w in PF]
576
+ [[2, 0], [2, 1, 0], [3, 2, 0], [0, 4, 2], [3, 2, 1, 0], [2, 1, 0, 4], [0, 4, 3, 2]]
577
+
578
+ sage: PF = WeylGroup(['A',5,1]).pieri_factors(min_support = [0,1,2], max_support = [0,1,2,3])
579
+ sage: [w.reduced_word() for w in PF]
580
+ [[2, 1, 0], [3, 2, 1, 0]]
581
+
582
+ sage: PF = WeylGroup(['A',5,1]).pieri_factors(min_length = 2, max_length = 5)
583
+ sage: PF.generating_series()
584
+ 6*z^5 + 15*z^4 + 20*z^3 + 15*z^2
585
+ """
586
+ Parent.__init__(self, category=FiniteEnumeratedSets())
587
+ self.W = W
588
+
589
+ self._min_support = frozenset(min_support)
590
+ self._max_support = frozenset(max_support)
591
+
592
+ if not self._min_support.issubset(self._max_support):
593
+ raise ValueError("the min support must be a subset "
594
+ "of the max support")
595
+
596
+ self._extra_support = self._max_support.difference(self._min_support)
597
+
598
+ self._min_length = min_length
599
+ self._max_length = max_length
600
+
601
+ def subset(self, length):
602
+ r"""
603
+ Return the subset of the elements of ``self`` of length ``length``.
604
+
605
+ INPUT:
606
+
607
+ - ``length`` -- nonnegative integer
608
+
609
+ EXAMPLES::
610
+
611
+ sage: PF = WeylGroup(["A", 3, 1]).pieri_factors(); PF
612
+ Pieri factors for Weyl Group of type ['A', 3, 1] (as a matrix group acting on the root space)
613
+ sage: PF3 = PF.subset(length = 2)
614
+ sage: PF3.cardinality()
615
+ 6
616
+
617
+ TESTS:
618
+
619
+ We check that there is no reference effect (there was at some point!)::
620
+
621
+ sage: PF.cardinality()
622
+ 15
623
+ """
624
+ return self.__class__(self.W,
625
+ min_support=self._min_support,
626
+ max_support=self._max_support,
627
+ min_length=length,
628
+ max_length=length)
629
+
630
+ def maximal_elements_combinatorial(self):
631
+ r"""
632
+ Return the maximal Pieri factors, using the affine type A
633
+ combinatorial description.
634
+
635
+ EXAMPLES::
636
+
637
+ sage: W = WeylGroup(['A',4,1])
638
+ sage: PF = W.pieri_factors()
639
+ sage: [w.reduced_word() for w in PF.maximal_elements_combinatorial()]
640
+ [[3, 2, 1, 0], [2, 1, 0, 4], [1, 0, 4, 3], [0, 4, 3, 2], [4, 3, 2, 1]]
641
+ """
642
+ return self.subset(self._max_length)
643
+
644
+ def _test_maximal_elements(self, **options):
645
+ r"""
646
+ Same as :meth:`PieriFactors._test_maximal_elements`, but skips
647
+ the tests if ``self`` is not the full set of Pieri factors.
648
+
649
+ EXAMPLES::
650
+
651
+ sage: W = WeylGroup(['A',4,1])
652
+ sage: W.pieri_factors()._test_maximal_elements(verbose = True)
653
+ sage: W.pieri_factors(min_length = 1)._test_maximal_elements(verbose = True)
654
+ Strict subset of the Pieri factors; skipping test
655
+ """
656
+ tester = self._tester(**options)
657
+ index_set = self.W.index_set()
658
+ if self._min_length > 0 or self._max_length < len(self.W.index_set())-1 or self._max_support != frozenset(index_set):
659
+ tester.info("\n Strict subset of the Pieri factors; skipping test")
660
+ return
661
+ return super()._test_maximal_elements(**options)
662
+
663
+ def __contains__(self, w):
664
+ r"""
665
+ Return whether ``w`` is in ``self``.
666
+
667
+ EXAMPLES::
668
+
669
+ sage: W = WeylGroup(['A',6,1])
670
+ sage: PF = W.pieri_factors()
671
+ sage: w=W.from_reduced_word([4,3,1,0,6])
672
+ sage: w in PF
673
+ True
674
+ sage: w=W.from_reduced_word([4,3,1,0,2])
675
+ sage: w in PF
676
+ False
677
+ sage: w=W.from_reduced_word([4,3,1,0,6,0])
678
+ sage: w in PF
679
+ False
680
+ sage: w=W.from_reduced_word([])
681
+ sage: w in PF
682
+ True
683
+ sage: w=W.from_reduced_word([3,2,1,0])
684
+ sage: w in PF
685
+ True
686
+
687
+ sage: W=WeylGroup(['A',3,1])
688
+ sage: PF = W.pieri_factors()
689
+ sage: w=W.from_reduced_word([3,2,1,0])
690
+ sage: w in PF
691
+ False
692
+ """
693
+ if w not in self.W:
694
+ raise ValueError("{} is not an element of the Weyl group".format(w))
695
+ n = len(self.W.index_set()) - 1
696
+ red = w.reduced_word()
697
+ support = set(red)
698
+
699
+ if len(support) < len(red): # There should be no repetitions
700
+ return False
701
+
702
+ if not (self._min_length <= len(support) and
703
+ len(support) <= self._max_length and
704
+ self._min_support.issubset(support) and
705
+ support.issubset(self._max_support)):
706
+ return False
707
+
708
+ [rank, unrank] = sage.combinat.ranker.from_list(red)
709
+ for i in red:
710
+ j = (i + 1) % (n + 1)
711
+ if j in support:
712
+ if rank(i) < rank(j):
713
+ return False
714
+ return True
715
+
716
+ def __getitem__(self, support):
717
+ r"""
718
+ Return the cyclically decreasing element associated with ``support``.
719
+
720
+ INPUT:
721
+
722
+ - ``support`` -- a proper subset of the index_set, as a list or set
723
+
724
+ EXAMPLES::
725
+
726
+ sage: W = WeylGroup(["A", 5, 1])
727
+ sage: W.pieri_factors()[[0,1,2,3,5]].reduced_word()
728
+ [3, 2, 1, 0, 5]
729
+ sage: W.pieri_factors()[[0,1,3,4,5]].reduced_word()
730
+ [1, 0, 5, 4, 3]
731
+ sage: W.pieri_factors()[[0,1,2,3,4]].reduced_word()
732
+ [4, 3, 2, 1, 0]
733
+ """
734
+ index_set = sorted(self.W.index_set())
735
+ support = sorted(support)
736
+ if not set(support).issubset(set(index_set)) or support == index_set:
737
+ raise ValueError("the support must be a proper subset of the index set")
738
+ if not support:
739
+ return self.W.one()
740
+ s = self.W.simple_reflections()
741
+ i = 0
742
+ while i < len(support) and support[i] == index_set[i]:
743
+ i += 1
744
+ # This finds the first hole: either ley[i] is maximal or support[i] < support[i+1]+1
745
+ return prod((s[j] for j in list(reversed(support[0:i])) + list(reversed(support[i:]))), self.W.one())
746
+
747
+ def cardinality(self):
748
+ r"""
749
+ Return the cardinality of ``self``.
750
+
751
+ EXAMPLES::
752
+
753
+ sage: WeylGroup(["A", 3, 1]).pieri_factors().cardinality()
754
+ 15
755
+ """
756
+ if self._min_length == len(self._min_support) and self._max_length == len(self._max_support) - 1:
757
+ return Integer(2**(len(self._extra_support)) - 1)
758
+ return self.generating_series(weight=ConstantFunction(1))
759
+
760
+ def generating_series(self, weight=None):
761
+ r"""
762
+ Return a length generating series for the elements of ``self``.
763
+
764
+ EXAMPLES::
765
+
766
+ sage: W = WeylGroup(["A", 3, 1])
767
+ sage: W.pieri_factors().cardinality()
768
+ 15
769
+ sage: W.pieri_factors().generating_series()
770
+ 4*z^3 + 6*z^2 + 4*z + 1
771
+ """
772
+ if weight is None:
773
+ weight = self.default_weight()
774
+ l_min = len(self._min_support)
775
+ l_max = len(self._max_support)
776
+ return sum(Integer(l_max - l_min).binomial(l - l_min) * weight(l)
777
+ for l in range(self._min_length, self._max_length + 1))
778
+
779
+ def __iter__(self):
780
+ r"""
781
+ Return an iterator over the elements of ``self``.
782
+
783
+ EXAMPLES::
784
+
785
+ sage: W = WeylGroup(['A',4,1])
786
+ sage: PF = W.pieri_factors()
787
+ sage: f = PF.__iter__()
788
+ sage: next(f)
789
+ [1 0 0 0 0]
790
+ [0 1 0 0 0]
791
+ [0 0 1 0 0]
792
+ [0 0 0 1 0]
793
+ [0 0 0 0 1]
794
+ sage: [next(f).reduced_word() for i in range(6)]
795
+ [[0], [1], [2], [3], [4], [1, 0]]
796
+ """
797
+ from sage.combinat.subset import Subsets
798
+ for l in range(self._min_length, self._max_length + 1):
799
+ for extra in Subsets(self._extra_support,
800
+ l - len(self._min_support)):
801
+ yield self[self._min_support.union(extra)]
802
+
803
+ def stanley_symm_poly_weight(self, w):
804
+ r"""
805
+ Weight used in computing (affine) Stanley symmetric polynomials
806
+ for affine type A.
807
+
808
+ EXAMPLES::
809
+
810
+ sage: W = WeylGroup(['A',5,1])
811
+ sage: PF = W.pieri_factors()
812
+ sage: PF.stanley_symm_poly_weight(W.one())
813
+ 0
814
+ sage: PF.stanley_symm_poly_weight(W.from_reduced_word([5,4,2,1,0]))
815
+ 0
816
+ """
817
+ return 0
818
+
819
+
820
+ class PieriFactors_type_C_affine(PieriFactors_affine_type):
821
+ r"""
822
+ The type C affine Pieri factors are realized as the order ideal (in Bruhat
823
+ order) generated by cyclic rotations of the element with unique reduced word
824
+ `123...(n-1)n(n-1)...3210`.
825
+
826
+ EXAMPLES::
827
+
828
+ sage: W = WeylGroup(['C',3,1])
829
+ sage: PF = W.pieri_factors()
830
+ sage: sorted([u.reduced_word() for u in PF.maximal_elements()], key=str)
831
+ [[0, 1, 2, 3, 2, 1], [1, 0, 1, 2, 3, 2], [1, 2, 3, 2, 1, 0],
832
+ [2, 1, 0, 1, 2, 3], [2, 3, 2, 1, 0, 1], [3, 2, 1, 0, 1, 2]]
833
+ """
834
+
835
+ def __init__(self, W):
836
+ r"""
837
+ TESTS::
838
+
839
+ sage: PF = WeylGroup(['C',3,1]).pieri_factors()
840
+ sage: PF.__class__
841
+ <class 'sage.combinat.root_system.pieri_factors.PieriFactors_type_C_affine_with_category'>
842
+ sage: TestSuite(PF).run() # long time (4s on sage.math, 2011)
843
+ """
844
+ Parent.__init__(self, category=FiniteEnumeratedSets())
845
+ self.W = W
846
+
847
+ @cached_method
848
+ def maximal_elements_combinatorial(self):
849
+ r"""
850
+ Return the maximal Pieri factors, using the affine type C
851
+ combinatorial description.
852
+
853
+ EXAMPLES::
854
+
855
+ sage: PF = WeylGroup(['C',3,1]).pieri_factors()
856
+ sage: [w.reduced_word() for w in PF.maximal_elements_combinatorial()]
857
+ [[0, 1, 2, 3, 2, 1], [1, 0, 1, 2, 3, 2], [2, 1, 0, 1, 2, 3], [3, 2, 1, 0, 1, 2], [2, 3, 2, 1, 0, 1], [1, 2, 3, 2, 1, 0]]
858
+ """
859
+ n = self.W.n
860
+ rho = self.W.from_reduced_word(range(1, n-1))*self.W.from_reduced_word(range(n-1,-1,-1))
861
+ rotations = []
862
+ for i in range(2 * (n - 1)):
863
+ rho = rho.apply_simple_reflections(rho.descents()).apply_simple_reflections(rho.descents(), side='left')
864
+ rotations.append(rho)
865
+ return rotations
866
+
867
+ def stanley_symm_poly_weight(self, w):
868
+ r"""
869
+ Return the weight of a Pieri factor to be used in the definition of
870
+ Stanley symmetric functions.
871
+
872
+ For type C, this weight is the number of connected components
873
+ of the support (the indices appearing in a reduced word) of an
874
+ element.
875
+
876
+ EXAMPLES::
877
+
878
+ sage: W = WeylGroup(['C',5,1])
879
+ sage: PF = W.pieri_factors()
880
+ sage: PF.stanley_symm_poly_weight(W.from_reduced_word([1,3]))
881
+ 2
882
+ sage: PF.stanley_symm_poly_weight(W.from_reduced_word([1,3,2,0]))
883
+ 1
884
+ sage: PF.stanley_symm_poly_weight(W.from_reduced_word([5,3,0]))
885
+ 3
886
+ sage: PF.stanley_symm_poly_weight(W.one())
887
+ 0
888
+ """
889
+ # The algorithm="delete" is a workaround when the set of
890
+ # vertices is empty, in which case subgraph tries another
891
+ # method which turns out to currently fail with Dynkin diagrams
892
+ return DiGraph(DynkinDiagram(w.parent().cartan_type())).subgraph(set(w.reduced_word()), algorithm='delete').connected_components_number()
893
+
894
+
895
+ class PieriFactors_type_B_affine(PieriFactors_affine_type):
896
+ r"""
897
+ The type B affine Pieri factors are realized as the order ideal (in Bruhat
898
+ order) generated by the following elements:
899
+
900
+ - cyclic rotations of the element with reduced word
901
+ `234...(n-1)n(n-1)...3210`,
902
+ except for `123...n...320` and `023...n...321`.
903
+ - `123...(n-1)n(n-1)...321`
904
+ - `023...(n-1)n(n-1)...320`
905
+
906
+ EXAMPLES::
907
+
908
+ sage: W = WeylGroup(['B',4,1])
909
+ sage: PF = W.pieri_factors()
910
+ sage: W.from_reduced_word([2,3,4,3,2,1,0]) in PF.maximal_elements()
911
+ True
912
+ sage: W.from_reduced_word([0,2,3,4,3,2,1]) in PF.maximal_elements()
913
+ False
914
+ sage: W.from_reduced_word([1,0,2,3,4,3,2]) in PF.maximal_elements()
915
+ True
916
+ sage: W.from_reduced_word([0,2,3,4,3,2,0]) in PF.maximal_elements()
917
+ True
918
+ sage: W.from_reduced_word([0,2,0]) in PF
919
+ True
920
+ """
921
+
922
+ def __init__(self, W):
923
+ r"""
924
+
925
+ TESTS::
926
+
927
+ sage: PF = WeylGroup(["B",3,1]).pieri_factors()
928
+ sage: PF.__class__
929
+ <class 'sage.combinat.root_system.pieri_factors.PieriFactors_type_B_affine_with_category'>
930
+ sage: TestSuite(PF).run()
931
+ """
932
+ Parent.__init__(self, category=FiniteEnumeratedSets())
933
+ self.W = W
934
+
935
+ @cached_method
936
+ def maximal_elements_combinatorial(self):
937
+ r"""
938
+ Return the maximal Pieri factors, using the affine type B
939
+ combinatorial description.
940
+
941
+ EXAMPLES::
942
+
943
+ sage: W = WeylGroup(['B',4,1])
944
+ sage: [u.reduced_word() for u in W.pieri_factors().maximal_elements_combinatorial()]
945
+ [[1, 0, 2, 3, 4, 3, 2], [2, 1, 0, 2, 3, 4, 3], [3, 2, 1, 0, 2, 3, 4], [4, 3, 2, 1, 0, 2, 3], [3, 4, 3, 2, 1, 0, 2], [2, 3, 4, 3, 2, 1, 0], [1, 2, 3, 4, 3, 2, 1], [0, 2, 3, 4, 3, 2, 0]]
946
+ """
947
+ n = self.W.n
948
+ rho = self.W.from_reduced_word(range(2,n-1))*self.W.from_reduced_word(range(n-1,-1,-1))
949
+ rotations = []
950
+ for i in range(2 * (n - 2)):
951
+ rho = rho.apply_simple_reflections(rho.descents()).apply_simple_reflections(rho.descents(), side='left')
952
+ rotations.append(rho)
953
+ rotations.append(self.W.from_reduced_word(range(1,n-1))*self.W.from_reduced_word(range(n-1,0,-1)))
954
+ rotations.append(self.W.from_reduced_word([0])*self.W.from_reduced_word(range(2,n-1))*self.W.from_reduced_word(range(n-1,1,-1))*self.W.from_reduced_word([0]))
955
+ return rotations
956
+
957
+ def stanley_symm_poly_weight(self, w):
958
+ r"""
959
+ Return the weight of a Pieri factor to be used in the definition of
960
+ Stanley symmetric functions.
961
+
962
+ For type B, this weight involves the number of components of
963
+ the complement of the support of an element, where we consider
964
+ 0 and 1 to be one node -- if 1 is in the support, then we
965
+ pretend 0 in the support, and vice versa. We also consider 0
966
+ and 1 to be one node for the purpose of counting components of
967
+ the complement (as if the Dynkin diagram were that of type C).
968
+ Let n be the rank of the affine Weyl group in question (if
969
+ type ``['B',k,1]`` then we have n = k+1). Let ``chi(v.length() < n-1)``
970
+ be the indicator function that is 1 if the length of v is
971
+ smaller than n-1, and 0 if the length of v is greater than or
972
+ equal to n-1. If we call ``c'(v)`` the number of components of
973
+ the complement of the support of v, then the type B weight is
974
+ given by ``weight = c'(v) - chi(v.length() < n-1)``.
975
+
976
+ EXAMPLES::
977
+
978
+ sage: W = WeylGroup(['B',5,1])
979
+ sage: PF = W.pieri_factors()
980
+ sage: PF.stanley_symm_poly_weight(W.from_reduced_word([0,3]))
981
+ 1
982
+ sage: PF.stanley_symm_poly_weight(W.from_reduced_word([0,1,3]))
983
+ 1
984
+ sage: PF.stanley_symm_poly_weight(W.from_reduced_word([2,3]))
985
+ 1
986
+ sage: PF.stanley_symm_poly_weight(W.from_reduced_word([2,3,4,5]))
987
+ 0
988
+ sage: PF.stanley_symm_poly_weight(W.from_reduced_word([0,5]))
989
+ 0
990
+ sage: PF.stanley_symm_poly_weight(W.from_reduced_word([2,4,5,4,3,0]))
991
+ -1
992
+ sage: PF.stanley_symm_poly_weight(W.from_reduced_word([4,5,4,3,0]))
993
+ 0
994
+ """
995
+ ct = w.parent().cartan_type()
996
+ support = set(w.reduced_word())
997
+ if 1 in support or 0 in support:
998
+ support_complement = set(ct.index_set()).difference(support).difference(set([0, 1]))
999
+ else:
1000
+ support_complement = set(ct.index_set()).difference(support).difference(set([0]))
1001
+ return DiGraph(DynkinDiagram(ct)).subgraph(support_complement, algorithm='delete').connected_components_number() - 1
1002
+
1003
+
1004
+ class PieriFactors_type_D_affine(PieriFactors_affine_type):
1005
+ r"""
1006
+ The type D affine Pieri factors are realized as the order ideal
1007
+ (in Bruhat order) generated by the following elements:
1008
+
1009
+ * cyclic rotations of the element with reduced word
1010
+ `234...(n-2)n(n-1)(n-2)...3210`
1011
+ such that 1 and 0 are always adjacent and (n-1) and n are always adjacent.
1012
+ * `123...(n-2)n(n-1)(n-2)...321`
1013
+ * `023...(n-2)n(n-1)(n-2)...320`
1014
+ * `n(n-2)...2102...(n-2)n`
1015
+ * `(n-1)(n-2)...2102...(n-2)(n-1)`
1016
+
1017
+ EXAMPLES::
1018
+
1019
+ sage: W = WeylGroup(['D',5,1])
1020
+ sage: PF = W.pieri_factors()
1021
+ sage: W.from_reduced_word([3,2,1,0]) in PF
1022
+ True
1023
+ sage: W.from_reduced_word([0,3,2,1]) in PF
1024
+ False
1025
+ sage: W.from_reduced_word([0,1,3,2]) in PF
1026
+ True
1027
+ sage: W.from_reduced_word([2,0,1,3]) in PF
1028
+ True
1029
+ sage: sorted([u.reduced_word() for u in PF.maximal_elements()], key=str)
1030
+ [[0, 2, 3, 5, 4, 3, 2, 0], [1, 0, 2, 3, 5, 4, 3, 2], [1, 2, 3, 5, 4, 3, 2, 1],
1031
+ [2, 1, 0, 2, 3, 5, 4, 3], [2, 3, 5, 4, 3, 2, 1, 0], [3, 2, 1, 0, 2, 3, 5, 4],
1032
+ [3, 5, 4, 3, 2, 1, 0, 2], [4, 3, 2, 1, 0, 2, 3, 4], [5, 3, 2, 1, 0, 2, 3, 5],
1033
+ [5, 4, 3, 2, 1, 0, 2, 3]]
1034
+ """
1035
+
1036
+ def __init__(self, W):
1037
+ r"""
1038
+ TESTS::
1039
+
1040
+ sage: PF = WeylGroup(["D",4,1]).pieri_factors()
1041
+ sage: PF.__class__
1042
+ <class 'sage.combinat.root_system.pieri_factors.PieriFactors_type_D_affine_with_category'>
1043
+ sage: TestSuite(PF).run() # long time
1044
+ """
1045
+ Parent.__init__(self, category=FiniteEnumeratedSets())
1046
+ self.W = W
1047
+
1048
+ @cached_method
1049
+ def maximal_elements_combinatorial(self):
1050
+ r"""
1051
+ Return the maximal Pieri factors, using the affine type D
1052
+ combinatorial description.
1053
+
1054
+ EXAMPLES::
1055
+
1056
+ sage: W = WeylGroup(['D',5,1])
1057
+ sage: PF = W.pieri_factors()
1058
+ sage: set(PF.maximal_elements_combinatorial()) == set(PF.maximal_elements())
1059
+ True
1060
+ """
1061
+ n = self.W.n
1062
+ rho = self.W.from_reduced_word(range(2,n))*self.W.from_reduced_word(range(n-3,-1,-1))
1063
+ rotations = []
1064
+ for i in range(2 * (n - 3)):
1065
+ rho = rho.apply_simple_reflections(rho.descents()).apply_simple_reflections(rho.descents(),side='left')
1066
+ rotations.append(rho)
1067
+
1068
+ rotations.append(self.W.from_reduced_word(range(1,n))*self.W.from_reduced_word(range(n-3,0,-1)))
1069
+ rotations.append(self.W.from_reduced_word([0])*self.W.from_reduced_word(range(2,n))*self.W.from_reduced_word(range(n-3,1,-1))*self.W.from_reduced_word([0]))
1070
+ rotations.append(self.W.from_reduced_word(range(n-2,-1,-1))*self.W.from_reduced_word(range(2,n-1)))
1071
+ rotations.append(self.W.from_reduced_word([n-1])*self.W.from_reduced_word(range(n-3,-1,-1))*self.W.from_reduced_word(range(2,n-2))*self.W.from_reduced_word([n-1]))
1072
+ return rotations
1073
+
1074
+ def stanley_symm_poly_weight(self, w):
1075
+ r"""
1076
+ Return the weight of `w`, to be used in the definition of
1077
+ Stanley symmetric functions.
1078
+
1079
+ INPUT:
1080
+
1081
+ - ``w`` -- a Pieri factor for this type
1082
+
1083
+ For type `D`, this weight involves
1084
+ the number of components of the complement of the support of
1085
+ an element, where we consider `0` and `1` to be one node -- if `1`
1086
+ is in the support, then we pretend `0` in the support, and vice
1087
+ versa. Similarly with `n-1` and `n`. We also consider `0` and
1088
+ `1`, `n-1` and `n` to be one node for the purpose of counting
1089
+ components of the complement (as if the Dynkin diagram were
1090
+ that of type `C`).
1091
+
1092
+ Type D Stanley symmetric polynomial weights are still
1093
+ conjectural. The given weight comes from conditions on
1094
+ elements of the affine Fomin-Stanley subalgebra, but work is
1095
+ needed to show this weight is correct for affine Stanley
1096
+ symmetric functions -- see [LSS2009, Pon2010]_ for details.
1097
+
1098
+ EXAMPLES::
1099
+
1100
+ sage: W = WeylGroup(['D', 5, 1])
1101
+ sage: PF = W.pieri_factors()
1102
+ sage: PF.stanley_symm_poly_weight(W.from_reduced_word([5,2,1]))
1103
+ 0
1104
+ sage: PF.stanley_symm_poly_weight(W.from_reduced_word([5,2,1,0]))
1105
+ 0
1106
+ sage: PF.stanley_symm_poly_weight(W.from_reduced_word([5,2]))
1107
+ 1
1108
+ sage: PF.stanley_symm_poly_weight(W.from_reduced_word([]))
1109
+ 0
1110
+
1111
+ sage: W = WeylGroup(['D',7,1])
1112
+ sage: PF = W.pieri_factors()
1113
+ sage: PF.stanley_symm_poly_weight(W.from_reduced_word([2,4,6]))
1114
+ 2
1115
+ """
1116
+ ct = w.parent().cartan_type()
1117
+ support = set(w.reduced_word())
1118
+ n = w.parent().n
1119
+ if 1 in support or 0 in support:
1120
+ support = support.union(set([1])).difference(set([0]))
1121
+ if n in support or n - 1 in support:
1122
+ support = support.union(set([n - 2])).difference(set([n - 1]))
1123
+ support_complement = set(range(1, n - 1)).difference(support)
1124
+ return DiGraph(DynkinDiagram(ct)).subgraph(support_complement).connected_components_number() - 1
1125
+
1126
+
1127
+ # Inserts those classes in CartanTypes
1128
+ from sage.combinat.root_system import type_A_affine, type_B_affine, type_C_affine, type_D_affine, type_A, type_B
1129
+ type_A_affine.CartanType.PieriFactors = PieriFactors_type_A_affine
1130
+ type_B_affine.CartanType.PieriFactors = PieriFactors_type_B_affine
1131
+ type_C_affine.CartanType.PieriFactors = PieriFactors_type_C_affine
1132
+ type_D_affine.CartanType.PieriFactors = PieriFactors_type_D_affine
1133
+ type_A.CartanType.PieriFactors = PieriFactors_type_A
1134
+ type_B.CartanType.PieriFactors = PieriFactors_type_B
1135
+
1136
+ # Pieri factors for these types have not yet been mathematically
1137
+ # introduced rigorously
1138
+ #
1139
+ # import type_C, type_D, type_E, type_F, type_G, type_E_affine, type_F_affine, type_G_affine
1140
+ #type_C.CartanType.PieriFactors = PieriFactors_type_C
1141
+ #type_D.CartanType.PieriFactors = PieriFactors_type_D
1142
+ #type_E.CartanType.PieriFactors = PieriFactors_type_E
1143
+ #type_F.CartanType.PieriFactors = PieriFactors_type_F
1144
+ #type_G.CartanType.PieriFactors = PieriFactors_type_G
1145
+ #type_E_affine.CartanType.PieriFactors = PieriFactors_type_E_affine
1146
+ #type_F_affine.CartanType.PieriFactors = PieriFactors_type_F_affine
1147
+ #type_G_affine.CartanType.PieriFactors = PieriFactors_type_G_affine