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,1188 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ """
3
+ Weight lattice realizations
4
+ """
5
+ # ****************************************************************************
6
+ # Copyright (C) 2007-2012 Nicolas M. Thiery <nthiery at users.sf.net>
7
+ #
8
+ # (with contributions of many others)
9
+ #
10
+ # Distributed under the terms of the GNU General Public License (GPL)
11
+ #
12
+ # This code is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ # General Public License for more details.
16
+ #
17
+ # The full text of the GPL is available at:
18
+ #
19
+ # https://www.gnu.org/licenses/
20
+ # ****************************************************************************
21
+
22
+ from sage.misc.abstract_method import abstract_method
23
+ from sage.misc.cachefunc import cached_method
24
+ from sage.misc.lazy_attribute import lazy_attribute
25
+ from sage.misc.misc_c import prod
26
+ from sage.categories.category_types import Category_over_base_ring
27
+ from sage.sets.family import Family
28
+ from .root_lattice_realizations import RootLatticeRealizations
29
+ from sage.rings.rational_field import QQ
30
+
31
+
32
+ class WeightLatticeRealizations(Category_over_base_ring):
33
+ r"""
34
+ The category of weight lattice realizations over a given base ring.
35
+
36
+ A *weight lattice realization* `L` over a base ring `R` is a free
37
+ module (or vector space if `R` is a field) endowed with an embedding
38
+ of the root lattice of some root system. By restriction, this
39
+ embedding defines an embedding of the root lattice of this root
40
+ system, which makes `L` a root lattice realization.
41
+
42
+ Typical weight lattice realizations over `\ZZ` include the weight
43
+ lattice, and ambient lattice. Typical weight lattice realizations
44
+ over `\QQ` include the weight space, and ambient space.
45
+
46
+ To describe the embedding, a weight lattice realization must
47
+ implement a method
48
+ :meth:`~RootLatticeRealizations.ParentMethods.fundamental_weight`(i)
49
+ returning for each `i` in the index set the image of the fundamental
50
+ weight `\Lambda_i` under the embedding.
51
+
52
+ In order to be a proper root lattice realization, a weight lattice
53
+ realization should also implement the scalar product with the coroot
54
+ lattice; on the other hand, the embedding of the simple roots is
55
+ given for free.
56
+
57
+ .. SEEALSO::
58
+
59
+ - :class:`~sage.combinat.root_system.root_system.RootSystem`
60
+ - :class:`~sage.combinat.root_system.root_lattice_realizations.RootLatticeRealizations`
61
+ - :class:`~sage.combinat.root_system.weight_space.WeightSpace`
62
+ - :class:`~sage.combinat.root_system.ambient_space.AmbientSpace`
63
+
64
+ EXAMPLES:
65
+
66
+ Here, we consider the root system of type `A_7`, and embed the weight
67
+ lattice element `x = \Lambda_1 + 2 \Lambda_3` in several root lattice
68
+ realizations::
69
+
70
+ sage: R = RootSystem(["A",7])
71
+ sage: Lambda = R.weight_lattice().fundamental_weights()
72
+ sage: x = Lambda[2] + 2 * Lambda[5]
73
+
74
+ sage: L = R.weight_space()
75
+ sage: L(x)
76
+ Lambda[2] + 2*Lambda[5]
77
+
78
+ sage: L = R.ambient_lattice()
79
+ sage: L(x)
80
+ (3, 3, 2, 2, 2, 0, 0, 0)
81
+
82
+ We embed the weight space element `x = \Lambda_1 + 1/2 \Lambda_3` in
83
+ the ambient space::
84
+
85
+ sage: Lambda = R.weight_space().fundamental_weights()
86
+ sage: x = Lambda[2] + 1/2 * Lambda[5]
87
+
88
+ sage: L = R.ambient_space()
89
+ sage: L(x)
90
+ (3/2, 3/2, 1/2, 1/2, 1/2, 0, 0, 0)
91
+
92
+ Of course, one can't embed the weight space in the ambient lattice::
93
+
94
+ sage: L = R.ambient_lattice()
95
+ sage: L(x)
96
+ Traceback (most recent call last):
97
+ ...
98
+ TypeError: do not know how to make x (= Lambda[2] + 1/2*Lambda[5])
99
+ an element of self (=Ambient lattice of the Root system of type ['A', 7])
100
+
101
+ If `K_1` is a subring of `K_2`, then one could in theory have an
102
+ embedding from the weight space over `K_1` to any weight lattice
103
+ realization over `K_2`; this is not implemented::
104
+
105
+ sage: K1 = QQ
106
+ sage: K2 = QQ['q']
107
+ sage: L = R.ambient_space(K2)
108
+
109
+ sage: Lambda = R.weight_space(K2).fundamental_weights()
110
+ sage: L(Lambda[1])
111
+ (1, 0, 0, 0, 0, 0, 0, 0)
112
+
113
+ sage: Lambda = R.weight_space(K1).fundamental_weights()
114
+ sage: L(Lambda[1])
115
+ Traceback (most recent call last):
116
+ ...
117
+ TypeError: do not know how to make x (= Lambda[1]) an element
118
+ of self (=Ambient space of the Root system of type ['A', 7])
119
+ """
120
+
121
+ @cached_method
122
+ def super_categories(self):
123
+ """
124
+ EXAMPLES::
125
+
126
+ sage: from sage.combinat.root_system.weight_lattice_realizations import WeightLatticeRealizations
127
+ sage: WeightLatticeRealizations(QQ).super_categories()
128
+ [Category of root lattice realizations over Rational Field]
129
+ """
130
+ return [RootLatticeRealizations(self.base_ring())]
131
+
132
+ class ParentMethods:
133
+
134
+ @abstract_method
135
+ def fundamental_weight(self, i):
136
+ r"""
137
+ Return the `i`-th fundamental weight.
138
+
139
+ INPUT:
140
+
141
+ - ``i`` -- an element of the index set
142
+
143
+ By a slight notational abuse, for an affine type this method
144
+ should also accept ``'delta'`` as input, and return the image
145
+ of `\delta` of the extended weight lattice in this
146
+ realization.
147
+
148
+ This should be overridden by any subclass, and typically
149
+ be implemented as a cached method for efficiency.
150
+
151
+ EXAMPLES::
152
+
153
+ sage: L = RootSystem(["A",3]).ambient_lattice()
154
+ sage: L.fundamental_weight(1)
155
+ (1, 0, 0, 0)
156
+
157
+ sage: L = RootSystem(["A",3,1]).weight_lattice(extended=True)
158
+ sage: L.fundamental_weight(1)
159
+ Lambda[1]
160
+ sage: L.fundamental_weight("delta")
161
+ delta
162
+
163
+ TESTS::
164
+
165
+ sage: super(sage.combinat.root_system.weight_space.WeightSpace, L).fundamental_weight(1)
166
+ Traceback (most recent call last):
167
+ ...
168
+ NotImplementedError: <abstract method fundamental_weight at ...>
169
+ """
170
+
171
+ def is_extended(self):
172
+ """
173
+ Return whether this is a realization of the extended weight lattice.
174
+
175
+ .. SEEALSO:: :class:`sage.combinat.root_system.weight_space.WeightSpace`
176
+
177
+ EXAMPLES::
178
+
179
+ sage: RootSystem(["A",3,1]).weight_lattice().is_extended()
180
+ False
181
+ sage: RootSystem(["A",3,1]).weight_lattice(extended=True).is_extended()
182
+ True
183
+
184
+ This method is irrelevant for finite root systems, since the
185
+ weight lattice need not be extended to ensure that the root
186
+ lattice embeds faithfully::
187
+
188
+ sage: RootSystem(["A",3]).weight_lattice().is_extended()
189
+ False
190
+ """
191
+ return False
192
+
193
+ def __init_extra__(self):
194
+ r"""
195
+ Registers the embedding of the weight lattice into ``self``.
196
+
197
+ Also registers the embedding of the weight space over the same
198
+ base field `K` into ``self`` if `K` is not `\ZZ`.
199
+
200
+ If ``self`` is a realization of the extended weight lattice,
201
+ then the embeddings from the extended weight space/lattices
202
+ are registered instead.
203
+
204
+ EXAMPLES:
205
+
206
+ We embed the fundamental weight `\Lambda_1` of the weight
207
+ lattice in the ambient lattice::
208
+
209
+ sage: R = RootSystem(["A",3])
210
+ sage: Lambda = R.root_lattice().simple_roots()
211
+ sage: L = R.ambient_space()
212
+ sage: L(Lambda[2])
213
+ (0, 1, -1, 0)
214
+
215
+ .. NOTE::
216
+
217
+ More examples are given in :class:`WeightLatticeRealizations`;
218
+ The embeddings are systematically tested in
219
+ :meth:`_test_weight_lattice_realization`.
220
+ """
221
+ from sage.rings.integer_ring import ZZ
222
+ from .weight_space import WeightSpace
223
+ K = self.base_ring()
224
+ # If self is the root lattice or the root space, we don't want
225
+ # to register its trivial embedding into itself. This builds
226
+ # the domains from which we want to register an embedding.
227
+ domains = []
228
+ if not isinstance(self, WeightSpace) or K is not ZZ:
229
+ domains.append(self.root_system.weight_lattice(extended=self.is_extended()))
230
+ if not isinstance(self, WeightSpace):
231
+ domains.append(self.root_system.weight_space(K,extended=self.is_extended()))
232
+ # Build and register the embeddings
233
+ for domain in domains:
234
+ domain.module_morphism(self.fundamental_weight,
235
+ codomain=self
236
+ ).register_as_coercion()
237
+
238
+ def _test_weight_lattice_realization(self, **options):
239
+ """
240
+ Run sanity checks on this weight lattice realization.
241
+
242
+ - scalar products between the fundamental weights and simple coroots
243
+ - embeddings from the weight lattice and weight space
244
+ - rho, highest_root, ...
245
+
246
+ .. SEEALSO:: :class:`TestSuite`
247
+
248
+ EXAMPLES::
249
+
250
+ sage: RootSystem(['A',3]).weight_lattice()._test_weight_lattice_realization() # needs sage.graphs
251
+ """
252
+ from sage.rings.integer_ring import ZZ
253
+ tester = self._tester(**options)
254
+
255
+ try:
256
+ Lambda = self.fundamental_weights()
257
+ alphacheck = self.simple_coroots()
258
+ except ImportError:
259
+ return
260
+
261
+ tester.assertEqual(tuple(Lambda.keys()), self.index_set())
262
+
263
+ # Check the consistency between simple_root and simple_roots
264
+ for i in self.index_set():
265
+ tester.assertEqual(self.fundamental_weight(i), Lambda[i])
266
+
267
+ # Check the embeddings from:
268
+ # - the weight lattice
269
+ # - the weight space over the same base ring
270
+ #
271
+ # For an affine root system, this will check the embedding of
272
+ # the extended ones, and also of the non extended ones if this
273
+ # realization is not extended
274
+ domains = [self.root_system.weight_space(base_ring, extended=extended)
275
+ for base_ring in set([ZZ, self.base_ring()])
276
+ for extended in set([self.cartan_type().is_affine(), self.is_extended()])]
277
+ for domain in domains:
278
+ tester.assertIsNot(self._internal_coerce_map_from(domain), None)
279
+ for i in self.index_set():
280
+ # This embedding maps fundamental weights to fundamental weights
281
+ tester.assertEqual(self(domain.fundamental_weight(i)), Lambda[i])
282
+ if self.cartan_type().is_affine():
283
+ tester.assertEqual(self(domain.null_root()), self.null_root())
284
+ if self.is_extended():
285
+ a = self.cartan_type().col_annihilator()
286
+ # This could be an over specification; we
287
+ # could imagine realizations of the extended
288
+ # weight lattice where the null root would not
289
+ # be a (multiple of) basis element.
290
+ tester.assertEqual(self.null_root(), self.term("delta", a[0]))
291
+ for i in self.index_set():
292
+ # The level of the fundamental weights is consistent
293
+ tester.assertEqual(domain.fundamental_weight(i).level(), Lambda[i].level())
294
+
295
+ # Check that the fundamental weights form the dual basis of the simple coroots
296
+ for i in self.index_set():
297
+ assert (Lambda[i].is_dominant())
298
+ for j in self.index_set():
299
+ tester.assertEqual(Lambda[j].scalar(alphacheck[i]), (1 if i == j else 0))
300
+
301
+ tester.assertTrue(self.rho().is_dominant())
302
+ if self.root_system.is_finite() and self.root_system.is_irreducible():
303
+ try:
304
+ tester.assertTrue(self.highest_root().is_dominant())
305
+ except ImportError: # when sage.graphs is missing (Dynkin diagram)
306
+ pass
307
+
308
+ @cached_method
309
+ def fundamental_weights(self):
310
+ r"""
311
+ Return the family `(\Lambda_i)_{i\in I}` of the fundamental weights.
312
+
313
+ EXAMPLES::
314
+
315
+ sage: e = RootSystem(['A',3]).ambient_lattice()
316
+ sage: f = e.fundamental_weights()
317
+ sage: [f[i] for i in [1,2,3]]
318
+ [(1, 0, 0, 0), (1, 1, 0, 0), (1, 1, 1, 0)]
319
+ """
320
+ return Family(self.index_set(), self.fundamental_weight)
321
+ # It would be nice to give this family a nice name with
322
+ # ``rename``, but this currently break some doctests.
323
+
324
+ @cached_method
325
+ def simple_root(self, i):
326
+ r"""
327
+ Return the `i`-th simple root.
328
+
329
+ This default implementation takes the `i`-th simple root in
330
+ the weight lattice and embeds it in ``self``.
331
+
332
+ EXAMPLES:
333
+
334
+ Since all the weight lattice realizations in Sage currently
335
+ implement a ``simple_root`` method, we have to call this one by
336
+ hand::
337
+
338
+ sage: from sage.combinat.root_system.weight_lattice_realizations import WeightLatticeRealizations
339
+ sage: simple_root = WeightLatticeRealizations(QQ).parent_class.simple_root.f
340
+ sage: L = RootSystem("A3").ambient_space()
341
+ sage: simple_root(L, 1) # needs sage.graphs
342
+ (1, -1, 0, 0)
343
+ sage: simple_root(L, 2) # needs sage.graphs
344
+ (0, 1, -1, 0)
345
+ sage: simple_root(L, 3) # needs sage.graphs
346
+ (1, 1, 2, 0)
347
+
348
+ Note that this last root differs from the one implemented in
349
+ ``L`` by a multiple of the vector ``(1,1,1,1)``::
350
+
351
+ sage: L.simple_roots() # needs sage.graphs
352
+ Finite family {1: (1, -1, 0, 0), 2: (0, 1, -1, 0), 3: (0, 0, 1, -1)}
353
+
354
+ This is a harmless artefact of the `SL` versus `GL`
355
+ interpretation of type `A`; see the thematic tutorial on Lie
356
+ Methods and Related Combinatorics in Sage for details.
357
+ """
358
+ if i not in self.index_set():
359
+ raise ValueError("{} is not in the index set".format(i))
360
+ alphai = self.root_system.weight_lattice().simple_root(i)
361
+ # Note: it would be nicer to just return ``self(alpha[i])``,
362
+ # However the embedding from the weight lattice is defined
363
+ # after the embedding from the root lattice, and the later
364
+ # uses the simple roots. So we compute that embedding by hand.
365
+ Lambda = self.fundamental_weights()
366
+ return self.linear_combination( (Lambda[j], c) for j,c in alphai )
367
+
368
+ @cached_method
369
+ def rho(self):
370
+ """
371
+ EXAMPLES::
372
+
373
+ sage: RootSystem(['A',3]).ambient_lattice().rho()
374
+ (3, 2, 1, 0)
375
+ """
376
+ return sum(self.fundamental_weights())
377
+
378
+ def reduced_word_of_alcove_morphism(self, f):
379
+ r"""
380
+ Return the reduced word of an alcove morphism.
381
+
382
+ INPUT:
383
+
384
+ - ``f`` -- a linear map from ``self`` to ``self`` which
385
+ preserves alcoves
386
+
387
+ Let `A` be the fundamental alcove. This returns a reduced word
388
+ `i_1, \ldots, i_k` such that the affine Weyl group element `w =
389
+ s_{i_1} \circ \cdots \circ s_{i_k}` maps the alcove `f(A)` back
390
+ to `A`. In other words, the alcove walk `i_1, \ldots, i_k` brings
391
+ the fundamental alcove to the corresponding translated alcove.
392
+
393
+ Let us throw in a bit of context to explain the main use
394
+ case. It is customary to realize the alcove picture in
395
+ the coroot or coweight lattice `R^\vee`. The extended
396
+ affine Weyl group is then the group of linear maps on
397
+ `R^\vee` which preserve the alcoves. By
398
+ [Kac "Infinite-dimensional Lie algebra", Proposition 6.5]
399
+ the affine Weyl group is the semidirect product of the
400
+ associated finite Weyl group and the group of translations
401
+ in the coroot lattice (the extended affine Weyl group uses
402
+ the coweight lattice instead). In other words, an element
403
+ of the extended affine Weyl group admits a unique
404
+ decomposition of the form:
405
+
406
+ .. MATH:: f = d w ,
407
+
408
+ where `w` is in the Weyl group, and `d` is a function which
409
+ maps the fundamental alcove to itself. As `d` permutes the
410
+ walls of the fundamental alcove, it permutes accordingly the
411
+ corresponding simple roots, which induces an automorphism of
412
+ the Dynkin diagram.
413
+
414
+ This method returns a reduced word for `w`, whereas the method
415
+ :meth:`dynkin_diagram_automorphism_of_alcove_morphism` returns
416
+ `d` as a permutation of the nodes of the Dynkin diagram.
417
+
418
+ Nota bene: recall that the coroot (resp. coweight) lattice is
419
+ implemented as the root (resp weight) lattice of the dual root
420
+ system. Hence, this method is implemented for weight lattice
421
+ realizations, but in practice is most of the time used on the
422
+ dual side.
423
+
424
+ EXAMPLES:
425
+
426
+ We start with type `A` which is simply laced; hence we do not
427
+ have to worry about the distinction between the weight and
428
+ coweight lattice::
429
+
430
+ sage: R = RootSystem(["A",2,1]).weight_lattice()
431
+ sage: alpha = R.simple_roots() # needs sage.graphs
432
+ sage: Lambda = R.fundamental_weights()
433
+
434
+ We consider first translations by elements of the root lattice::
435
+
436
+ sage: R.reduced_word_of_alcove_morphism(alpha[0].translation) # needs sage.graphs
437
+ [1, 2, 1, 0]
438
+ sage: R.reduced_word_of_alcove_morphism(alpha[1].translation) # needs sage.graphs
439
+ [0, 2, 0, 1]
440
+ sage: R.reduced_word_of_alcove_morphism(alpha[2].translation) # needs sage.graphs
441
+ [0, 1, 0, 2]
442
+
443
+ We continue with translations by elements of the classical
444
+ weight lattice, embedded at level `0`:
445
+
446
+ sage: omega1 = Lambda[1] - Lambda[0]
447
+ sage: omega2 = Lambda[2] - Lambda[0]
448
+
449
+ sage: R.reduced_word_of_alcove_morphism(omega1.translation) # needs sage.graphs
450
+ [0, 2]
451
+ sage: R.reduced_word_of_alcove_morphism(omega2.translation) # needs sage.graphs
452
+ [0, 1]
453
+
454
+ The following tests ensure that the code agrees with the tables
455
+ in Kashiwara's private notes on affine quantum algebras (2008).
456
+
457
+ TESTS::
458
+
459
+ sage: # needs sage.graphs
460
+ sage: R = RootSystem(['A',5,1]).weight_lattice()
461
+ sage: alpha = R.simple_roots()
462
+ sage: Lambda = R.fundamental_weights()
463
+ sage: omega1 = Lambda[1] - Lambda[0]
464
+ sage: R.reduced_word_of_alcove_morphism(omega1.translation)
465
+ [0, 5, 4, 3, 2]
466
+ sage: R.reduced_word_of_alcove_morphism(alpha[0].translation)
467
+ [1, 2, 3, 4, 5, 4, 3, 2, 1, 0]
468
+
469
+ sage: # needs sage.graphs
470
+ sage: R = RootSystem(['C',3,1]).weight_lattice()
471
+ sage: alpha = R.simple_roots()
472
+ sage: Lambda = R.fundamental_weights()
473
+ sage: omega1 = 2*(Lambda[1] - Lambda[0])
474
+ sage: omega2 = 2*(Lambda[2] - Lambda[0])
475
+ sage: omega3 = Lambda[3] - Lambda[0]
476
+ sage: R.reduced_word_of_alcove_morphism(omega1.translation)
477
+ [0, 1, 2, 3, 2, 1]
478
+ sage: R.reduced_word_of_alcove_morphism(omega2.translation)
479
+ [0, 1, 0, 2, 1, 3, 2, 1, 3, 2]
480
+ sage: R.reduced_word_of_alcove_morphism(omega3.translation)
481
+ [0, 1, 0, 2, 1, 0]
482
+
483
+ sage: # needs sage.graphs sage.libs.gap
484
+ sage: W = WeylGroup(['C',3,1])
485
+ sage: s = W.simple_reflections()
486
+ sage: w = s[0]*s[1]*s[2]*s[3]*s[2]
487
+ sage: W.from_reduced_word(R.reduced_word_of_alcove_morphism(omega2.translation)) == w*w # needs sage.graphs
488
+ True
489
+ sage: w = s[0]*s[1]*s[2]*s[0]*s[1]*s[0]
490
+ sage: W.from_reduced_word(R.reduced_word_of_alcove_morphism(omega3.translation)) == w # needs sage.graphs
491
+ True
492
+
493
+ sage: # needs sage.graphs
494
+ sage: R = RootSystem(['D',4,1]).weight_lattice()
495
+ sage: Lambda = R.fundamental_weights()
496
+ sage: omega1 = Lambda[1] - Lambda[0]
497
+ sage: omega2 = Lambda[2] - 2*Lambda[0]
498
+ sage: omega3 = Lambda[3] - Lambda[0]
499
+ sage: omega4 = Lambda[4] - Lambda[0]
500
+ sage: R.reduced_word_of_alcove_morphism(omega1.translation)
501
+ [0, 2, 3, 4, 2, 0]
502
+ sage: R.reduced_word_of_alcove_morphism(omega2.translation)
503
+ [0, 2, 1, 3, 2, 4, 2, 1, 3, 2]
504
+ sage: R.reduced_word_of_alcove_morphism(omega3.translation)
505
+ [0, 2, 1, 4, 2, 0]
506
+ sage: R.reduced_word_of_alcove_morphism(omega4.translation)
507
+ [0, 2, 1, 3, 2, 0]
508
+
509
+ sage: # needs sage.libs.gap
510
+ sage: W = WeylGroup(['D',4,1])
511
+ sage: s = W.simple_reflections()
512
+ sage: w = s[0]*s[2]*s[3]*s[4]*s[2]
513
+ sage: w1= s[1]*s[2]*s[3]*s[4]*s[2]
514
+ sage: W.from_reduced_word(R.reduced_word_of_alcove_morphism(omega2.translation)) == w*w1 # needs sage.graphs
515
+ True
516
+
517
+ sage: R = RootSystem(['D',5,1]).weight_lattice()
518
+ sage: Lambda = R.fundamental_weights()
519
+ sage: omega1 = Lambda[1] - Lambda[0]
520
+ sage: omega2 = Lambda[2] - 2*Lambda[0]
521
+ sage: R.reduced_word_of_alcove_morphism(omega1.translation) # needs sage.graphs
522
+ [0, 2, 3, 4, 5, 3, 2, 0]
523
+
524
+ sage: # needs sage.libs.gap
525
+ sage: W = WeylGroup(['D',5,1])
526
+ sage: s = W.simple_reflections()
527
+ sage: w = s[0]*s[2]*s[3]*s[4]*s[5]*s[3]*s[2]
528
+ sage: w1= s[1]*s[2]*s[3]*s[4]*s[5]*s[3]*s[2]
529
+ sage: W.from_reduced_word(R.reduced_word_of_alcove_morphism(omega2.translation)) == w*w1 # needs sage.graphs
530
+ True
531
+ """
532
+ return f(self.rho()).reduced_word()
533
+
534
+ def dynkin_diagram_automorphism_of_alcove_morphism(self, f):
535
+ r"""
536
+ Return the Dynkin diagram automorphism induced by an alcove morphism.
537
+
538
+ INPUT:
539
+
540
+ - ``f`` -- a linear map from ``self`` to ``self`` which preserves alcoves
541
+
542
+ This method returns the Dynkin diagram automorphism for
543
+ the decomposition `f = d w` (see
544
+ :meth:`reduced_word_of_alcove_morphism`), as a dictionary
545
+ mapping elements of the index set to itself.
546
+
547
+ EXAMPLES::
548
+
549
+ sage: R = RootSystem(["A",2,1]).weight_lattice()
550
+ sage: alpha = R.simple_roots() # needs sage.graphs
551
+ sage: Lambda = R.fundamental_weights()
552
+
553
+ Translations by elements of the root lattice induce a
554
+ trivial Dynkin diagram automorphism::
555
+
556
+ sage: # needs sage.graphs sage.libs.gap
557
+ sage: R.dynkin_diagram_automorphism_of_alcove_morphism(alpha[0].translation)
558
+ {0: 0, 1: 1, 2: 2}
559
+ sage: R.dynkin_diagram_automorphism_of_alcove_morphism(alpha[1].translation)
560
+ {0: 0, 1: 1, 2: 2}
561
+ sage: R.dynkin_diagram_automorphism_of_alcove_morphism(alpha[2].translation)
562
+ {0: 0, 1: 1, 2: 2}
563
+
564
+ This is no more the case for translations by general
565
+ elements of the (classical) weight lattice at level 0::
566
+
567
+ sage: omega1 = Lambda[1] - Lambda[0]
568
+ sage: omega2 = Lambda[2] - Lambda[0]
569
+
570
+ sage: # needs sage.graphs sage.libs.gap
571
+ sage: R.dynkin_diagram_automorphism_of_alcove_morphism(omega1.translation)
572
+ {0: 1, 1: 2, 2: 0}
573
+ sage: R.dynkin_diagram_automorphism_of_alcove_morphism(omega2.translation)
574
+ {0: 2, 1: 0, 2: 1}
575
+
576
+ sage: # needs sage.graphs sage.libs.gap
577
+ sage: R = RootSystem(['C',2,1]).weight_lattice()
578
+ sage: alpha = R.simple_roots()
579
+ sage: R.dynkin_diagram_automorphism_of_alcove_morphism(alpha[1].translation)
580
+ {0: 2, 1: 1, 2: 0}
581
+
582
+ sage: # needs sage.graphs sage.libs.gap
583
+ sage: R = RootSystem(['D',5,1]).weight_lattice()
584
+ sage: Lambda = R.fundamental_weights()
585
+ sage: omega1 = Lambda[1] - Lambda[0]
586
+ sage: omega2 = Lambda[2] - 2*Lambda[0]
587
+ sage: R.dynkin_diagram_automorphism_of_alcove_morphism(omega1.translation)
588
+ {0: 1, 1: 0, 2: 2, 3: 3, 4: 5, 5: 4}
589
+ sage: R.dynkin_diagram_automorphism_of_alcove_morphism(omega2.translation)
590
+ {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5}
591
+
592
+ Algorithm: computes `w` of the decomposition, and see how
593
+ `f\circ w^{-1}` permutes the simple roots.
594
+ """
595
+ alpha = self.simple_roots()
596
+ w = self.weyl_group().from_reduced_word(self.reduced_word_of_alcove_morphism(f))
597
+ # Now, we have d = f w^-1
598
+ winv = ~w
599
+ assert all(alpha[i].level().is_zero() for i in self.index_set())
600
+ rank_simple_roots = {alpha[i]: i for i in self.index_set()}
601
+ permutation = dict()
602
+ for i in self.index_set():
603
+ root = f(winv.action(alpha[i])) # This is d(alpha_i)
604
+ assert root in rank_simple_roots
605
+ permutation[i] = rank_simple_roots[root]
606
+ assert set(permutation.values()), set(self.index_set())
607
+ return permutation
608
+
609
+ def reduced_word_of_translation(self, t):
610
+ r"""
611
+ Given an element of the root lattice, this returns a reduced
612
+ word `i_1, \ldots, i_k` such that the Weyl group element `s_{i_1}
613
+ \circ \cdots \circ s_{i_k}` implements the "translation"
614
+ where `x` maps to `x + level(x)*t`. In other words, the alcove walk
615
+ `i_1, \ldots, i_k` brings the fundamental alcove to the
616
+ corresponding translated alcove.
617
+
618
+ .. NOTE::
619
+
620
+ There are some technical conditions for `t` to actually
621
+ be a translation; those are not tested (TODO: detail).
622
+
623
+ EXAMPLES::
624
+
625
+ sage: # needs sage.graphs
626
+ sage: R = RootSystem(["A",2,1]).weight_lattice()
627
+ sage: alpha = R.simple_roots()
628
+ sage: R.reduced_word_of_translation(alpha[1])
629
+ [0, 2, 0, 1]
630
+ sage: R.reduced_word_of_translation(alpha[2])
631
+ [0, 1, 0, 2]
632
+ sage: R.reduced_word_of_translation(alpha[0])
633
+ [1, 2, 1, 0]
634
+
635
+ sage: R = RootSystem(['D',5,1]).weight_lattice()
636
+ sage: Lambda = R.fundamental_weights()
637
+ sage: omega1 = Lambda[1] - Lambda[0]
638
+ sage: omega2 = Lambda[2] - 2*Lambda[0]
639
+ sage: R.reduced_word_of_translation(omega1) # needs sage.graphs
640
+ [0, 2, 3, 4, 5, 3, 2, 0]
641
+ sage: R.reduced_word_of_translation(omega2) # needs sage.graphs
642
+ [0, 2, 1, 3, 2, 4, 3, 5, 3, 2, 1, 4, 3, 2]
643
+
644
+ A non simply laced case::
645
+
646
+ sage: R = RootSystem(["C",2,1]).weight_lattice()
647
+ sage: Lambda = R.fundamental_weights()
648
+ sage: c = R.cartan_type().translation_factors(); c # needs sage.graphs
649
+ Finite family {0: 1, 1: 2, 2: 1}
650
+ sage: R.reduced_word_of_translation((Lambda[1]-Lambda[0]) * c[1]) # needs sage.graphs
651
+ [0, 1, 2, 1]
652
+ sage: R.reduced_word_of_translation((Lambda[2]-Lambda[0]) * c[2]) # needs sage.graphs
653
+ [0, 1, 0]
654
+
655
+ See also :meth:`_test_reduced_word_of_translation`.
656
+
657
+ .. TODO::
658
+
659
+ - Add a picture in the doc
660
+ - Add a method which, given an element of the classical
661
+ weight lattice, constructs the appropriate value for t
662
+ """
663
+ return self.reduced_word_of_alcove_morphism(t.translation)
664
+
665
+ def _test_reduced_word_of_translation(self, elements=None, **options):
666
+ r"""
667
+ Test the method :meth:`reduced_word_of_translation`.
668
+
669
+ INPUT:
670
+
671
+ - ``options`` -- any keyword arguments accepted by :meth:`_tester`
672
+
673
+ EXAMPLES::
674
+
675
+ sage: R = RootSystem(['D',4,1]).weight_lattice()
676
+ sage: R._test_reduced_word_of_translation() # needs sage.graphs
677
+
678
+ See the documentation for :class:`TestSuite` for more information.
679
+ """
680
+ tester = self._tester(**options)
681
+ if not self.cartan_type().is_affine(): # won't be necessary anymore once root systems are categorified
682
+ return
683
+ try:
684
+ alpha = self.simple_roots()
685
+ except ImportError: # when sage.graphs is not available
686
+ return
687
+ Lambda = self.fundamental_weights()
688
+ rho = self.rho()
689
+ G = self.dynkin_diagram()
690
+ permutations = []
691
+
692
+ # Note: this uses a special set of default elements instead of
693
+ # the usual tester.some_elements(), namely the smallest
694
+ # elements in the weight lattice giving rise to translations
695
+ # preserving the alcoves.
696
+ if elements is None:
697
+ c = self.cartan_type().c()
698
+ elements = [c[i] * Lambda[i]
699
+ for i in self.cartan_type().classical().index_set()]
700
+
701
+ # When the null root is zero in this root lattice realization,
702
+ # the roots correspond to the classical roots. We use that to
703
+ # check that w permute the simple roots according to a Dynkin
704
+ # diagram automorphism. This test currently requires the index
705
+ # set to be of the form 0..n
706
+ test_automorphism = self.null_root().is_zero() and set(self.index_set()) == set(i for i in range(len(self.index_set())))
707
+ # dictionary assigning a simple root to its index
708
+ rank_simple_roots = {alpha[i]: i for i in self.index_set()}
709
+
710
+ try:
711
+ W = self.weyl_group()
712
+ except ImportError:
713
+ return
714
+
715
+ for t in elements:
716
+ t = t - self.base_ring()(t.level()/Lambda[0].level()) * Lambda[0]
717
+ w = W.from_reduced_word(self.reduced_word_of_translation(t))
718
+ if self.null_root().is_zero():
719
+ # The following formula is only valid when the null root is zero
720
+ tester.assertEqual(w.action(rho), rho + rho.level()*t)
721
+ # TODO: fix this formula to take delta into account,
722
+ # and remove the above condition
723
+ if test_automorphism:
724
+ permutation = [None for i in self.index_set()]
725
+ for i in self.index_set():
726
+ root = w.action(alpha[i])
727
+ tester.assertIn(root, rank_simple_roots)
728
+ permutation[i] = rank_simple_roots[root]
729
+ tester.assertEqual(set(permutation), set(self.index_set()))
730
+ # It could be nicer to test equality of G and its relabelling
731
+ for i in self.index_set():
732
+ for j in self.index_set():
733
+ tester.assertEqual(G[permutation[i],permutation[j]], G[i,j])
734
+ permutations.append(permutation)
735
+
736
+ if test_automorphism and elements is None: # note: the test on elements is broken
737
+ # Check that, if we start from all fundamental weights, we
738
+ # get the full automorphism group
739
+ # Disabled: this should actually check that one gets all special
740
+ # automorphisms, which are in bijection with the special nodes
741
+ #from sage.groups.perm_gps.permgroup import PermutationGroup
742
+ #P = PermutationGroup([[i+1 for i in permutation] for permutation in permutations])
743
+ #tester.assertEqual(P, G.automorphism_group())
744
+ pass
745
+
746
+ def signs_of_alcovewalk(self, walk):
747
+ r"""
748
+ Let walk = `[i_1,\ldots,i_n]` denote an alcove walk starting
749
+ from the fundamental alcove `y_0`, crossing at step 1 the
750
+ wall `i_1`, and so on.
751
+
752
+ For each `k`, set `w_k = s_{i_1} \circ s_{i_k}`, and denote
753
+ by `y_k = w_k(y_0)` the alcove reached after `k` steps. Then,
754
+ `y_k` is obtained recursively from `y_{k-1}` by applying the
755
+ following reflection:
756
+
757
+ .. MATH::
758
+
759
+ y_k = s_{w_{k-1} \alpha_{i_k}} y_{k-1}.
760
+
761
+ The step is said positive if `w_{k-1} \alpha_{i_k}` is a
762
+ negative root (considering `w_{k-1}` as element of the
763
+ classical Weyl group and `\alpha_{i_k}` as a classical
764
+ root) and negative otherwise. The algorithm implemented
765
+ here use the equivalent property::
766
+
767
+ .. MATH:: \langle w_{k-1}^{-1} \rho_0, \alpha^\vee_{i_k}\rangle > 0
768
+
769
+ Where `\rho_0` is the sum of the classical fundamental
770
+ weights embedded at level 0 in this space (see
771
+ :meth:`rho_classical`), and `\alpha^\vee_{i_k}` is the
772
+ simple coroot associated to `\alpha_{i_k}`.
773
+
774
+ This function returns a list of the form `[+1,+1,-1,...]`,
775
+ where the `k`-th entry denotes whether the `k`-th step was
776
+ positive or negative.
777
+
778
+ See equation 3.4, of Ram: Alcove walks ..., :arxiv:`math/0601343v1`
779
+
780
+ EXAMPLES::
781
+
782
+ sage: L = RootSystem(['C',2,1]).weight_lattice()
783
+ sage: L.signs_of_alcovewalk([1,2,0,1,2,1,2,0,1,2]) # needs sage.graphs sage.libs.gap
784
+ [-1, -1, 1, -1, 1, 1, 1, 1, 1, 1]
785
+
786
+ sage: L = RootSystem(['A',2,1]).weight_lattice()
787
+ sage: L.signs_of_alcovewalk([0,1,2,1,2,0,1,2,0,1,2,0]) # needs sage.graphs sage.libs.gap
788
+ [1, 1, 1, 1, -1, 1, -1, 1, -1, 1, -1, 1]
789
+
790
+ sage: L = RootSystem(['B',2,1]).coweight_lattice()
791
+ sage: L.signs_of_alcovewalk([0,1,2,0,1,2]) # needs sage.graphs sage.libs.gap
792
+ [1, -1, 1, -1, 1, 1]
793
+
794
+ .. WARNING::
795
+
796
+ This method currently does not work in the weight
797
+ lattice for type BC dual because `\rho_0` does not
798
+ live in this lattice (but an integral multiple of it
799
+ would do the job as well).
800
+ """
801
+ # Below, w is w_{k-1} and we use the fact that, for a root
802
+ # `a` the following are equivalent:
803
+ # - w a is a negative root
804
+ # - <w a, rho^\vee> < 0
805
+ # - <w a^\vee, rho> < 0
806
+ # - <a^\vee, w^-1 rho> < 0
807
+ W = self.weyl_group()
808
+ s = W.simple_reflections()
809
+ alphacheck = self.alphacheck()
810
+ rho0 = self.rho_classical()
811
+ w = W.one()
812
+ signs = []
813
+ for i in walk:
814
+ if (w.action(rho0).scalar(alphacheck[i]) > 0):
815
+ signs.append(-1)
816
+ else:
817
+ signs.append(1)
818
+ w = s[i]*w
819
+ return signs
820
+
821
+ def rho_classical(self):
822
+ r"""
823
+ Return the embedding at level 0 of `\rho` of the classical lattice.
824
+
825
+ EXAMPLES::
826
+
827
+ sage: RootSystem(['C',4,1]).weight_lattice().rho_classical() # needs sage.graphs
828
+ -4*Lambda[0] + Lambda[1] + Lambda[2] + Lambda[3] + Lambda[4]
829
+ sage: L = RootSystem(['D',4,1]).weight_lattice()
830
+ sage: L.rho_classical().scalar(L.null_coroot()) # needs sage.graphs
831
+ 0
832
+
833
+ .. WARNING::
834
+
835
+ In affine type BC dual, this does not live in the weight lattice::
836
+
837
+ sage: L = CartanType(["BC",2,2]).dual().root_system().weight_space()
838
+ sage: L.rho_classical() # needs sage.graphs
839
+ -3/2*Lambda[0] + Lambda[1] + Lambda[2]
840
+ sage: L = CartanType(["BC",2,2]).dual().root_system().weight_lattice()
841
+ sage: L.rho_classical() # needs sage.graphs
842
+ Traceback (most recent call last):
843
+ ...
844
+ ValueError: 5 is not divisible by 2
845
+ """
846
+ rho = self.rho()
847
+ Lambda = self.fundamental_weights()
848
+ return rho - Lambda[0] * rho.level() / Lambda[0].level()
849
+
850
+ def embed_at_level(self, x, level=1):
851
+ r"""
852
+ Embed the classical weight `x` in the level ``level`` hyperplane.
853
+
854
+ This is achieved by translating the straightforward
855
+ embedding of `x` by `c\Lambda_0` for `c` some appropriate
856
+ scalar.
857
+
858
+ INPUT:
859
+
860
+ - ``x`` -- an element of the corresponding classical weight/ambient lattice
861
+ - ``level`` -- integer or element of the base ring (default: 1)
862
+
863
+ EXAMPLES::
864
+
865
+ sage: # needs sage.graphs
866
+ sage: L = RootSystem(["B",3,1]).weight_space()
867
+ sage: L0 = L.classical()
868
+ sage: alpha = L0.simple_roots()
869
+ sage: omega = L0.fundamental_weights()
870
+ sage: L.embed_at_level(omega[1], 1)
871
+ Lambda[1]
872
+ sage: L.embed_at_level(omega[2], 1)
873
+ -Lambda[0] + Lambda[2]
874
+ sage: L.embed_at_level(omega[3], 1)
875
+ Lambda[3]
876
+ sage: L.embed_at_level(alpha[1], 1)
877
+ Lambda[0] + 2*Lambda[1] - Lambda[2]
878
+ """
879
+ if not self.classical().is_parent_of(x):
880
+ raise ValueError("x must be an element of the classical type")
881
+ Lambda = self.fundamental_weights()
882
+ result = self.sum_of_terms(x)
883
+ result += Lambda[0] * (level-result.level()) / (Lambda[0].level())
884
+ assert result.level() == level
885
+ return result
886
+
887
+ # Should it be a method of highest_weight?
888
+ def weyl_dimension(self, highest_weight):
889
+ r"""
890
+ Return the dimension of the highest weight representation of highest weight ``highest_weight``.
891
+
892
+ EXAMPLES::
893
+
894
+ sage: RootSystem(['A',3]).ambient_lattice().weyl_dimension([2,1,0,0])
895
+ 20
896
+ sage: P = RootSystem(['C',2]).weight_lattice()
897
+ sage: La = P.basis()
898
+ sage: P.weyl_dimension(La[1]+La[2]) # needs sage.graphs
899
+ 16
900
+
901
+ sage: type(RootSystem(['A',3]).ambient_lattice().weyl_dimension([2,1,0,0]))
902
+ <class 'sage.rings.integer.Integer'>
903
+ """
904
+ highest_weight = self(highest_weight)
905
+ if not highest_weight.is_dominant():
906
+ raise ValueError("the highest weight must be dominant")
907
+ rho = self.rho()
908
+ pr = self.coroot_lattice().positive_roots()
909
+ from sage.rings.integer import Integer
910
+ n = prod(((rho+highest_weight).scalar(x) for x in pr), Integer(1))
911
+ d = prod((rho.scalar(x) for x in pr), Integer(1))
912
+ return Integer(n/d)
913
+
914
+ @lazy_attribute
915
+ def _inverse_cartan_matrix(self):
916
+ r"""
917
+ Return the inverse Cartan matrix defining ``self``.
918
+
919
+ EXAMPLES::
920
+
921
+ sage: # needs sage.graphs
922
+ sage: RootSystem(['A', 3]).ambient_lattice()._inverse_cartan_matrix
923
+ [3/4 1/2 1/4]
924
+ [1/2 1 1/2]
925
+ [1/4 1/2 3/4]
926
+ sage: RootSystem(['G', 2]).weight_lattice()._inverse_cartan_matrix
927
+ [2 3]
928
+ [1 2]
929
+ """
930
+ ret = self.cartan_type().cartan_matrix().inverse()
931
+ ret.set_immutable()
932
+ return ret
933
+
934
+ @lazy_attribute
935
+ def _symmetric_form_matrix(self):
936
+ r"""
937
+ Return the matrix for the symmetric form `( | )` in
938
+ the weight lattice basis.
939
+
940
+ Let `A` be a symmetrizable Cartan matrix with symmetrizer `D`,.
941
+ This returns the matrix `M^t DA M`, where `M` is dependent upon
942
+ the type given below.
943
+
944
+ In finite types, `M` is the inverse of the Cartan matrix.
945
+
946
+ In affine types, `M` takes the basis
947
+ `(\Lambda_0, \Lambda_1, \ldots, \Lambda_r, \delta)` to
948
+ `(\alpha_0, \ldots, \alpha_r, \Lambda_0)` where `r` is the
949
+ rank of ``self``.
950
+
951
+ This is used in computing the symmetric form for affine
952
+ root systems.
953
+
954
+ EXAMPLES::
955
+
956
+ sage: P = RootSystem(['B',2]).weight_lattice()
957
+ sage: P._symmetric_form_matrix # needs sage.graphs
958
+ [2 1]
959
+ [1 1]
960
+
961
+ sage: P = RootSystem(['C',2]).weight_lattice()
962
+ sage: P._symmetric_form_matrix # needs sage.graphs
963
+ [1 1]
964
+ [1 2]
965
+
966
+ sage: P = RootSystem(['C',2,1]).weight_lattice()
967
+ sage: P._symmetric_form_matrix # needs sage.graphs
968
+ [0 0 0 1]
969
+ [0 1 1 1]
970
+ [0 1 2 1]
971
+ [1 1 1 0]
972
+
973
+ sage: P = RootSystem(['A',4,2]).weight_lattice()
974
+ sage: P._symmetric_form_matrix # needs sage.graphs
975
+ [ 0 0 0 1/2]
976
+ [ 0 2 2 1]
977
+ [ 0 2 4 1]
978
+ [1/2 1 1 0]
979
+ """
980
+ from sage.matrix.constructor import matrix
981
+ ct = self.cartan_type()
982
+ cm = ct.cartan_matrix()
983
+ if cm.det() != 0:
984
+ diag = matrix.diagonal(cm.symmetrizer())
985
+ return self._inverse_cartan_matrix.transpose() * diag
986
+
987
+ if not ct.is_affine():
988
+ raise ValueError("only implemented for affine types when the"
989
+ " Cartan matrix is singular")
990
+
991
+ r = ct.rank()
992
+ a = ct.a()
993
+ # Determine the change of basis matrix
994
+ # La[0], ..., La[r], delta -> al[0], ..., al[r], La[0]
995
+ M = cm.stack( matrix([1] + [0]*(r-1)) )
996
+ M = matrix.block([[ M, matrix([[1]] + [[0]]*r) ]])
997
+ M = M.inverse()
998
+
999
+ if a[0] != 1:
1000
+ from sage.rings.rational_field import QQ
1001
+ S = matrix([~a[0]]+[0]*(r-1))
1002
+ A = cm.symmetrized_matrix().change_ring(QQ).stack(S)
1003
+ else:
1004
+ A = cm.symmetrized_matrix().stack(matrix([1]+[0]*(r-1)))
1005
+ A = matrix.block([[A, matrix([[~a[0]]] + [[0]]*r)]])
1006
+ return M.transpose() * A * M
1007
+
1008
+ class ElementMethods:
1009
+ def symmetric_form(self, la):
1010
+ r"""
1011
+ Return the symmetric form of ``self`` with ``la``.
1012
+
1013
+ Return the pairing `( | )` on the weight lattice. See Chapter 6
1014
+ in Kac, Infinite Dimensional Lie Algebras for more details.
1015
+
1016
+ .. WARNING::
1017
+
1018
+ For affine root systems, if you are not working in the
1019
+ extended weight lattice/space, this may return incorrect
1020
+ results.
1021
+
1022
+ EXAMPLES::
1023
+
1024
+ sage: # needs sage.graphs
1025
+ sage: P = RootSystem(['C',2]).weight_lattice()
1026
+ sage: al = P.simple_roots()
1027
+ sage: al[1].symmetric_form(al[1])
1028
+ 2
1029
+ sage: al[1].symmetric_form(al[2])
1030
+ -2
1031
+ sage: al[2].symmetric_form(al[1])
1032
+ -2
1033
+ sage: Q = RootSystem(['C',2]).root_lattice()
1034
+ sage: alQ = Q.simple_roots()
1035
+ sage: all(al[i].symmetric_form(al[j]) == alQ[i].symmetric_form(alQ[j])
1036
+ ....: for i in P.index_set() for j in P.index_set())
1037
+ True
1038
+
1039
+ sage: # needs sage.graphs
1040
+ sage: P = RootSystem(['C',2,1]).weight_lattice(extended=True)
1041
+ sage: al = P.simple_roots()
1042
+ sage: al[1].symmetric_form(al[1])
1043
+ 2
1044
+ sage: al[1].symmetric_form(al[2])
1045
+ -2
1046
+ sage: al[1].symmetric_form(al[0])
1047
+ -2
1048
+ sage: al[0].symmetric_form(al[1])
1049
+ -2
1050
+ sage: Q = RootSystem(['C',2,1]).root_lattice()
1051
+ sage: alQ = Q.simple_roots()
1052
+ sage: all(al[i].symmetric_form(al[j]) == alQ[i].symmetric_form(alQ[j])
1053
+ ....: for i in P.index_set() for j in P.index_set())
1054
+ True
1055
+ sage: La = P.basis()
1056
+ sage: [La['delta'].symmetric_form(al) for al in P.simple_roots()]
1057
+ [0, 0, 0]
1058
+ sage: [La[0].symmetric_form(al) for al in P.simple_roots()]
1059
+ [1, 0, 0]
1060
+
1061
+ sage: P = RootSystem(['C',2,1]).weight_lattice()
1062
+ sage: Q = RootSystem(['C',2,1]).root_lattice()
1063
+ sage: al = P.simple_roots() # needs sage.graphs
1064
+ sage: alQ = Q.simple_roots() # needs sage.graphs
1065
+ sage: all(al[i].symmetric_form(al[j]) == alQ[i].symmetric_form(alQ[j]) # needs sage.graphs
1066
+ ....: for i in P.index_set() for j in P.index_set())
1067
+ True
1068
+
1069
+ The result of `(\Lambda_0 | \alpha_0)` should be `1`, however we
1070
+ get `0` because we are not working in the extended weight
1071
+ lattice::
1072
+
1073
+ sage: La = P.basis()
1074
+ sage: [La[0].symmetric_form(al) for al in P.simple_roots()] # needs sage.graphs
1075
+ [0, 0, 0]
1076
+
1077
+ TESTS:
1078
+
1079
+ We check that `A_{2n}^{(2)}` has 3 different root lengths::
1080
+
1081
+ sage: P = RootSystem(['A',4,2]).weight_lattice()
1082
+ sage: al = P.simple_roots() # needs sage.graphs
1083
+ sage: [al[i].symmetric_form(al[i]) for i in P.index_set()] # needs sage.graphs
1084
+ [2, 4, 8]
1085
+
1086
+ Check that :issue:`31410` is fixed, and the symmetric form
1087
+ computed on the weight space is the same as the symmetric
1088
+ form computed on the root space::
1089
+
1090
+ sage: def s1(ct):
1091
+ ....: L = RootSystem(ct).weight_space()
1092
+ ....: P = L.positive_roots()
1093
+ ....: rho = L.rho()
1094
+ ....: return [beta.symmetric_form(rho) for beta in P]
1095
+
1096
+ sage: def s2(ct):
1097
+ ....: R = RootSystem(ct).root_space()
1098
+ ....: P = R.positive_roots()
1099
+ ....: rho = 1/2*sum(P)
1100
+ ....: return [beta.symmetric_form(rho) for beta in P]
1101
+
1102
+ sage: all(s1(ct) == s2(ct) # needs sage.graphs
1103
+ ....: for ct in CartanType.samples(finite=True, crystallographic=True))
1104
+ True
1105
+ """
1106
+ P = self.parent()
1107
+ ct = P.cartan_type()
1108
+ sym = P._symmetric_form_matrix
1109
+
1110
+ if ct.is_finite():
1111
+ iset = P.index_set()
1112
+ else:
1113
+ iset = P.index_set() + ('delta',)
1114
+
1115
+ return sum(cl*sym[iset.index(ml),iset.index(mr)]*cr
1116
+ for ml, cl in self for mr, cr in la)
1117
+
1118
+ # # This should be in a method to_weight_lattice()
1119
+ # alphac = self.simple_coroots()
1120
+ # Lambda = self.fundamental_weights()
1121
+ # assert t == self.plus(t.scalar(alphac[i]) * Lambda[i] for i in self.index_set())
1122
+ # t = self.plus( t.scalar(alphac[i]) * c[i] * Lambda[i] for i in self.index_set())
1123
+
1124
+ def to_weight_space(self, base_ring=None):
1125
+ r"""
1126
+ Map ``self`` to the weight space.
1127
+
1128
+ .. WARNING::
1129
+
1130
+ Implemented for finite Cartan type.
1131
+
1132
+ EXAMPLES::
1133
+
1134
+ sage: b = CartanType(['B',2]).root_system().ambient_space().from_vector(vector([1,-2])); b
1135
+ (1, -2)
1136
+ sage: b.to_weight_space()
1137
+ 3*Lambda[1] - 4*Lambda[2]
1138
+ sage: b = CartanType(['B',2]).root_system().ambient_space().from_vector(vector([1/2,0])); b
1139
+ (1/2, 0)
1140
+ sage: b.to_weight_space()
1141
+ 1/2*Lambda[1]
1142
+ sage: b.to_weight_space(ZZ)
1143
+ Traceback (most recent call last):
1144
+ ...
1145
+ TypeError: no conversion of this rational to integer
1146
+ sage: b = CartanType(['G',2]).root_system().ambient_space().from_vector(vector([4,-5,1])); b
1147
+ (4, -5, 1)
1148
+ sage: b.to_weight_space()
1149
+ -6*Lambda[1] + 5*Lambda[2]
1150
+ """
1151
+ L = self.parent()
1152
+ if base_ring is None:
1153
+ base_ring = L.base_ring()
1154
+
1155
+ wt_space = L.root_system.weight_space(base_ring)
1156
+ simple_coroots = L.simple_coroots()
1157
+ return wt_space.sum_of_terms(((i, base_ring(self.scalar(ac)))
1158
+ for i, ac in simple_coroots.items()),
1159
+ distinct=True)
1160
+
1161
+ @cached_method
1162
+ def _to_root_vector(self):
1163
+ r"""
1164
+ Helper method to express ``self`` as a linear combination
1165
+ of simple roots.
1166
+
1167
+ OUTPUT:
1168
+
1169
+ A list with entries in `\QQ` representing ``self`` as a linear
1170
+ combination of simple roots.
1171
+
1172
+ EXAMPLES::
1173
+
1174
+ sage: L = RootSystem(['A', 3]).ambient_space()
1175
+ sage: e = L.basis()
1176
+ sage: (e[0] + 3*e[3])._to_root_vector() # not in the root space
1177
+ sage: (e[0] - e[1])._to_root_vector()
1178
+ (1, 0, 0)
1179
+ sage: (e[0] + 2*e[1] - 3*e[2])._to_root_vector()
1180
+ (1, 3, 0)
1181
+ """
1182
+ v = self.to_vector().change_ring(QQ)
1183
+ al = [a.to_vector() for a in self.parent().simple_roots()]
1184
+ b = v.parent().linear_dependence([v] + al)
1185
+ if len(b) != 1 or b[0] == 0:
1186
+ return None
1187
+ b = b[0] # Get the actual vector that gives the linear dependency
1188
+ return b[1:].change_ring(QQ) / -b[0]