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,1214 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ r"""
3
+ Group algebras of root lattice realizations
4
+ """
5
+ # ****************************************************************************
6
+ # Copyright (C) 2013 Nicolas M. Thiery <nthiery at users.sf.net>
7
+ # Anne Schilling <anne at math.ucdavis.edu>
8
+ # Mark Shimozono <mshimo at vt.edu>
9
+ # Daniel Bump
10
+ #
11
+ # Distributed under the terms of the GNU General Public License (GPL)
12
+ # https://www.gnu.org/licenses/
13
+ # ****************************************************************************
14
+ import functools
15
+ import operator
16
+ from sage.misc.cachefunc import cached_method
17
+ from sage.misc.lazy_import import lazy_import
18
+ from sage.misc.misc_c import prod
19
+ from sage.categories.algebra_functor import AlgebrasCategory
20
+ lazy_import('sage.rings.integer_ring', 'ZZ')
21
+ from sage.modules.free_module_element import vector
22
+ from sage.combinat.root_system.hecke_algebra_representation import HeckeAlgebraRepresentation
23
+
24
+
25
+ class Algebras(AlgebrasCategory):
26
+ """
27
+ The category of group algebras of root lattice realizations.
28
+
29
+ This includes typically weight rings (group algebras of weight lattices).
30
+
31
+ TESTS::
32
+
33
+ sage: for ct in CartanType.samples(crystallographic=True): # long time
34
+ ....: TestSuite(RootSystem(ct).root_lattice().algebra(QQ)).run()
35
+ """
36
+
37
+ class ParentMethods:
38
+
39
+ def _repr_(self):
40
+ r"""
41
+ EXAMPLES::
42
+
43
+ sage: RootSystem(["A",2,1]).ambient_space().algebra(QQ) # indirect doctest
44
+ Algebra of the Ambient space of the Root system of type ['A', 2, 1] over Rational Field
45
+ """
46
+ return "Algebra of the %s over %s" % (self.basis().keys(), self.base_ring())
47
+
48
+ def some_elements(self):
49
+ r"""
50
+ Return some elements of the algebra ``self``.
51
+
52
+ EXAMPLES::
53
+
54
+ sage: A = RootSystem(["A",2,1]).ambient_space().algebra(QQ)
55
+ sage: A.some_elements()
56
+ [B[2*e[0] + 2*e[1] + 3*e[2]]...]
57
+ sage: A.some_elements() # needs sage.graphs
58
+ [B[2*e[0] + 2*e[1] + 3*e[2]],
59
+ B[-e[0] + e[2] + e['delta']],
60
+ B[e[0] - e[1]],
61
+ B[e[1] - e[2]],
62
+ B[e['deltacheck']],
63
+ B[e[0] + e['deltacheck']],
64
+ B[e[0] + e[1] + e['deltacheck']]]
65
+
66
+ sage: A = RootSystem(["B",2]).weight_space().algebra(QQ)
67
+ sage: A.some_elements()
68
+ [B[2*Lambda[1] + 2*Lambda[2]], ...B[Lambda[1]], B[Lambda[2]]]
69
+ sage: A.some_elements() # needs sage.graphs
70
+ [B[2*Lambda[1] + 2*Lambda[2]],
71
+ B[2*Lambda[1] - 2*Lambda[2]],
72
+ B[-Lambda[1] + 2*Lambda[2]],
73
+ B[Lambda[1]],
74
+ B[Lambda[2]]]
75
+ """
76
+ return [self.monomial(weight) for weight in self.basis().keys().some_elements()]
77
+
78
+ @cached_method
79
+ def cartan_type(self):
80
+ r"""
81
+ Return the Cartan type of ``self``.
82
+
83
+ EXAMPLES::
84
+
85
+ sage: A = RootSystem(["A",2,1]).ambient_space().algebra(QQ)
86
+ sage: A.cartan_type()
87
+ ['A', 2, 1]
88
+ sage: A = RootSystem(["B",2]).weight_space().algebra(QQ)
89
+ sage: A.cartan_type()
90
+ ['B', 2]
91
+ """
92
+ return self.basis().keys().cartan_type()
93
+
94
+ def from_polynomial(self, p):
95
+ """
96
+ Construct an element of ``self`` from a polynomial `p`.
97
+
98
+ INPUT:
99
+
100
+ - ``p`` -- a polynomial
101
+
102
+ EXAMPLES::
103
+
104
+ sage: L = RootSystem(["A",2]).ambient_lattice()
105
+ sage: KL = L.algebra(QQ)
106
+ sage: x,y,z = QQ['x,y,z'].gens()
107
+ sage: KL.from_polynomial(x)
108
+ B[(1, 0, 0)]
109
+ sage: KL.from_polynomial(x^2*y + 2*y - z)
110
+ B[(2, 1, 0)] + 2*B[(0, 1, 0)] - B[(0, 0, 1)]
111
+
112
+ TESTS::
113
+
114
+ sage: KL.from_polynomial(x).leading_support().parent() is L
115
+ True
116
+ sage: KL.from_polynomial(x-x)
117
+ 0
118
+ sage: KL.from_polynomial(x-x).parent() is KL
119
+ True
120
+
121
+ .. TODO:: make this work for Laurent polynomials too
122
+ """
123
+ L = self.basis().keys()
124
+ return self.sum_of_terms((L.from_vector(vector(t)), c)
125
+ for t, c in p.monomial_coefficients().items())
126
+
127
+ @cached_method
128
+ def divided_difference_on_basis(self, weight, i):
129
+ r"""
130
+ Return the result of applying the `i`-th divided difference on ``weight``.
131
+
132
+ INPUT:
133
+
134
+ - ``weight`` -- a weight
135
+ - ``i`` -- an element of the index set
136
+
137
+ .. TODO:: type free definition (Viviane's definition uses that we are in the ambient space)
138
+
139
+ EXAMPLES::
140
+
141
+ sage: L = RootSystem(["A",1]).ambient_space()
142
+ sage: KL = L.algebra(QQ)
143
+ sage: KL.divided_difference_on_basis(L((2,2)), 1) # todo: not implemented
144
+ 0
145
+ sage: KL.divided_difference_on_basis(L((3,0)), 1) # todo: not implemented
146
+ B[(2, 0)] + B[(1, 1)] + B[(0, 2)]
147
+ sage: KL.divided_difference_on_basis(L((0,3)), 1) # todo: not implemented
148
+ -B[(2, 0)] - B[(1, 1)] - B[(0, 2)]
149
+
150
+ In type `A` and in the ambient lattice, we recover the
151
+ usual action of divided differences polynomials::
152
+
153
+ sage: x,y = QQ['x,y'].gens()
154
+ sage: d = lambda p: (p - p(y,x)) / (x-y)
155
+ sage: d(x^2*y^2)
156
+ 0
157
+ sage: d(x^3)
158
+ x^2 + x*y + y^2
159
+ sage: d(y^3)
160
+ -x^2 - x*y - y^2
161
+ """
162
+ raise NotImplementedError()
163
+
164
+ @cached_method
165
+ def isobaric_divided_difference_on_basis(self, weight, i):
166
+ r"""
167
+ Return the result of applying the `i`-th isobaric divided difference on ``weight``.
168
+
169
+ INPUT:
170
+
171
+ - ``weight`` -- a weight
172
+ - ``i`` -- an element of the index set
173
+
174
+ .. SEEALSO:: :meth:`demazure_operators`
175
+
176
+ EXAMPLES::
177
+
178
+ sage: L = RootSystem(["A",1]).ambient_space()
179
+ sage: KL = L.algebra(QQ)
180
+ sage: KL.isobaric_divided_difference_on_basis(L((2,2)), 1)
181
+ B[(2, 2)]
182
+ sage: KL.isobaric_divided_difference_on_basis(L((3,0)), 1)
183
+ B[(1, 2)] + B[(2, 1)] + B[(3, 0)] + B[(0, 3)]
184
+ sage: KL.isobaric_divided_difference_on_basis(L((0,3)), 1)
185
+ -B[(1, 2)] - B[(2, 1)]
186
+
187
+ In type `A` and in the ambient lattice, we recover the
188
+ usual action of divided differences on polynomials::
189
+
190
+ sage: x,y = QQ['x,y'].gens()
191
+ sage: d = lambda p: (x*p - (x*p)(y,x)) / (x-y)
192
+ sage: d(x^2*y^2)
193
+ x^2*y^2
194
+ sage: d(x^3)
195
+ x^3 + x^2*y + x*y^2 + y^3
196
+ sage: d(y^3)
197
+ -x^2*y - x*y^2
198
+
199
+ REFERENCES:
200
+
201
+ .. [Lascoux2003] Alain Lascoux, Symmetric functions and combinatorial operators on polynomials,
202
+ CBMS Regional Conference Series in Mathematics, 99, 2003.
203
+ """
204
+ P = self.basis().keys() # the root lattice realization
205
+ n = weight.scalar(P.simple_coroot(i))
206
+ if n not in ZZ:
207
+ raise ValueError("the weight does not have an integral scalar product with the coroot")
208
+ alphai = P.simple_root(i)
209
+ if n >= 0:
210
+ return self.sum_of_monomials(weight-j*alphai for j in range(n + 1))
211
+ return -self.sum_of_monomials(weight-j*alphai for j in range(n + 1, 0))
212
+
213
+ def demazure_operators(self):
214
+ r"""
215
+ Return the Demazure operators acting on ``self``.
216
+
217
+ The `i`-th Demazure operator is defined by:
218
+
219
+ .. MATH::
220
+
221
+ \pi_i = \frac{ 1 - e^{-\alpha_i}s_i }{ 1-e^{-\alpha_i} }
222
+
223
+ It acts on `e^\lambda`, for `\lambda` a weight, by:
224
+
225
+ .. MATH::
226
+
227
+ \pi_i e^\lambda = \frac{e^\lambda - e^{-\alpha_i+s_i\lambda}}{1-e^{-\alpha_i}}
228
+
229
+ This matches with Lascoux' definition [Lascoux2003]_ of `\pi_i`, and
230
+ with the `i`-th Demazure operator of [Kumar1987]_, which also works for
231
+ general Kac-Moody types.
232
+
233
+ REFERENCES:
234
+
235
+ .. [Kumar1987] \S. Kumar, Demazure character formula in arbitrary Kac-Moody setting,
236
+ Invent. Math. 89 (1987), no. 2, 395-423.
237
+
238
+ EXAMPLES:
239
+
240
+ We compute some Schur functions, as images of dominant
241
+ monomials under the action of the maximal isobaric divided
242
+ difference `\Delta_{w_0}`::
243
+
244
+ sage: L = RootSystem(["A",2]).ambient_lattice()
245
+ sage: KL = L.algebra(QQ)
246
+ sage: w0 = tuple(L.weyl_group().long_element().reduced_word()) # needs sage.libs.gap
247
+ sage: pi = KL.demazure_operators()
248
+ sage: pi0 = pi[w0] # needs sage.libs.gap
249
+ sage: pi0(KL.monomial(L((2,1)))) # needs sage.libs.gap
250
+ 2*B[(1, 1, 1)] + B[(1, 2, 0)] + B[(1, 0, 2)] + B[(2, 1, 0)]
251
+ + B[(2, 0, 1)] + B[(0, 1, 2)] + B[(0, 2, 1)]
252
+
253
+ Let us make the result into an actual polynomial::
254
+
255
+ sage: P = QQ['x,y,z']
256
+ sage: pi0(KL.monomial(L((2,1)))).expand(P.gens()) # needs sage.libs.gap
257
+ x^2*y + x*y^2 + x^2*z + 2*x*y*z + y^2*z + x*z^2 + y*z^2
258
+
259
+ This is indeed a Schur function::
260
+
261
+ sage: s = SymmetricFunctions(QQ).s() # needs sage.combinat
262
+ sage: s[2,1].expand(3, P.variable_names()) # needs sage.combinat
263
+ x^2*y + x*y^2 + x^2*z + 2*x*y*z + y^2*z + x*z^2 + y*z^2
264
+
265
+ Let us check this systematically on Schur functions of degree 6::
266
+
267
+ sage: for p in Partitions(6, max_length=3).list(): # needs sage.combinat sage.libs.gap
268
+ ....: assert (s.monomial(p).expand(3, P.variable_names())
269
+ ....: == pi0(KL.monomial(L(tuple(p)))).expand(P.gens()))
270
+
271
+ We check systematically that these operators satisfy the Iwahori-Hecke algebra relations::
272
+
273
+ sage: for cartan_type in CartanType.samples(crystallographic=True): # long time (12s)
274
+ ....: L = RootSystem(cartan_type).weight_lattice()
275
+ ....: KL = L.algebra(QQ)
276
+ ....: T = KL.demazure_operators()
277
+ ....: T._test_relations()
278
+
279
+ sage: L = RootSystem(['A',1,1]).weight_lattice()
280
+ sage: KL = L.algebra(QQ)
281
+ sage: T = KL.demazure_operators()
282
+ sage: T._test_relations()
283
+
284
+ .. WARNING::
285
+
286
+ The Demazure operators are only defined if all the
287
+ elements in the support have integral scalar products
288
+ with the coroots (basically, they are in the weight
289
+ lattice). Otherwise an error is raised::
290
+
291
+ sage: L = RootSystem(CartanType(["G",2]).dual()).ambient_space()
292
+ sage: KL = L.algebra(QQ)
293
+ sage: pi = KL.demazure_operators()
294
+ sage: pi[1](KL.monomial(L([0,0,1])))
295
+ Traceback (most recent call last):
296
+ ...
297
+ ValueError: the weight does not have an integral scalar product with the coroot
298
+ """
299
+ return HeckeAlgebraRepresentation(self, self.isobaric_divided_difference_on_basis, self.cartan_type(), 0, 1, side='left')
300
+
301
+ def _test_demazure_operators(self, **options):
302
+ """
303
+ Test that the Demazure operators satisfy their defining formulas.
304
+
305
+ EXAMPLES::
306
+
307
+ sage: RootSystem(["A",2]).root_lattice().algebra(QQ)._test_demazure_operators()
308
+ """
309
+ tester = self._tester(**options)
310
+ try:
311
+ pi = self.demazure_operators()
312
+ L = self.basis().keys()
313
+ alpha = L.simple_roots()
314
+ alphacheck = L.simple_coroots()
315
+ s = L.simple_reflections()
316
+ for i in self.cartan_type().index_set():
317
+ emalphai = self.monomial(-alpha[i]) # X^{-\alpha_i}
318
+ for weight in L.some_elements():
319
+ if weight.scalar(alphacheck[i]) not in ZZ:
320
+ # Demazure operators are not defined in this case
321
+ continue
322
+ x = self.monomial(weight)
323
+ result = pi[i](x)
324
+ tester.assertEqual(result * (self.one() - emalphai),
325
+ x - emalphai * x.map_support(s[i]))
326
+ except ImportError:
327
+ pass
328
+
329
+ def demazure_lusztig_operator_on_basis(self, weight, i, q1, q2, convention='antidominant'):
330
+ r"""
331
+ Return the result of applying the `i`-th Demazure-Lusztig operator on ``weight``.
332
+
333
+ INPUT:
334
+
335
+ - ``weight`` -- an element `\lambda` of the weight lattice
336
+ - ``i`` -- an element of the index set
337
+ - ``q1``, ``q2`` -- two elements of the ground ring
338
+ - ``convention`` -- ``'antidominant'``, ``'bar'``, or ``'dominant'`` (default: ``'antidominant'``)
339
+
340
+ See :meth:`demazure_lusztig_operators` for the details.
341
+
342
+ EXAMPLES::
343
+
344
+ sage: L = RootSystem(["A",1]).ambient_space()
345
+ sage: K = QQ['q1,q2']
346
+ sage: q1, q2 = K.gens()
347
+ sage: KL = L.algebra(K)
348
+ sage: KL.demazure_lusztig_operator_on_basis(L((2,2)), 1, q1, q2)
349
+ q1*B[(2, 2)]
350
+ sage: KL.demazure_lusztig_operator_on_basis(L((3,0)), 1, q1, q2)
351
+ (q1+q2)*B[(1, 2)] + (q1+q2)*B[(2, 1)] + (q1+q2)*B[(3, 0)] + q1*B[(0, 3)]
352
+ sage: KL.demazure_lusztig_operator_on_basis(L((0,3)), 1, q1, q2)
353
+ -(q1+q2)*B[(1, 2)] - (q1+q2)*B[(2, 1)] - q2*B[(3, 0)]
354
+
355
+ At `q_1=1` and `q_2=0` we recover the action of the isobaric divided differences `\pi_i`::
356
+
357
+ sage: KL.demazure_lusztig_operator_on_basis(L((2,2)), 1, 1, 0)
358
+ B[(2, 2)]
359
+ sage: KL.demazure_lusztig_operator_on_basis(L((3,0)), 1, 1, 0)
360
+ B[(1, 2)] + B[(2, 1)] + B[(3, 0)] + B[(0, 3)]
361
+ sage: KL.demazure_lusztig_operator_on_basis(L((0,3)), 1, 1, 0)
362
+ -B[(1, 2)] - B[(2, 1)]
363
+
364
+ Or `1-\pi_i` for ``bar=True``::
365
+
366
+ sage: KL.demazure_lusztig_operator_on_basis(L((2,2)), 1, 1, 0, convention='bar')
367
+ 0
368
+ sage: KL.demazure_lusztig_operator_on_basis(L((3,0)), 1, 1, 0, convention='bar')
369
+ -B[(1, 2)] - B[(2, 1)] - B[(0, 3)]
370
+ sage: KL.demazure_lusztig_operator_on_basis(L((0,3)), 1, 1, 0, convention='bar')
371
+ B[(1, 2)] + B[(2, 1)] + B[(0, 3)]
372
+
373
+ At `q_1=1` and `q_2=-1` we recover the action of the simple reflection `s_i`::
374
+
375
+ sage: KL.demazure_lusztig_operator_on_basis(L((2,2)), 1, 1, -1)
376
+ B[(2, 2)]
377
+ sage: KL.demazure_lusztig_operator_on_basis(L((3,0)), 1, 1, -1)
378
+ B[(0, 3)]
379
+ sage: KL.demazure_lusztig_operator_on_basis(L((0,3)), 1, 1, -1)
380
+ B[(3, 0)]
381
+ """
382
+ if convention == "dominant":
383
+ weight = -weight
384
+ pi_on_weight = self.isobaric_divided_difference_on_basis(weight, i)
385
+ if convention == "bar":
386
+ pi_on_weight = self.monomial(weight) - pi_on_weight
387
+ result = (q1+q2) * pi_on_weight - self.term(weight.simple_reflection(i), q2)
388
+ if convention == "dominant":
389
+ return result.map_support(operator.neg)
390
+ else:
391
+ return result
392
+
393
+ def demazure_lusztig_operators(self, q1, q2, convention='antidominant'):
394
+ r"""
395
+ Return the Demazure-Lusztig operators acting on ``self``.
396
+
397
+ INPUT:
398
+
399
+ - ``q1``, ``q2`` -- two elements of the ground ring
400
+ - ``convention`` -- "antidominant", "bar", or "dominant" (default: ``'antidominant'``)
401
+
402
+ If `R` is the parent weight ring, the Demazure-Lusztig
403
+ operator `T_i` is the linear map `R\rightarrow R` obtained
404
+ by interpolating between the isobaric divided difference
405
+ operator `\pi_i` (see :meth:`.isobaric_divided_difference_on_basis`)
406
+ and the simple reflection `s_i`.
407
+
408
+ .. MATH::
409
+
410
+ (q_1+q_2) \pi_i - q_2 s_i
411
+
412
+ The Demazure-Lusztig operators give the usual
413
+ representation of the operator `T_i` of the (affine) Hecke
414
+ algebra with eigenvalues `q_1` and `q_2` associated to the
415
+ Weyl group.
416
+
417
+ Several variants are available to match with various
418
+ conventions used in the literature:
419
+
420
+ - "bar" replaces `\pi_i` in the formula above by
421
+ `\overline{\pi}_i = (1-\pi_i)`.
422
+ - "dominant" conjugates the operator by
423
+ `x^\lambda \mapsto x^-\lambda`.
424
+
425
+ The names dominant and antidominant for the conventions were chosen with regards to
426
+ the nonsymmetric Macdonald polynomials. The `Y` operators for the Macdonald polynomials
427
+ in the "dominant" convention satisfy `Y_\lambda = T_{t_{\lambda}}` for `\lambda` dominant.
428
+ This is also the convention used in [Haiman06]_. For the "antidominant" convention,
429
+ `Y_\lambda = T_{t_{\lambda}}` with `\lambda` antidominant.
430
+
431
+ .. SEEALSO::
432
+
433
+ - :meth:`demazure_lusztig_operator_on_basis`.
434
+ - :class:`~.non_symmetric_macdonald_polynomials.NonSymmetricMacdonaldPolynomials`.
435
+
436
+ REFERENCES:
437
+
438
+ .. [Lusztig1985] \G. Lusztig,
439
+ *Equivariant K-theory and representations of Hecke algebras*,
440
+ Proc. Amer. Math. Soc. 94 (1985), no. 2, 337-342.
441
+
442
+ .. [Cherednik1995] \I. Cherednik,
443
+ *Nonsymmetric Macdonald polynomials*. IMRN 10, 483-515 (1995).
444
+
445
+ EXAMPLES::
446
+
447
+ sage: L = RootSystem(["A",1]).ambient_space()
448
+ sage: K = QQ['q1,q2'].fraction_field()
449
+ sage: q1, q2 = K.gens()
450
+ sage: KL = L.algebra(K)
451
+ sage: T = KL.demazure_lusztig_operators(q1, q2)
452
+ sage: Tbar = KL.demazure_lusztig_operators(q1, q2, convention='bar')
453
+ sage: Tdominant = KL.demazure_lusztig_operators(q1, q2,
454
+ ....: convention='dominant')
455
+ sage: x = KL.monomial(L((3,0)))
456
+ sage: T[1](x)
457
+ (q1+q2)*B[(1, 2)] + (q1+q2)*B[(2, 1)] + (q1+q2)*B[(3, 0)] + q1*B[(0, 3)]
458
+ sage: Tbar[1](x)
459
+ -(q1+q2)*B[(1, 2)] - (q1+q2)*B[(2, 1)] - (q1+2*q2)*B[(0, 3)]
460
+ sage: Tbar[1](x) + T[1](x)
461
+ (q1+q2)*B[(3, 0)] - 2*q2*B[(0, 3)]
462
+ sage: Tdominant[1](x)
463
+ -(q1+q2)*B[(1, 2)] - (q1+q2)*B[(2, 1)] - q2*B[(0, 3)]
464
+
465
+ sage: Tdominant.Tw_inverse(1)(KL.monomial(-L.simple_root(1)))
466
+ -((q1+q2)/(q1*q2))*B[(0, 0)] - 1/q2*B[(1, -1)]
467
+
468
+ We repeat similar computation in the affine setting::
469
+
470
+ sage: L = RootSystem(["A",2,1]).ambient_space()
471
+ sage: K = QQ['q1,q2'].fraction_field()
472
+ sage: q1, q2 = K.gens()
473
+ sage: KL = L.algebra(K)
474
+ sage: T = KL.demazure_lusztig_operators(q1, q2)
475
+ sage: Tbar = KL.demazure_lusztig_operators(q1, q2, convention='bar')
476
+ sage: Tdominant = KL.demazure_lusztig_operators(q1, q2,
477
+ ....: convention='dominant')
478
+ sage: e = L.basis()
479
+ sage: x = KL.monomial(3*e[0])
480
+ sage: T[1](x)
481
+ (q1+q2)*B[e[0] + 2*e[1]] + (q1+q2)*B[2*e[0] + e[1]]
482
+ + (q1+q2)*B[3*e[0]] + q1*B[3*e[1]]
483
+ sage: Tbar[1](x)
484
+ -(q1+q2)*B[e[0] + 2*e[1]] - (q1+q2)*B[2*e[0] + e[1]] - (q1+2*q2)*B[3*e[1]]
485
+ sage: Tbar[1](x) + T[1](x)
486
+ (q1+q2)*B[3*e[0]] - 2*q2*B[3*e[1]]
487
+ sage: Tdominant[1](x)
488
+ -(q1+q2)*B[e[0] + 2*e[1]] - (q1+q2)*B[2*e[0] + e[1]] - q2*B[3*e[1]]
489
+ sage: Tdominant.Tw_inverse(1)(KL.monomial(-L.simple_root(1)))
490
+ -((q1+q2)/(q1*q2))*B[0] - 1/q2*B[e[0] - e[1]]
491
+
492
+ One can obtain iterated operators by passing a reduced
493
+ word or an element of the Weyl group::
494
+
495
+ sage: T[1,2](x)
496
+ (q1^2+2*q1*q2+q2^2)*B[e[0] + e[1] + e[2]] +
497
+ (q1^2+2*q1*q2+q2^2)*B[e[0] + 2*e[1]] +
498
+ (q1^2+q1*q2)*B[e[0] + 2*e[2]] + (q1^2+2*q1*q2+q2^2)*B[2*e[0] + e[1]] +
499
+ (q1^2+q1*q2)*B[2*e[0] + e[2]] + (q1^2+q1*q2)*B[3*e[0]] +
500
+ (q1^2+q1*q2)*B[e[1] + 2*e[2]] + (q1^2+q1*q2)*B[2*e[1] + e[2]] +
501
+ (q1^2+q1*q2)*B[3*e[1]] + q1^2*B[3*e[2]]
502
+
503
+ and use that to check, for example, the braid relations::
504
+
505
+ sage: T[1,2,1](x) - T[2,1,2](x)
506
+ 0
507
+
508
+ The operators satisfy the relations of the affine Hecke
509
+ algebra with parameters `q_1`, `q_2`::
510
+
511
+ sage: T._test_relations()
512
+ sage: Tdominant._test_relations()
513
+ sage: Tbar._test_relations() #-q2,q1+2*q2 # todo: not implemented: set the appropriate eigenvalues!
514
+
515
+ And the `\bar{T}` are basically the inverses of the `T` s::
516
+
517
+ sage: Tinv = KL.demazure_lusztig_operators(2/q1 + 1/q2, -1/q1,
518
+ ....: convention='bar')
519
+ sage: [Tinv[1](T[1](x)) - x for x in KL.some_elements()] # needs sage.graphs
520
+ [0, 0, 0, 0, 0, 0, 0]
521
+
522
+ We check that `\Lambda_1-\Lambda_0` is an eigenvector for
523
+ the `Y` s in affine type::
524
+
525
+ sage: K = QQ['q,q1,q2'].fraction_field()
526
+ sage: q,q1,q2 = K.gens()
527
+ sage: L = RootSystem(["A",2,1]).ambient_space()
528
+ sage: L0 = L.classical()
529
+ sage: Lambda = L.fundamental_weights() # needs sage.graphs
530
+ sage: alphacheck = L0.simple_coroots()
531
+ sage: KL = L.algebra(K)
532
+ sage: T = KL.demazure_lusztig_operators(q1, q2, convention='dominant')
533
+ sage: Y = T.Y()
534
+ sage: alphacheck = Y.keys().alpha() # alpha of coroot lattice is alphacheck
535
+ sage: alphacheck
536
+ Finite family {0: alphacheck[0], 1: alphacheck[1], 2: alphacheck[2]}
537
+ sage: x = KL.monomial(Lambda[1] - Lambda[0]); x # needs sage.graphs
538
+ B[e[0]]
539
+
540
+ In fact it is not exactly an eigenvector, but the extra
541
+ '\delta` term is to be interpreted as a `q` parameter::
542
+
543
+ sage: # needs sage.graphs
544
+ sage: Y[alphacheck[0]](KL.one())
545
+ q2^2/q1^2*B[0]
546
+ sage: Y[alphacheck[1]](x)
547
+ -(q2^2/(-q1^2))*B[e[0] - e['delta']]
548
+ sage: Y[alphacheck[2]](x)
549
+ (q1/(-q2))*B[e[0]]
550
+ sage: KL.q_project(Y[alphacheck[1]](x),q)
551
+ -(q2^2/(-q*q1^2))*B[(1, 0, 0)]
552
+
553
+ sage: # needs sage.graphs
554
+ sage: KL.q_project(x, q)
555
+ B[(1, 0, 0)]
556
+ sage: KL.q_project(Y[alphacheck[0]](x),q)
557
+ -q*q1/q2*B[(1, 0, 0)]
558
+ sage: KL.q_project(Y[alphacheck[1]](x),q)
559
+ -(q2^2/(-q*q1^2))*B[(1, 0, 0)]
560
+ sage: KL.q_project(Y[alphacheck[2]](x),q)
561
+ (q1/(-q2))*B[(1, 0, 0)]
562
+
563
+ We now check systematically that the Demazure-Lusztig
564
+ operators satisfy the relations of the Iwahori-Hecke
565
+ algebra::
566
+
567
+ sage: K = QQ['q1,q2']
568
+ sage: q1, q2 = K.gens()
569
+ sage: for cartan_type in CartanType.samples(crystallographic=True): # long time (12s)
570
+ ....: L = RootSystem(cartan_type).root_lattice()
571
+ ....: KL = L.algebra(K)
572
+ ....: T = KL.demazure_lusztig_operators(q1,q2)
573
+ ....: T._test_relations()
574
+
575
+ sage: for cartan_type in CartanType.samples(crystallographic=True): # long time (12s)
576
+ ....: L = RootSystem(cartan_type).weight_lattice()
577
+ ....: KL = L.algebra(K)
578
+ ....: T = KL.demazure_lusztig_operators(q1,q2)
579
+ ....: T._test_relations()
580
+
581
+ Recall that the Demazure-Lusztig operators are only
582
+ defined when all monomials belong to the weight lattice.
583
+ Thus, in the group algebra of the ambient space, we need
584
+ to specify explicitly the elements on which to run the
585
+ tests::
586
+
587
+ sage: for cartan_type in CartanType.samples(crystallographic=True): # long time (12s)
588
+ ....: L = RootSystem(cartan_type).ambient_space()
589
+ ....: KL = L.algebra(K)
590
+ ....: weight_lattice = RootSystem(cartan_type).weight_lattice(extended=L.is_extended())
591
+ ....: elements = [ KL.monomial(L(weight)) for weight in weight_lattice.some_elements() ]
592
+ ....: T = KL.demazure_lusztig_operators(q1,q2)
593
+ ....: T._test_relations(elements=elements)
594
+ """
595
+ T_on_basis = functools.partial(self.demazure_lusztig_operator_on_basis,
596
+ q1=q1, q2=q2, convention=convention)
597
+ return HeckeAlgebraRepresentation(self, T_on_basis, self.cartan_type(), q1, q2, side='left')
598
+
599
+ def demazure_lusztig_operator_on_classical_on_basis(self, weight, i, q, q1, q2, convention='antidominant'):
600
+ r"""
601
+ Return the result of applying the `i`-th Demazure-Lusztig operator on the classical weight ``weight`` embedded at level 0.
602
+
603
+ INPUT:
604
+
605
+ - ``weight`` -- a classical weight `\lambda`
606
+ - ``i`` -- an element of the index set
607
+ - ``q1``, ``q2`` -- two elements of the ground ring
608
+ - ``convention`` -- ``'antidominant'``, ``'bar'``, or ``'dominant'`` (default: ``'antidominant'``)
609
+
610
+ See :meth:`demazure_lusztig_operators` for the details.
611
+
612
+ .. TODO::
613
+
614
+ - Optimize the code to only do the embedding/projection for T_0
615
+ - Add an option to specify at which level one wants to
616
+ work. Currently this is level 0.
617
+
618
+ EXAMPLES::
619
+
620
+ sage: L = RootSystem(["A",1,1]).ambient_space()
621
+ sage: L0 = L.classical()
622
+ sage: K = QQ['q,q1,q2']
623
+ sage: q, q1, q2 = K.gens()
624
+ sage: KL = L.algebra(K)
625
+ sage: KL0 = L0.algebra(K)
626
+
627
+ These operators coincide with the usual Demazure-Lusztig
628
+ operators::
629
+
630
+ sage: KL.demazure_lusztig_operator_on_classical_on_basis(L0((2,2)), # needs sage.graphs
631
+ ....: 1, q, q1, q2)
632
+ q1*B[(2, 2)]
633
+ sage: KL0.demazure_lusztig_operator_on_basis(L0((2,2)), 1, q1, q2)
634
+ q1*B[(2, 2)]
635
+
636
+ sage: KL.demazure_lusztig_operator_on_classical_on_basis(L0((3,0)), # needs sage.graphs
637
+ ....: 1, q, q1, q2)
638
+ (q1+q2)*B[(1, 2)] + (q1+q2)*B[(2, 1)] + (q1+q2)*B[(3, 0)] + q1*B[(0, 3)]
639
+ sage: KL0.demazure_lusztig_operator_on_basis(L0((3,0)), 1, q1, q2)
640
+ (q1+q2)*B[(1, 2)] + (q1+q2)*B[(2, 1)] + (q1+q2)*B[(3, 0)] + q1*B[(0, 3)]
641
+
642
+ except that we now have an action of `T_0`, which introduces some `q` s::
643
+
644
+ sage: KL.demazure_lusztig_operator_on_classical_on_basis(L0((2,2)), # needs sage.graphs
645
+ ....: 0, q, q1, q2)
646
+ q1*B[(2, 2)]
647
+ sage: KL.demazure_lusztig_operator_on_classical_on_basis(L0((3,0)), # needs sage.graphs
648
+ ....: 0, q, q1, q2)
649
+ -(q^2*q1+q^2*q2)*B[(1, 2)] - (q*q1+q*q2)*B[(2, 1)] - q^3*q2*B[(0, 3)]
650
+ """
651
+ L = self.basis().keys()
652
+ weight = L.embed_at_level(weight, 0)
653
+ return self.q_project(self.demazure_lusztig_operator_on_basis(weight, i, q1, q2, convention=convention), q)
654
+
655
+ def demazure_lusztig_operators_on_classical(self, q, q1, q2, convention='antidominant'):
656
+ r"""
657
+ Return the Demazure-Lusztig operators acting at level 1 on ``self.classical()``.
658
+
659
+ INPUT:
660
+
661
+ - ``q``, ``q1``, ``q2`` -- three elements of the ground ring
662
+ - ``convention`` -- ``'antidominant'``, ``'bar'``, or ``'dominant'`` (default: ``'antidominant'``)
663
+
664
+ Let `KL` be the group algebra of an affine weight lattice
665
+ realization `L`. The Demazure-Lusztig operators for `KL`
666
+ act on the group algebra of the corresponding classical
667
+ weight lattice by embedding it at level 1, and projecting
668
+ back.
669
+
670
+ .. SEEALSO::
671
+
672
+ - :meth:`demazure_lusztig_operators`.
673
+ - :meth:`demazure_lusztig_operator_on_classical_on_basis`.
674
+ - :meth:`q_project`
675
+
676
+ EXAMPLES::
677
+
678
+ sage: L = RootSystem(["A",1,1]).ambient_space()
679
+ sage: K = QQ['q,q1,q2'].fraction_field()
680
+ sage: q, q1, q2 = K.gens()
681
+ sage: KL = L.algebra(K)
682
+ sage: KL0 = KL.classical()
683
+ sage: L0 = KL0.basis().keys()
684
+ sage: T = KL.demazure_lusztig_operators_on_classical(q, q1, q2) # needs sage.graphs
685
+
686
+ sage: x = KL0.monomial(L0((3,0))); x
687
+ B[(3, 0)]
688
+
689
+ For `T_1,\dots` we recover the usual Demazure-Lusztig operators::
690
+
691
+ sage: T[1](x) # needs sage.graphs
692
+ (q1+q2)*B[(1, 2)] + (q1+q2)*B[(2, 1)] + (q1+q2)*B[(3, 0)] + q1*B[(0, 3)]
693
+
694
+ For `T_0`, we can note that, in the projection, `\delta`
695
+ is mapped to `q`::
696
+
697
+ sage: T[0](x) # needs sage.graphs
698
+ -(q^2*q1+q^2*q2)*B[(1, 2)] - (q*q1+q*q2)*B[(2, 1)] - q^3*q2*B[(0, 3)]
699
+
700
+ Note that there is no translation part, and in particular
701
+ 1 is an eigenvector for all `T_i`'s::
702
+
703
+ sage: # needs sage.graphs
704
+ sage: T[0](KL0.one())
705
+ q1*B[(0, 0)]
706
+ sage: T[1](KL0.one())
707
+ q1*B[(0, 0)]
708
+ sage: Y = T.Y()
709
+ sage: alphacheck = Y.keys().simple_roots()
710
+ sage: Y[alphacheck[0]](KL0.one())
711
+ -q2/(q*q1)*B[(0, 0)]
712
+
713
+ Matching with Ion Bogdan's hand calculations from 3/15/2013::
714
+
715
+ sage: L = RootSystem(["A",1,1]).weight_space(extended=True)
716
+ sage: K = QQ['q,u'].fraction_field()
717
+ sage: q, u = K.gens()
718
+ sage: KL = L.algebra(K)
719
+ sage: KL0 = KL.classical()
720
+ sage: L0 = KL0.basis().keys()
721
+ sage: omega = L0.fundamental_weights()
722
+
723
+ sage: # needs sage.graphs
724
+ sage: T = KL.demazure_lusztig_operators_on_classical(q, u, -1/u,
725
+ ....: convention='dominant')
726
+ sage: Y = T.Y()
727
+ sage: alphacheck = Y.keys().simple_roots()
728
+ sage: Ydelta = Y[Y.keys().null_root()]
729
+ sage: Ydelta.word, Ydelta.signs, Ydelta.scalar
730
+ ((), (), 1/q)
731
+ sage: Y1 = Y[alphacheck[1]]
732
+ sage: Y1.word, Y1.signs, Y1.scalar # This is T_0 T_1 (T_1 acts first, then T_0); Ion gets T_1 T_0
733
+ ((1, 0), (1, 1), 1)
734
+ sage: Y0 = Y[alphacheck[0]]
735
+ sage: Y0.word, Y0.signs, Y0.scalar # This is 1/q T_1^-1 T_0^-1
736
+ ((0, 1), (-1, -1), 1/q)
737
+
738
+ Note that the following computations use the "dominant" convention::
739
+
740
+ sage: # needs sage.graphs
741
+ sage: T0 = T.Tw(0)
742
+ sage: T0(KL0.monomial(omega[1]))
743
+ q*u*B[-Lambda[1]] + ((u^2-1)/u)*B[Lambda[1]]
744
+ sage: T0(KL0.monomial(2*omega[1]))
745
+ ((q*u^2-q)/u)*B[0] + q^2*u*B[-2*Lambda[1]] + ((u^2-1)/u)*B[2*Lambda[1]]
746
+ sage: T0(KL0.monomial(-omega[1]))
747
+ 1/(q*u)*B[Lambda[1]]
748
+ sage: T0(KL0.monomial(-2*omega[1]))
749
+ -((u^2-1)/(q*u))*B[0] + 1/(q^2*u)*B[2*Lambda[1]]
750
+ """
751
+ # In type BC dual we used q^2 and q elsewhere
752
+ # Not sure this is the right thing to do or just a workaround ...
753
+ # This probably makes up for the fact that, in type BC
754
+ # dual, the null coroot is twice Sage's deltacheck
755
+ # whereas the null root is delta. So we need to map delta
756
+ # to q^2 in the q_projection.
757
+ # Should this go in q_project instead?
758
+ ct = self.cartan_type()
759
+ a0check = ct.acheck()[ct.special_node()]
760
+ T_on_basis = functools.partial(self.demazure_lusztig_operator_on_classical_on_basis,
761
+ q1=q1, q2=q2, q=q**a0check, convention=convention)
762
+ return HeckeAlgebraRepresentation(self.classical(), T_on_basis, self.cartan_type(), q1=q1, q2=q2, q=q, side='left')
763
+
764
+ @cached_method
765
+ def T0_check_on_basis(self, q1, q2, convention='antidominant'):
766
+ r"""
767
+ Return the `T_0^\vee` operator acting on the basis.
768
+
769
+ This implements the formula for `T_{0'}` in Section 6.12 of [Haiman06]_.
770
+
771
+ REFERENCES:
772
+
773
+ .. [Haiman06] \M. Haiman, Cherednik algebras, Macdonald polynomials and combinatorics, ICM 2006.
774
+
775
+ .. WARNING::
776
+
777
+ The current implementation probably returns just
778
+ nonsense, if the convention is not "dominant".
779
+
780
+ EXAMPLES::
781
+
782
+ sage: K = QQ['q1,q2'].fraction_field()
783
+ sage: q1,q2 = K.gens()
784
+
785
+ sage: L = RootSystem(["A",1,1]).ambient_space()
786
+ sage: L0 = L.classical()
787
+ sage: KL = L.algebra(K)
788
+ sage: some_weights = L.fundamental_weights() # needs sage.graphs
789
+ sage: f = KL.T0_check_on_basis(q1,q2, convention='dominant') # needs sage.graphs
790
+ sage: f(L0.zero()) # needs sage.graphs
791
+ (q1+q2)*B[(0, 0)] + q1*B[(1, -1)]
792
+
793
+ sage: L = RootSystem(["A",3,1]).ambient_space()
794
+ sage: L0 = L.classical()
795
+ sage: KL = L.algebra(K)
796
+ sage: some_weights = L0.fundamental_weights()
797
+ sage: f = KL.T0_check_on_basis(q1,q2, convention='dominant') # needs sage.graphs
798
+ sage: f(L0.zero()) # not checked # needs sage.graphs
799
+ (q1+q2)*B[(0, 0, 0, 0)] + q1^3/q2^2*B[(1, 0, 0, -1)]
800
+
801
+ The following results have not been checked::
802
+
803
+ sage: for x in some_weights: # needs sage.graphs
804
+ ....: print("{} : {}".format(x, f(x)))
805
+ (1, 0, 0, 0) : q1*B[(1, 0, 0, 0)]
806
+ (1, 1, 0, 0) : q1*B[(1, 1, 0, 0)]
807
+ (1, 1, 1, 0) : q1*B[(1, 1, 1, 0)]
808
+
809
+ Some examples for type `B_2^{(1)}` dual::
810
+
811
+ sage: L = RootSystem("B2~*").ambient_space()
812
+ sage: L0 = L.classical()
813
+ sage: e = L.basis()
814
+ sage: K = QQ['q,u'].fraction_field()
815
+ sage: q,u = K.gens()
816
+ sage: q1 = u
817
+ sage: q2 = -1/u
818
+ sage: KL = L.algebra(K)
819
+ sage: KL0 = KL.classical()
820
+ sage: f = KL.T0_check_on_basis(q1,q2, convention='dominant') # needs sage.graphs
821
+ sage: T = KL.twisted_demazure_lusztig_operators(q1,q2, convention='dominant')
822
+
823
+ Direct calculation::
824
+
825
+ sage: T.Tw(0)(KL0.monomial(L0([0,0]))) # needs sage.graphs
826
+ ((u^2-1)/u)*B[(0, 0)] + u^3*B[(1, 1)]
827
+ sage: KL.T0_check_on_basis(q1,q2, convention='dominant')(L0([0,0])) # needs sage.graphs
828
+ ((u^2-1)/u)*B[(0, 0)] + u^3*B[(1, 1)]
829
+
830
+ Step by step calculation, comparing by hand with Mark Shimozono::
831
+
832
+ sage: res = T.Tw(2)(KL0.monomial(L0([0,0]))); res
833
+ u*B[(0, 0)]
834
+ sage: res = res * KL0.monomial(L0([-1,1])); res
835
+ u*B[(-1, 1)]
836
+ sage: res = T.Tw_inverse(1)(res); res
837
+ (u^2-1)*B[(0, 0)] + u^2*B[(1, -1)]
838
+ sage: res = T.Tw_inverse(2)(res); res
839
+ ((u^2-1)/u)*B[(0, 0)] + u^3*B[(1, 1)]
840
+ """
841
+ L = self.basis().keys()
842
+ ct = L.cartan_type()
843
+ special_node = ct.special_node()
844
+ a0 = ct.a()[special_node]
845
+ A0 = self.classical()
846
+ T = A0.demazure_lusztig_operators(q1, q2, convention=convention)
847
+ # TODO: use the formula expressing the inverse of T as a Demazure Lusztig operator? Or go through the affine action of T_0 for the dual
848
+ L0 = A0.basis().keys()
849
+ # The dominant short root of the classical system
850
+ if ct.type() == 'BC':
851
+ # CHECKME: this is not exactly phi, but phi rescaled
852
+ # appropriately so that it's in the orbit of the
853
+ # simple classical roots
854
+ phi = -a0*L0(L.simple_roots()[0])
855
+ else:
856
+ phi = L0(L0.root_system.coroot_lattice().highest_root().associated_coroot())
857
+ # Variant: try to fetch it from the other affinization; something like:
858
+ # The a0 only has an influence in type BC; it handles the fact that alpha_0
859
+ # is not in the orbit of the classical roots
860
+ #phi1 = - L0(L'.other_affinization().simple_roots()[special_node]) * a0
861
+ #assert phi == phi1
862
+
863
+ j, v = phi.to_simple_root(reduced_word=True)
864
+ translation = A0.monomial(-L0.simple_root(j)/a0)
865
+ Tv = T[v]
866
+ Tinv = T.Tw_inverse(v+(j,))
867
+
868
+ def T0_check(weight):
869
+ return -q1*q2*Tinv( translation * Tv(A0.monomial(weight)))
870
+ # For debugging purposes
871
+ T0_check.phi = phi
872
+ T0_check.j = j
873
+ T0_check.v = v
874
+ return T0_check
875
+
876
+ @cached_method
877
+ def classical(self):
878
+ """
879
+ Return the group algebra of the corresponding classical lattice.
880
+
881
+ EXAMPLES::
882
+
883
+ sage: KL = RootSystem(["A",2,1]).ambient_space().algebra(QQ)
884
+ sage: KL.classical()
885
+ Algebra of the Ambient space of the Root system of type ['A', 2] over Rational Field
886
+ """
887
+ return self.basis().keys().classical().algebra(self.base_ring())
888
+
889
+ def q_project_on_basis(self, l, q):
890
+ r"""
891
+ Return the monomial `c * cl(l)` in the group algebra of the classical lattice.
892
+
893
+ INPUT:
894
+
895
+ - ``l`` -- an element of the root lattice realization
896
+ - ``q`` -- an element of the ground ring
897
+
898
+ Here, `cl(l)` is the projection of `l` in the classical
899
+ lattice, and `c` is the coefficient of `l` in `\delta`.
900
+
901
+ .. SEEALSO:: :meth:`q_project_on_basis`
902
+
903
+ EXAMPLES::
904
+
905
+ sage: K = QQ['q'].fraction_field()
906
+ sage: q = K.gen()
907
+ sage: KL = RootSystem(["A",2,1]).ambient_space().algebra(K)
908
+ sage: L = KL.basis().keys()
909
+ sage: e = L.basis()
910
+ sage: KL.q_project_on_basis(4*e[1] + 3*e[2]
911
+ ....: + e['deltacheck'] - 2*e['delta'], q)
912
+ 1/q^2*B[(0, 4, 3)]
913
+ """
914
+ KL0 = self.classical()
915
+ L0 = KL0.basis().keys()
916
+ return KL0.term(L0(l), q**l["delta"])
917
+
918
+ def q_project(self, x, q):
919
+ r"""
920
+ Implement the `q`-projection morphism from ``self`` to the group algebra of the classical space.
921
+
922
+ INPUT:
923
+
924
+ - ``x`` -- an element of the group algebra of ``self``
925
+ - ``q`` -- an element of the ground ring
926
+
927
+ This is an algebra morphism mapping `\delta` to `q` and
928
+ `X^b` to its classical counterpart for the other elements
929
+ `b` of the basis of the realization.
930
+
931
+ EXAMPLES::
932
+
933
+ sage: K = QQ['q'].fraction_field()
934
+ sage: q = K.gen()
935
+ sage: KL = RootSystem(["A",2,1]).ambient_space().algebra(K)
936
+ sage: L = KL.basis().keys()
937
+ sage: e = L.basis()
938
+ sage: x = (KL.an_element()
939
+ ....: + KL.monomial(4*e[1] + 3*e[2]
940
+ ....: + e['deltacheck'] - 2*e['delta'])); x
941
+ B[2*e[0] + 2*e[1] + 3*e[2]]
942
+ + B[4*e[1] + 3*e[2] - 2*e['delta'] + e['deltacheck']]
943
+ sage: KL.q_project(x, q)
944
+ B[(2, 2, 3)] + 1/q^2*B[(0, 4, 3)]
945
+
946
+ sage: KL = RootSystem(["BC",3,2]).ambient_space().algebra(K)
947
+ sage: L = KL.basis().keys()
948
+ sage: e = L.basis()
949
+ sage: x = (KL.an_element()
950
+ ....: + KL.monomial(4*e[1] + 3*e[2]
951
+ ....: + e['deltacheck'] - 2*e['delta'])); x
952
+ B[2*e[0] + 2*e[1] + 3*e[2]]
953
+ + B[4*e[1] + 3*e[2] - 2*e['delta'] + e['deltacheck']]
954
+ sage: KL.q_project(x, q)
955
+ B[(2, 2, 3)] + 1/q^2*B[(0, 4, 3)]
956
+
957
+ .. WARNING::
958
+
959
+ Recall that the null root, usually denoted `\delta`,
960
+ is in fact ``a[0]\delta`` in Sage's notation, in order
961
+ to avoid half integer coefficients (this only makes a
962
+ difference in type BC). Similarly, what's usually
963
+ denoted `q` is in fact ``q^a[0]`` in Sage's notations,
964
+ to avoid manipulating square roots::
965
+
966
+ sage: KL.q_project(KL.monomial(L.null_root()),q) # needs sage.graphs
967
+ q^2*B[(0, 0, 0)]
968
+ """
969
+ L0 = self.classical()
970
+ return L0.linear_combination( (self.q_project_on_basis(l, q), c) for l,c in x )
971
+
972
+ def twisted_demazure_lusztig_operator_on_basis(self, weight, i, q1, q2, convention='antidominant'):
973
+ r"""
974
+ Return the twisted Demazure-Lusztig operator acting on the basis.
975
+
976
+ INPUT:
977
+
978
+ - ``weight`` -- an element `\lambda` of the weight lattice
979
+ - ``i`` -- an element of the index set
980
+ - ``q1``, ``q2`` -- two elements of the ground ring
981
+ - ``convention`` -- ``'antidominant'``, ``'bar'``, or ``'dominant'`` (default: ``'antidominant'``)
982
+
983
+ .. SEEALSO:: :meth:`twisted_demazure_lusztig_operators`
984
+
985
+ EXAMPLES::
986
+
987
+ sage: L = RootSystem(["A",3,1]).ambient_space()
988
+ sage: e = L.basis()
989
+ sage: K = QQ['q1,q2'].fraction_field()
990
+ sage: q1, q2 = K.gens()
991
+ sage: KL = L.algebra(K)
992
+ sage: Lambda = L.classical().fundamental_weights()
993
+ sage: KL.twisted_demazure_lusztig_operator_on_basis(
994
+ ....: Lambda[1] + 2*Lambda[2], 1, q1, q2, convention='dominant')
995
+ -q2*B[(2, 3, 0, 0)]
996
+ sage: KL.twisted_demazure_lusztig_operator_on_basis(
997
+ ....: Lambda[1] + 2*Lambda[2], 2, q1, q2, convention='dominant')
998
+ -(q1+q2)*B[(3, 1, 1, 0)] - q2*B[(3, 0, 2, 0)]
999
+ sage: KL.twisted_demazure_lusztig_operator_on_basis(
1000
+ ....: Lambda[1] + 2*Lambda[2], 3, q1, q2, convention='dominant')
1001
+ q1*B[(3, 2, 0, 0)]
1002
+ sage: KL.twisted_demazure_lusztig_operator_on_basis( # needs sage.graphs
1003
+ ....: Lambda[1]+2*Lambda[2], 0, q1, q2, convention='dominant')
1004
+ ((q1*q2+q2^2)/q1)*B[(1, 2, 1, 1)] + ((q1*q2+q2^2)/q1)*B[(1, 2, 2, 0)]
1005
+ + q2^2/q1*B[(1, 2, 0, 2)] + ((q1^2+2*q1*q2+q2^2)/q1)*B[(2, 1, 1, 1)]
1006
+ + ((q1^2+2*q1*q2+q2^2)/q1)*B[(2, 1, 2, 0)]
1007
+ + ((q1*q2+q2^2)/q1)*B[(2, 1, 0, 2)]
1008
+ + ((q1^2+2*q1*q2+q2^2)/q1)*B[(2, 2, 1, 0)]
1009
+ + ((q1*q2+q2^2)/q1)*B[(2, 2, 0, 1)]
1010
+ """
1011
+ if i == 0: # should use the special node
1012
+ if convention != "dominant":
1013
+ raise NotImplementedError("The twisted Demazure-Lusztig operator T_0 is only implemented in the dominant convention")
1014
+ return self.T0_check_on_basis(q1, q2, convention=convention)(weight)
1015
+ else:
1016
+ L = self.classical()
1017
+ return L.demazure_lusztig_operators(q1, q2, convention=convention)[i](L.monomial(weight))
1018
+
1019
+ def twisted_demazure_lusztig_operators(self, q1, q2, convention='antidominant'):
1020
+ r"""
1021
+ Return the twisted Demazure-Lusztig operators acting on ``self``.
1022
+
1023
+ INPUT:
1024
+
1025
+ - ``q1``, ``q2`` -- two elements of the ground ring
1026
+ - ``convention`` -- ``'antidominant'``, ``'bar'``, or ``'dominant'`` (default: ``'antidominant'``)
1027
+
1028
+ .. WARNING::
1029
+
1030
+ - the code is currently only tested for `q_1q_2=-1`
1031
+ - only the ``'dominant'`` convention is functional for `i=0`
1032
+
1033
+ For `T_1,\ldots,T_n`, these operators are the usual
1034
+ Demazure-Lusztig operators. On the other hand, the
1035
+ operator `T_0` is twisted::
1036
+
1037
+ sage: L = RootSystem(["A",3,1]).ambient_space()
1038
+ sage: e = L.basis()
1039
+ sage: K = QQ['q1,q2'].fraction_field()
1040
+ sage: q1, q2 = K.gens()
1041
+ sage: KL = L.algebra(K)
1042
+ sage: T = KL.twisted_demazure_lusztig_operators(q1, q2, convention='dominant')
1043
+ sage: T._test_relations()
1044
+
1045
+ TESTS:
1046
+
1047
+ The following computations were checked with Mark Shimozono for type `A_1^{(1)}`::
1048
+
1049
+ sage: L = RootSystem(["A",1,1]).ambient_space()
1050
+ sage: e = L.basis()
1051
+ sage: K = QQ['q1,q2'].fraction_field()
1052
+ sage: q1,q2 = K.gens()
1053
+ sage: KL = L.algebra(K)
1054
+ sage: T = KL.twisted_demazure_lusztig_operators(q1, q2, convention='dominant')
1055
+ sage: T._test_relations()
1056
+ sage: L0 = L.classical()
1057
+ sage: alpha = L0.simple_roots()
1058
+ sage: T.Ti_on_basis(L0.zero(), 1)
1059
+ q1*B[(0, 0)]
1060
+ sage: T.Ti_inverse_on_basis(L0.zero(), 1)
1061
+ 1/q1*B[(0, 0)]
1062
+ sage: T.Ti_on_basis(alpha[1], 1)
1063
+ -(q1+q2)*B[(0, 0)] - q2*B[(-1, 1)]
1064
+ sage: T.Ti_inverse_on_basis(alpha[1], 1)
1065
+ ((q1+q2)/(q1*q2))*B[(0, 0)] + 1/q1*B[(-1, 1)] + ((q1+q2)/(q1*q2))*B[(1, -1)]
1066
+ sage: T.Ti_on_basis(L0.zero(), 0) # needs sage.graphs
1067
+ (q1+q2)*B[(0, 0)] + q1*B[(1, -1)]
1068
+
1069
+ The next computations were checked with Mark Shimozono for type `A_2^{(1)}`::
1070
+
1071
+ sage: L = RootSystem(["A",2,1]).ambient_space()
1072
+ sage: e = L.basis()
1073
+ sage: K = QQ['u'].fraction_field()
1074
+ sage: u = K.gen()
1075
+ sage: KL = L.algebra(K)
1076
+ sage: T = KL.twisted_demazure_lusztig_operators(u, -~u, convention='dominant')
1077
+ sage: T._test_relations()
1078
+ sage: L0 = L.classical()
1079
+ sage: KL0 = L0.algebra(K)
1080
+ sage: alpha = L0.simple_roots()
1081
+
1082
+ sage: phi = L0.highest_root(); phi
1083
+ (1, 0, -1)
1084
+ sage: phi.to_simple_root(reduced_word=True)
1085
+ (2, (1,))
1086
+ sage: res = T.Ti_on_basis(L0([1,0,1]), 1); res
1087
+ 1/u*B[(0, 1, 1)]
1088
+ sage: res = res * KL0.monomial(-alpha[2]); res
1089
+ 1/u*B[(0, 0, 2)]
1090
+ sage: res = T.Tw_inverse(2)(res); res
1091
+ ((u^2-1)/u^2)*B[(0, 1, 1)] + B[(0, 2, 0)]
1092
+ sage: res = T.Tw_inverse(1)(res); res
1093
+ ((u^2-1)/u)*B[(1, 1, 0)] + ((u^2-1)/u)*B[(1, 0, 1)] + u*B[(2, 0, 0)]
1094
+
1095
+ .. TODO::
1096
+
1097
+ Choose a good set of Cartan Type to run on. Rank >4 is
1098
+ too big. But `C_1` and `B_1` are boring.
1099
+
1100
+ We now check systematically that those operators satisfy
1101
+ the relations of the Iwahori-Hecke algebra::
1102
+
1103
+ sage: K = QQ['q1,q2'].fraction_field()
1104
+ sage: q1, q2 = K.gens()
1105
+ sage: for cartan_type in CartanType.samples(affine=True, crystallographic=True): # long time (12s)
1106
+ ....: if cartan_type.rank() > 4: continue
1107
+ ....: if cartan_type.type() == 'BC': continue
1108
+ ....: KL = RootSystem(cartan_type).weight_lattice().algebra(K)
1109
+ ....: T = KL.twisted_demazure_lusztig_operators(q1, q2, convention='dominant')
1110
+ ....: T._test_relations()
1111
+
1112
+ .. TODO::
1113
+
1114
+ Investigate why `T_0^\vee` currently does not satisfy
1115
+ the quadratic relation in type `BC`. This should
1116
+ hopefully be fixed when `T_0^\vee` will have a more
1117
+ uniform implementation::
1118
+
1119
+ sage: cartan_type = CartanType(["BC",1,2])
1120
+ sage: KL = RootSystem(cartan_type).weight_lattice().algebra(K)
1121
+ sage: T = KL.twisted_demazure_lusztig_operators(q1,q2, convention='dominant')
1122
+ sage: T._test_relations() # needs sage.graphs
1123
+ Traceback (most recent call last):
1124
+ ... tester.assertTrue(Ti(Ti(x,i,-q2),i,-q1).is_zero()) ...
1125
+ AssertionError: False is not true
1126
+
1127
+ Comparison with T0::
1128
+
1129
+ sage: L = RootSystem(["A",2,1]).ambient_space()
1130
+ sage: e = L.basis()
1131
+ sage: K = QQ['t,q'].fraction_field()
1132
+ sage: t,q = K.gens()
1133
+ sage: q1 = t
1134
+ sage: q2 = -1
1135
+ sage: KL = L.algebra(K)
1136
+ sage: L0 = L.classical()
1137
+ sage: T = KL.demazure_lusztig_operators(q1,q2, convention='dominant')
1138
+ sage: def T0(*l0): return KL.q_project(T[0].on_basis()(L.embed_at_level(L0(l0), 1)), q)
1139
+ sage: T0_check_on_basis = KL.T0_check_on_basis(q1, q2, # needs sage.graphs
1140
+ ....: convention='dominant')
1141
+ sage: def T0c(*l0): return T0_check_on_basis(L0(l0))
1142
+
1143
+ sage: T0(0,0,1) # not double checked # needs sage.graphs
1144
+ -((t-1)/q)*B[(1, 0, 0)] + 1/q^2*B[(2, 0, -1)]
1145
+ sage: T0c(0,0,1) # needs sage.graphs
1146
+ (t^2-t)*B[(1, 0, 0)] + (t^2-t)*B[(1, 1, -1)] + t^2*B[(2, 0, -1)] + (t-1)*B[(0, 0, 1)]
1147
+ """
1148
+ T_on_basis = functools.partial(self.twisted_demazure_lusztig_operator_on_basis,
1149
+ q1=q1, q2=q2, convention=convention)
1150
+ return HeckeAlgebraRepresentation(self.classical(),
1151
+ T_on_basis,
1152
+ self.cartan_type().classical().dual().affine().dual(),
1153
+ q1, q2,
1154
+ side='left')
1155
+
1156
+ class ElementMethods:
1157
+
1158
+ def acted_upon(self, w):
1159
+ """
1160
+ Implement the action of ``w`` on ``self``.
1161
+
1162
+ INPUT:
1163
+
1164
+ - ``w`` -- an element of the Weyl group acting on the underlying weight lattice realization
1165
+
1166
+ EXAMPLES::
1167
+
1168
+ sage: L = RootSystem(["A",3]).ambient_space()
1169
+ sage: W = L.weyl_group() # needs sage.libs.gap
1170
+ sage: M = L.algebra(QQ['q','t'])
1171
+ sage: m = M.an_element(); m # TODO: investigate why we don't get something more interesting
1172
+ B[(2, 2, 3, 0)]
1173
+ sage: m = (m+1)^2; m
1174
+ B[(0, 0, 0, 0)] + 2*B[(2, 2, 3, 0)] + B[(4, 4, 6, 0)]
1175
+ sage: w = W.an_element(); w.reduced_word() # needs sage.libs.gap
1176
+ [1, 2, 3]
1177
+ sage: m.acted_upon(w) # needs sage.libs.gap
1178
+ B[(0, 0, 0, 0)] + 2*B[(0, 2, 2, 3)] + B[(0, 4, 4, 6)]
1179
+ """
1180
+ return self.map_support(w.action)
1181
+
1182
+ def expand(self, alphabet):
1183
+ """
1184
+ Expand ``self`` into variables in the ``alphabet``.
1185
+
1186
+ INPUT:
1187
+
1188
+ - ``alphabet`` -- a non empty list/tuple of (invertible) variables in a ring to expand in
1189
+
1190
+ EXAMPLES::
1191
+
1192
+ sage: L = RootSystem(["A",2]).ambient_lattice()
1193
+ sage: KL = L.algebra(QQ)
1194
+ sage: p = KL.an_element() + KL.sum_of_monomials(L.some_elements()); p
1195
+ B[(1, 0, 0)] + B[(1, -1, 0)] + B[(1, 1, 0)] + 2*B[(2, 2, 3)] + B[(0, 1, -1)]
1196
+ sage: F = LaurentPolynomialRing(QQ, 'x,y,z')
1197
+ sage: p.expand(F.gens())
1198
+ 2*x^2*y^2*z^3 + x*y + x + y*z^-1 + x*y^-1
1199
+
1200
+ TESTS::
1201
+
1202
+ sage: type(p.expand(F.gens()))
1203
+ <class 'sage.rings.polynomial.laurent_polynomial_mpair.LaurentPolynomial_mpair'>
1204
+
1205
+ sage: p = KL.zero()
1206
+ sage: p.expand(F.gens())
1207
+ 0
1208
+ sage: type(p.expand(F.gens()))
1209
+ <class 'sage.rings.polynomial.laurent_polynomial_mpair.LaurentPolynomial_mpair'>
1210
+ """
1211
+ codomain = alphabet[0].parent()
1212
+ return codomain.sum(c * prod(X**int(n)
1213
+ for X, n in zip(alphabet, vector(m)))
1214
+ for m, c in self)