passagemath-modules 10.6.31rc3__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.

Potentially problematic release.


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

Files changed (808) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +808 -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-0cd532bd.so.1 +0 -0
  6. passagemath_modules.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
  7. passagemath_modules.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
  8. passagemath_modules.libs/libgsl-42cda06f.so.28.0.0 +0 -0
  9. passagemath_modules.libs/libmpc-d8ebe4b5.so.3.3.1 +0 -0
  10. passagemath_modules.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
  11. passagemath_modules.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
  12. passagemath_modules.libs/libquadmath-bb76a5fc.so.0.0.0 +0 -0
  13. sage/algebras/all__sagemath_modules.py +20 -0
  14. sage/algebras/catalog.py +148 -0
  15. sage/algebras/clifford_algebra.py +3107 -0
  16. sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  17. sage/algebras/clifford_algebra_element.pxd +16 -0
  18. sage/algebras/clifford_algebra_element.pyx +997 -0
  19. sage/algebras/commutative_dga.py +4252 -0
  20. sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-musl.so +0 -0
  21. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  22. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  23. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  29. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  30. sage/algebras/finite_gca.py +528 -0
  31. sage/algebras/group_algebra.py +232 -0
  32. sage/algebras/lie_algebras/abelian.py +197 -0
  33. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  34. sage/algebras/lie_algebras/all.py +25 -0
  35. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  36. sage/algebras/lie_algebras/bch.py +177 -0
  37. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  38. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  39. sage/algebras/lie_algebras/center_uea.py +767 -0
  40. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  41. sage/algebras/lie_algebras/examples.py +683 -0
  42. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  43. sage/algebras/lie_algebras/heisenberg.py +820 -0
  44. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  47. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  48. sage/algebras/lie_algebras/morphism.py +661 -0
  49. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  50. sage/algebras/lie_algebras/onsager.py +1324 -0
  51. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  52. sage/algebras/lie_algebras/quotient.py +462 -0
  53. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  54. sage/algebras/lie_algebras/representation.py +1040 -0
  55. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  56. sage/algebras/lie_algebras/subalgebra.py +967 -0
  57. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  58. sage/algebras/lie_algebras/verma_module.py +1630 -0
  59. sage/algebras/lie_algebras/virasoro.py +1186 -0
  60. sage/algebras/octonion_algebra.cpython-314-x86_64-linux-musl.so +0 -0
  61. sage/algebras/octonion_algebra.pxd +20 -0
  62. sage/algebras/octonion_algebra.pyx +987 -0
  63. sage/algebras/orlik_solomon.py +907 -0
  64. sage/algebras/orlik_terao.py +779 -0
  65. sage/algebras/steenrod/all.py +7 -0
  66. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  67. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  68. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  69. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  70. sage/algebras/weyl_algebra.py +1126 -0
  71. sage/all__sagemath_modules.py +62 -0
  72. sage/calculus/all__sagemath_modules.py +19 -0
  73. sage/calculus/expr.py +205 -0
  74. sage/calculus/integration.cpython-314-x86_64-linux-musl.so +0 -0
  75. sage/calculus/integration.pyx +698 -0
  76. sage/calculus/interpolation.cpython-314-x86_64-linux-musl.so +0 -0
  77. sage/calculus/interpolation.pxd +13 -0
  78. sage/calculus/interpolation.pyx +387 -0
  79. sage/calculus/interpolators.cpython-314-x86_64-linux-musl.so +0 -0
  80. sage/calculus/interpolators.pyx +326 -0
  81. sage/calculus/ode.cpython-314-x86_64-linux-musl.so +0 -0
  82. sage/calculus/ode.pxd +5 -0
  83. sage/calculus/ode.pyx +610 -0
  84. sage/calculus/riemann.cpython-314-x86_64-linux-musl.so +0 -0
  85. sage/calculus/riemann.pyx +1521 -0
  86. sage/calculus/test_sympy.py +201 -0
  87. sage/calculus/transforms/all.py +7 -0
  88. sage/calculus/transforms/dft.py +844 -0
  89. sage/calculus/transforms/dwt.cpython-314-x86_64-linux-musl.so +0 -0
  90. sage/calculus/transforms/dwt.pxd +7 -0
  91. sage/calculus/transforms/dwt.pyx +160 -0
  92. sage/calculus/transforms/fft.cpython-314-x86_64-linux-musl.so +0 -0
  93. sage/calculus/transforms/fft.pxd +12 -0
  94. sage/calculus/transforms/fft.pyx +487 -0
  95. sage/calculus/wester.py +662 -0
  96. sage/coding/abstract_code.py +1108 -0
  97. sage/coding/ag_code.py +868 -0
  98. sage/coding/ag_code_decoders.cpython-314-x86_64-linux-musl.so +0 -0
  99. sage/coding/ag_code_decoders.pyx +2639 -0
  100. sage/coding/all.py +15 -0
  101. sage/coding/bch_code.py +494 -0
  102. sage/coding/binary_code.cpython-314-x86_64-linux-musl.so +0 -0
  103. sage/coding/binary_code.pxd +124 -0
  104. sage/coding/binary_code.pyx +4139 -0
  105. sage/coding/bounds_catalog.py +43 -0
  106. sage/coding/channel.py +819 -0
  107. sage/coding/channels_catalog.py +29 -0
  108. sage/coding/code_bounds.py +755 -0
  109. sage/coding/code_constructions.py +804 -0
  110. sage/coding/codes_catalog.py +111 -0
  111. sage/coding/cyclic_code.py +1329 -0
  112. sage/coding/databases.py +316 -0
  113. sage/coding/decoder.py +373 -0
  114. sage/coding/decoders_catalog.py +88 -0
  115. sage/coding/delsarte_bounds.py +709 -0
  116. sage/coding/encoder.py +390 -0
  117. sage/coding/encoders_catalog.py +64 -0
  118. sage/coding/extended_code.py +468 -0
  119. sage/coding/gabidulin_code.py +1058 -0
  120. sage/coding/golay_code.py +404 -0
  121. sage/coding/goppa_code.py +441 -0
  122. sage/coding/grs_code.py +2371 -0
  123. sage/coding/guava.py +107 -0
  124. sage/coding/guruswami_sudan/all.py +1 -0
  125. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  126. sage/coding/guruswami_sudan/interpolation.py +409 -0
  127. sage/coding/guruswami_sudan/utils.py +176 -0
  128. sage/coding/hamming_code.py +176 -0
  129. sage/coding/information_set_decoder.py +1032 -0
  130. sage/coding/kasami_codes.cpython-314-x86_64-linux-musl.so +0 -0
  131. sage/coding/kasami_codes.pyx +351 -0
  132. sage/coding/linear_code.py +3067 -0
  133. sage/coding/linear_code_no_metric.py +1354 -0
  134. sage/coding/linear_rank_metric.py +961 -0
  135. sage/coding/parity_check_code.py +353 -0
  136. sage/coding/punctured_code.py +719 -0
  137. sage/coding/reed_muller_code.py +999 -0
  138. sage/coding/self_dual_codes.py +942 -0
  139. sage/coding/source_coding/all.py +2 -0
  140. sage/coding/source_coding/huffman.py +553 -0
  141. sage/coding/subfield_subcode.py +423 -0
  142. sage/coding/two_weight_db.py +399 -0
  143. sage/combinat/all__sagemath_modules.py +7 -0
  144. sage/combinat/cartesian_product.py +347 -0
  145. sage/combinat/family.py +11 -0
  146. sage/combinat/free_module.py +1977 -0
  147. sage/combinat/root_system/all.py +147 -0
  148. sage/combinat/root_system/ambient_space.py +527 -0
  149. sage/combinat/root_system/associahedron.py +471 -0
  150. sage/combinat/root_system/braid_move_calculator.py +143 -0
  151. sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-musl.so +0 -0
  152. sage/combinat/root_system/braid_orbit.pyx +144 -0
  153. sage/combinat/root_system/branching_rules.py +2301 -0
  154. sage/combinat/root_system/cartan_matrix.py +1245 -0
  155. sage/combinat/root_system/cartan_type.py +3069 -0
  156. sage/combinat/root_system/coxeter_group.py +162 -0
  157. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  158. sage/combinat/root_system/coxeter_type.py +681 -0
  159. sage/combinat/root_system/dynkin_diagram.py +900 -0
  160. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  161. sage/combinat/root_system/fundamental_group.py +795 -0
  162. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  163. sage/combinat/root_system/integrable_representations.py +1227 -0
  164. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  165. sage/combinat/root_system/pieri_factors.py +1147 -0
  166. sage/combinat/root_system/plot.py +1615 -0
  167. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  168. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  169. sage/combinat/root_system/root_space.py +487 -0
  170. sage/combinat/root_system/root_system.py +882 -0
  171. sage/combinat/root_system/type_A.py +348 -0
  172. sage/combinat/root_system/type_A_affine.py +227 -0
  173. sage/combinat/root_system/type_A_infinity.py +241 -0
  174. sage/combinat/root_system/type_B.py +347 -0
  175. sage/combinat/root_system/type_BC_affine.py +287 -0
  176. sage/combinat/root_system/type_B_affine.py +216 -0
  177. sage/combinat/root_system/type_C.py +317 -0
  178. sage/combinat/root_system/type_C_affine.py +188 -0
  179. sage/combinat/root_system/type_D.py +357 -0
  180. sage/combinat/root_system/type_D_affine.py +208 -0
  181. sage/combinat/root_system/type_E.py +641 -0
  182. sage/combinat/root_system/type_E_affine.py +231 -0
  183. sage/combinat/root_system/type_F.py +387 -0
  184. sage/combinat/root_system/type_F_affine.py +137 -0
  185. sage/combinat/root_system/type_G.py +293 -0
  186. sage/combinat/root_system/type_G_affine.py +132 -0
  187. sage/combinat/root_system/type_H.py +105 -0
  188. sage/combinat/root_system/type_I.py +110 -0
  189. sage/combinat/root_system/type_Q.py +150 -0
  190. sage/combinat/root_system/type_affine.py +509 -0
  191. sage/combinat/root_system/type_dual.py +704 -0
  192. sage/combinat/root_system/type_folded.py +301 -0
  193. sage/combinat/root_system/type_marked.py +748 -0
  194. sage/combinat/root_system/type_reducible.py +601 -0
  195. sage/combinat/root_system/type_relabel.py +730 -0
  196. sage/combinat/root_system/type_super_A.py +837 -0
  197. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  198. sage/combinat/root_system/weight_space.py +639 -0
  199. sage/combinat/root_system/weyl_characters.py +2238 -0
  200. sage/crypto/__init__.py +4 -0
  201. sage/crypto/all.py +28 -0
  202. sage/crypto/block_cipher/all.py +7 -0
  203. sage/crypto/block_cipher/des.py +1065 -0
  204. sage/crypto/block_cipher/miniaes.py +2171 -0
  205. sage/crypto/block_cipher/present.py +909 -0
  206. sage/crypto/block_cipher/sdes.py +1527 -0
  207. sage/crypto/boolean_function.cpython-314-x86_64-linux-musl.so +0 -0
  208. sage/crypto/boolean_function.pxd +10 -0
  209. sage/crypto/boolean_function.pyx +1487 -0
  210. sage/crypto/cipher.py +78 -0
  211. sage/crypto/classical.py +3668 -0
  212. sage/crypto/classical_cipher.py +569 -0
  213. sage/crypto/cryptosystem.py +387 -0
  214. sage/crypto/key_exchange/all.py +7 -0
  215. sage/crypto/key_exchange/catalog.py +24 -0
  216. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  217. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  218. sage/crypto/lattice.py +312 -0
  219. sage/crypto/lfsr.py +295 -0
  220. sage/crypto/lwe.py +840 -0
  221. sage/crypto/mq/__init__.py +4 -0
  222. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  223. sage/crypto/mq/rijndael_gf.py +2345 -0
  224. sage/crypto/mq/sbox.py +7 -0
  225. sage/crypto/mq/sr.py +3344 -0
  226. sage/crypto/public_key/all.py +5 -0
  227. sage/crypto/public_key/blum_goldwasser.py +776 -0
  228. sage/crypto/sbox.cpython-314-x86_64-linux-musl.so +0 -0
  229. sage/crypto/sbox.pyx +2090 -0
  230. sage/crypto/sboxes.py +2090 -0
  231. sage/crypto/stream.py +390 -0
  232. sage/crypto/stream_cipher.py +297 -0
  233. sage/crypto/util.py +519 -0
  234. sage/ext/all__sagemath_modules.py +1 -0
  235. sage/ext/interpreters/__init__.py +1 -0
  236. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  237. sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-musl.so +0 -0
  238. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  239. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  240. sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-musl.so +0 -0
  241. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  242. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  243. sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-musl.so +0 -0
  244. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  245. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  246. sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-musl.so +0 -0
  247. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  248. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  249. sage/geometry/all__sagemath_modules.py +5 -0
  250. sage/geometry/toric_lattice.py +1745 -0
  251. sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-musl.so +0 -0
  252. sage/geometry/toric_lattice_element.pyx +432 -0
  253. sage/groups/abelian_gps/abelian_group.py +1925 -0
  254. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  255. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  256. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  257. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  258. sage/groups/abelian_gps/element_base.py +341 -0
  259. sage/groups/abelian_gps/values.py +488 -0
  260. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  261. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  262. sage/groups/additive_abelian/all.py +4 -0
  263. sage/groups/additive_abelian/qmodnz.py +231 -0
  264. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  265. sage/groups/affine_gps/affine_group.py +535 -0
  266. sage/groups/affine_gps/all.py +1 -0
  267. sage/groups/affine_gps/catalog.py +17 -0
  268. sage/groups/affine_gps/euclidean_group.py +246 -0
  269. sage/groups/affine_gps/group_element.py +562 -0
  270. sage/groups/all__sagemath_modules.py +12 -0
  271. sage/groups/galois_group.py +479 -0
  272. sage/groups/matrix_gps/all.py +4 -0
  273. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  274. sage/groups/matrix_gps/catalog.py +26 -0
  275. sage/groups/matrix_gps/coxeter_group.py +927 -0
  276. sage/groups/matrix_gps/finitely_generated.py +487 -0
  277. sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-musl.so +0 -0
  278. sage/groups/matrix_gps/group_element.pxd +11 -0
  279. sage/groups/matrix_gps/group_element.pyx +431 -0
  280. sage/groups/matrix_gps/linear.py +440 -0
  281. sage/groups/matrix_gps/matrix_group.py +617 -0
  282. sage/groups/matrix_gps/named_group.py +296 -0
  283. sage/groups/matrix_gps/orthogonal.py +544 -0
  284. sage/groups/matrix_gps/symplectic.py +251 -0
  285. sage/groups/matrix_gps/unitary.py +436 -0
  286. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  287. sage/groups/misc_gps/argument_groups.py +1905 -0
  288. sage/groups/misc_gps/imaginary_groups.py +479 -0
  289. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-musl.so +0 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  293. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-musl.so +0 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  296. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  297. sage/homology/algebraic_topological_model.py +595 -0
  298. sage/homology/all.py +2 -0
  299. sage/homology/all__sagemath_modules.py +8 -0
  300. sage/homology/chain_complex.py +2148 -0
  301. sage/homology/chain_complex_homspace.py +165 -0
  302. sage/homology/chain_complex_morphism.py +629 -0
  303. sage/homology/chain_homotopy.py +604 -0
  304. sage/homology/chains.py +653 -0
  305. sage/homology/free_resolution.py +923 -0
  306. sage/homology/graded_resolution.py +567 -0
  307. sage/homology/hochschild_complex.py +756 -0
  308. sage/homology/homology_group.py +188 -0
  309. sage/homology/homology_morphism.py +422 -0
  310. sage/homology/homology_vector_space_with_basis.py +1454 -0
  311. sage/homology/koszul_complex.py +169 -0
  312. sage/homology/matrix_utils.py +205 -0
  313. sage/libs/all__sagemath_modules.py +1 -0
  314. sage/libs/gsl/__init__.py +1 -0
  315. sage/libs/gsl/airy.pxd +56 -0
  316. sage/libs/gsl/all.pxd +66 -0
  317. sage/libs/gsl/array.cpython-314-x86_64-linux-musl.so +0 -0
  318. sage/libs/gsl/array.pxd +5 -0
  319. sage/libs/gsl/array.pyx +102 -0
  320. sage/libs/gsl/bessel.pxd +208 -0
  321. sage/libs/gsl/blas.pxd +116 -0
  322. sage/libs/gsl/blas_types.pxd +34 -0
  323. sage/libs/gsl/block.pxd +52 -0
  324. sage/libs/gsl/chebyshev.pxd +37 -0
  325. sage/libs/gsl/clausen.pxd +12 -0
  326. sage/libs/gsl/combination.pxd +47 -0
  327. sage/libs/gsl/complex.pxd +151 -0
  328. sage/libs/gsl/coulomb.pxd +30 -0
  329. sage/libs/gsl/coupling.pxd +21 -0
  330. sage/libs/gsl/dawson.pxd +12 -0
  331. sage/libs/gsl/debye.pxd +24 -0
  332. sage/libs/gsl/dilog.pxd +14 -0
  333. sage/libs/gsl/eigen.pxd +46 -0
  334. sage/libs/gsl/elementary.pxd +12 -0
  335. sage/libs/gsl/ellint.pxd +48 -0
  336. sage/libs/gsl/elljac.pxd +8 -0
  337. sage/libs/gsl/erf.pxd +32 -0
  338. sage/libs/gsl/errno.pxd +26 -0
  339. sage/libs/gsl/exp.pxd +44 -0
  340. sage/libs/gsl/expint.pxd +44 -0
  341. sage/libs/gsl/fermi_dirac.pxd +44 -0
  342. sage/libs/gsl/fft.pxd +121 -0
  343. sage/libs/gsl/fit.pxd +50 -0
  344. sage/libs/gsl/gamma.pxd +94 -0
  345. sage/libs/gsl/gegenbauer.pxd +26 -0
  346. sage/libs/gsl/histogram.pxd +176 -0
  347. sage/libs/gsl/hyperg.pxd +52 -0
  348. sage/libs/gsl/integration.pxd +69 -0
  349. sage/libs/gsl/interp.pxd +109 -0
  350. sage/libs/gsl/laguerre.pxd +24 -0
  351. sage/libs/gsl/lambert.pxd +16 -0
  352. sage/libs/gsl/legendre.pxd +90 -0
  353. sage/libs/gsl/linalg.pxd +185 -0
  354. sage/libs/gsl/log.pxd +26 -0
  355. sage/libs/gsl/math.pxd +43 -0
  356. sage/libs/gsl/matrix.pxd +143 -0
  357. sage/libs/gsl/matrix_complex.pxd +130 -0
  358. sage/libs/gsl/min.pxd +67 -0
  359. sage/libs/gsl/monte.pxd +56 -0
  360. sage/libs/gsl/ntuple.pxd +32 -0
  361. sage/libs/gsl/odeiv.pxd +70 -0
  362. sage/libs/gsl/permutation.pxd +78 -0
  363. sage/libs/gsl/poly.pxd +40 -0
  364. sage/libs/gsl/pow_int.pxd +12 -0
  365. sage/libs/gsl/psi.pxd +28 -0
  366. sage/libs/gsl/qrng.pxd +29 -0
  367. sage/libs/gsl/random.pxd +257 -0
  368. sage/libs/gsl/rng.pxd +100 -0
  369. sage/libs/gsl/roots.pxd +72 -0
  370. sage/libs/gsl/sort.pxd +36 -0
  371. sage/libs/gsl/statistics.pxd +59 -0
  372. sage/libs/gsl/sum.pxd +55 -0
  373. sage/libs/gsl/synchrotron.pxd +16 -0
  374. sage/libs/gsl/transport.pxd +24 -0
  375. sage/libs/gsl/trig.pxd +58 -0
  376. sage/libs/gsl/types.pxd +137 -0
  377. sage/libs/gsl/vector.pxd +101 -0
  378. sage/libs/gsl/vector_complex.pxd +83 -0
  379. sage/libs/gsl/wavelet.pxd +49 -0
  380. sage/libs/gsl/zeta.pxd +28 -0
  381. sage/libs/mpc/__init__.pxd +114 -0
  382. sage/libs/mpc/types.pxd +28 -0
  383. sage/libs/mpfr/__init__.pxd +299 -0
  384. sage/libs/mpfr/types.pxd +26 -0
  385. sage/libs/mpmath/__init__.py +1 -0
  386. sage/libs/mpmath/all.py +27 -0
  387. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  388. sage/libs/mpmath/utils.cpython-314-x86_64-linux-musl.so +0 -0
  389. sage/libs/mpmath/utils.pxd +4 -0
  390. sage/libs/mpmath/utils.pyx +319 -0
  391. sage/matrix/action.cpython-314-x86_64-linux-musl.so +0 -0
  392. sage/matrix/action.pxd +26 -0
  393. sage/matrix/action.pyx +596 -0
  394. sage/matrix/all.py +9 -0
  395. sage/matrix/args.cpython-314-x86_64-linux-musl.so +0 -0
  396. sage/matrix/args.pxd +144 -0
  397. sage/matrix/args.pyx +1668 -0
  398. sage/matrix/benchmark.py +1258 -0
  399. sage/matrix/berlekamp_massey.py +95 -0
  400. sage/matrix/compute_J_ideal.py +926 -0
  401. sage/matrix/constructor.cpython-314-x86_64-linux-musl.so +0 -0
  402. sage/matrix/constructor.pyx +750 -0
  403. sage/matrix/docs.py +430 -0
  404. sage/matrix/echelon_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  405. sage/matrix/echelon_matrix.pyx +155 -0
  406. sage/matrix/matrix.pxd +2 -0
  407. sage/matrix/matrix0.cpython-314-x86_64-linux-musl.so +0 -0
  408. sage/matrix/matrix0.pxd +68 -0
  409. sage/matrix/matrix0.pyx +6324 -0
  410. sage/matrix/matrix1.cpython-314-x86_64-linux-musl.so +0 -0
  411. sage/matrix/matrix1.pxd +8 -0
  412. sage/matrix/matrix1.pyx +2851 -0
  413. sage/matrix/matrix2.cpython-314-x86_64-linux-musl.so +0 -0
  414. sage/matrix/matrix2.pxd +25 -0
  415. sage/matrix/matrix2.pyx +20181 -0
  416. sage/matrix/matrix_cdv.cpython-314-x86_64-linux-musl.so +0 -0
  417. sage/matrix/matrix_cdv.pxd +4 -0
  418. sage/matrix/matrix_cdv.pyx +93 -0
  419. sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  420. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  421. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  422. sage/matrix/matrix_dense.cpython-314-x86_64-linux-musl.so +0 -0
  423. sage/matrix/matrix_dense.pxd +5 -0
  424. sage/matrix/matrix_dense.pyx +343 -0
  425. sage/matrix/matrix_domain_dense.pxd +5 -0
  426. sage/matrix/matrix_domain_sparse.pxd +5 -0
  427. sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  428. sage/matrix/matrix_double_dense.pxd +7 -0
  429. sage/matrix/matrix_double_dense.pyx +3906 -0
  430. sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  431. sage/matrix/matrix_double_sparse.pxd +6 -0
  432. sage/matrix/matrix_double_sparse.pyx +248 -0
  433. sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-musl.so +0 -0
  434. sage/matrix/matrix_generic_dense.pxd +7 -0
  435. sage/matrix/matrix_generic_dense.pyx +354 -0
  436. sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  437. sage/matrix/matrix_generic_sparse.pxd +7 -0
  438. sage/matrix/matrix_generic_sparse.pyx +461 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  441. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  442. sage/matrix/matrix_misc.py +313 -0
  443. sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
  444. sage/matrix/matrix_numpy_dense.pxd +14 -0
  445. sage/matrix/matrix_numpy_dense.pyx +450 -0
  446. sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  447. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  448. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  449. sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  450. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  451. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  452. sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  453. sage/matrix/matrix_real_double_dense.pxd +7 -0
  454. sage/matrix/matrix_real_double_dense.pyx +122 -0
  455. sage/matrix/matrix_space.py +2848 -0
  456. sage/matrix/matrix_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  457. sage/matrix/matrix_sparse.pxd +5 -0
  458. sage/matrix/matrix_sparse.pyx +1222 -0
  459. sage/matrix/matrix_window.cpython-314-x86_64-linux-musl.so +0 -0
  460. sage/matrix/matrix_window.pxd +37 -0
  461. sage/matrix/matrix_window.pyx +242 -0
  462. sage/matrix/misc_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  463. sage/matrix/misc_mpfr.pyx +80 -0
  464. sage/matrix/operation_table.py +1182 -0
  465. sage/matrix/special.py +3666 -0
  466. sage/matrix/strassen.cpython-314-x86_64-linux-musl.so +0 -0
  467. sage/matrix/strassen.pyx +851 -0
  468. sage/matrix/symplectic_basis.py +541 -0
  469. sage/matrix/template.pxd +6 -0
  470. sage/matrix/tests.py +71 -0
  471. sage/matroids/advanced.py +77 -0
  472. sage/matroids/all.py +13 -0
  473. sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  474. sage/matroids/basis_exchange_matroid.pxd +96 -0
  475. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  476. sage/matroids/basis_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  477. sage/matroids/basis_matroid.pxd +45 -0
  478. sage/matroids/basis_matroid.pyx +1217 -0
  479. sage/matroids/catalog.py +44 -0
  480. sage/matroids/chow_ring.py +473 -0
  481. sage/matroids/chow_ring_ideal.py +849 -0
  482. sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  483. sage/matroids/circuit_closures_matroid.pxd +16 -0
  484. sage/matroids/circuit_closures_matroid.pyx +559 -0
  485. sage/matroids/circuits_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  486. sage/matroids/circuits_matroid.pxd +38 -0
  487. sage/matroids/circuits_matroid.pyx +947 -0
  488. sage/matroids/constructor.py +1086 -0
  489. sage/matroids/database_collections.py +365 -0
  490. sage/matroids/database_matroids.py +5338 -0
  491. sage/matroids/dual_matroid.py +583 -0
  492. sage/matroids/extension.cpython-314-x86_64-linux-musl.so +0 -0
  493. sage/matroids/extension.pxd +34 -0
  494. sage/matroids/extension.pyx +519 -0
  495. sage/matroids/flats_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  496. sage/matroids/flats_matroid.pxd +28 -0
  497. sage/matroids/flats_matroid.pyx +715 -0
  498. sage/matroids/gammoid.py +600 -0
  499. sage/matroids/graphic_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  500. sage/matroids/graphic_matroid.pxd +39 -0
  501. sage/matroids/graphic_matroid.pyx +2024 -0
  502. sage/matroids/lean_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  503. sage/matroids/lean_matrix.pxd +126 -0
  504. sage/matroids/lean_matrix.pyx +3667 -0
  505. sage/matroids/linear_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  506. sage/matroids/linear_matroid.pxd +180 -0
  507. sage/matroids/linear_matroid.pyx +6649 -0
  508. sage/matroids/matroid.cpython-314-x86_64-linux-musl.so +0 -0
  509. sage/matroids/matroid.pxd +243 -0
  510. sage/matroids/matroid.pyx +8759 -0
  511. sage/matroids/matroids_catalog.py +190 -0
  512. sage/matroids/matroids_plot_helpers.py +890 -0
  513. sage/matroids/minor_matroid.py +480 -0
  514. sage/matroids/minorfix.h +9 -0
  515. sage/matroids/named_matroids.py +5 -0
  516. sage/matroids/rank_matroid.py +268 -0
  517. sage/matroids/set_system.cpython-314-x86_64-linux-musl.so +0 -0
  518. sage/matroids/set_system.pxd +38 -0
  519. sage/matroids/set_system.pyx +800 -0
  520. sage/matroids/transversal_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  521. sage/matroids/transversal_matroid.pxd +14 -0
  522. sage/matroids/transversal_matroid.pyx +893 -0
  523. sage/matroids/union_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  524. sage/matroids/union_matroid.pxd +20 -0
  525. sage/matroids/union_matroid.pyx +331 -0
  526. sage/matroids/unpickling.cpython-314-x86_64-linux-musl.so +0 -0
  527. sage/matroids/unpickling.pyx +843 -0
  528. sage/matroids/utilities.py +809 -0
  529. sage/misc/all__sagemath_modules.py +20 -0
  530. sage/misc/c3.cpython-314-x86_64-linux-musl.so +0 -0
  531. sage/misc/c3.pyx +238 -0
  532. sage/misc/compat.py +87 -0
  533. sage/misc/element_with_label.py +173 -0
  534. sage/misc/func_persist.py +79 -0
  535. sage/misc/pickle_old.cpython-314-x86_64-linux-musl.so +0 -0
  536. sage/misc/pickle_old.pyx +19 -0
  537. sage/misc/proof.py +7 -0
  538. sage/misc/replace_dot_all.py +472 -0
  539. sage/misc/sagedoc_conf.py +168 -0
  540. sage/misc/sphinxify.py +167 -0
  541. sage/misc/test_class_pickling.py +85 -0
  542. sage/modules/all.py +42 -0
  543. sage/modules/complex_double_vector.py +25 -0
  544. sage/modules/diamond_cutting.py +380 -0
  545. sage/modules/fg_pid/all.py +1 -0
  546. sage/modules/fg_pid/fgp_element.py +456 -0
  547. sage/modules/fg_pid/fgp_module.py +2091 -0
  548. sage/modules/fg_pid/fgp_morphism.py +550 -0
  549. sage/modules/filtered_vector_space.py +1271 -0
  550. sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-musl.so +0 -0
  551. sage/modules/finite_submodule_iter.pxd +27 -0
  552. sage/modules/finite_submodule_iter.pyx +452 -0
  553. sage/modules/fp_graded/all.py +1 -0
  554. sage/modules/fp_graded/element.py +346 -0
  555. sage/modules/fp_graded/free_element.py +298 -0
  556. sage/modules/fp_graded/free_homspace.py +53 -0
  557. sage/modules/fp_graded/free_module.py +1060 -0
  558. sage/modules/fp_graded/free_morphism.py +217 -0
  559. sage/modules/fp_graded/homspace.py +563 -0
  560. sage/modules/fp_graded/module.py +1340 -0
  561. sage/modules/fp_graded/morphism.py +1990 -0
  562. sage/modules/fp_graded/steenrod/all.py +1 -0
  563. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  564. sage/modules/fp_graded/steenrod/module.py +477 -0
  565. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  566. sage/modules/fp_graded/steenrod/profile.py +241 -0
  567. sage/modules/free_module.py +8447 -0
  568. sage/modules/free_module_element.cpython-314-x86_64-linux-musl.so +0 -0
  569. sage/modules/free_module_element.pxd +22 -0
  570. sage/modules/free_module_element.pyx +5445 -0
  571. sage/modules/free_module_homspace.py +369 -0
  572. sage/modules/free_module_integer.py +896 -0
  573. sage/modules/free_module_morphism.py +823 -0
  574. sage/modules/free_module_pseudohomspace.py +352 -0
  575. sage/modules/free_module_pseudomorphism.py +578 -0
  576. sage/modules/free_quadratic_module.py +1706 -0
  577. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  578. sage/modules/matrix_morphism.py +1745 -0
  579. sage/modules/misc.py +103 -0
  580. sage/modules/module_functors.py +192 -0
  581. sage/modules/multi_filtered_vector_space.py +719 -0
  582. sage/modules/ore_module.py +2208 -0
  583. sage/modules/ore_module_element.py +178 -0
  584. sage/modules/ore_module_homspace.py +147 -0
  585. sage/modules/ore_module_morphism.py +968 -0
  586. sage/modules/quotient_module.py +699 -0
  587. sage/modules/real_double_vector.py +22 -0
  588. sage/modules/submodule.py +255 -0
  589. sage/modules/tensor_operations.py +567 -0
  590. sage/modules/torsion_quadratic_module.py +1352 -0
  591. sage/modules/tutorial_free_modules.py +248 -0
  592. sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  593. sage/modules/vector_complex_double_dense.pxd +6 -0
  594. sage/modules/vector_complex_double_dense.pyx +117 -0
  595. sage/modules/vector_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  596. sage/modules/vector_double_dense.pxd +6 -0
  597. sage/modules/vector_double_dense.pyx +604 -0
  598. sage/modules/vector_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  599. sage/modules/vector_integer_dense.pxd +15 -0
  600. sage/modules/vector_integer_dense.pyx +361 -0
  601. sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  602. sage/modules/vector_integer_sparse.pxd +29 -0
  603. sage/modules/vector_integer_sparse.pyx +406 -0
  604. sage/modules/vector_modn_dense.cpython-314-x86_64-linux-musl.so +0 -0
  605. sage/modules/vector_modn_dense.pxd +12 -0
  606. sage/modules/vector_modn_dense.pyx +394 -0
  607. sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  608. sage/modules/vector_modn_sparse.pxd +21 -0
  609. sage/modules/vector_modn_sparse.pyx +298 -0
  610. sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
  611. sage/modules/vector_numpy_dense.pxd +15 -0
  612. sage/modules/vector_numpy_dense.pyx +304 -0
  613. sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  614. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  615. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  616. sage/modules/vector_rational_dense.cpython-314-x86_64-linux-musl.so +0 -0
  617. sage/modules/vector_rational_dense.pxd +15 -0
  618. sage/modules/vector_rational_dense.pyx +387 -0
  619. sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  620. sage/modules/vector_rational_sparse.pxd +30 -0
  621. sage/modules/vector_rational_sparse.pyx +413 -0
  622. sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  623. sage/modules/vector_real_double_dense.pxd +6 -0
  624. sage/modules/vector_real_double_dense.pyx +126 -0
  625. sage/modules/vector_space_homspace.py +430 -0
  626. sage/modules/vector_space_morphism.py +989 -0
  627. sage/modules/with_basis/all.py +15 -0
  628. sage/modules/with_basis/cell_module.py +494 -0
  629. sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-musl.so +0 -0
  630. sage/modules/with_basis/indexed_element.pxd +13 -0
  631. sage/modules/with_basis/indexed_element.pyx +1058 -0
  632. sage/modules/with_basis/invariant.py +1075 -0
  633. sage/modules/with_basis/morphism.py +1636 -0
  634. sage/modules/with_basis/representation.py +2939 -0
  635. sage/modules/with_basis/subquotient.py +685 -0
  636. sage/numerical/all__sagemath_modules.py +6 -0
  637. sage/numerical/gauss_legendre.cpython-314-x86_64-linux-musl.so +0 -0
  638. sage/numerical/gauss_legendre.pyx +381 -0
  639. sage/numerical/optimize.py +910 -0
  640. sage/probability/all.py +10 -0
  641. sage/probability/probability_distribution.cpython-314-x86_64-linux-musl.so +0 -0
  642. sage/probability/probability_distribution.pyx +1242 -0
  643. sage/probability/random_variable.py +411 -0
  644. sage/quadratic_forms/all.py +4 -0
  645. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  646. sage/quadratic_forms/binary_qf.py +2042 -0
  647. sage/quadratic_forms/bqf_class_group.py +748 -0
  648. sage/quadratic_forms/constructions.py +93 -0
  649. sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-musl.so +0 -0
  650. sage/quadratic_forms/count_local_2.pyx +365 -0
  651. sage/quadratic_forms/extras.py +195 -0
  652. sage/quadratic_forms/quadratic_form.py +1753 -0
  653. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  654. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-musl.so +0 -0
  656. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  657. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  658. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  659. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  660. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  661. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  662. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  663. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  664. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  665. sage/quadratic_forms/random_quadraticform.py +209 -0
  666. sage/quadratic_forms/ternary.cpython-314-x86_64-linux-musl.so +0 -0
  667. sage/quadratic_forms/ternary.pyx +1154 -0
  668. sage/quadratic_forms/ternary_qf.py +2027 -0
  669. sage/rings/all__sagemath_modules.py +28 -0
  670. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  671. sage/rings/asymptotic/misc.py +1252 -0
  672. sage/rings/cc.py +4 -0
  673. sage/rings/cfinite_sequence.py +1306 -0
  674. sage/rings/complex_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  675. sage/rings/complex_conversion.pxd +8 -0
  676. sage/rings/complex_conversion.pyx +23 -0
  677. sage/rings/complex_double.cpython-314-x86_64-linux-musl.so +0 -0
  678. sage/rings/complex_double.pxd +21 -0
  679. sage/rings/complex_double.pyx +2654 -0
  680. sage/rings/complex_mpc.cpython-314-x86_64-linux-musl.so +0 -0
  681. sage/rings/complex_mpc.pxd +21 -0
  682. sage/rings/complex_mpc.pyx +2576 -0
  683. sage/rings/complex_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  684. sage/rings/complex_mpfr.pxd +18 -0
  685. sage/rings/complex_mpfr.pyx +3602 -0
  686. sage/rings/derivation.py +2334 -0
  687. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  688. sage/rings/finite_rings/maps_finite_field.py +191 -0
  689. sage/rings/function_field/all__sagemath_modules.py +8 -0
  690. sage/rings/function_field/derivations.py +102 -0
  691. sage/rings/function_field/derivations_rational.py +132 -0
  692. sage/rings/function_field/differential.py +853 -0
  693. sage/rings/function_field/divisor.py +1107 -0
  694. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  695. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  696. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  697. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  698. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  699. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  700. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  701. sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-musl.so +0 -0
  702. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  703. sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-musl.so +0 -0
  704. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  705. sage/rings/invariants/all.py +4 -0
  706. sage/rings/invariants/invariant_theory.py +4597 -0
  707. sage/rings/invariants/reconstruction.py +395 -0
  708. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  709. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-musl.so +0 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  712. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  713. sage/rings/polynomial/ore_function_element.py +952 -0
  714. sage/rings/polynomial/ore_function_field.py +1028 -0
  715. sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
  716. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  717. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  718. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-musl.so +0 -0
  720. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  721. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  722. sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
  723. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  724. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-musl.so +0 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  727. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-musl.so +0 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  730. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  731. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  732. sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-musl.so +0 -0
  733. sage/rings/real_double_element_gsl.pxd +8 -0
  734. sage/rings/real_double_element_gsl.pyx +794 -0
  735. sage/rings/real_field.py +58 -0
  736. sage/rings/real_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  737. sage/rings/real_mpfr.pxd +29 -0
  738. sage/rings/real_mpfr.pyx +6122 -0
  739. sage/rings/ring_extension.cpython-314-x86_64-linux-musl.so +0 -0
  740. sage/rings/ring_extension.pxd +42 -0
  741. sage/rings/ring_extension.pyx +2779 -0
  742. sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  743. sage/rings/ring_extension_conversion.pxd +16 -0
  744. sage/rings/ring_extension_conversion.pyx +462 -0
  745. sage/rings/ring_extension_element.cpython-314-x86_64-linux-musl.so +0 -0
  746. sage/rings/ring_extension_element.pxd +21 -0
  747. sage/rings/ring_extension_element.pyx +1635 -0
  748. sage/rings/ring_extension_homset.py +64 -0
  749. sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-musl.so +0 -0
  750. sage/rings/ring_extension_morphism.pxd +35 -0
  751. sage/rings/ring_extension_morphism.pyx +920 -0
  752. sage/schemes/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/all__sagemath_modules.py +1 -0
  754. sage/schemes/projective/coherent_sheaf.py +300 -0
  755. sage/schemes/projective/cohomology.py +510 -0
  756. sage/stats/all.py +15 -0
  757. sage/stats/basic_stats.py +489 -0
  758. sage/stats/distributions/all.py +7 -0
  759. sage/stats/distributions/catalog.py +34 -0
  760. sage/stats/distributions/dgs.h +50 -0
  761. sage/stats/distributions/dgs.pxd +111 -0
  762. sage/stats/distributions/dgs_bern.h +400 -0
  763. sage/stats/distributions/dgs_gauss.h +614 -0
  764. sage/stats/distributions/dgs_misc.h +104 -0
  765. sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-musl.so +0 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  767. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  768. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  769. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  770. sage/stats/hmm/all.py +15 -0
  771. sage/stats/hmm/chmm.cpython-314-x86_64-linux-musl.so +0 -0
  772. sage/stats/hmm/chmm.pyx +1595 -0
  773. sage/stats/hmm/distributions.cpython-314-x86_64-linux-musl.so +0 -0
  774. sage/stats/hmm/distributions.pxd +29 -0
  775. sage/stats/hmm/distributions.pyx +531 -0
  776. sage/stats/hmm/hmm.cpython-314-x86_64-linux-musl.so +0 -0
  777. sage/stats/hmm/hmm.pxd +17 -0
  778. sage/stats/hmm/hmm.pyx +1388 -0
  779. sage/stats/hmm/util.cpython-314-x86_64-linux-musl.so +0 -0
  780. sage/stats/hmm/util.pxd +7 -0
  781. sage/stats/hmm/util.pyx +165 -0
  782. sage/stats/intlist.cpython-314-x86_64-linux-musl.so +0 -0
  783. sage/stats/intlist.pxd +14 -0
  784. sage/stats/intlist.pyx +588 -0
  785. sage/stats/r.py +49 -0
  786. sage/stats/time_series.cpython-314-x86_64-linux-musl.so +0 -0
  787. sage/stats/time_series.pxd +6 -0
  788. sage/stats/time_series.pyx +2546 -0
  789. sage/tensor/all.py +2 -0
  790. sage/tensor/modules/all.py +8 -0
  791. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  792. sage/tensor/modules/comp.py +5598 -0
  793. sage/tensor/modules/ext_pow_free_module.py +824 -0
  794. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  795. sage/tensor/modules/format_utilities.py +333 -0
  796. sage/tensor/modules/free_module_alt_form.py +858 -0
  797. sage/tensor/modules/free_module_automorphism.py +1207 -0
  798. sage/tensor/modules/free_module_basis.py +1074 -0
  799. sage/tensor/modules/free_module_element.py +284 -0
  800. sage/tensor/modules/free_module_homset.py +652 -0
  801. sage/tensor/modules/free_module_linear_group.py +564 -0
  802. sage/tensor/modules/free_module_morphism.py +1581 -0
  803. sage/tensor/modules/free_module_tensor.py +3289 -0
  804. sage/tensor/modules/reflexive_module.py +386 -0
  805. sage/tensor/modules/tensor_free_module.py +780 -0
  806. sage/tensor/modules/tensor_free_submodule.py +538 -0
  807. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  808. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,1203 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.graphs sage.libs.gap sage.groups
3
+ r"""
4
+ Hecke algebra representations
5
+ """
6
+ # ***************************************************************************
7
+ # Copyright (C) 2013 Nicolas M. Thiery <nthiery at users.sf.net>
8
+ # Anne Schilling <anne at math.ucdavis.edu>
9
+ #
10
+ # Distributed under the terms of the GNU General Public License (GPL)
11
+ # https://www.gnu.org/licenses/
12
+ # ***************************************************************************
13
+ import functools
14
+ from sage.misc.abstract_method import abstract_method
15
+ from sage.misc.cachefunc import cached_method
16
+ from sage.misc.fast_methods import WithEqualityById
17
+ from sage.structure.sage_object import SageObject
18
+ from sage.structure.unique_representation import UniqueRepresentation
19
+ from sage.sets.family import Family
20
+ from sage.combinat.subset import Subsets
21
+ from sage.rings.infinity import infinity
22
+ from sage.rings.integer_ring import ZZ
23
+
24
+
25
+ class HeckeAlgebraRepresentation(WithEqualityById, SageObject):
26
+ r"""
27
+ A representation of an (affine) Hecke algebra given by the action of the `T` generators.
28
+
29
+ Let `F_i` be a family of operators implementing an action of the
30
+ operators `(T_i)_{i\in I}` of the Hecke algebra on some vector
31
+ space ``domain``, given by their action on the basis of
32
+ ``domain``. This constructs the family of operators `(F_w)_{w\in
33
+ W}` describing the action of all elements of the basis
34
+ `(T_w)_{w\in W}` of the Hecke algebra. This is achieved by
35
+ linearity on the first argument, and applying recursively the
36
+ `F_i` along a reduced word for `w=s_{i_1}\cdots s_{i_k}`:
37
+
38
+ .. MATH::
39
+
40
+ F_w (x) = F_{i_k}\circ\cdots\circ F_{i_1}(x) .
41
+
42
+ INPUT:
43
+
44
+ - ``domain`` -- a vector space
45
+ - ``f`` -- a function ``f(l,i)`` taking a basis element `l` of ``domain`` and an index `i`, and returning `F_i`
46
+ - ``cartan_type`` -- the Cartan type of the Hecke algebra
47
+ - ``q1``, ``q2`` -- the eigenvalues of the generators `T` of the Hecke algebra
48
+ - ``side`` -- ``'left'`` or ``'right'`` (default: ``'right'``)
49
+ whether this is a left or right representation
50
+
51
+ EXAMPLES::
52
+
53
+ sage: K = QQ['q1,q2'].fraction_field()
54
+ sage: q1, q2 = K.gens()
55
+ sage: KW = WeylGroup(["A",3]).algebra(QQ)
56
+ sage: H = KW.demazure_lusztig_operators(q1,q2); H
57
+ A representation of the (q1, q2)-Hecke algebra of type ['A', 3, 1]
58
+ on Algebra of Weyl Group of type ['A', 3]
59
+ (as a matrix group acting on the ambient space)
60
+ over Rational Field
61
+
62
+ Among other things, it implements the `T_w` operators, their
63
+ inverses and compositions thereof::
64
+
65
+ sage: H.Tw((1,2))
66
+ Generic endomorphism of Algebra of Weyl Group of type ['A', 3]
67
+ (as a matrix group acting on the ambient space) over Rational Field
68
+
69
+ and the Cherednik operators `Y^{\lambda^\vee}`::
70
+
71
+ sage: H.Y()
72
+ Lazy family (...)_{i in Coroot lattice of the Root system of type ['A', 3, 1]}
73
+
74
+ TESTS::
75
+
76
+ sage: from sage.combinat.root_system.hecke_algebra_representation import HeckeAlgebraRepresentation
77
+ sage: W = SymmetricGroup(3)
78
+ sage: domain = W.algebra(QQ)
79
+ sage: action = lambda x,i: domain.monomial(x.apply_simple_reflection(i, side='right'))
80
+ sage: r = HeckeAlgebraRepresentation(domain, action, CartanType(["A",2]), 1, -1)
81
+ sage: hash(r) # random
82
+ 3
83
+
84
+ REFERENCES:
85
+
86
+ - [HST2008]_
87
+ """
88
+
89
+ def __init__(self, domain, on_basis, cartan_type, q1, q2, q=ZZ.one(), side='right'):
90
+ r"""
91
+ TESTS::
92
+
93
+ sage: from sage.combinat.root_system.hecke_algebra_representation import HeckeAlgebraRepresentation
94
+ sage: W = SymmetricGroup(3)
95
+ sage: domain = W.algebra(QQ)
96
+ sage: action = lambda x,i: domain.monomial(x.apply_simple_reflection(i, side='right'))
97
+ sage: HeckeAlgebraRepresentation(domain, action, CartanType(["A",2]), 1, -1)
98
+ A representation of the (1, -1)-Hecke algebra of type ['A', 2] on Symmetric group algebra of order 3 over Rational Field
99
+ """
100
+ self._domain = domain
101
+ self._Ti_on_basis = on_basis
102
+ self._q1 = q1 # should check / coerce into the base ring
103
+ self._q2 = q2
104
+ self._q = q
105
+ self._cartan_type = cartan_type
106
+ self._side = side
107
+
108
+ def _repr_(self):
109
+ r"""
110
+ EXAMPLES::
111
+
112
+ sage: WeylGroup(["A",3]).algebra(QQ).demazure_lusztig_operators(-1,1)._repr_()
113
+ "A representation of the (-1, 1)-Hecke algebra of type ['A', 3, 1]
114
+ on Algebra of Weyl Group of type ['A', 3]
115
+ (as a matrix group acting on the ambient space) over Rational Field"
116
+ """
117
+ return "A representation of the %s-Hecke algebra of type %s on %s" % ((self._q1,self._q2), self.cartan_type(), self.domain())
118
+
119
+ @cached_method
120
+ def parameters(self, i):
121
+ r"""
122
+ Return `q_1,q_2` such that `(T_i-q_1)(T_i-q_2) = 0`.
123
+
124
+ EXAMPLES::
125
+
126
+ sage: K = QQ['q1,q2'].fraction_field()
127
+ sage: q1, q2 = K.gens()
128
+ sage: KW = WeylGroup(["A",3]).algebra(QQ)
129
+ sage: H = KW.demazure_lusztig_operators(q1,q2)
130
+ sage: H.parameters(1)
131
+ (q1, q2)
132
+
133
+ sage: H = KW.demazure_lusztig_operators(1,-1)
134
+ sage: H.parameters(1)
135
+ (1, -1)
136
+
137
+ .. TODO::
138
+
139
+ At this point, this method is constant. It's meant as a
140
+ starting point for implementing parameters depending on
141
+ the node `i` of the Dynkin diagram.
142
+ """
143
+ return self._q1, self._q2
144
+
145
+ def cartan_type(self):
146
+ r"""
147
+ Return the Cartan type of ``self``.
148
+
149
+ EXAMPLES::
150
+
151
+ sage: from sage.combinat.root_system.hecke_algebra_representation import HeckeAlgebraRepresentation
152
+ sage: KW = SymmetricGroup(3).algebra(QQ)
153
+ sage: action = lambda x,i: KW.monomial(x.apply_simple_reflection(i, side='right'))
154
+ sage: H = HeckeAlgebraRepresentation(KW, action, CartanType(["A",2]), 1, -1)
155
+ sage: H.cartan_type()
156
+ ['A', 2]
157
+
158
+ sage: H = WeylGroup(["A",3]).algebra(QQ).demazure_lusztig_operators(-1,1)
159
+ sage: H.cartan_type()
160
+ ['A', 3, 1]
161
+ """
162
+ return self._cartan_type
163
+
164
+ def domain(self):
165
+ r"""
166
+ Return the domain of ``self``.
167
+
168
+ EXAMPLES::
169
+
170
+ sage: H = WeylGroup(["A",3]).algebra(QQ).demazure_lusztig_operators(-1,1)
171
+ sage: H.domain()
172
+ Algebra of Weyl Group of type ['A', 3] (as a matrix group
173
+ acting on the ambient space) over Rational Field
174
+ """
175
+ return self._domain
176
+
177
+ def Ti_on_basis(self, x, i):
178
+ r"""
179
+ The `T_i` operators, on basis elements.
180
+
181
+ INPUT:
182
+
183
+ - ``x`` -- the index of a basis element
184
+ - ``i`` -- the index of a generator
185
+
186
+ EXAMPLES::
187
+
188
+ sage: W = WeylGroup("A3")
189
+ sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
190
+ sage: K = QQ['q1,q2'].fraction_field()
191
+ sage: q1, q2 = K.gens()
192
+ sage: KW = W.algebra(K)
193
+ sage: rho = KW.demazure_lusztig_operators(q1,q2)
194
+ sage: w = W.an_element()
195
+ sage: rho.Ti_on_basis(w,1)
196
+ q1*1231
197
+ """
198
+ return self._Ti_on_basis(x, i)
199
+
200
+ def Ti_inverse_on_basis(self, x, i):
201
+ r"""
202
+ The `T_i^{-1}` operators, on basis elements.
203
+
204
+ INPUT:
205
+
206
+ - ``x`` -- the index of a basis element
207
+ - ``i`` -- the index of a generator
208
+
209
+ EXAMPLES::
210
+
211
+ sage: W = WeylGroup("A3")
212
+ sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
213
+ sage: K = QQ['q1,q2'].fraction_field()
214
+ sage: q1, q2 = K.gens()
215
+ sage: KW = W.algebra(K)
216
+ sage: rho = KW.demazure_lusztig_operators(q1,q2)
217
+ sage: w = W.an_element()
218
+ sage: rho.Ti_inverse_on_basis(w, 1)
219
+ -1/q2*1231 + ((q1+q2)/(q1*q2))*123
220
+ """
221
+ q1 = self._q1
222
+ q2 = self._q2
223
+ return (self._domain.term(x, q1+q2) - self.Ti_on_basis(x, i))/(q1*q2)
224
+
225
+ @cached_method
226
+ def on_basis(self, x, word, signs=None, scalar=None):
227
+ r"""
228
+ Action of product of `T_i` and `T_i^{-1}` on `x`.
229
+
230
+ INPUT:
231
+
232
+ - ``x`` -- the index of a basis element
233
+ - ``word`` -- word of indices of generators
234
+ - ``signs`` -- (default: ``None``) sequence of signs of same length as
235
+ ``word``; determines which operators are supposed to be taken as
236
+ inverses.
237
+ - ``scalar`` -- (default: ``None``) scalar to multiply the answer by
238
+
239
+ EXAMPLES::
240
+
241
+ sage: from sage.combinat.root_system.hecke_algebra_representation import HeckeAlgebraRepresentation
242
+ sage: W = SymmetricGroup(3)
243
+ sage: domain = W.algebra(QQ)
244
+ sage: action = lambda x,i: domain.monomial(x.apply_simple_reflection(i, side='right'))
245
+ sage: rho = HeckeAlgebraRepresentation(domain, action, CartanType(["A",2]), 1, -1)
246
+
247
+ sage: rho.on_basis(W.one(), (1,2,1))
248
+ (1,3)
249
+
250
+ sage: word = (1,2)
251
+ sage: u = W.from_reduced_word(word)
252
+ sage: for w in W: assert rho.on_basis(w, word) == domain.monomial(w*u)
253
+
254
+ The next example tests the signs::
255
+
256
+ sage: W = WeylGroup("A3")
257
+ sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
258
+ sage: K = QQ['q1,q2'].fraction_field()
259
+ sage: q1, q2 = K.gens()
260
+ sage: KW = W.algebra(K)
261
+ sage: rho = KW.demazure_lusztig_operators(q1,q2)
262
+ sage: w = W.an_element(); w
263
+ 123
264
+ sage: rho.on_basis(w, (1,), signs=(-1,))
265
+ -1/q2*1231 + ((q1+q2)/(q1*q2))*123
266
+ sage: rho.on_basis(w, (1,), signs=( 1,))
267
+ q1*1231
268
+ sage: rho.on_basis(w, (1,1), signs=(1,-1))
269
+ 123
270
+ sage: rho.on_basis(w, (1,1), signs=(-1,1))
271
+ 123
272
+ """
273
+ l = len(word)
274
+ if l == 0:
275
+ return self._domain.monomial(x)
276
+ rec = self.on_basis(x, word[:-1], signs)
277
+ i = word[l-1]
278
+ if signs is not None and signs[l-1] == -1:
279
+ operator = self.Ti_inverse_on_basis
280
+ else:
281
+ operator = self.Ti_on_basis
282
+ result = self._domain.linear_combination((operator(l, i), c)
283
+ for l,c in rec)
284
+ if scalar is None:
285
+ return result
286
+ else:
287
+ return scalar * result
288
+
289
+ def straighten_word(self, word):
290
+ r"""
291
+ Return a tuple of indices of generators after some straightening.
292
+
293
+ INPUT:
294
+
295
+ - ``word`` -- a list/tuple of indices of generators, the index
296
+ of a generator, or an object with a reduced word method
297
+
298
+ OUTPUT: a tuple of indices of generators
299
+
300
+ EXAMPLES::
301
+
302
+ sage: W = WeylGroup(["A",3])
303
+ sage: H = W.algebra(QQ).demazure_lusztig_operators(-1,1)
304
+ sage: H.straighten_word(1)
305
+ (1,)
306
+ sage: H.straighten_word((2,1))
307
+ (2, 1)
308
+ sage: H.straighten_word([2,1])
309
+ (2, 1)
310
+ sage: H.straighten_word(W.an_element())
311
+ (1, 2, 3)
312
+ """
313
+ if hasattr(word, "reduced_word"):
314
+ word = word.reduced_word()
315
+ if isinstance(word, list):
316
+ word = tuple(word)
317
+ elif not isinstance(word, tuple):
318
+ word = (word,)
319
+ return word
320
+
321
+ def Tw(self, word, signs=None, scalar=None):
322
+ r"""
323
+ Return `T_w`.
324
+
325
+ INPUT:
326
+
327
+ - ``word`` -- a word `i_1,\dots,i_k` for some element `w` of the Weyl group
328
+ See :meth:`straighten_word` for how this word can be specified
329
+
330
+ - ``signs`` -- list `\epsilon_1,\dots,\epsilon_k` of the
331
+ same length as ``word`` with `\epsilon_i =\pm 1` or
332
+ ``None`` for `1,\dots,1` (default: ``None``)
333
+
334
+ - ``scalar`` -- an element `c` of the base ring or ``None``
335
+ for `1` (default: ``None``)
336
+
337
+ OUTPUT: a module morphism implementing
338
+
339
+ .. MATH::
340
+
341
+ T_w = T_{i_k} \circ \cdots \circ T_{i_1}
342
+
343
+ in left action notation; that is `T_{i_1}` is applied first,
344
+ then `T_{i_2}`, etc.
345
+
346
+ More generally, if ``scalar`` or ``signs`` is specified, the
347
+ morphism implements
348
+
349
+ .. MATH::
350
+
351
+ c T_{i_k}^{\epsilon_k} \circ \cdots \circ T_{i_1}^{\epsilon_k}.
352
+
353
+ EXAMPLES::
354
+
355
+ sage: W = WeylGroup("A3")
356
+ sage: W.element_class._repr_=lambda x: ('e' if not x.reduced_word()
357
+ ....: else "".join(str(i) for i in x.reduced_word()))
358
+ sage: K = QQ['q1,q2'].fraction_field()
359
+ sage: q1, q2 = K.gens()
360
+ sage: KW = W.algebra(K)
361
+ sage: x = KW.an_element(); x
362
+ 123 + 3*2312 + 2*31 + e
363
+
364
+ sage: T = KW.demazure_lusztig_operators(q1,q2)
365
+ sage: T12 = T.Tw( (1,2) )
366
+ sage: T12(KW.one())
367
+ q1^2*12
368
+
369
+ This is `T_2 \circ T_1`::
370
+
371
+ sage: T[2](T[1](KW.one()))
372
+ q1^2*12
373
+ sage: T[1](T[2](KW.one()))
374
+ q1^2*21
375
+ sage: T12(x) == T[2](T[1](x))
376
+ True
377
+
378
+ Now with signs and scalar coefficient we construct `3 T_2 \circ T_1^{-1}`::
379
+
380
+ sage: phi = T.Tw((1,2), (-1,1), 3)
381
+ sage: phi(KW.one())
382
+ -3*q1/q2*12 + ((3*q1+3*q2)/q2)*2
383
+ sage: phi(T[1](x)) == 3*T[2](x)
384
+ True
385
+
386
+ For debugging purposes, one can recover the input data::
387
+
388
+ sage: phi.word
389
+ (1, 2)
390
+ sage: phi.signs
391
+ (-1, 1)
392
+ sage: phi.scalar
393
+ 3
394
+ """
395
+ word = self.straighten_word(word)
396
+ result = self._domain.module_morphism(functools.partial(self.on_basis, word=word, signs=signs, scalar=scalar),
397
+ codomain=self._domain)
398
+ # For debugging purpose, make the parameters easily accessible:
399
+ result.word = word
400
+ result.signs = signs
401
+ result.scalar = scalar
402
+ return result
403
+
404
+ def Tw_inverse(self, word):
405
+ r"""
406
+ Return `T_w^{-1}`.
407
+
408
+ This is essentially a shorthand for :meth:`Tw` with all minus signs.
409
+
410
+ .. TODO:: Add an example where `T_i\ne T_i^{-1}`
411
+
412
+ EXAMPLES::
413
+
414
+ sage: W = WeylGroup(["A",3])
415
+ sage: W.element_class._repr_ = lambda x: "".join(str(i) for i in x.reduced_word())
416
+ sage: KW = W.algebra(QQ)
417
+ sage: rho = KW.demazure_lusztig_operators(1, -1)
418
+ sage: x = KW.monomial(W.an_element()); x
419
+ 123
420
+ sage: word = [1,2]
421
+ sage: rho.Tw(word)(x)
422
+ 12312
423
+ sage: rho.Tw_inverse(word)(x)
424
+ 12321
425
+
426
+ sage: K = QQ['q1,q2'].fraction_field()
427
+ sage: q1, q2 = K.gens()
428
+ sage: KW = W.algebra(K)
429
+ sage: rho = KW.demazure_lusztig_operators(q1, q2)
430
+ sage: x = KW.monomial(W.an_element()); x
431
+ 123
432
+ sage: rho.Tw_inverse(word)(x)
433
+ 1/q2^2*12321 - ((q1+q2)/(q1*q2^2))*1231 - ((q1+q2)/(q1*q2^2))*1232
434
+ + ((q1^2+2*q1*q2+q2^2)/(q1^2*q2^2))*123
435
+ sage: rho.Tw(word)(_)
436
+ 123
437
+ """
438
+ word = tuple(reversed(self.straighten_word(word)))
439
+ signs = (-1,) * len(word)
440
+ return self.Tw(word, signs)
441
+
442
+ __getitem__ = Tw # for backward compatibility
443
+
444
+ def _test_relations(self, **options):
445
+ r"""
446
+ Test that this family of operators satisfies the Iwahori Hecke relations.
447
+
448
+ EXAMPLES::
449
+
450
+ sage: L = RootSystem(["A",3]).ambient_space()
451
+ sage: K = QQ['q1,q2'].fraction_field()
452
+ sage: q1, q2 = K.gens()
453
+ sage: KL = L.algebra(K)
454
+ sage: T = KL.demazure_lusztig_operators(q1,q2)
455
+ sage: T._test_relations()
456
+ """
457
+ tester = self._tester(**options)
458
+ cartan_type = self.cartan_type()
459
+ # In some use cases, the operators are not defined everywhere.
460
+ # This allows to specify which elements the tests
461
+ # should be run on. This does not work when calling this
462
+ # method indirectly via TestSuite though.
463
+ elements = options.get('elements', self.domain().some_elements())
464
+ q1 = self._q1
465
+ q2 = self._q2
466
+ T = self
467
+
468
+ def Ti(x, i, c):
469
+ return T[i](x)+c*x
470
+
471
+ try:
472
+ # Check the quadratic relation
473
+ for i in cartan_type.index_set():
474
+ for x in elements:
475
+ tester.assertTrue(Ti(Ti(x,i,-q2),i,-q1).is_zero())
476
+ G = cartan_type.coxeter_diagram()
477
+ # Check the braid relation
478
+ for (i, j) in Subsets(cartan_type.index_set(), 2):
479
+ if G.has_edge(i,j):
480
+ o = G.edge_label(i,j)
481
+ else:
482
+ o = 2
483
+ if o == infinity:
484
+ continue
485
+ for x in elements:
486
+ y = x
487
+ for k in range(o):
488
+ x = T[i](x)
489
+ y = T[j](y)
490
+ y,x = x,y
491
+ tester.assertEqual(x, y)
492
+ except ImportError:
493
+ pass
494
+
495
+ def _test_inverse(self, **options):
496
+ r"""
497
+ Test the `T_w^{-1}` operators.
498
+
499
+ EXAMPLES::
500
+
501
+ sage: L = RootSystem(["A",3]).ambient_space()
502
+ sage: K = QQ['q1,q2'].fraction_field()
503
+ sage: q1, q2 = K.gens()
504
+ sage: KL = L.algebra(K)
505
+ sage: T = KL.demazure_lusztig_operators(q1,q2)
506
+ sage: T._test_inverse()
507
+ """
508
+ tester = self._tester(**options)
509
+ elements = self.domain().some_elements()
510
+ q1 = self._q1
511
+ q2 = self._q2
512
+ try:
513
+ if q1.is_unit() and q2.is_unit():
514
+ I = self.cartan_type().index_set()
515
+ for w in [[i] for i in I] + [tuple(I)]:
516
+ Tw = self.Tw(w)
517
+ Tw_inverse = self.Tw_inverse(w)
518
+ for x in elements:
519
+ tester.assertEqual(Tw_inverse(Tw(x)), x)
520
+ tester.assertEqual(Tw(Tw_inverse(x)), x)
521
+ except ImportError:
522
+ pass
523
+
524
+ def Y_lambdacheck(self, lambdacheck):
525
+ r"""
526
+ Return the Cherednik operators `Y^{\lambda^\vee}` for this representation of an affine Hecke algebra.
527
+
528
+ INPUT:
529
+
530
+ - ``lambdacheck`` -- an element of the coroot lattice for this
531
+ Cartan type
532
+
533
+ EXAMPLES::
534
+
535
+ sage: W = WeylGroup(["B",2])
536
+ sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
537
+ sage: K = QQ['q1,q2'].fraction_field()
538
+ sage: q1, q2 = K.gens()
539
+ sage: KW = W.algebra(K)
540
+
541
+ We take `q_2` and `q_1` as eigenvalues to match with the notations of [HST2008]_ ::
542
+
543
+ sage: rho = KW.demazure_lusztig_operators(q2, q1)
544
+ sage: L = rho.Y().keys()
545
+ sage: alpha = L.simple_roots()
546
+ sage: Y0 = rho.Y_lambdacheck(alpha[0])
547
+ sage: Y1 = rho.Y_lambdacheck(alpha[1])
548
+ sage: Y2 = rho.Y_lambdacheck(alpha[2])
549
+
550
+ sage: x = KW.monomial(W.an_element()); x
551
+ 12
552
+ sage: Y1(x)
553
+ -((q1^2+2*q1*q2+q2^2)/(-q2^2))*2121
554
+ + ((q1^3+q1^2*q2+q1*q2^2+q2^3)/(-q1*q2^2))*121
555
+ + ((q1^2+q1*q2)/(-q2^2))*212 - (q1^2/(-q2^2))*12
556
+ sage: Y2(x)
557
+ -((q1^4+q1^3*q2+q1*q2^3+q2^4)/(-q1^3*q2))*2121
558
+ + ((q1^3+q1^2*q2+q1*q2^2+q2^3)/(-q1^2*q2))*121
559
+ + (q2^3/(-q1^3))*12
560
+ sage: Y1(Y2(x))
561
+ ((q1*q2+q2^2)/q1^2)*212 - q2/q1*12
562
+ sage: Y2(Y1(x))
563
+ ((q1*q2+q2^2)/q1^2)*212 - q2/q1*12
564
+
565
+ The `Y` operators commute::
566
+
567
+ sage: Y0(Y1(x)) - Y1(Y0(x))
568
+ 0
569
+ sage: Y2(Y1(x)) - Y1(Y2(x))
570
+ 0
571
+
572
+ In the classical root lattice, `\alpha_0 + \alpha_1 + \alpha_2 = 0`::
573
+
574
+ sage: Y0(Y1(Y2(x)))
575
+ 12
576
+
577
+ Lemma 7.2 of [HST2008]_::
578
+
579
+ sage: w0 = KW.monomial(W.long_element())
580
+ sage: rho.Tw(0)(w0)
581
+ q2
582
+ sage: rho.Tw_inverse(1)(w0)
583
+ 1/q2*212
584
+ sage: rho.Tw_inverse(2)(w0)
585
+ 1/q2*121
586
+
587
+ Lemma 7.5 of [HST2008]_::
588
+
589
+ sage: Y0(w0)
590
+ q1^2/q2^2*2121
591
+ sage: Y1(w0)
592
+ (q2/(-q1))*2121
593
+ sage: Y2(w0)
594
+ (q2/(-q1))*2121
595
+
596
+ .. TODO::
597
+
598
+ Add more tests
599
+
600
+ Add tests in type BC affine where the null coroot
601
+ `\delta^\vee` can have non trivial coefficient in term of
602
+ `\alpha_0`
603
+
604
+ .. SEEALSO::
605
+
606
+ - [HST2008]_ for the formula in terms of `q_1, q_2`
607
+ """
608
+ #Q_check = self.Y().keys()
609
+ #assert Q_check.is_parent_of(lambdacheck)
610
+ Q_check = lambdacheck.parent()
611
+
612
+ # Alcove walks and the like are currently only implemented in
613
+ # (co)weight lattice realizations; so we embed lambdacheck in
614
+ # the weight lattice containing Q_check; we actually use the
615
+ # (co)weight space, because the alcove walks currently uses
616
+ # rho_classical and, in type BC, the later does not have
617
+ # integral coefficients:
618
+
619
+ # sage: RootSystem(["BC",2,2]).coweight_lattice().rho_classical()
620
+
621
+ # On the other hand, at this point we need the expression of
622
+ # lambdacheck in Q_check in order to use the translation
623
+ # factors (the analogue is not implemented in the (co)weight
624
+ # lattice)
625
+ P_check = Q_check.root_system.weight_space()
626
+ assert P_check.has_coerce_map_from(Q_check)
627
+ alphacheck = P_check.simple_roots()
628
+ c = Q_check.cartan_type().translation_factors()
629
+ t = P_check.linear_combination( (alphacheck[i], c[i] * coeff) for i,coeff in lambdacheck )
630
+ # In type BC, c[i] may introduce rational coefficients
631
+ # If we want to work in the lattice we might want to use the
632
+ # following workaround after the fact ...
633
+ # from sage.rings.integer import Integer
634
+ # t = t.map_coefficients(Integer)
635
+ word = P_check.reduced_word_of_translation(t)
636
+ signs = tuple(P_check.signs_of_alcovewalk(word))
637
+ # At this point, this is more or less of a guess, but that
638
+ # works for our two main examples (action of affine W on W,
639
+ # and Macdonald polynomials)
640
+ if self._side == "left":
641
+ word = tuple(reversed(word))
642
+ signs = tuple(reversed(signs))
643
+ # The power of q implements the fact that Y^\deltacheck = 1/q.
644
+ # The classical simple coroots have no \deltacheck term.
645
+ # alpha[0] has a \deltacheck with coefficient one
646
+ # (recall that Sage's \deltacheck is usually the null coroot,
647
+ # but its double in type BC; this is compensated by the fact
648
+ # that Sage's q is the square of the usual one in this case;
649
+ # so we can ignore this see the discussion in
650
+ # sage.combinat.root_system.weight_space.WeightSpace).
651
+ special_node = Q_check.cartan_type().special_node()
652
+ scalar = (-self._q1*self._q2)**(-sum(signs)/2) * self._q**(-lambdacheck[special_node])
653
+ return self.Tw(word, signs, scalar)
654
+
655
+ def Y(self, base_ring=ZZ):
656
+ r"""
657
+ Return the Cherednik operators `Y` for this representation of an affine Hecke algebra.
658
+
659
+ INPUT:
660
+
661
+ - ``self`` -- a representation of an affine Hecke algebra
662
+ - ``base_ring`` -- the base ring of the coroot lattice
663
+
664
+ This is a family of operators indexed by the coroot lattice
665
+ for this Cartan type. In practice this is currently indexed
666
+ instead by the affine coroot lattice, even if this indexing is
667
+ not one to one, in order to allow for `Y[\alpha^\vee_0]`.
668
+
669
+ EXAMPLES::
670
+
671
+ sage: W = WeylGroup(["A",3])
672
+ sage: K = QQ['q1,q2'].fraction_field()
673
+ sage: q1, q2 = K.gens()
674
+ sage: KW = W.algebra(K)
675
+ sage: rho = KW.demazure_lusztig_operators(q2, q1)
676
+ sage: Y = rho.Y(); Y
677
+ Lazy family (...(i))_{i in Coroot lattice of the Root system of type ['A', 3, 1]}
678
+ """
679
+ if not self.cartan_type().is_affine():
680
+ raise ValueError("The Cherednik operators are only defined for representations of affine Hecke algebra")
681
+ L = self.cartan_type().root_system().coroot_space(base_ring)
682
+ return Family(L, self.Y_lambdacheck)
683
+
684
+ def _test_Y(self, **options):
685
+ r"""
686
+ Test the `T_w^{-1}` operators.
687
+
688
+ EXAMPLES::
689
+
690
+ sage: W = WeylGroup(["B",3])
691
+ sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
692
+ sage: K = QQ['q1,q2'].fraction_field()
693
+ sage: q1, q2 = K.gens()
694
+ sage: KW = W.algebra(K)
695
+ sage: rho = KW.demazure_lusztig_operators(q1, q2, affine=True)
696
+ sage: rho._test_Y() # long time (4s)
697
+ """
698
+ tester = self._tester(**options)
699
+ if self.cartan_type().is_affine():
700
+ elements = self.domain().some_elements()
701
+ Y = self.Y()
702
+ L = Y.keys()
703
+ I = L.index_set()
704
+ alpha = L.simple_roots()
705
+ Yi = Family(I, lambda i: Y[alpha[i]])
706
+ for Y1, Y2 in Subsets(Yi,2):
707
+ for x in elements:
708
+ tester.assertEqual(Y1(Y2(x)), Y2(Y1(x)))
709
+
710
+ def Y_eigenvectors(self):
711
+ r"""
712
+ Return the family of eigenvectors for the Cherednik operators `Y` of this representation of an affine Hecke algebra.
713
+
714
+ INPUT:
715
+
716
+ - ``self`` -- a representation of an affine Hecke algebra
717
+ - ``base_ring`` -- the base ring of the coroot lattice
718
+
719
+ EXAMPLES::
720
+
721
+ sage: W = WeylGroup(["B",2])
722
+ sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
723
+ sage: K = QQ['q1,q2'].fraction_field()
724
+ sage: q1, q2 = K.gens()
725
+ sage: KW = W.algebra(K)
726
+ sage: rho = KW.demazure_lusztig_operators(q1, q2, affine=True)
727
+ sage: E = rho.Y_eigenvectors()
728
+ sage: E.keys()
729
+ Weyl Group of type ['B', 2] (as a matrix group acting on the ambient space)
730
+ sage: w0 = W.long_element()
731
+
732
+ To set the recurrence up properly, one often needs to customize
733
+ the :meth:`CherednikOperatorsEigenvectors.affine_lift`
734
+ and :meth:`CherednikOperatorsEigenvectors.affine_retract`
735
+ methods. This would usually be done by subclassing
736
+ :class:`CherednikOperatorsEigenvectors`; here we just override
737
+ the methods directly.
738
+
739
+ In this particular case, we multiply by `w_0` to take into
740
+ account that `w_0` is the seed for the recursion::
741
+
742
+ sage: E.affine_lift = w0._mul_
743
+ sage: E.affine_retract = w0._mul_
744
+
745
+ sage: E[w0]
746
+ 2121
747
+ sage: E.eigenvalues(E[w0])
748
+ [q2^2/q1^2, q1/(-q2), q1/(-q2)]
749
+
750
+ This step is taken care of automatically if one instead calls
751
+ the specialization
752
+ :meth:`sage.coxeter_groups.CoxeterGroups.Algebras.demazure_lusztig_eigenvectors`.
753
+
754
+ Now we can compute all eigenvectors::
755
+
756
+ sage: [E[w] for w in W]
757
+ [2121 - 121 - 212 + 12 + 21 - 1 - 2 + ,
758
+ -2121 + 212,
759
+ (q2/(q1-q2))*2121 + (q2/(-q1+q2))*121 + (q2/(-q1+q2))*212 - 12 - (q2/(-q1+q2))*21 + 2,
760
+ -(q2^2/(-q1^2+q1*q2-q2^2))*2121 - 121 + (q2^2/(-q1^2+q1*q2-q2^2))*212 + 21,
761
+ -((q1^2+q2^2)/(q1^2-q1*q2+q2^2))*2121 - ((q1^2+q2^2)/(-q1^2+q1*q2-q2^2))*121
762
+ - (q2^2/(-q1^2+q1*q2-q2^2))*212 + (q2^2/(-q1^2+q1*q2-q2^2))*12 - 21 + 1,
763
+ 2121,
764
+ (q2/(-q1+q2))*2121 - (q2/(-q1+q2))*121 - 212 + 12,
765
+ -2121 + 121]
766
+ """
767
+ if not self.cartan_type().is_affine():
768
+ raise ValueError("The Cherednik operators are only defined for representations of affine Hecke algebra")
769
+ return CherednikOperatorsEigenvectors(self)
770
+
771
+ # TODO: this should probably inherit from family!
772
+
773
+
774
+ class CherednikOperatorsEigenvectors(UniqueRepresentation, SageObject):
775
+ r"""
776
+ A class for the family of eigenvectors of the `Y` Cherednik
777
+ operators for a module over a (Double) Affine Hecke algebra
778
+
779
+ INPUT:
780
+
781
+ - ``T`` -- a family `(T_i)_{i\in I}` implementing the action of
782
+ the generators of an affine Hecke algebra on ``self``.
783
+ The intertwiner operators are built from these.
784
+
785
+ - ``T_Y`` -- a family `(T^Y_i)_{i\in I}` implementing the action
786
+ of the generators of an affine Hecke algebra on ``self``. By
787
+ default, this is ``T``. But this can be used to get the action
788
+ of the full Double Affine Hecke Algebra. The `Y` operators are
789
+ built from the ``T_Y``.
790
+
791
+ This returns a function `\mu\mapsto E_\mu` which uses intertwining
792
+ operators to calculate recursively eigenvectors `E_\mu` for the
793
+ action of the torus of the affine Hecke algebra with eigenvalue
794
+ given by `f`. Namely:
795
+
796
+ .. MATH::
797
+
798
+ E_\mu.Y^{\lambda^\vee} = f(\lambda^\vee, \mu) E_\mu
799
+
800
+ Assumptions:
801
+
802
+ - ``seed(mu)`` initializes the recurrence by returning an
803
+ appropriate eigenvector `E_\mu` for `\mu` trivial enough. For
804
+ example, for nonsymmetric Macdonald polynomials ``seed(mu)``
805
+ returns the monomial `X^\mu` for a minuscule weight `\mu`.
806
+
807
+ - `f` is almost equivariant. Namely, `f(\lambda^\vee,\mu) =
808
+ f(\lambda^\vee s_i, twist(\mu,i))` whenever `i` is a descent of
809
+ `\mu`.
810
+
811
+ - `twist(\mu, i)` maps `\mu` closer to the dominant
812
+ chamber whenever `i` is a descent of `\mu`.
813
+
814
+ .. TODO::
815
+
816
+ Add tests for the above assumptions, and also that the
817
+ classical operators `T_1, \ldots, T_n` from `T` and `T_Y` coincide.
818
+ """
819
+
820
+ def __init__(self, T, T_Y=None, normalized=True):
821
+ r"""
822
+ INPUT:
823
+
824
+ - ``T`` -- a family `(T_i)_{i\in I}` implementing the action of
825
+ the generators of an affine Hecke algebra on ``self``
826
+
827
+ - ``T_Y`` -- a family `(T^Y_i)_{i\in I}` implementing the action
828
+ of the generators of an affine Hecke algebra on ``self``. By
829
+ default, this is ``T``.
830
+
831
+ - ``normalized`` -- boolean (default: ``True``); whether the
832
+ eigenvector `E_\mu` is normalized so that `\mu` has
833
+ coefficient `1`.
834
+
835
+ TESTS::
836
+
837
+ sage: from sage.combinat.root_system.hecke_algebra_representation import CherednikOperatorsEigenvectors
838
+ sage: W = WeylGroup(["B",3])
839
+ sage: K = QQ['q1,q2'].fraction_field()
840
+ sage: q1, q2 = K.gens()
841
+ sage: KW = W.algebra(K)
842
+ sage: rho = KW.demazure_lusztig_operators(q1, q2, affine=True)
843
+ sage: E = CherednikOperatorsEigenvectors(rho); E
844
+ <sage.combinat.root_system.hecke_algebra_representation.CherednikOperatorsEigenvectors object at ...>
845
+ sage: E.keys()
846
+ Weyl Group of type ['B', 3] (as a matrix group acting on the ambient space)
847
+ sage: E.domain()
848
+ Algebra of Weyl Group of type ['B', 3] (as a matrix group acting on the ambient space)
849
+ over Fraction Field of Multivariate Polynomial Ring in q1, q2 over Rational Field
850
+ sage: E._T == E._T_Y
851
+ True
852
+ """
853
+ self._T = T
854
+ if T_Y is None:
855
+ T_Y = T
856
+ self._T_Y = T_Y
857
+ self._normalized = normalized
858
+
859
+ @cached_method
860
+ def cartan_type(self):
861
+ r"""
862
+ Return Cartan type of ``self``.
863
+
864
+ EXAMPLES::
865
+
866
+ sage: W = WeylGroup(["B",3])
867
+ sage: K = QQ['q1,q2']
868
+ sage: q1, q2 = K.gens()
869
+ sage: KW = W.algebra(K)
870
+ sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
871
+ sage: E.cartan_type()
872
+ ['B', 3, 1]
873
+
874
+ sage: NonSymmetricMacdonaldPolynomials(["B", 2, 1]).cartan_type() # needs sage.graphs
875
+ ['B', 2, 1]
876
+ """
877
+ return self._T_Y.cartan_type()
878
+
879
+ def domain(self):
880
+ r"""
881
+ The module on which the affine Hecke algebra acts.
882
+
883
+ EXAMPLES::
884
+
885
+ sage: W = WeylGroup(["B",3])
886
+ sage: K = QQ['q1,q2']
887
+ sage: q1, q2 = K.gens()
888
+ sage: KW = W.algebra(K)
889
+ sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
890
+ sage: E.domain()
891
+ Algebra of Weyl Group of type ['B', 3]
892
+ (as a matrix group acting on the ambient space)
893
+ over Multivariate Polynomial Ring in q1, q2 over Rational Field
894
+ """
895
+ return self._T.domain()
896
+
897
+ def keys(self):
898
+ r"""
899
+ The index set for the eigenvectors.
900
+
901
+ By default, this assumes that the eigenvectors span the full
902
+ affine Hecke algebra module and that the eigenvectors have
903
+ the same indexing as the basis of this module.
904
+
905
+ EXAMPLES::
906
+
907
+ sage: W = WeylGroup(["A",3])
908
+ sage: K = QQ['q1,q2']
909
+ sage: q1, q2 = K.gens()
910
+ sage: KW = W.algebra(K)
911
+ sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
912
+ sage: E.keys()
913
+ Weyl Group of type ['A', 3] (as a matrix group acting on the ambient space)
914
+ """
915
+ return self._T.domain().basis().keys()
916
+
917
+ def seed(self, mu):
918
+ r"""
919
+ Return the eigenvector for `\mu` minuscule.
920
+
921
+ INPUT:
922
+
923
+ - ``mu`` -- an element `\mu` of the indexing set
924
+
925
+ OUTPUT: an element of ``T.domain()``
926
+
927
+ This default implementation returns the monomial indexed by `\mu`.
928
+
929
+ EXAMPLES::
930
+
931
+ sage: W = WeylGroup(["A",3])
932
+ sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
933
+ sage: K = QQ['q1,q2']
934
+ sage: q1, q2 = K.gens()
935
+ sage: KW = W.algebra(K)
936
+ sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
937
+ sage: E.seed(W.long_element())
938
+ 123121
939
+ """
940
+ return self.domain().monomial(mu)
941
+
942
+ @abstract_method
943
+ def affine_lift(self, mu):
944
+ r"""
945
+ Lift the index ``\mu`` to a space admitting an action of the affine Weyl group.
946
+
947
+ INPUT:
948
+
949
+ - ``mu`` -- an element `\mu` of the indexing set
950
+
951
+ In this space, one should have ``first_descent`` and
952
+ ``apply_simple_reflection`` act properly.
953
+
954
+ EXAMPLES::
955
+
956
+ sage: W = WeylGroup(["A",3])
957
+ sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
958
+ sage: K = QQ['q1,q2']
959
+ sage: q1, q2 = K.gens()
960
+ sage: KW = W.algebra(K)
961
+ sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
962
+ sage: w = W.an_element(); w
963
+ 123
964
+ sage: E.affine_lift(w)
965
+ 121
966
+ """
967
+
968
+ @abstract_method
969
+ def affine_retract(self, mu):
970
+ r"""
971
+ Retract `\mu` from a space admitting an action of the affine Weyl group.
972
+
973
+ EXAMPLES::
974
+
975
+ sage: W = WeylGroup(["A",3])
976
+ sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
977
+ sage: K = QQ['q1,q2']
978
+ sage: q1, q2 = K.gens()
979
+ sage: KW = W.algebra(K)
980
+ sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
981
+ sage: w = W.an_element(); w
982
+ 123
983
+ sage: E.affine_retract(E.affine_lift(w)) == w
984
+ True
985
+ """
986
+
987
+ def Y(self):
988
+ r"""
989
+ Return the Cherednik operators.
990
+
991
+ EXAMPLES::
992
+
993
+ sage: W = WeylGroup(["B",2])
994
+ sage: K = QQ['q1,q2'].fraction_field()
995
+ sage: q1, q2 = K.gens()
996
+ sage: KW = W.algebra(K)
997
+ sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
998
+ sage: E.Y()
999
+ Lazy family (...)_{i in Coroot lattice of the Root system of type ['B', 2, 1]}
1000
+ """
1001
+ return self._T_Y.Y()
1002
+
1003
+ def eigenvalues(self, mu):
1004
+ r"""
1005
+ Return the eigenvalues of `Y_{\alpha_0},\dots,Y_{\alpha_n}` on `E_\mu`.
1006
+
1007
+ INPUT:
1008
+
1009
+ - ``mu`` -- the index `\mu` of an eigenvector or a tentative eigenvector
1010
+
1011
+ EXAMPLES::
1012
+
1013
+ sage: W = WeylGroup(["B",2])
1014
+ sage: K = QQ['q1,q2'].fraction_field()
1015
+ sage: q1, q2 = K.gens()
1016
+ sage: KW = W.algebra(K)
1017
+ sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
1018
+ sage: w0 = W.long_element()
1019
+ sage: E.eigenvalues(w0)
1020
+ [q2^2/q1^2, q1/(-q2), q1/(-q2)]
1021
+ sage: w = W.an_element()
1022
+ sage: E.eigenvalues(w)
1023
+ [(-q2)/q1, (-q2^2)/(-q1^2), q1^3/(-q2^3)]
1024
+ """
1025
+ alphacheck = self.Y().keys().simple_roots()
1026
+ return [self.eigenvalue(mu, alphacheck[i]) for i in self.cartan_type().index_set()]
1027
+
1028
+ @cached_method
1029
+ def eigenvalue(self, mu, l):
1030
+ r"""
1031
+ Return the eigenvalue of `Y_{\lambda^\vee}` on `E_\mu` computed by applying `Y_{\lambda^\vee}` on `E_\mu`.
1032
+
1033
+ INPUT:
1034
+
1035
+ - ``mu`` -- the index `\mu` of an eigenvector, or a tentative eigenvector
1036
+ - ``l`` -- the index `\lambda^\vee` of a Cherednik operator in ``self.Y_index_set()``
1037
+
1038
+ This default implementation applies explicitly `Y_\mu` to `E_\lambda`.
1039
+
1040
+ EXAMPLES::
1041
+
1042
+ sage: W = WeylGroup(["B",2])
1043
+ sage: K = QQ['q1,q2'].fraction_field()
1044
+ sage: q1, q2 = K.gens()
1045
+ sage: KW = W.algebra(K)
1046
+ sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
1047
+ sage: w0 = W.long_element()
1048
+ sage: Y = E.Y()
1049
+ sage: alphacheck = Y.keys().simple_roots()
1050
+ sage: E.eigenvalue(w0, alphacheck[1])
1051
+ q1/(-q2)
1052
+ sage: E.eigenvalue(w0, alphacheck[2])
1053
+ q1/(-q2)
1054
+ sage: E.eigenvalue(w0, alphacheck[0])
1055
+ q2^2/q1^2
1056
+
1057
+ The following checks that all `E_w` are eigenvectors, with
1058
+ eigenvalue given by Lemma 7.5 of [HST2008]_ (checked for
1059
+ `A_2`, `A_3`)::
1060
+
1061
+ sage: Pcheck = Y.keys()
1062
+ sage: Wcheck = Pcheck.weyl_group()
1063
+ sage: P0check = Pcheck.classical()
1064
+ sage: def height(root):
1065
+ ....: return sum(P0check(root).coefficients())
1066
+ sage: def eigenvalue(w, mu):
1067
+ ....: return (-q2/q1)^height(Wcheck.from_reduced_word(w.reduced_word()).action(mu))
1068
+ sage: all(E.eigenvalue(w, a) == eigenvalue(w, a) for w in E.keys() for a in Y.keys().simple_roots()) # long time (2.5s)
1069
+ True
1070
+ """
1071
+ Y = self.Y()
1072
+ assert Y.keys().is_parent_of(l)
1073
+ if self.keys().is_parent_of(mu):
1074
+ Emu = self[mu]
1075
+ elif self.domain().is_parent_of(mu):
1076
+ Emu = mu
1077
+ else:
1078
+ raise TypeError("input should be a (tentative) eigenvector or an index thereof")
1079
+ res = Y[l](Emu)
1080
+ if not res:
1081
+ return self.domain().base_ring().zero()
1082
+ t = res.leading_support()
1083
+ assert t == Emu.leading_support()
1084
+ c = res[t] / Emu[t]
1085
+ assert res == Emu*c, "not an eigenvector!!!"
1086
+ return c
1087
+
1088
+ def twist(self, mu, i):
1089
+ r"""
1090
+ Act by `s_i` on `\mu`.
1091
+
1092
+ By default, this calls the method ``apply_simple_reflection``.
1093
+
1094
+ EXAMPLES::
1095
+
1096
+ sage: W = WeylGroup(["B",3])
1097
+ sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
1098
+ sage: K = QQ['q1,q2']
1099
+ sage: q1, q2 = K.gens()
1100
+ sage: KW = W.algebra(K)
1101
+ sage: T = KW.demazure_lusztig_operators(q1, q2, affine=True)
1102
+ sage: E = T.Y_eigenvectors()
1103
+ sage: w = W.an_element(); w
1104
+ 123
1105
+ sage: E.twist(w,1)
1106
+ 1231
1107
+ """
1108
+ return mu.apply_simple_reflection(i)
1109
+
1110
+ @cached_method
1111
+ def hecke_parameters(self, i):
1112
+ r"""
1113
+ Return the Hecke parameters for index ``i``.
1114
+
1115
+ EXAMPLES::
1116
+
1117
+ sage: W = WeylGroup(["B",3])
1118
+ sage: K = QQ['q1,q2']
1119
+ sage: q1, q2 = K.gens()
1120
+ sage: KW = W.algebra(K)
1121
+ sage: T = KW.demazure_lusztig_operators(q1, q2, affine=True)
1122
+ sage: E = T.Y_eigenvectors()
1123
+ sage: E.hecke_parameters(1)
1124
+ (q1, q2)
1125
+ sage: E.hecke_parameters(2)
1126
+ (q1, q2)
1127
+ sage: E.hecke_parameters(0)
1128
+ (q1, q2)
1129
+ """
1130
+ return self._T.parameters(i)
1131
+
1132
+ @cached_method
1133
+ def __getitem__(self, mu):
1134
+ r"""
1135
+ Return the eigenvector `E_\mu`.
1136
+
1137
+ INPUT:
1138
+
1139
+ - ``mu`` -- the index `\mu` of an eigenvector
1140
+
1141
+ EXAMPLES::
1142
+
1143
+ sage: W = WeylGroup(["A",3])
1144
+ sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
1145
+ sage: K = QQ['q1,q2'].fraction_field()
1146
+ sage: q1, q2 = K.gens()
1147
+ sage: KW = W.algebra(K)
1148
+ sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
1149
+ sage: w0 = W.long_element()
1150
+ sage: E[w0]
1151
+ 123121
1152
+ """
1153
+ L0 = self.keys()
1154
+ assert L0.is_parent_of(mu)
1155
+ alphacheck = self.Y().keys().simple_roots()
1156
+ muaff = self.affine_lift(mu)
1157
+ i = muaff.first_descent()
1158
+ if i is None:
1159
+ return self.seed(mu)
1160
+ muaffi = self.twist(muaff, i)
1161
+ mui = self.affine_retract(muaffi)
1162
+ E_mui = self[mui]
1163
+ q1, q2 = self.hecke_parameters(i)
1164
+ coroot = alphacheck[i]
1165
+ ct = self.cartan_type()
1166
+ special_node = ct.special_node()
1167
+ if i == special_node:
1168
+ a = ct.a()[special_node]
1169
+ else:
1170
+ a = 1
1171
+ Yi = self.eigenvalue(mui, -coroot)
1172
+ result = self._T.Tw(i)(E_mui) - (q1+q2)*Yi**(a-1)/(1-Yi**a)*E_mui
1173
+ if self._normalized:
1174
+ coeff = result.coefficient(mu)
1175
+ result /= coeff
1176
+ return result
1177
+
1178
+ def recursion(self, mu):
1179
+ r"""
1180
+ Return the indices used in the recursion.
1181
+
1182
+ INPUT:
1183
+
1184
+ - ``mu`` -- the index `\mu` of an eigenvector
1185
+
1186
+ EXAMPLES::
1187
+
1188
+ sage: W = WeylGroup(["A",3])
1189
+ sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
1190
+ sage: K = QQ['q1,q2'].fraction_field()
1191
+ sage: q1, q2 = K.gens()
1192
+ sage: KW = W.algebra(K)
1193
+ sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
1194
+ sage: w0 = W.long_element()
1195
+ sage: E.recursion(w0)
1196
+ []
1197
+ sage: w = W.an_element(); w
1198
+ 123
1199
+ sage: E.recursion(w)
1200
+ [1, 2, 1]
1201
+ """
1202
+ muaff = self.affine_lift(mu)
1203
+ return muaff.reduced_word()