passagemath-modules 10.6.31rc3__cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_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 (806) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +806 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +6 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgfortran-e1b7dfc8.so.5.0.0 +0 -0
  6. passagemath_modules.libs/libgmp-93ebf16a.so.10.5.0 +0 -0
  7. passagemath_modules.libs/libgsl-e3525837.so.28.0.0 +0 -0
  8. passagemath_modules.libs/libmpc-c5c421e1.so.3.3.1 +0 -0
  9. passagemath_modules.libs/libmpfr-e0f11cf3.so.6.2.1 +0 -0
  10. passagemath_modules.libs/libopenblasp-r0-4c5b64b1.3.29.so +0 -0
  11. sage/algebras/all__sagemath_modules.py +20 -0
  12. sage/algebras/catalog.py +148 -0
  13. sage/algebras/clifford_algebra.py +3107 -0
  14. sage/algebras/clifford_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  15. sage/algebras/clifford_algebra_element.pxd +16 -0
  16. sage/algebras/clifford_algebra_element.pyx +997 -0
  17. sage/algebras/commutative_dga.py +4252 -0
  18. sage/algebras/exterior_algebra_groebner.cpython-314-aarch64-linux-gnu.so +0 -0
  19. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  20. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  21. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  22. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  23. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  28. sage/algebras/finite_gca.py +528 -0
  29. sage/algebras/group_algebra.py +232 -0
  30. sage/algebras/lie_algebras/abelian.py +197 -0
  31. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  32. sage/algebras/lie_algebras/all.py +25 -0
  33. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  34. sage/algebras/lie_algebras/bch.py +177 -0
  35. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  36. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  37. sage/algebras/lie_algebras/center_uea.py +767 -0
  38. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  39. sage/algebras/lie_algebras/examples.py +683 -0
  40. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  41. sage/algebras/lie_algebras/heisenberg.py +820 -0
  42. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  43. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  44. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  46. sage/algebras/lie_algebras/morphism.py +661 -0
  47. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  48. sage/algebras/lie_algebras/onsager.py +1324 -0
  49. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  50. sage/algebras/lie_algebras/quotient.py +462 -0
  51. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  52. sage/algebras/lie_algebras/representation.py +1040 -0
  53. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  54. sage/algebras/lie_algebras/subalgebra.py +967 -0
  55. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  56. sage/algebras/lie_algebras/verma_module.py +1630 -0
  57. sage/algebras/lie_algebras/virasoro.py +1186 -0
  58. sage/algebras/octonion_algebra.cpython-314-aarch64-linux-gnu.so +0 -0
  59. sage/algebras/octonion_algebra.pxd +20 -0
  60. sage/algebras/octonion_algebra.pyx +987 -0
  61. sage/algebras/orlik_solomon.py +907 -0
  62. sage/algebras/orlik_terao.py +779 -0
  63. sage/algebras/steenrod/all.py +7 -0
  64. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  65. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  66. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  67. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  68. sage/algebras/weyl_algebra.py +1126 -0
  69. sage/all__sagemath_modules.py +62 -0
  70. sage/calculus/all__sagemath_modules.py +19 -0
  71. sage/calculus/expr.py +205 -0
  72. sage/calculus/integration.cpython-314-aarch64-linux-gnu.so +0 -0
  73. sage/calculus/integration.pyx +698 -0
  74. sage/calculus/interpolation.cpython-314-aarch64-linux-gnu.so +0 -0
  75. sage/calculus/interpolation.pxd +13 -0
  76. sage/calculus/interpolation.pyx +387 -0
  77. sage/calculus/interpolators.cpython-314-aarch64-linux-gnu.so +0 -0
  78. sage/calculus/interpolators.pyx +326 -0
  79. sage/calculus/ode.cpython-314-aarch64-linux-gnu.so +0 -0
  80. sage/calculus/ode.pxd +5 -0
  81. sage/calculus/ode.pyx +610 -0
  82. sage/calculus/riemann.cpython-314-aarch64-linux-gnu.so +0 -0
  83. sage/calculus/riemann.pyx +1521 -0
  84. sage/calculus/test_sympy.py +201 -0
  85. sage/calculus/transforms/all.py +7 -0
  86. sage/calculus/transforms/dft.py +844 -0
  87. sage/calculus/transforms/dwt.cpython-314-aarch64-linux-gnu.so +0 -0
  88. sage/calculus/transforms/dwt.pxd +7 -0
  89. sage/calculus/transforms/dwt.pyx +160 -0
  90. sage/calculus/transforms/fft.cpython-314-aarch64-linux-gnu.so +0 -0
  91. sage/calculus/transforms/fft.pxd +12 -0
  92. sage/calculus/transforms/fft.pyx +487 -0
  93. sage/calculus/wester.py +662 -0
  94. sage/coding/abstract_code.py +1108 -0
  95. sage/coding/ag_code.py +868 -0
  96. sage/coding/ag_code_decoders.cpython-314-aarch64-linux-gnu.so +0 -0
  97. sage/coding/ag_code_decoders.pyx +2639 -0
  98. sage/coding/all.py +15 -0
  99. sage/coding/bch_code.py +494 -0
  100. sage/coding/binary_code.cpython-314-aarch64-linux-gnu.so +0 -0
  101. sage/coding/binary_code.pxd +124 -0
  102. sage/coding/binary_code.pyx +4139 -0
  103. sage/coding/bounds_catalog.py +43 -0
  104. sage/coding/channel.py +819 -0
  105. sage/coding/channels_catalog.py +29 -0
  106. sage/coding/code_bounds.py +755 -0
  107. sage/coding/code_constructions.py +804 -0
  108. sage/coding/codes_catalog.py +111 -0
  109. sage/coding/cyclic_code.py +1329 -0
  110. sage/coding/databases.py +316 -0
  111. sage/coding/decoder.py +373 -0
  112. sage/coding/decoders_catalog.py +88 -0
  113. sage/coding/delsarte_bounds.py +709 -0
  114. sage/coding/encoder.py +390 -0
  115. sage/coding/encoders_catalog.py +64 -0
  116. sage/coding/extended_code.py +468 -0
  117. sage/coding/gabidulin_code.py +1058 -0
  118. sage/coding/golay_code.py +404 -0
  119. sage/coding/goppa_code.py +441 -0
  120. sage/coding/grs_code.py +2371 -0
  121. sage/coding/guava.py +107 -0
  122. sage/coding/guruswami_sudan/all.py +1 -0
  123. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  124. sage/coding/guruswami_sudan/interpolation.py +409 -0
  125. sage/coding/guruswami_sudan/utils.py +176 -0
  126. sage/coding/hamming_code.py +176 -0
  127. sage/coding/information_set_decoder.py +1032 -0
  128. sage/coding/kasami_codes.cpython-314-aarch64-linux-gnu.so +0 -0
  129. sage/coding/kasami_codes.pyx +351 -0
  130. sage/coding/linear_code.py +3067 -0
  131. sage/coding/linear_code_no_metric.py +1354 -0
  132. sage/coding/linear_rank_metric.py +961 -0
  133. sage/coding/parity_check_code.py +353 -0
  134. sage/coding/punctured_code.py +719 -0
  135. sage/coding/reed_muller_code.py +999 -0
  136. sage/coding/self_dual_codes.py +942 -0
  137. sage/coding/source_coding/all.py +2 -0
  138. sage/coding/source_coding/huffman.py +553 -0
  139. sage/coding/subfield_subcode.py +423 -0
  140. sage/coding/two_weight_db.py +399 -0
  141. sage/combinat/all__sagemath_modules.py +7 -0
  142. sage/combinat/cartesian_product.py +347 -0
  143. sage/combinat/family.py +11 -0
  144. sage/combinat/free_module.py +1977 -0
  145. sage/combinat/root_system/all.py +147 -0
  146. sage/combinat/root_system/ambient_space.py +527 -0
  147. sage/combinat/root_system/associahedron.py +471 -0
  148. sage/combinat/root_system/braid_move_calculator.py +143 -0
  149. sage/combinat/root_system/braid_orbit.cpython-314-aarch64-linux-gnu.so +0 -0
  150. sage/combinat/root_system/braid_orbit.pyx +144 -0
  151. sage/combinat/root_system/branching_rules.py +2301 -0
  152. sage/combinat/root_system/cartan_matrix.py +1245 -0
  153. sage/combinat/root_system/cartan_type.py +3069 -0
  154. sage/combinat/root_system/coxeter_group.py +162 -0
  155. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  156. sage/combinat/root_system/coxeter_type.py +681 -0
  157. sage/combinat/root_system/dynkin_diagram.py +900 -0
  158. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  159. sage/combinat/root_system/fundamental_group.py +795 -0
  160. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  161. sage/combinat/root_system/integrable_representations.py +1227 -0
  162. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  163. sage/combinat/root_system/pieri_factors.py +1147 -0
  164. sage/combinat/root_system/plot.py +1615 -0
  165. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  166. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  167. sage/combinat/root_system/root_space.py +487 -0
  168. sage/combinat/root_system/root_system.py +882 -0
  169. sage/combinat/root_system/type_A.py +348 -0
  170. sage/combinat/root_system/type_A_affine.py +227 -0
  171. sage/combinat/root_system/type_A_infinity.py +241 -0
  172. sage/combinat/root_system/type_B.py +347 -0
  173. sage/combinat/root_system/type_BC_affine.py +287 -0
  174. sage/combinat/root_system/type_B_affine.py +216 -0
  175. sage/combinat/root_system/type_C.py +317 -0
  176. sage/combinat/root_system/type_C_affine.py +188 -0
  177. sage/combinat/root_system/type_D.py +357 -0
  178. sage/combinat/root_system/type_D_affine.py +208 -0
  179. sage/combinat/root_system/type_E.py +641 -0
  180. sage/combinat/root_system/type_E_affine.py +231 -0
  181. sage/combinat/root_system/type_F.py +387 -0
  182. sage/combinat/root_system/type_F_affine.py +137 -0
  183. sage/combinat/root_system/type_G.py +293 -0
  184. sage/combinat/root_system/type_G_affine.py +132 -0
  185. sage/combinat/root_system/type_H.py +105 -0
  186. sage/combinat/root_system/type_I.py +110 -0
  187. sage/combinat/root_system/type_Q.py +150 -0
  188. sage/combinat/root_system/type_affine.py +509 -0
  189. sage/combinat/root_system/type_dual.py +704 -0
  190. sage/combinat/root_system/type_folded.py +301 -0
  191. sage/combinat/root_system/type_marked.py +748 -0
  192. sage/combinat/root_system/type_reducible.py +601 -0
  193. sage/combinat/root_system/type_relabel.py +730 -0
  194. sage/combinat/root_system/type_super_A.py +837 -0
  195. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  196. sage/combinat/root_system/weight_space.py +639 -0
  197. sage/combinat/root_system/weyl_characters.py +2238 -0
  198. sage/crypto/__init__.py +4 -0
  199. sage/crypto/all.py +28 -0
  200. sage/crypto/block_cipher/all.py +7 -0
  201. sage/crypto/block_cipher/des.py +1065 -0
  202. sage/crypto/block_cipher/miniaes.py +2171 -0
  203. sage/crypto/block_cipher/present.py +909 -0
  204. sage/crypto/block_cipher/sdes.py +1527 -0
  205. sage/crypto/boolean_function.cpython-314-aarch64-linux-gnu.so +0 -0
  206. sage/crypto/boolean_function.pxd +10 -0
  207. sage/crypto/boolean_function.pyx +1487 -0
  208. sage/crypto/cipher.py +78 -0
  209. sage/crypto/classical.py +3668 -0
  210. sage/crypto/classical_cipher.py +569 -0
  211. sage/crypto/cryptosystem.py +387 -0
  212. sage/crypto/key_exchange/all.py +7 -0
  213. sage/crypto/key_exchange/catalog.py +24 -0
  214. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  215. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  216. sage/crypto/lattice.py +312 -0
  217. sage/crypto/lfsr.py +295 -0
  218. sage/crypto/lwe.py +840 -0
  219. sage/crypto/mq/__init__.py +4 -0
  220. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  221. sage/crypto/mq/rijndael_gf.py +2345 -0
  222. sage/crypto/mq/sbox.py +7 -0
  223. sage/crypto/mq/sr.py +3344 -0
  224. sage/crypto/public_key/all.py +5 -0
  225. sage/crypto/public_key/blum_goldwasser.py +776 -0
  226. sage/crypto/sbox.cpython-314-aarch64-linux-gnu.so +0 -0
  227. sage/crypto/sbox.pyx +2090 -0
  228. sage/crypto/sboxes.py +2090 -0
  229. sage/crypto/stream.py +390 -0
  230. sage/crypto/stream_cipher.py +297 -0
  231. sage/crypto/util.py +519 -0
  232. sage/ext/all__sagemath_modules.py +1 -0
  233. sage/ext/interpreters/__init__.py +1 -0
  234. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  235. sage/ext/interpreters/wrapper_cc.cpython-314-aarch64-linux-gnu.so +0 -0
  236. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  237. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  238. sage/ext/interpreters/wrapper_cdf.cpython-314-aarch64-linux-gnu.so +0 -0
  239. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  240. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  241. sage/ext/interpreters/wrapper_rdf.cpython-314-aarch64-linux-gnu.so +0 -0
  242. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  243. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  244. sage/ext/interpreters/wrapper_rr.cpython-314-aarch64-linux-gnu.so +0 -0
  245. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  246. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  247. sage/geometry/all__sagemath_modules.py +5 -0
  248. sage/geometry/toric_lattice.py +1745 -0
  249. sage/geometry/toric_lattice_element.cpython-314-aarch64-linux-gnu.so +0 -0
  250. sage/geometry/toric_lattice_element.pyx +432 -0
  251. sage/groups/abelian_gps/abelian_group.py +1925 -0
  252. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  253. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  254. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  255. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  256. sage/groups/abelian_gps/element_base.py +341 -0
  257. sage/groups/abelian_gps/values.py +488 -0
  258. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  259. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  260. sage/groups/additive_abelian/all.py +4 -0
  261. sage/groups/additive_abelian/qmodnz.py +231 -0
  262. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  263. sage/groups/affine_gps/affine_group.py +535 -0
  264. sage/groups/affine_gps/all.py +1 -0
  265. sage/groups/affine_gps/catalog.py +17 -0
  266. sage/groups/affine_gps/euclidean_group.py +246 -0
  267. sage/groups/affine_gps/group_element.py +562 -0
  268. sage/groups/all__sagemath_modules.py +12 -0
  269. sage/groups/galois_group.py +479 -0
  270. sage/groups/matrix_gps/all.py +4 -0
  271. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  272. sage/groups/matrix_gps/catalog.py +26 -0
  273. sage/groups/matrix_gps/coxeter_group.py +927 -0
  274. sage/groups/matrix_gps/finitely_generated.py +487 -0
  275. sage/groups/matrix_gps/group_element.cpython-314-aarch64-linux-gnu.so +0 -0
  276. sage/groups/matrix_gps/group_element.pxd +11 -0
  277. sage/groups/matrix_gps/group_element.pyx +431 -0
  278. sage/groups/matrix_gps/linear.py +440 -0
  279. sage/groups/matrix_gps/matrix_group.py +617 -0
  280. sage/groups/matrix_gps/named_group.py +296 -0
  281. sage/groups/matrix_gps/orthogonal.py +544 -0
  282. sage/groups/matrix_gps/symplectic.py +251 -0
  283. sage/groups/matrix_gps/unitary.py +436 -0
  284. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  285. sage/groups/misc_gps/argument_groups.py +1905 -0
  286. sage/groups/misc_gps/imaginary_groups.py +479 -0
  287. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  288. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  289. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-aarch64-linux-gnu.so +0 -0
  290. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  292. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-aarch64-linux-gnu.so +0 -0
  293. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  295. sage/homology/algebraic_topological_model.py +595 -0
  296. sage/homology/all.py +2 -0
  297. sage/homology/all__sagemath_modules.py +8 -0
  298. sage/homology/chain_complex.py +2148 -0
  299. sage/homology/chain_complex_homspace.py +165 -0
  300. sage/homology/chain_complex_morphism.py +629 -0
  301. sage/homology/chain_homotopy.py +604 -0
  302. sage/homology/chains.py +653 -0
  303. sage/homology/free_resolution.py +923 -0
  304. sage/homology/graded_resolution.py +567 -0
  305. sage/homology/hochschild_complex.py +756 -0
  306. sage/homology/homology_group.py +188 -0
  307. sage/homology/homology_morphism.py +422 -0
  308. sage/homology/homology_vector_space_with_basis.py +1454 -0
  309. sage/homology/koszul_complex.py +169 -0
  310. sage/homology/matrix_utils.py +205 -0
  311. sage/libs/all__sagemath_modules.py +1 -0
  312. sage/libs/gsl/__init__.py +1 -0
  313. sage/libs/gsl/airy.pxd +56 -0
  314. sage/libs/gsl/all.pxd +66 -0
  315. sage/libs/gsl/array.cpython-314-aarch64-linux-gnu.so +0 -0
  316. sage/libs/gsl/array.pxd +5 -0
  317. sage/libs/gsl/array.pyx +102 -0
  318. sage/libs/gsl/bessel.pxd +208 -0
  319. sage/libs/gsl/blas.pxd +116 -0
  320. sage/libs/gsl/blas_types.pxd +34 -0
  321. sage/libs/gsl/block.pxd +52 -0
  322. sage/libs/gsl/chebyshev.pxd +37 -0
  323. sage/libs/gsl/clausen.pxd +12 -0
  324. sage/libs/gsl/combination.pxd +47 -0
  325. sage/libs/gsl/complex.pxd +151 -0
  326. sage/libs/gsl/coulomb.pxd +30 -0
  327. sage/libs/gsl/coupling.pxd +21 -0
  328. sage/libs/gsl/dawson.pxd +12 -0
  329. sage/libs/gsl/debye.pxd +24 -0
  330. sage/libs/gsl/dilog.pxd +14 -0
  331. sage/libs/gsl/eigen.pxd +46 -0
  332. sage/libs/gsl/elementary.pxd +12 -0
  333. sage/libs/gsl/ellint.pxd +48 -0
  334. sage/libs/gsl/elljac.pxd +8 -0
  335. sage/libs/gsl/erf.pxd +32 -0
  336. sage/libs/gsl/errno.pxd +26 -0
  337. sage/libs/gsl/exp.pxd +44 -0
  338. sage/libs/gsl/expint.pxd +44 -0
  339. sage/libs/gsl/fermi_dirac.pxd +44 -0
  340. sage/libs/gsl/fft.pxd +121 -0
  341. sage/libs/gsl/fit.pxd +50 -0
  342. sage/libs/gsl/gamma.pxd +94 -0
  343. sage/libs/gsl/gegenbauer.pxd +26 -0
  344. sage/libs/gsl/histogram.pxd +176 -0
  345. sage/libs/gsl/hyperg.pxd +52 -0
  346. sage/libs/gsl/integration.pxd +69 -0
  347. sage/libs/gsl/interp.pxd +109 -0
  348. sage/libs/gsl/laguerre.pxd +24 -0
  349. sage/libs/gsl/lambert.pxd +16 -0
  350. sage/libs/gsl/legendre.pxd +90 -0
  351. sage/libs/gsl/linalg.pxd +185 -0
  352. sage/libs/gsl/log.pxd +26 -0
  353. sage/libs/gsl/math.pxd +43 -0
  354. sage/libs/gsl/matrix.pxd +143 -0
  355. sage/libs/gsl/matrix_complex.pxd +130 -0
  356. sage/libs/gsl/min.pxd +67 -0
  357. sage/libs/gsl/monte.pxd +56 -0
  358. sage/libs/gsl/ntuple.pxd +32 -0
  359. sage/libs/gsl/odeiv.pxd +70 -0
  360. sage/libs/gsl/permutation.pxd +78 -0
  361. sage/libs/gsl/poly.pxd +40 -0
  362. sage/libs/gsl/pow_int.pxd +12 -0
  363. sage/libs/gsl/psi.pxd +28 -0
  364. sage/libs/gsl/qrng.pxd +29 -0
  365. sage/libs/gsl/random.pxd +257 -0
  366. sage/libs/gsl/rng.pxd +100 -0
  367. sage/libs/gsl/roots.pxd +72 -0
  368. sage/libs/gsl/sort.pxd +36 -0
  369. sage/libs/gsl/statistics.pxd +59 -0
  370. sage/libs/gsl/sum.pxd +55 -0
  371. sage/libs/gsl/synchrotron.pxd +16 -0
  372. sage/libs/gsl/transport.pxd +24 -0
  373. sage/libs/gsl/trig.pxd +58 -0
  374. sage/libs/gsl/types.pxd +137 -0
  375. sage/libs/gsl/vector.pxd +101 -0
  376. sage/libs/gsl/vector_complex.pxd +83 -0
  377. sage/libs/gsl/wavelet.pxd +49 -0
  378. sage/libs/gsl/zeta.pxd +28 -0
  379. sage/libs/mpc/__init__.pxd +114 -0
  380. sage/libs/mpc/types.pxd +28 -0
  381. sage/libs/mpfr/__init__.pxd +299 -0
  382. sage/libs/mpfr/types.pxd +26 -0
  383. sage/libs/mpmath/__init__.py +1 -0
  384. sage/libs/mpmath/all.py +27 -0
  385. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  386. sage/libs/mpmath/utils.cpython-314-aarch64-linux-gnu.so +0 -0
  387. sage/libs/mpmath/utils.pxd +4 -0
  388. sage/libs/mpmath/utils.pyx +319 -0
  389. sage/matrix/action.cpython-314-aarch64-linux-gnu.so +0 -0
  390. sage/matrix/action.pxd +26 -0
  391. sage/matrix/action.pyx +596 -0
  392. sage/matrix/all.py +9 -0
  393. sage/matrix/args.cpython-314-aarch64-linux-gnu.so +0 -0
  394. sage/matrix/args.pxd +144 -0
  395. sage/matrix/args.pyx +1668 -0
  396. sage/matrix/benchmark.py +1258 -0
  397. sage/matrix/berlekamp_massey.py +95 -0
  398. sage/matrix/compute_J_ideal.py +926 -0
  399. sage/matrix/constructor.cpython-314-aarch64-linux-gnu.so +0 -0
  400. sage/matrix/constructor.pyx +750 -0
  401. sage/matrix/docs.py +430 -0
  402. sage/matrix/echelon_matrix.cpython-314-aarch64-linux-gnu.so +0 -0
  403. sage/matrix/echelon_matrix.pyx +155 -0
  404. sage/matrix/matrix.pxd +2 -0
  405. sage/matrix/matrix0.cpython-314-aarch64-linux-gnu.so +0 -0
  406. sage/matrix/matrix0.pxd +68 -0
  407. sage/matrix/matrix0.pyx +6324 -0
  408. sage/matrix/matrix1.cpython-314-aarch64-linux-gnu.so +0 -0
  409. sage/matrix/matrix1.pxd +8 -0
  410. sage/matrix/matrix1.pyx +2851 -0
  411. sage/matrix/matrix2.cpython-314-aarch64-linux-gnu.so +0 -0
  412. sage/matrix/matrix2.pxd +25 -0
  413. sage/matrix/matrix2.pyx +20181 -0
  414. sage/matrix/matrix_cdv.cpython-314-aarch64-linux-gnu.so +0 -0
  415. sage/matrix/matrix_cdv.pxd +4 -0
  416. sage/matrix/matrix_cdv.pyx +93 -0
  417. sage/matrix/matrix_complex_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  418. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  419. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  420. sage/matrix/matrix_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  421. sage/matrix/matrix_dense.pxd +5 -0
  422. sage/matrix/matrix_dense.pyx +343 -0
  423. sage/matrix/matrix_domain_dense.pxd +5 -0
  424. sage/matrix/matrix_domain_sparse.pxd +5 -0
  425. sage/matrix/matrix_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  426. sage/matrix/matrix_double_dense.pxd +7 -0
  427. sage/matrix/matrix_double_dense.pyx +3906 -0
  428. sage/matrix/matrix_double_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  429. sage/matrix/matrix_double_sparse.pxd +6 -0
  430. sage/matrix/matrix_double_sparse.pyx +248 -0
  431. sage/matrix/matrix_generic_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  432. sage/matrix/matrix_generic_dense.pxd +7 -0
  433. sage/matrix/matrix_generic_dense.pyx +354 -0
  434. sage/matrix/matrix_generic_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  435. sage/matrix/matrix_generic_sparse.pxd +7 -0
  436. sage/matrix/matrix_generic_sparse.pyx +461 -0
  437. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  438. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  440. sage/matrix/matrix_misc.py +313 -0
  441. sage/matrix/matrix_numpy_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  442. sage/matrix/matrix_numpy_dense.pxd +14 -0
  443. sage/matrix/matrix_numpy_dense.pyx +450 -0
  444. sage/matrix/matrix_numpy_integer_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  445. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  446. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  447. sage/matrix/matrix_polynomial_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  448. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  449. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  450. sage/matrix/matrix_real_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  451. sage/matrix/matrix_real_double_dense.pxd +7 -0
  452. sage/matrix/matrix_real_double_dense.pyx +122 -0
  453. sage/matrix/matrix_space.py +2848 -0
  454. sage/matrix/matrix_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  455. sage/matrix/matrix_sparse.pxd +5 -0
  456. sage/matrix/matrix_sparse.pyx +1222 -0
  457. sage/matrix/matrix_window.cpython-314-aarch64-linux-gnu.so +0 -0
  458. sage/matrix/matrix_window.pxd +37 -0
  459. sage/matrix/matrix_window.pyx +242 -0
  460. sage/matrix/misc_mpfr.cpython-314-aarch64-linux-gnu.so +0 -0
  461. sage/matrix/misc_mpfr.pyx +80 -0
  462. sage/matrix/operation_table.py +1182 -0
  463. sage/matrix/special.py +3666 -0
  464. sage/matrix/strassen.cpython-314-aarch64-linux-gnu.so +0 -0
  465. sage/matrix/strassen.pyx +851 -0
  466. sage/matrix/symplectic_basis.py +541 -0
  467. sage/matrix/template.pxd +6 -0
  468. sage/matrix/tests.py +71 -0
  469. sage/matroids/advanced.py +77 -0
  470. sage/matroids/all.py +13 -0
  471. sage/matroids/basis_exchange_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  472. sage/matroids/basis_exchange_matroid.pxd +96 -0
  473. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  474. sage/matroids/basis_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  475. sage/matroids/basis_matroid.pxd +45 -0
  476. sage/matroids/basis_matroid.pyx +1217 -0
  477. sage/matroids/catalog.py +44 -0
  478. sage/matroids/chow_ring.py +473 -0
  479. sage/matroids/chow_ring_ideal.py +849 -0
  480. sage/matroids/circuit_closures_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  481. sage/matroids/circuit_closures_matroid.pxd +16 -0
  482. sage/matroids/circuit_closures_matroid.pyx +559 -0
  483. sage/matroids/circuits_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  484. sage/matroids/circuits_matroid.pxd +38 -0
  485. sage/matroids/circuits_matroid.pyx +947 -0
  486. sage/matroids/constructor.py +1086 -0
  487. sage/matroids/database_collections.py +365 -0
  488. sage/matroids/database_matroids.py +5338 -0
  489. sage/matroids/dual_matroid.py +583 -0
  490. sage/matroids/extension.cpython-314-aarch64-linux-gnu.so +0 -0
  491. sage/matroids/extension.pxd +34 -0
  492. sage/matroids/extension.pyx +519 -0
  493. sage/matroids/flats_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  494. sage/matroids/flats_matroid.pxd +28 -0
  495. sage/matroids/flats_matroid.pyx +715 -0
  496. sage/matroids/gammoid.py +600 -0
  497. sage/matroids/graphic_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  498. sage/matroids/graphic_matroid.pxd +39 -0
  499. sage/matroids/graphic_matroid.pyx +2024 -0
  500. sage/matroids/lean_matrix.cpython-314-aarch64-linux-gnu.so +0 -0
  501. sage/matroids/lean_matrix.pxd +126 -0
  502. sage/matroids/lean_matrix.pyx +3667 -0
  503. sage/matroids/linear_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  504. sage/matroids/linear_matroid.pxd +180 -0
  505. sage/matroids/linear_matroid.pyx +6649 -0
  506. sage/matroids/matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  507. sage/matroids/matroid.pxd +243 -0
  508. sage/matroids/matroid.pyx +8759 -0
  509. sage/matroids/matroids_catalog.py +190 -0
  510. sage/matroids/matroids_plot_helpers.py +890 -0
  511. sage/matroids/minor_matroid.py +480 -0
  512. sage/matroids/minorfix.h +9 -0
  513. sage/matroids/named_matroids.py +5 -0
  514. sage/matroids/rank_matroid.py +268 -0
  515. sage/matroids/set_system.cpython-314-aarch64-linux-gnu.so +0 -0
  516. sage/matroids/set_system.pxd +38 -0
  517. sage/matroids/set_system.pyx +800 -0
  518. sage/matroids/transversal_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  519. sage/matroids/transversal_matroid.pxd +14 -0
  520. sage/matroids/transversal_matroid.pyx +893 -0
  521. sage/matroids/union_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  522. sage/matroids/union_matroid.pxd +20 -0
  523. sage/matroids/union_matroid.pyx +331 -0
  524. sage/matroids/unpickling.cpython-314-aarch64-linux-gnu.so +0 -0
  525. sage/matroids/unpickling.pyx +843 -0
  526. sage/matroids/utilities.py +809 -0
  527. sage/misc/all__sagemath_modules.py +20 -0
  528. sage/misc/c3.cpython-314-aarch64-linux-gnu.so +0 -0
  529. sage/misc/c3.pyx +238 -0
  530. sage/misc/compat.py +87 -0
  531. sage/misc/element_with_label.py +173 -0
  532. sage/misc/func_persist.py +79 -0
  533. sage/misc/pickle_old.cpython-314-aarch64-linux-gnu.so +0 -0
  534. sage/misc/pickle_old.pyx +19 -0
  535. sage/misc/proof.py +7 -0
  536. sage/misc/replace_dot_all.py +472 -0
  537. sage/misc/sagedoc_conf.py +168 -0
  538. sage/misc/sphinxify.py +167 -0
  539. sage/misc/test_class_pickling.py +85 -0
  540. sage/modules/all.py +42 -0
  541. sage/modules/complex_double_vector.py +25 -0
  542. sage/modules/diamond_cutting.py +380 -0
  543. sage/modules/fg_pid/all.py +1 -0
  544. sage/modules/fg_pid/fgp_element.py +456 -0
  545. sage/modules/fg_pid/fgp_module.py +2091 -0
  546. sage/modules/fg_pid/fgp_morphism.py +550 -0
  547. sage/modules/filtered_vector_space.py +1271 -0
  548. sage/modules/finite_submodule_iter.cpython-314-aarch64-linux-gnu.so +0 -0
  549. sage/modules/finite_submodule_iter.pxd +27 -0
  550. sage/modules/finite_submodule_iter.pyx +452 -0
  551. sage/modules/fp_graded/all.py +1 -0
  552. sage/modules/fp_graded/element.py +346 -0
  553. sage/modules/fp_graded/free_element.py +298 -0
  554. sage/modules/fp_graded/free_homspace.py +53 -0
  555. sage/modules/fp_graded/free_module.py +1060 -0
  556. sage/modules/fp_graded/free_morphism.py +217 -0
  557. sage/modules/fp_graded/homspace.py +563 -0
  558. sage/modules/fp_graded/module.py +1340 -0
  559. sage/modules/fp_graded/morphism.py +1990 -0
  560. sage/modules/fp_graded/steenrod/all.py +1 -0
  561. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  562. sage/modules/fp_graded/steenrod/module.py +477 -0
  563. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  564. sage/modules/fp_graded/steenrod/profile.py +241 -0
  565. sage/modules/free_module.py +8447 -0
  566. sage/modules/free_module_element.cpython-314-aarch64-linux-gnu.so +0 -0
  567. sage/modules/free_module_element.pxd +22 -0
  568. sage/modules/free_module_element.pyx +5445 -0
  569. sage/modules/free_module_homspace.py +369 -0
  570. sage/modules/free_module_integer.py +896 -0
  571. sage/modules/free_module_morphism.py +823 -0
  572. sage/modules/free_module_pseudohomspace.py +352 -0
  573. sage/modules/free_module_pseudomorphism.py +578 -0
  574. sage/modules/free_quadratic_module.py +1706 -0
  575. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  576. sage/modules/matrix_morphism.py +1745 -0
  577. sage/modules/misc.py +103 -0
  578. sage/modules/module_functors.py +192 -0
  579. sage/modules/multi_filtered_vector_space.py +719 -0
  580. sage/modules/ore_module.py +2208 -0
  581. sage/modules/ore_module_element.py +178 -0
  582. sage/modules/ore_module_homspace.py +147 -0
  583. sage/modules/ore_module_morphism.py +968 -0
  584. sage/modules/quotient_module.py +699 -0
  585. sage/modules/real_double_vector.py +22 -0
  586. sage/modules/submodule.py +255 -0
  587. sage/modules/tensor_operations.py +567 -0
  588. sage/modules/torsion_quadratic_module.py +1352 -0
  589. sage/modules/tutorial_free_modules.py +248 -0
  590. sage/modules/vector_complex_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  591. sage/modules/vector_complex_double_dense.pxd +6 -0
  592. sage/modules/vector_complex_double_dense.pyx +117 -0
  593. sage/modules/vector_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  594. sage/modules/vector_double_dense.pxd +6 -0
  595. sage/modules/vector_double_dense.pyx +604 -0
  596. sage/modules/vector_integer_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  597. sage/modules/vector_integer_dense.pxd +15 -0
  598. sage/modules/vector_integer_dense.pyx +361 -0
  599. sage/modules/vector_integer_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  600. sage/modules/vector_integer_sparse.pxd +29 -0
  601. sage/modules/vector_integer_sparse.pyx +406 -0
  602. sage/modules/vector_modn_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  603. sage/modules/vector_modn_dense.pxd +12 -0
  604. sage/modules/vector_modn_dense.pyx +394 -0
  605. sage/modules/vector_modn_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  606. sage/modules/vector_modn_sparse.pxd +21 -0
  607. sage/modules/vector_modn_sparse.pyx +298 -0
  608. sage/modules/vector_numpy_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  609. sage/modules/vector_numpy_dense.pxd +15 -0
  610. sage/modules/vector_numpy_dense.pyx +304 -0
  611. sage/modules/vector_numpy_integer_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  612. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  613. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  614. sage/modules/vector_rational_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  615. sage/modules/vector_rational_dense.pxd +15 -0
  616. sage/modules/vector_rational_dense.pyx +387 -0
  617. sage/modules/vector_rational_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  618. sage/modules/vector_rational_sparse.pxd +30 -0
  619. sage/modules/vector_rational_sparse.pyx +413 -0
  620. sage/modules/vector_real_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  621. sage/modules/vector_real_double_dense.pxd +6 -0
  622. sage/modules/vector_real_double_dense.pyx +126 -0
  623. sage/modules/vector_space_homspace.py +430 -0
  624. sage/modules/vector_space_morphism.py +989 -0
  625. sage/modules/with_basis/all.py +15 -0
  626. sage/modules/with_basis/cell_module.py +494 -0
  627. sage/modules/with_basis/indexed_element.cpython-314-aarch64-linux-gnu.so +0 -0
  628. sage/modules/with_basis/indexed_element.pxd +13 -0
  629. sage/modules/with_basis/indexed_element.pyx +1058 -0
  630. sage/modules/with_basis/invariant.py +1075 -0
  631. sage/modules/with_basis/morphism.py +1636 -0
  632. sage/modules/with_basis/representation.py +2939 -0
  633. sage/modules/with_basis/subquotient.py +685 -0
  634. sage/numerical/all__sagemath_modules.py +6 -0
  635. sage/numerical/gauss_legendre.cpython-314-aarch64-linux-gnu.so +0 -0
  636. sage/numerical/gauss_legendre.pyx +381 -0
  637. sage/numerical/optimize.py +910 -0
  638. sage/probability/all.py +10 -0
  639. sage/probability/probability_distribution.cpython-314-aarch64-linux-gnu.so +0 -0
  640. sage/probability/probability_distribution.pyx +1242 -0
  641. sage/probability/random_variable.py +411 -0
  642. sage/quadratic_forms/all.py +4 -0
  643. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  644. sage/quadratic_forms/binary_qf.py +2042 -0
  645. sage/quadratic_forms/bqf_class_group.py +748 -0
  646. sage/quadratic_forms/constructions.py +93 -0
  647. sage/quadratic_forms/count_local_2.cpython-314-aarch64-linux-gnu.so +0 -0
  648. sage/quadratic_forms/count_local_2.pyx +365 -0
  649. sage/quadratic_forms/extras.py +195 -0
  650. sage/quadratic_forms/quadratic_form.py +1753 -0
  651. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  652. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  653. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-aarch64-linux-gnu.so +0 -0
  654. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  655. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  656. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  657. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  658. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  659. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  660. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  661. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  662. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  663. sage/quadratic_forms/random_quadraticform.py +209 -0
  664. sage/quadratic_forms/ternary.cpython-314-aarch64-linux-gnu.so +0 -0
  665. sage/quadratic_forms/ternary.pyx +1154 -0
  666. sage/quadratic_forms/ternary_qf.py +2027 -0
  667. sage/rings/all__sagemath_modules.py +28 -0
  668. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  669. sage/rings/asymptotic/misc.py +1252 -0
  670. sage/rings/cc.py +4 -0
  671. sage/rings/cfinite_sequence.py +1306 -0
  672. sage/rings/complex_conversion.cpython-314-aarch64-linux-gnu.so +0 -0
  673. sage/rings/complex_conversion.pxd +8 -0
  674. sage/rings/complex_conversion.pyx +23 -0
  675. sage/rings/complex_double.cpython-314-aarch64-linux-gnu.so +0 -0
  676. sage/rings/complex_double.pxd +21 -0
  677. sage/rings/complex_double.pyx +2654 -0
  678. sage/rings/complex_mpc.cpython-314-aarch64-linux-gnu.so +0 -0
  679. sage/rings/complex_mpc.pxd +21 -0
  680. sage/rings/complex_mpc.pyx +2576 -0
  681. sage/rings/complex_mpfr.cpython-314-aarch64-linux-gnu.so +0 -0
  682. sage/rings/complex_mpfr.pxd +18 -0
  683. sage/rings/complex_mpfr.pyx +3602 -0
  684. sage/rings/derivation.py +2334 -0
  685. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  686. sage/rings/finite_rings/maps_finite_field.py +191 -0
  687. sage/rings/function_field/all__sagemath_modules.py +8 -0
  688. sage/rings/function_field/derivations.py +102 -0
  689. sage/rings/function_field/derivations_rational.py +132 -0
  690. sage/rings/function_field/differential.py +853 -0
  691. sage/rings/function_field/divisor.py +1107 -0
  692. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  693. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  694. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  695. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  696. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  697. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  698. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  699. sage/rings/function_field/hermite_form_polynomial.cpython-314-aarch64-linux-gnu.so +0 -0
  700. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  701. sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-linux-gnu.so +0 -0
  702. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  703. sage/rings/invariants/all.py +4 -0
  704. sage/rings/invariants/invariant_theory.py +4597 -0
  705. sage/rings/invariants/reconstruction.py +395 -0
  706. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  707. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  708. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-aarch64-linux-gnu.so +0 -0
  709. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  711. sage/rings/polynomial/ore_function_element.py +952 -0
  712. sage/rings/polynomial/ore_function_field.py +1028 -0
  713. sage/rings/polynomial/ore_polynomial_element.cpython-314-aarch64-linux-gnu.so +0 -0
  714. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  715. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  716. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  717. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  718. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  719. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  720. sage/rings/polynomial/skew_polynomial_element.cpython-314-aarch64-linux-gnu.so +0 -0
  721. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  722. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  723. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-aarch64-linux-gnu.so +0 -0
  724. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  726. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-aarch64-linux-gnu.so +0 -0
  727. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  729. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  730. sage/rings/real_double_element_gsl.cpython-314-aarch64-linux-gnu.so +0 -0
  731. sage/rings/real_double_element_gsl.pxd +8 -0
  732. sage/rings/real_double_element_gsl.pyx +794 -0
  733. sage/rings/real_field.py +58 -0
  734. sage/rings/real_mpfr.cpython-314-aarch64-linux-gnu.so +0 -0
  735. sage/rings/real_mpfr.pxd +29 -0
  736. sage/rings/real_mpfr.pyx +6122 -0
  737. sage/rings/ring_extension.cpython-314-aarch64-linux-gnu.so +0 -0
  738. sage/rings/ring_extension.pxd +42 -0
  739. sage/rings/ring_extension.pyx +2779 -0
  740. sage/rings/ring_extension_conversion.cpython-314-aarch64-linux-gnu.so +0 -0
  741. sage/rings/ring_extension_conversion.pxd +16 -0
  742. sage/rings/ring_extension_conversion.pyx +462 -0
  743. sage/rings/ring_extension_element.cpython-314-aarch64-linux-gnu.so +0 -0
  744. sage/rings/ring_extension_element.pxd +21 -0
  745. sage/rings/ring_extension_element.pyx +1635 -0
  746. sage/rings/ring_extension_homset.py +64 -0
  747. sage/rings/ring_extension_morphism.cpython-314-aarch64-linux-gnu.so +0 -0
  748. sage/rings/ring_extension_morphism.pxd +35 -0
  749. sage/rings/ring_extension_morphism.pyx +920 -0
  750. sage/schemes/all__sagemath_modules.py +1 -0
  751. sage/schemes/projective/all__sagemath_modules.py +1 -0
  752. sage/schemes/projective/coherent_sheaf.py +300 -0
  753. sage/schemes/projective/cohomology.py +510 -0
  754. sage/stats/all.py +15 -0
  755. sage/stats/basic_stats.py +489 -0
  756. sage/stats/distributions/all.py +7 -0
  757. sage/stats/distributions/catalog.py +34 -0
  758. sage/stats/distributions/dgs.h +50 -0
  759. sage/stats/distributions/dgs.pxd +111 -0
  760. sage/stats/distributions/dgs_bern.h +400 -0
  761. sage/stats/distributions/dgs_gauss.h +614 -0
  762. sage/stats/distributions/dgs_misc.h +104 -0
  763. sage/stats/distributions/discrete_gaussian_integer.cpython-314-aarch64-linux-gnu.so +0 -0
  764. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  765. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  766. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  767. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  768. sage/stats/hmm/all.py +15 -0
  769. sage/stats/hmm/chmm.cpython-314-aarch64-linux-gnu.so +0 -0
  770. sage/stats/hmm/chmm.pyx +1595 -0
  771. sage/stats/hmm/distributions.cpython-314-aarch64-linux-gnu.so +0 -0
  772. sage/stats/hmm/distributions.pxd +29 -0
  773. sage/stats/hmm/distributions.pyx +531 -0
  774. sage/stats/hmm/hmm.cpython-314-aarch64-linux-gnu.so +0 -0
  775. sage/stats/hmm/hmm.pxd +17 -0
  776. sage/stats/hmm/hmm.pyx +1388 -0
  777. sage/stats/hmm/util.cpython-314-aarch64-linux-gnu.so +0 -0
  778. sage/stats/hmm/util.pxd +7 -0
  779. sage/stats/hmm/util.pyx +165 -0
  780. sage/stats/intlist.cpython-314-aarch64-linux-gnu.so +0 -0
  781. sage/stats/intlist.pxd +14 -0
  782. sage/stats/intlist.pyx +588 -0
  783. sage/stats/r.py +49 -0
  784. sage/stats/time_series.cpython-314-aarch64-linux-gnu.so +0 -0
  785. sage/stats/time_series.pxd +6 -0
  786. sage/stats/time_series.pyx +2546 -0
  787. sage/tensor/all.py +2 -0
  788. sage/tensor/modules/all.py +8 -0
  789. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  790. sage/tensor/modules/comp.py +5598 -0
  791. sage/tensor/modules/ext_pow_free_module.py +824 -0
  792. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  793. sage/tensor/modules/format_utilities.py +333 -0
  794. sage/tensor/modules/free_module_alt_form.py +858 -0
  795. sage/tensor/modules/free_module_automorphism.py +1207 -0
  796. sage/tensor/modules/free_module_basis.py +1074 -0
  797. sage/tensor/modules/free_module_element.py +284 -0
  798. sage/tensor/modules/free_module_homset.py +652 -0
  799. sage/tensor/modules/free_module_linear_group.py +564 -0
  800. sage/tensor/modules/free_module_morphism.py +1581 -0
  801. sage/tensor/modules/free_module_tensor.py +3289 -0
  802. sage/tensor/modules/reflexive_module.py +386 -0
  803. sage/tensor/modules/tensor_free_module.py +780 -0
  804. sage/tensor/modules/tensor_free_submodule.py +538 -0
  805. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  806. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,1227 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.graphs sage.modules
3
+ """
4
+ Integrable representations of affine Lie algebras
5
+ """
6
+ # ***************************************************************************
7
+ # Copyright (C) 2014, 2105 Daniel Bump <bump at match.stanford.edu>
8
+ # Travis Scrimshaw <tscrim at ucdavis.edu>
9
+ # Valentin Buciumas <buciumas at stanford.edu>
10
+ #
11
+ # Distributed under the terms of the GNU General Public License (GPL)
12
+ # https://www.gnu.org/licenses/
13
+ # ***************************************************************************
14
+ from sage.structure.unique_representation import UniqueRepresentation
15
+ from sage.structure.category_object import CategoryObject
16
+ from sage.categories.modules import Modules
17
+ from sage.rings.integer_ring import ZZ
18
+ from sage.misc.cachefunc import cached_method
19
+ from sage.matrix.constructor import Matrix
20
+ from sage.sets.recursively_enumerated_set import RecursivelyEnumeratedSet
21
+ from sage.combinat.root_system.weyl_characters import WeylCharacterRing
22
+
23
+
24
+ # TODO: Make this a proper parent and implement actions
25
+ class IntegrableRepresentation(UniqueRepresentation, CategoryObject):
26
+ r"""
27
+ An irreducible integrable highest weight representation of
28
+ an affine Lie algebra.
29
+
30
+ INPUT:
31
+
32
+ - ``Lam`` -- a dominant weight in an extended weight lattice
33
+ of affine type
34
+
35
+ REFERENCES:
36
+
37
+ - [Ka1990]_
38
+
39
+ .. [KMPS] Kass, Moody, Patera and Slansky, *Affine Lie algebras,
40
+ weight multiplicities, and branching rules*. Vols. 1, 2. University
41
+ of California Press, Berkeley, CA, 1990.
42
+
43
+ .. [KacPeterson] Kac and Peterson. *Infinite-dimensional Lie algebras,
44
+ theta functions and modular forms*. Adv. in Math. 53 (1984),
45
+ no. 2, 125-264.
46
+
47
+ .. [Carter] Carter, *Lie algebras of finite and affine type*. Cambridge
48
+ University Press, 2005
49
+
50
+ If `\Lambda` is a dominant integral weight for an affine root system,
51
+ there exists a unique integrable representation `V=V_\Lambda` of highest
52
+ weight `\Lambda`. If `\mu` is another weight, let `m(\mu)` denote the
53
+ multiplicity of the weight `\mu` in this representation. The set
54
+ `\operatorname{supp}(V)` of `\mu` such that `m(\mu) > 0` is contained in the
55
+ paraboloid
56
+
57
+ .. MATH::
58
+
59
+ (\Lambda+\rho | \Lambda+\rho) - (\mu+\rho | \mu+\rho) \geq 0
60
+
61
+ where `(\, | \,)` is the invariant inner product on the weight
62
+ lattice and `\rho` is the Weyl vector. Moreover if `m(\mu)>0`
63
+ then `\mu\in\operatorname{supp}(V)` differs from `\Lambda` by an element
64
+ of the root lattice ([Ka1990]_, Propositions 11.3 and 11.4).
65
+
66
+ Let `\delta` be the nullroot, which is the lowest positive imaginary
67
+ root. Then by [Ka1990]_, Proposition 11.3 or Corollary 11.9, for fixed `\mu`
68
+ the function `m(\mu - k\delta)` is a monotone increasing function of
69
+ `k`. It is useful to take `\mu` to be such that this function is nonzero
70
+ if and only if `k \geq 0`. Therefore we make the following definition. If
71
+ `\mu` is such that `m(\mu) \neq 0` but `m(\mu + \delta) = 0` then `\mu` is
72
+ called *maximal*.
73
+
74
+ Since `\delta` is fixed under the action of the affine Weyl group,
75
+ and since the weight multiplicities are Weyl group invariant, the
76
+ function `k \mapsto m(\mu - k \delta)` is unchanged if `\mu` is replaced
77
+ by an equivalent weight. Therefore in tabulating these functions, we may
78
+ assume that `\mu` is dominant. There are only a finite number of dominant
79
+ maximal weights.
80
+
81
+ Since every nonzero weight multiplicity appears in the string
82
+ `\mu - k\delta` for one of the finite number of dominant maximal
83
+ weights `\mu`, it is important to be able to compute these. We may
84
+ do this as follows.
85
+
86
+ EXAMPLES::
87
+
88
+ sage: Lambda = RootSystem(['A',3,1]).weight_lattice(extended=true).fundamental_weights()
89
+ sage: IntegrableRepresentation(Lambda[1]+Lambda[2]+Lambda[3]).print_strings()
90
+ 2*Lambda[0] + Lambda[2]: 4 31 161 665 2380 7658 22721 63120 166085 417295 1007601 2349655
91
+ Lambda[0] + 2*Lambda[1]: 2 18 99 430 1593 5274 16005 45324 121200 308829 754884 1779570
92
+ Lambda[0] + 2*Lambda[3]: 2 18 99 430 1593 5274 16005 45324 121200 308829 754884 1779570
93
+ Lambda[1] + Lambda[2] + Lambda[3]: 1 10 60 274 1056 3601 11199 32354 88009 227555 563390 1343178
94
+ 3*Lambda[2] - delta: 3 21 107 450 1638 5367 16194 45687 121876 310056 757056 1783324
95
+ sage: Lambda = RootSystem(['D',4,1]).weight_lattice(extended=true).fundamental_weights()
96
+ sage: IntegrableRepresentation(Lambda[0]+Lambda[1]).print_strings() # long time
97
+ Lambda[0] + Lambda[1]: 1 10 62 293 1165 4097 13120 38997 109036 289575 735870 1799620
98
+ Lambda[3] + Lambda[4] - delta: 3 25 136 590 2205 7391 22780 65613 178660 463842 1155717 2777795
99
+
100
+ In this example, we construct the extended weight lattice of Cartan
101
+ type `A_3^{(1)}`, then define ``Lambda`` to be the fundamental
102
+ weights `(\Lambda_i)_{i \in I}`. We find there are 5 maximal
103
+ dominant weights in irreducible representation of highest weight
104
+ `\Lambda_1 + \Lambda_2 + \Lambda_3`, and we determine their strings.
105
+
106
+ It was shown in [KacPeterson]_ that each string is the set of Fourier
107
+ coefficients of a modular form.
108
+
109
+ Every weight `\mu` such that the weight multiplicity `m(\mu)` is
110
+ nonzero has the form
111
+
112
+ .. MATH::
113
+
114
+ \Lambda - n_0 \alpha_0 - n_1 \alpha_1 - \cdots,
115
+
116
+ where the `n_i` are nonnegative integers. This is represented internally
117
+ as a tuple `(n_0, n_1, n_2, \ldots)`. If you want an individual
118
+ multiplicity you use the method :meth:`m` and supply it with this tuple::
119
+
120
+ sage: Lambda = RootSystem(['C',2,1]).weight_lattice(extended=true).fundamental_weights()
121
+ sage: V = IntegrableRepresentation(2*Lambda[0]); V
122
+ Integrable representation of ['C', 2, 1] with highest weight 2*Lambda[0]
123
+ sage: V.m((3,5,3))
124
+ 18
125
+
126
+ The :class:`IntegrableRepresentation` class has methods :meth:`to_weight`
127
+ and :meth:`from_weight` to convert between this internal representation
128
+ and the weight lattice::
129
+
130
+ sage: delta = V.weight_lattice().null_root()
131
+ sage: V.to_weight((4,3,2))
132
+ -3*Lambda[0] + 6*Lambda[1] - Lambda[2] - 4*delta
133
+ sage: V.from_weight(-3*Lambda[0] + 6*Lambda[1] - Lambda[2] - 4*delta)
134
+ (4, 3, 2)
135
+
136
+ To get more values, use the depth parameter::
137
+
138
+ sage: L0 = RootSystem(["A",1,1]).weight_lattice(extended=true).fundamental_weight(0); L0
139
+ Lambda[0]
140
+ sage: IntegrableRepresentation(4*L0).print_strings(depth=20)
141
+ 4*Lambda[0]: 1 1 3 6 13 23 44 75 131 215 354 561 889 1368 2097 3153 4712 6936 10151 14677
142
+ 2*Lambda[0] + 2*Lambda[1] - delta: 1 2 5 10 20 36 66 112 190 310 501 788 1230 1880 2850 4256 6303 9222 13396 19262
143
+ 4*Lambda[1] - 2*delta: 1 2 6 11 23 41 75 126 215 347 561 878 1368 2082 3153 4690 6936 10121 14677 21055
144
+
145
+ An example in type `C_2^{(1)}`::
146
+
147
+ sage: Lambda = RootSystem(['C',2,1]).weight_lattice(extended=true).fundamental_weights()
148
+ sage: V = IntegrableRepresentation(2*Lambda[0])
149
+ sage: V.print_strings() # long time
150
+ 2*Lambda[0]: 1 2 9 26 77 194 477 1084 2387 5010 10227 20198
151
+ Lambda[0] + Lambda[2] - delta: 1 5 18 55 149 372 872 1941 4141 8523 17005 33019
152
+ 2*Lambda[1] - delta: 1 4 15 44 122 304 721 1612 3469 7176 14414 28124
153
+ 2*Lambda[2] - 2*delta: 2 7 26 72 194 467 1084 2367 5010 10191 20198 38907
154
+
155
+ Examples for twisted affine types::
156
+
157
+ sage: Lambda = RootSystem(["A",2,2]).weight_lattice(extended=True).fundamental_weights()
158
+ sage: IntegrableRepresentation(Lambda[0]).strings()
159
+ {Lambda[0]: [1, 1, 2, 3, 5, 7, 11, 15, 22, 30, 42, 56]}
160
+ sage: Lambda = RootSystem(['G',2,1]).dual.weight_lattice(extended=true).fundamental_weights()
161
+ sage: V = IntegrableRepresentation(Lambda[0]+Lambda[1]+Lambda[2])
162
+ sage: V.print_strings() # long time
163
+ 6*Lambdacheck[0]: 4 28 100 320 944 2460 6064 14300 31968 69020 144676 293916
164
+ 3*Lambdacheck[0] + Lambdacheck[1]: 2 16 58 192 588 1568 3952 9520 21644 47456 100906 207536
165
+ 4*Lambdacheck[0] + Lambdacheck[2]: 4 22 84 276 800 2124 5288 12470 28116 61056 128304 261972
166
+ 2*Lambdacheck[1] - deltacheck: 2 8 32 120 354 980 2576 6244 14498 32480 69776 145528
167
+ Lambdacheck[0] + Lambdacheck[1] + Lambdacheck[2]: 1 6 26 94 294 832 2184 5388 12634 28390 61488 128976
168
+ 2*Lambdacheck[0] + 2*Lambdacheck[2]: 2 12 48 164 492 1344 3428 8256 18960 41844 89208 184512
169
+ 3*Lambdacheck[2] - deltacheck: 4 16 60 208 592 1584 4032 9552 21728 47776 101068 207888
170
+ sage: Lambda = RootSystem(['A',6,2]).weight_lattice(extended=true).fundamental_weights()
171
+ sage: V = IntegrableRepresentation(Lambda[0]+2*Lambda[1])
172
+ sage: V.print_strings() # long time
173
+ 5*Lambda[0]: 3 42 378 2508 13707 64650 272211 1045470 3721815 12425064 39254163 118191378
174
+ 3*Lambda[0] + Lambda[2]: 1 23 234 1690 9689 47313 204247 800029 2893198 9786257 31262198 95035357
175
+ Lambda[0] + 2*Lambda[1]: 1 14 154 1160 6920 34756 153523 612354 2248318 7702198 24875351 76341630
176
+ Lambda[0] + Lambda[1] + Lambda[3] - 2*delta: 6 87 751 4779 25060 113971 464842 1736620 6034717 19723537 61152367 181068152
177
+ Lambda[0] + 2*Lambda[2] - 2*delta: 3 54 499 3349 18166 84836 353092 1341250 4725259 15625727 48938396 146190544
178
+ Lambda[0] + 2*Lambda[3] - 4*delta: 15 195 1539 9186 45804 200073 789201 2866560 9723582 31120281 94724550 275919741
179
+ """
180
+
181
+ def __init__(self, Lam):
182
+ """
183
+ Initialize ``self``.
184
+
185
+ EXAMPLES::
186
+
187
+ sage: Lambda = RootSystem(['A',3,1]).weight_lattice(extended=true).fundamental_weights()
188
+ sage: V = IntegrableRepresentation(Lambda[1]+Lambda[2]+Lambda[3])
189
+
190
+ Some methods required by the category are not implemented::
191
+
192
+ sage: TestSuite(V).run() # known bug (#21387)
193
+ """
194
+ CategoryObject.__init__(self, base=ZZ, category=Modules(ZZ))
195
+
196
+ self._Lam = Lam
197
+ self._P = Lam.parent()
198
+ self._Q = self._P.root_system.root_lattice()
199
+
200
+ # Store some extra simple computations that appear in tight loops
201
+ self._Lam_rho = self._Lam + self._P.rho()
202
+
203
+ self._cartan_matrix = self._P.root_system.cartan_matrix()
204
+ self._cartan_type = self._P.root_system.cartan_type()
205
+
206
+ self._classical_rank = self._cartan_type.classical().rank()
207
+ self._index_set = self._P.index_set()
208
+ self._index_set_classical = self._cartan_type.classical().index_set()
209
+ self._cminv = self._cartan_type.classical().cartan_matrix().inverse()
210
+
211
+ self._ddict = {}
212
+ self._mdict = {tuple(0 for i in self._index_set): 1}
213
+ # Coerce a classical root into the root lattice Q
214
+ from_cl_root = lambda h: self._Q._from_dict(h._monomial_coefficients)
215
+ self._classical_roots = [from_cl_root(al)
216
+ for al in self._Q.classical().roots()]
217
+ self._classical_positive_roots = [from_cl_root(al)
218
+ for al in self._Q.classical().positive_roots()]
219
+ self._a = self._cartan_type.a() # This is not cached
220
+ self._ac = self._cartan_type.dual().a() # This is not cached
221
+ self._eps = {i: self._a[i] / self._ac[i] for i in self._index_set}
222
+ E = Matrix.diagonal([self._eps[i] for i in self._index_set_classical])
223
+ self._ip = (self._cartan_type.classical().cartan_matrix()*E).inverse()
224
+
225
+ # Extra data for the twisted cases
226
+ if not self._cartan_type.is_untwisted_affine():
227
+ self._classical_short_roots = frozenset(al for al in self._classical_roots
228
+ if self._inner_qq(al,al) == 2)
229
+
230
+ def highest_weight(self):
231
+ """
232
+ Return the highest weight of ``self``.
233
+
234
+ EXAMPLES::
235
+
236
+ sage: Lambda = RootSystem(['D',4,1]).weight_lattice(extended=true).fundamental_weights()
237
+ sage: IntegrableRepresentation(Lambda[0]+2*Lambda[2]).highest_weight()
238
+ Lambda[0] + 2*Lambda[2]
239
+ """
240
+ return self._Lam
241
+
242
+ def weight_lattice(self):
243
+ """
244
+ Return the weight lattice associated to ``self``.
245
+
246
+ EXAMPLES::
247
+
248
+ sage: V=IntegrableRepresentation(RootSystem(['E',6,1]).weight_lattice(extended=true).fundamental_weight(0))
249
+ sage: V.weight_lattice()
250
+ Extended weight lattice of the Root system of type ['E', 6, 1]
251
+ """
252
+ return self._P
253
+
254
+ def root_lattice(self):
255
+ """
256
+ Return the root lattice associated to ``self``.
257
+
258
+ EXAMPLES::
259
+
260
+ sage: V=IntegrableRepresentation(RootSystem(['F',4,1]).weight_lattice(extended=true).fundamental_weight(0))
261
+ sage: V.root_lattice()
262
+ Root lattice of the Root system of type ['F', 4, 1]
263
+ """
264
+ return self._Q
265
+
266
+ @cached_method
267
+ def level(self):
268
+ r"""
269
+ Return the level of ``self``.
270
+
271
+ The level of a highest weight representation `V_{\Lambda}` is
272
+ defined as `(\Lambda | \delta)` See [Ka1990]_ section 12.4.
273
+
274
+ EXAMPLES::
275
+
276
+ sage: Lambda = RootSystem(['G',2,1]).weight_lattice(extended=true).fundamental_weights()
277
+ sage: [IntegrableRepresentation(Lambda[i]).level() for i in [0,1,2]]
278
+ [1, 1, 2]
279
+ """
280
+ return ZZ(self._inner_pq(self._Lam, self._Q.null_root()))
281
+
282
+ @cached_method
283
+ def coxeter_number(self):
284
+ """
285
+ Return the Coxeter number of the Cartan type of ``self``.
286
+
287
+ The Coxeter number is defined in [Ka1990]_ Chapter 6, and commonly
288
+ denoted `h`.
289
+
290
+ EXAMPLES::
291
+
292
+ sage: Lambda = RootSystem(['F',4,1]).weight_lattice(extended=true).fundamental_weights()
293
+ sage: V = IntegrableRepresentation(Lambda[0])
294
+ sage: V.coxeter_number()
295
+ 12
296
+ """
297
+ return sum(self._a)
298
+
299
+ @cached_method
300
+ def dual_coxeter_number(self):
301
+ r"""
302
+ Return the dual Coxeter number of the Cartan type of ``self``.
303
+
304
+ The dual Coxeter number is defined in [Ka1990]_ Chapter 6, and commonly
305
+ denoted `h^{\vee}`.
306
+
307
+ EXAMPLES::
308
+
309
+ sage: Lambda = RootSystem(['F',4,1]).weight_lattice(extended=true).fundamental_weights()
310
+ sage: V = IntegrableRepresentation(Lambda[0])
311
+ sage: V.dual_coxeter_number()
312
+ 9
313
+ """
314
+ return sum(self._ac)
315
+
316
+ def _repr_(self):
317
+ """
318
+ Return a string representation of ``self``.
319
+
320
+ EXAMPLES::
321
+
322
+ sage: Lambda = RootSystem(['F',4,1]).weight_lattice(extended=true).fundamental_weights()
323
+ sage: IntegrableRepresentation(Lambda[0])
324
+ Integrable representation of ['F', 4, 1] with highest weight Lambda[0]
325
+ """
326
+ return "Integrable representation of %s with highest weight %s" % (self._cartan_type, self._Lam)
327
+
328
+ def _latex_(self):
329
+ r"""
330
+ Return a latex representation of ``self``.
331
+
332
+ EXAMPLES::
333
+
334
+ sage: Lambda = RootSystem(['C',3,1]).weight_lattice(extended=true).fundamental_weights()
335
+ sage: V = IntegrableRepresentation(Lambda[0]+2*Lambda[3])
336
+ sage: latex(V)
337
+ V_{\Lambda_{0} + 2 \Lambda_{3}}
338
+ """
339
+ return "V_{{{}}}".format(self._Lam._latex_())
340
+
341
+ def cartan_type(self):
342
+ """
343
+ Return the Cartan type of ``self``.
344
+
345
+ EXAMPLES::
346
+
347
+ sage: Lambda = RootSystem(['F',4,1]).weight_lattice(extended=true).fundamental_weights()
348
+ sage: V = IntegrableRepresentation(Lambda[0])
349
+ sage: V.cartan_type()
350
+ ['F', 4, 1]
351
+ """
352
+ return self._cartan_type
353
+
354
+ def _inner_qq(self, qelt1, qelt2):
355
+ """
356
+ Symmetric form between two elements of the root lattice
357
+ associated to ``self``.
358
+
359
+ EXAMPLES::
360
+
361
+ sage: P = RootSystem(['F',4,1]).weight_lattice(extended=true)
362
+ sage: Lambda = P.fundamental_weights()
363
+ sage: V = IntegrableRepresentation(Lambda[0])
364
+ sage: alpha = V.root_lattice().simple_roots()
365
+ sage: Matrix([[V._inner_qq(alpha[i], alpha[j]) for j in V._index_set] for i in V._index_set])
366
+ [ 2 -1 0 0 0]
367
+ [ -1 2 -1 0 0]
368
+ [ 0 -1 2 -1 0]
369
+ [ 0 0 -1 1 -1/2]
370
+ [ 0 0 0 -1/2 1]
371
+
372
+ .. WARNING::
373
+
374
+ If ``qelt1`` or ``qelt1`` accidentally gets coerced into
375
+ the extended weight lattice, this will return an answer,
376
+ and it will be wrong. To make this code robust, parents
377
+ should be checked. This is not done since in the application
378
+ the parents are known, so checking would unnecessarily slow
379
+ us down.
380
+ """
381
+ mc1 = qelt1.monomial_coefficients()
382
+ mc2 = qelt2.monomial_coefficients()
383
+ zero = ZZ.zero()
384
+ return sum(mc1.get(i, zero) * mc2.get(j, zero)
385
+ * self._cartan_matrix[i,j] / self._eps[i]
386
+ for i in self._index_set for j in self._index_set)
387
+
388
+ def _inner_pq(self, pelt, qelt):
389
+ """
390
+ Symmetric form between an element of the weight and root lattices
391
+ associated to ``self``.
392
+
393
+ .. WARNING::
394
+
395
+ If ``qelt`` accidentally gets coerced into the extended weight
396
+ lattice, this will return an answer, and it will be wrong. To make
397
+ this code robust, parents should be checked. This is not done
398
+ since in the application the parents are known, so checking would
399
+ unnecessarily slow us down.
400
+
401
+ EXAMPLES::
402
+
403
+ sage: P = RootSystem(['F',4,1]).weight_lattice(extended=true)
404
+ sage: Lambda = P.fundamental_weights()
405
+ sage: V = IntegrableRepresentation(Lambda[0])
406
+ sage: alpha = V.root_lattice().simple_roots()
407
+ sage: Matrix([[V._inner_pq(P(alpha[i]), alpha[j]) for j in V._index_set] for i in V._index_set])
408
+ [ 2 -1 0 0 0]
409
+ [ -1 2 -1 0 0]
410
+ [ 0 -1 2 -1 0]
411
+ [ 0 0 -1 1 -1/2]
412
+ [ 0 0 0 -1/2 1]
413
+ sage: P = RootSystem(['G',2,1]).weight_lattice(extended=true)
414
+ sage: P = RootSystem(['G',2,1]).weight_lattice(extended=true)
415
+ sage: Lambda = P.fundamental_weights()
416
+ sage: V = IntegrableRepresentation(Lambda[0])
417
+ sage: alpha = V.root_lattice().simple_roots()
418
+ sage: Matrix([[V._inner_pq(Lambda[i],alpha[j]) for j in V._index_set] for i in V._index_set])
419
+ [ 1 0 0]
420
+ [ 0 1/3 0]
421
+ [ 0 0 1]
422
+ """
423
+ mcp = pelt.monomial_coefficients()
424
+ mcq = qelt.monomial_coefficients()
425
+ zero = ZZ.zero()
426
+ return sum(mcp.get(i, zero) * mcq[i] / self._eps[i] for i in mcq)
427
+
428
+ def _inner_pp(self, pelt1, pelt2):
429
+ """
430
+ Symmetric form between two elements of the weight lattice
431
+ associated to ``self``.
432
+
433
+ EXAMPLES::
434
+
435
+ sage: P = RootSystem(['G',2,1]).weight_lattice(extended=true)
436
+ sage: Lambda = P.fundamental_weights()
437
+ sage: V = IntegrableRepresentation(Lambda[0])
438
+ sage: alpha = V.root_lattice().simple_roots()
439
+ sage: Matrix([[V._inner_pp(Lambda[i],P(alpha[j])) for j in V._index_set] for i in V._index_set])
440
+ [ 1 0 0]
441
+ [ 0 1/3 0]
442
+ [ 0 0 1]
443
+ sage: Matrix([[V._inner_pp(Lambda[i],Lambda[j]) for j in V._index_set] for i in V._index_set])
444
+ [ 0 0 0]
445
+ [ 0 2/3 1]
446
+ [ 0 1 2]
447
+ """
448
+ mc1 = pelt1.monomial_coefficients()
449
+ mc2 = pelt2.monomial_coefficients()
450
+ zero = ZZ.zero()
451
+ mc1d = mc1.get('delta', zero)
452
+ mc2d = mc2.get('delta', zero)
453
+ return sum(mc1.get(i,zero) * self._ac[i] * mc2d
454
+ + mc2.get(i,zero) * self._ac[i] * mc1d
455
+ for i in self._index_set) \
456
+ + sum(mc1.get(i,zero) * mc2.get(j,zero) * self._ip[ii,ij]
457
+ for ii, i in enumerate(self._index_set_classical)
458
+ for ij, j in enumerate(self._index_set_classical))
459
+
460
+ def to_weight(self, n):
461
+ r"""
462
+ Return the weight associated to the tuple ``n`` in ``self``.
463
+
464
+ If ``n`` is the tuple `(n_1, n_2, \ldots)`, then the associated
465
+ weight is `\Lambda - \sum_i n_i \alpha_i`, where `\Lambda`
466
+ is the weight of the representation.
467
+
468
+ INPUT:
469
+
470
+ - ``n`` -- tuple representing a weight
471
+
472
+ EXAMPLES::
473
+
474
+ sage: Lambda = RootSystem(['A',2,1]).weight_lattice(extended=true).fundamental_weights()
475
+ sage: V = IntegrableRepresentation(2*Lambda[2])
476
+ sage: V.to_weight((1,0,0))
477
+ -2*Lambda[0] + Lambda[1] + 3*Lambda[2] - delta
478
+ """
479
+ alpha = self._P.simple_roots()
480
+ I = self._index_set
481
+ return self._Lam - self._P.sum(val * alpha[I[i]]
482
+ for i,val in enumerate(n))
483
+
484
+ def _from_weight_helper(self, mu, check=False):
485
+ r"""
486
+ Return the coefficients of a tuple of the weight ``mu`` expressed
487
+ in terms of the simple roots in ``self``.
488
+
489
+ The tuple ``n`` is defined as the tuple `(n_0, n_1, \ldots)`
490
+ such that `\mu = \sum_{i \in I} n_i \alpha_i`.
491
+
492
+ INPUT:
493
+
494
+ - ``mu`` -- an element in the root lattice
495
+
496
+ .. TODO::
497
+
498
+ Implement this as a section map of the inverse of the
499
+ coercion from `Q \to P`.
500
+
501
+ EXAMPLES::
502
+
503
+ sage: Lambda = RootSystem(['A',2,1]).weight_lattice(extended=true).fundamental_weights()
504
+ sage: V = IntegrableRepresentation(2*Lambda[2])
505
+ sage: V.to_weight((1,0,0))
506
+ -2*Lambda[0] + Lambda[1] + 3*Lambda[2] - delta
507
+ sage: delta = V.weight_lattice().null_root()
508
+ sage: V._from_weight_helper(2*Lambda[0] - Lambda[1] - 1*Lambda[2] + delta)
509
+ (1, 0, 0)
510
+ """
511
+ mu = self._P(mu)
512
+ zero = ZZ.zero()
513
+ n0 = mu.monomial_coefficients().get('delta', zero)
514
+ mu0 = mu - n0 * self._P.simple_root(self._cartan_type.special_node())
515
+ ret = [n0] # This should be in ZZ because it is in the weight lattice
516
+ mc_mu0 = mu0.monomial_coefficients()
517
+ for ii, i in enumerate(self._index_set_classical):
518
+ # -1 for indexing
519
+ ret.append( sum(self._cminv[ii,ij] * mc_mu0.get(j, zero)
520
+ for ij, j in enumerate(self._index_set_classical)) )
521
+ if check:
522
+ return all(x in ZZ for x in ret)
523
+ else:
524
+ return tuple(ZZ(x) for x in ret)
525
+
526
+ def from_weight(self, mu):
527
+ r"""
528
+ Return the tuple `(n_0, n_1, ...)`` such that ``mu`` equals
529
+ `\Lambda - \sum_{i \in I} n_i \alpha_i` in ``self``, where `\Lambda`
530
+ is the highest weight of ``self``.
531
+
532
+ EXAMPLES::
533
+
534
+ sage: Lambda = RootSystem(['A',2,1]).weight_lattice(extended=true).fundamental_weights()
535
+ sage: V = IntegrableRepresentation(2*Lambda[2])
536
+ sage: V.to_weight((1,0,0))
537
+ -2*Lambda[0] + Lambda[1] + 3*Lambda[2] - delta
538
+ sage: delta = V.weight_lattice().null_root()
539
+ sage: V.from_weight(-2*Lambda[0] + Lambda[1] + 3*Lambda[2] - delta)
540
+ (1, 0, 0)
541
+ """
542
+ return self._from_weight_helper(self._Lam - mu)
543
+
544
+ def s(self, n, i):
545
+ """
546
+ Return the action of the ``i``-th simple reflection on the
547
+ internal representation of weights by tuples ``n`` in ``self``.
548
+
549
+ EXAMPLES::
550
+
551
+ sage: V = IntegrableRepresentation(RootSystem(['A',2,1]).weight_lattice(extended=true).fundamental_weight(0))
552
+ sage: [V.s((0,0,0),i) for i in V._index_set]
553
+ [(1, 0, 0), (0, 0, 0), (0, 0, 0)]
554
+ """
555
+ ret = list(n) # This makes a copy
556
+ ret[i] += self._Lam._monomial_coefficients.get(i, ZZ.zero())
557
+ ret[i] -= sum(val * self._cartan_matrix[i,j] for j,val in enumerate(n))
558
+ return tuple(ret)
559
+
560
+ def to_dominant(self, n):
561
+ """
562
+ Return the dominant weight in ``self`` equivalent to ``n``
563
+ under the affine Weyl group.
564
+
565
+ EXAMPLES::
566
+
567
+ sage: Lambda = RootSystem(['A',2,1]).weight_lattice(extended=true).fundamental_weights()
568
+ sage: V = IntegrableRepresentation(3*Lambda[0])
569
+ sage: n = V.to_dominant((13,11,7)); n
570
+ (4, 3, 3)
571
+ sage: V.to_weight(n)
572
+ Lambda[0] + Lambda[1] + Lambda[2] - 4*delta
573
+ """
574
+ if n in self._ddict:
575
+ return self._ddict[n]
576
+
577
+ path = [n]
578
+ alpha = self._P.simple_roots()
579
+ next = True
580
+ cur_wt = self.to_weight(n)
581
+
582
+ while next:
583
+ if path[-1] in self._ddict:
584
+ path.append( self._ddict[path[-1]] )
585
+ break
586
+
587
+ next = False
588
+ mc = cur_wt.monomial_coefficients()
589
+ # Most weights are dense over the index set
590
+ for i in self._index_set:
591
+ if mc.get(i, 0) < 0:
592
+ m = self.s(path[-1], i)
593
+ if m in self._ddict:
594
+ path.append(self._ddict[m])
595
+ else:
596
+ cur_wt -= (m[i] - path[-1][i]) * alpha[i]
597
+ path.append(m)
598
+ next = True
599
+ break
600
+
601
+ # We don't want any dominant weight to refer to itself in self._ddict
602
+ # as this leads to an infinite loop with self.m() when the dominant
603
+ # weight does not have a known multiplicity.
604
+ v = path.pop()
605
+ for m in path:
606
+ self._ddict[m] = v
607
+ return v
608
+
609
+ def _freudenthal_roots_imaginary(self, nu):
610
+ r"""
611
+ Iterate over the set of imaginary roots `\alpha \in \Delta^+`
612
+ in ``self`` such that `\nu - \alpha \in Q^+`.
613
+
614
+ INPUT:
615
+
616
+ - ``nu`` -- an element in `Q`
617
+
618
+ EXAMPLES::
619
+
620
+ sage: Lambda = RootSystem(['B',3,1]).weight_lattice(extended=true).fundamental_weights()
621
+ sage: V = IntegrableRepresentation(Lambda[0]+Lambda[1]+Lambda[3])
622
+ sage: [list(V._freudenthal_roots_imaginary(V.highest_weight() - mw))
623
+ ....: for mw in V.dominant_maximal_weights()]
624
+ [[], [], [], [], []]
625
+ """
626
+ l = self._from_weight_helper(nu)
627
+ kp = min(l[i] // self._a[i] for i in self._index_set)
628
+ delta = self._Q.null_root()
629
+ for u in range(1, kp+1):
630
+ yield u * delta
631
+
632
+ def _freudenthal_roots_real(self, nu):
633
+ r"""
634
+ Iterate over the set of real positive roots `\alpha \in \Delta^+`
635
+ in ``self`` such that `\nu - \alpha \in Q^+`.
636
+
637
+ See [Ka1990]_ Proposition 6.3 for the way to compute the set of real
638
+ roots for twisted affine case.
639
+
640
+ INPUT:
641
+
642
+ - ``nu`` -- an element in `Q`
643
+
644
+ EXAMPLES::
645
+
646
+ sage: Lambda = RootSystem(['B',3,1]).weight_lattice(extended=true).fundamental_weights()
647
+ sage: V = IntegrableRepresentation(Lambda[0]+Lambda[1]+Lambda[3])
648
+ sage: mw = V.dominant_maximal_weights()[0]
649
+ sage: sorted(V._freudenthal_roots_real(V.highest_weight() - mw), key=str)
650
+ [alpha[1],
651
+ alpha[1] + alpha[2],
652
+ alpha[1] + alpha[2] + alpha[3],
653
+ alpha[2],
654
+ alpha[2] + alpha[3],
655
+ alpha[3]]
656
+ """
657
+ for al in self._classical_positive_roots:
658
+ if min(self._from_weight_helper(nu-al)) >= 0:
659
+ yield al
660
+
661
+ if self._cartan_type.is_untwisted_affine():
662
+ # untwisted case
663
+ for al in self._classical_roots:
664
+ for ir in self._freudenthal_roots_imaginary(nu-al):
665
+ yield al + ir
666
+
667
+ elif self._cartan_type.type() == 'BC':
668
+ #case A^2_{2l}
669
+ # We have to keep track of the roots we have visited for this case
670
+ ret = set(self._classical_positive_roots)
671
+ for al in self._classical_roots:
672
+ if al in self._classical_short_roots:
673
+ for ir in self._freudenthal_roots_imaginary(nu-al):
674
+ ret.add(al + ir)
675
+ yield al + ir
676
+ else:
677
+ fri = list(self._freudenthal_roots_imaginary(nu-al))
678
+ friset = set(fri)
679
+ for ir in fri:
680
+ if 2*ir in friset:
681
+ ret.add(al + 2*ir)
682
+ yield al + 2*ir
683
+ alpha = self._Q.simple_roots()
684
+ fri = list(self._freudenthal_roots_imaginary(2*nu-al))
685
+ for ir in fri[::2]:
686
+ rt = sum( val // 2 * alpha[i] for i,val in
687
+ enumerate(self._from_weight_helper(al+ir)) )
688
+ if rt not in ret:
689
+ ret.add(rt)
690
+ yield rt
691
+
692
+ elif self._cartan_type.dual().type() == 'G':
693
+ # case D^3_4 in the Kac notation
694
+ for al in self._classical_roots:
695
+ if al in self._classical_short_roots:
696
+ for ir in self._freudenthal_roots_imaginary(nu-al):
697
+ yield al + ir
698
+ else:
699
+ fri = list(self._freudenthal_roots_imaginary(nu-al))
700
+ friset = set(fri)
701
+ for ir in fri:
702
+ if 3*ir in friset:
703
+ yield al + 3*ir
704
+
705
+ elif self._cartan_type.dual().type() in ['B','C','F']:
706
+ #case A^2_{2l-1} or case D^2_{l+1} or case E^2_6:
707
+ for al in self._classical_roots:
708
+ if al in self._classical_short_roots:
709
+ for ir in self._freudenthal_roots_imaginary(nu-al):
710
+ yield al + ir
711
+ else:
712
+ fri = list(self._freudenthal_roots_imaginary(nu-al))
713
+ friset = set(fri)
714
+ for ir in fri:
715
+ if 2*ir in friset:
716
+ yield al + 2*ir
717
+
718
+ def _freudenthal_accum(self, nu, al):
719
+ """
720
+ Helper method for computing the Freudenthal formula in ``self``.
721
+
722
+ EXAMPLES::
723
+
724
+ sage: Lambda = RootSystem(['B',3,1]).weight_lattice(extended=true).fundamental_weights()
725
+ sage: V = IntegrableRepresentation(Lambda[0]+Lambda[1]+Lambda[3])
726
+ sage: mw = V.dominant_maximal_weights()[0]
727
+ sage: F = V._freudenthal_roots_real(V.highest_weight() - mw)
728
+ sage: sorted([V._freudenthal_accum(mw, al) for al in F])
729
+ [3, 3, 3, 4, 4, 4]
730
+ """
731
+ ret = 0
732
+ n = list(self._from_weight_helper(self._Lam - nu))
733
+ ip = self._inner_pq(nu, al)
734
+ n_shift = self._from_weight_helper(al)
735
+ ip_shift = self._inner_qq(al, al)
736
+
737
+ while min(n) >= 0:
738
+ # Change in data by adding ``al`` to our current weight
739
+ ip += ip_shift
740
+ for i,val in enumerate(n_shift):
741
+ n[i] -= val
742
+ # Compute the multiplicity
743
+ ret += 2 * self.m(tuple(n)) * ip
744
+ return ret
745
+
746
+ def _m_freudenthal(self, n):
747
+ r"""
748
+ Compute the weight multiplicity using the Freudenthal
749
+ multiplicity formula in ``self``.
750
+
751
+ The multiplicities of the imaginary roots for the twisted
752
+ affine case are different than those for the untwisted case.
753
+ See [Carter]_ Corollary 18.10 for general type and Corollary
754
+ 18.15 for `A^2_{2l}`
755
+
756
+ EXAMPLES::
757
+
758
+ sage: Lambda = RootSystem(['B',3,1]).weight_lattice(extended=true).fundamental_weights()
759
+ sage: V = IntegrableRepresentation(Lambda[0]+Lambda[1]+Lambda[3])
760
+ sage: D = list(V.dominant_maximal_weights())
761
+ sage: D.remove(V.highest_weight())
762
+ sage: [V._m_freudenthal(V.from_weight(mw)) for mw in D]
763
+ [3, 7, 3, 3]
764
+ """
765
+ if min(n) < 0:
766
+ return 0
767
+ mu = self.to_weight(n)
768
+ I = self._index_set
769
+ al = self._Q._from_dict({I[i]: val for i,val in enumerate(n) if val},
770
+ remove_zeros=False)
771
+ cr = self._classical_rank
772
+ num = sum(self._freudenthal_accum(mu, alr)
773
+ for alr in self._freudenthal_roots_real(self._Lam - mu))
774
+
775
+ if self._cartan_type.is_untwisted_affine():
776
+ num += sum(cr * self._freudenthal_accum(mu, alr)
777
+ for alr in self._freudenthal_roots_imaginary(self._Lam - mu))
778
+
779
+ elif self._cartan_type.dual().type() == 'B': # A_{2n-1}^{(2)}
780
+ val = 1
781
+ for rt in self._freudenthal_roots_imaginary(self._Lam - mu):
782
+ # k-th element (starting from 1) is k*delta
783
+ num += (cr - val) * self._freudenthal_accum(mu, rt)
784
+ val = 1 - val
785
+
786
+ elif self._cartan_type.type() == 'BC': # A_{2n}^{(2)}
787
+ num += sum(cr * self._freudenthal_accum(mu, alr)
788
+ for alr in self._freudenthal_roots_imaginary(self._Lam - mu))
789
+
790
+ elif self._cartan_type.dual() == 'C': # D_{n+1}^{(2)}
791
+ val = 1
792
+ for rt in self._freudenthal_roots_imaginary(self._Lam - mu):
793
+ # k-th element (starting from 1) is k*delta
794
+ num += (cr - (cr - 1)*val) * self._freudenthal_accum(mu, rt)
795
+ val = 1 - val
796
+
797
+ elif self._cartan_type.dual().type() == 'F': # E_6^{(2)}
798
+ val = 1
799
+ for rt in self._freudenthal_roots_imaginary(self._Lam - mu):
800
+ # k-th element (starting from 1) is k*delta
801
+ num += (4 - 2*val) * self._freudenthal_accum(mu, rt)
802
+ val = 1 - val
803
+
804
+ elif self._cartan_type.dual().type() == 'G': # D_4^{(3)} (or dual of G_2^{(1)})
805
+ for k,rt in enumerate(self._freudenthal_roots_imaginary(self._Lam - mu)):
806
+ # k-th element (starting from 1) is k*delta
807
+ if (k+1) % 3 == 0:
808
+ num += 2 * self._freudenthal_accum(mu, rt)
809
+ else:
810
+ num += self._freudenthal_accum(mu, rt)
811
+
812
+ den = 2*self._inner_pq(self._Lam_rho, al) - self._inner_qq(al, al)
813
+ try:
814
+ return ZZ(num / den)
815
+ except TypeError:
816
+ return None
817
+
818
+ def m(self, n):
819
+ r"""
820
+ Return the multiplicity of the weight `\mu` in ``self``, where
821
+ `\mu = \Lambda - \sum_i n_i \alpha_i`.
822
+
823
+ INPUT:
824
+
825
+ - ``n`` -- tuple representing a weight `\mu`
826
+
827
+ EXAMPLES::
828
+
829
+ sage: Lambda = RootSystem(['E',6,1]).weight_lattice(extended=true).fundamental_weights()
830
+ sage: V = IntegrableRepresentation(Lambda[0])
831
+ sage: u = V.highest_weight() - V.weight_lattice().null_root()
832
+ sage: V.from_weight(u)
833
+ (1, 1, 2, 2, 3, 2, 1)
834
+ sage: V.m(V.from_weight(u))
835
+ 6
836
+ """
837
+ # TODO: Make this non-recursive by implementing our own stack
838
+ # The recursion follows:
839
+ # - m
840
+ # - _m_freudenthal
841
+ # - _freudenthal_accum
842
+ if n in self._mdict:
843
+ return self._mdict[n]
844
+ elif n in self._ddict:
845
+ self._mdict[n] = self.m(self._ddict[n])
846
+ m = self.to_dominant(n)
847
+ if m in self._mdict:
848
+ return self._mdict[m]
849
+ ret = self._m_freudenthal(m)
850
+ assert ret is not None, "m: error - failed to compute m{}".format(n)
851
+ self._mdict[n] = ret
852
+ return ret
853
+
854
+ def mult(self, mu):
855
+ """
856
+ Return the weight multiplicity of ``mu``.
857
+
858
+ INPUT:
859
+
860
+ - ``mu`` -- an element of the weight lattice
861
+
862
+ EXAMPLES::
863
+
864
+ sage: # needs sage.libs.gap
865
+ sage: L = RootSystem("B3~").weight_lattice(extended=True)
866
+ sage: Lambda = L.fundamental_weights()
867
+ sage: delta = L.null_root()
868
+ sage: W = L.weyl_group(prefix='s')
869
+ sage: [s0,s1,s2,s3] = W.simple_reflections()
870
+ sage: V = IntegrableRepresentation(Lambda[0])
871
+ sage: V.mult(Lambda[2] - 2*delta)
872
+ 3
873
+ sage: V.mult(Lambda[2] - Lambda[1])
874
+ 0
875
+ sage: weights = [w.action(Lambda[1] - 4*delta) for w in [s1,s2,s0*s1*s2*s3]]
876
+ sage: weights
877
+ [-Lambda[1] + Lambda[2] - 4*delta,
878
+ Lambda[1] - 4*delta,
879
+ -Lambda[1] + Lambda[2] - 4*delta]
880
+ sage: [V.mult(mu) for mu in weights]
881
+ [35, 35, 35]
882
+
883
+ TESTS::
884
+
885
+ sage: L = RootSystem("B3~").weight_lattice(extended=True)
886
+ sage: La = L.fundamental_weights()
887
+ sage: V = IntegrableRepresentation(La[0])
888
+ sage: Q = RootSystem("B3~").root_space()
889
+ sage: al = Q.simple_roots()
890
+ sage: V.mult(1/2*al[1])
891
+ 0
892
+ """
893
+ try:
894
+ n = self.from_weight(mu)
895
+ except TypeError:
896
+ return ZZ.zero()
897
+ return self.m(n)
898
+
899
+ @cached_method
900
+ def dominant_maximal_weights(self):
901
+ r"""
902
+ Return the dominant maximal weights of ``self``.
903
+
904
+ A weight `\mu` is *maximal* if it has nonzero multiplicity but
905
+ `\mu + \delta`` has multiplicity zero. There are a finite number
906
+ of dominant maximal weights. Indeed, [Ka1990]_ Proposition 12.6
907
+ shows that the dominant maximal weights are in bijection with
908
+ the classical weights in `k \cdot F` where `F` is the fundamental
909
+ alcove and `k` is the level. The construction used in this
910
+ method is based on that Proposition.
911
+
912
+ EXAMPLES::
913
+
914
+ sage: Lambda = RootSystem(['C',3,1]).weight_lattice(extended=true).fundamental_weights()
915
+ sage: IntegrableRepresentation(2*Lambda[0]).dominant_maximal_weights()
916
+ (2*Lambda[0],
917
+ Lambda[0] + Lambda[2] - delta,
918
+ 2*Lambda[1] - delta,
919
+ Lambda[1] + Lambda[3] - 2*delta,
920
+ 2*Lambda[2] - 2*delta,
921
+ 2*Lambda[3] - 3*delta)
922
+ """
923
+ k = self.level()
924
+ Lambda = self._P.fundamental_weights()
925
+
926
+ def next_level(wt):
927
+ return [wt + Lambda[i] for i in self._index_set_classical
928
+ if (wt + Lambda[i]).level() <= k]
929
+ R = RecursivelyEnumeratedSet([self._P.zero()], next_level)
930
+ candidates = [x + (k - x.level())*Lambda[0] for x in list(R)]
931
+ ret = []
932
+ delta = self._Q.null_root()
933
+ for x in candidates:
934
+ if self._from_weight_helper(self._Lam-x, check=True):
935
+ t = 0
936
+ while self.m(self.from_weight(x - t*delta)) == 0:
937
+ t += 1
938
+ ret.append(x - t*delta)
939
+ return tuple(ret)
940
+
941
+ def string(self, max_weight, depth=12):
942
+ r"""
943
+ Return the list of multiplicities `m(\Lambda - k \delta)` in
944
+ ``self``, where `\Lambda` is ``max_weight`` and `k` runs from `0`
945
+ to ``depth``.
946
+
947
+ INPUT:
948
+
949
+ - ``max_weight`` -- a dominant maximal weight
950
+ - ``depth`` -- (default: 12) the maximum value of `k`
951
+
952
+ EXAMPLES::
953
+
954
+ sage: Lambda = RootSystem(['A',2,1]).weight_lattice(extended=true).fundamental_weights()
955
+ sage: V = IntegrableRepresentation(2*Lambda[0])
956
+ sage: V.string(2*Lambda[0])
957
+ [1, 2, 8, 20, 52, 116, 256, 522, 1045, 1996, 3736, 6780]
958
+ sage: V.string(Lambda[1] + Lambda[2])
959
+ [0, 1, 4, 12, 32, 77, 172, 365, 740, 1445, 2736, 5041]
960
+ """
961
+ ret = []
962
+ delta = self._Q.null_root()
963
+ cur_weight = max_weight
964
+ for k in range(depth):
965
+ ret.append(self.m( self.from_weight(cur_weight) ))
966
+ cur_weight -= delta
967
+ return ret
968
+
969
+ def strings(self, depth=12):
970
+ """
971
+ Return the set of dominant maximal weights of ``self``, together
972
+ with the string coefficients for each.
973
+
974
+ OPTIONAL:
975
+
976
+ - ``depth`` -- (default: 12) a parameter indicating how far
977
+ to push computations
978
+
979
+ EXAMPLES::
980
+
981
+ sage: Lambda = RootSystem(['A',1,1]).weight_lattice(extended=true).fundamental_weights()
982
+ sage: V = IntegrableRepresentation(2*Lambda[0])
983
+ sage: S = V.strings(depth=25)
984
+ sage: for k in S:
985
+ ....: print("{}: {}".format(k, ' '.join(str(x) for x in S[k])))
986
+ 2*Lambda[0]: 1 1 3 5 10 16 28 43 70 105 161 236 350 501 722 1016 1431 1981 2741 3740 5096 6868 9233 12306 16357
987
+ 2*Lambda[1] - delta: 1 2 4 7 13 21 35 55 86 130 196 287 420 602 858 1206 1687 2331 3206 4368 5922 7967 10670 14193 18803
988
+ """
989
+ return {max_weight: self.string(max_weight, depth)
990
+ for max_weight in self.dominant_maximal_weights()}
991
+
992
+ def print_strings(self, depth=12):
993
+ """
994
+ Print the strings of ``self``.
995
+
996
+ .. SEEALSO::
997
+
998
+ :meth:`strings`
999
+
1000
+ EXAMPLES::
1001
+
1002
+ sage: Lambda = RootSystem(['A',1,1]).weight_lattice(extended=true).fundamental_weights()
1003
+ sage: V = IntegrableRepresentation(2*Lambda[0])
1004
+ sage: V.print_strings(depth=25)
1005
+ 2*Lambda[0]: 1 1 3 5 10 16 28 43 70 105 161 236 350 501 722 1016 1431 1981 2741 3740 5096 6868 9233 12306 16357
1006
+ 2*Lambda[1] - delta: 1 2 4 7 13 21 35 55 86 130 196 287 420 602 858 1206 1687 2331 3206 4368 5922 7967 10670 14193 18803
1007
+ """
1008
+ S = self.strings(depth=depth)
1009
+ for mw in self.dominant_maximal_weights():
1010
+ print("{}: {}".format(mw, ' '.join(str(x) for x in S[mw])) )
1011
+
1012
+ def modular_characteristic(self, mu=None):
1013
+ r"""
1014
+ Return the modular characteristic of ``self``.
1015
+
1016
+ The modular characteristic is a rational number introduced
1017
+ by Kac and Peterson [KacPeterson]_, required to interpret the
1018
+ string functions as Fourier coefficients of modular forms. See
1019
+ [Ka1990]_ Section 12.7. Let `k` be the level, and let `h^\vee`
1020
+ be the dual Coxeter number. Then
1021
+
1022
+ .. MATH::
1023
+
1024
+ m_\Lambda = \frac{|\Lambda+\rho|^2}{2(k+h^\vee)}
1025
+ - \frac{|\rho|^2}{2h^\vee}
1026
+
1027
+ If `\mu` is a weight, then
1028
+
1029
+ .. MATH::
1030
+
1031
+ m_{\Lambda,\mu} = m_\Lambda - \frac{|\mu|^2}{2k}.
1032
+
1033
+ OPTIONAL:
1034
+
1035
+ - ``mu`` -- a weight, or alternatively,
1036
+ - ``n`` -- tuple representing a weight `\mu`
1037
+
1038
+ If no optional parameter is specified, this returns `m_\Lambda`.
1039
+ If ``mu`` is specified, it returns `m_{\Lambda,\mu}`. You may
1040
+ use the tuple ``n`` to specify `\mu`. If you do this, `\mu` is
1041
+ `\Lambda - \sum_i n_i \alpha_i`.
1042
+
1043
+ EXAMPLES::
1044
+
1045
+ sage: Lambda = RootSystem(['A',1,1]).weight_lattice(extended=true).fundamental_weights()
1046
+ sage: V = IntegrableRepresentation(3*Lambda[0]+2*Lambda[1])
1047
+ sage: [V.modular_characteristic(x) for x in V.dominant_maximal_weights()]
1048
+ [11/56, -1/280, 111/280]
1049
+ """
1050
+ if isinstance(mu, tuple):
1051
+ n = mu
1052
+ else:
1053
+ n = self.from_weight(mu)
1054
+ k = self.level()
1055
+ hd = self.dual_coxeter_number()
1056
+ rho = self._P.rho()
1057
+ m_Lambda = self._inner_pp(self._Lam_rho, self._Lam_rho) / (2*(k+hd)) \
1058
+ - self._inner_pp(rho, rho) / (2*hd)
1059
+ if n is None:
1060
+ return m_Lambda
1061
+ mu = self.to_weight(n)
1062
+ return m_Lambda - self._inner_pp(mu,mu) / (2*k)
1063
+
1064
+ def branch(self, i=None, weyl_character_ring=None, sequence=None, depth=5):
1065
+ r"""
1066
+ Return the branching rule on ``self``.
1067
+
1068
+ Removing any node from the extended Dynkin diagram of the affine
1069
+ Lie algebra results in the Dynkin diagram of a classical Lie
1070
+ algebra, which is therefore a Lie subalgebra. For example
1071
+ removing the `0` node from the Dynkin diagram of type ``[X, r, 1]``
1072
+ produces the classical Dynkin diagram of ``[X, r]``.
1073
+
1074
+ Thus for each `i` in the index set, we may restrict ``self`` to
1075
+ the corresponding classical subalgebra. Of course ``self`` is
1076
+ an infinite dimensional representation, but each weight `\mu`
1077
+ is assigned a grading by the number of times the simple root
1078
+ `\alpha_i` appears in `\Lambda-\mu`. Thus the branched
1079
+ representation is graded and we get sequence of finite-dimensional
1080
+ representations which this method is able to compute.
1081
+
1082
+ OPTIONAL:
1083
+
1084
+ - ``i`` -- (default: 0) an element of the index set
1085
+ - ``weyl_character_ring`` -- a WeylCharacterRing
1086
+ - ``sequence`` -- dictionary
1087
+ - ``depth`` -- (default: 5) an upper bound for `k` determining
1088
+ how many terms to give
1089
+
1090
+ In the default case where `i = 0`, you do not need to specify
1091
+ anything else, though you may want to increase the depth if
1092
+ you need more terms.
1093
+
1094
+ EXAMPLES::
1095
+
1096
+ sage: Lambda = RootSystem(['A',2,1]).weight_lattice(extended=true).fundamental_weights()
1097
+ sage: V = IntegrableRepresentation(2*Lambda[0])
1098
+ sage: b = V.branch(); b # needs sage.libs.gap
1099
+ [A2(0,0),
1100
+ A2(1,1),
1101
+ A2(0,0) + 2*A2(1,1) + A2(2,2),
1102
+ 2*A2(0,0) + 2*A2(0,3) + 4*A2(1,1) + 2*A2(3,0) + 2*A2(2,2),
1103
+ 4*A2(0,0) + 3*A2(0,3) + 10*A2(1,1) + 3*A2(3,0) + A2(1,4) + 6*A2(2,2) + A2(4,1),
1104
+ 6*A2(0,0) + 9*A2(0,3) + 20*A2(1,1) + 9*A2(3,0) + 3*A2(1,4) + 12*A2(2,2) + 3*A2(4,1) + A2(3,3)]
1105
+
1106
+ If the parameter ``weyl_character_ring`` is omitted, the ring may be recovered
1107
+ as the parent of one of the branched coefficients::
1108
+
1109
+ sage: A2 = b[0].parent(); A2 # needs sage.libs.gap
1110
+ The Weyl Character Ring of Type A2 with Integer Ring coefficients
1111
+
1112
+ If `i` is not zero then you should specify the :class:`WeylCharacterRing` that you
1113
+ are branching to. This is determined by the Dynkin diagram::
1114
+
1115
+ sage: Lambda = RootSystem(['B',3,1]).weight_lattice(extended=true).fundamental_weights()
1116
+ sage: V = IntegrableRepresentation(Lambda[0])
1117
+ sage: V.cartan_type().dynkin_diagram()
1118
+ O 0
1119
+ |
1120
+ |
1121
+ O---O=>=O
1122
+ 1 2 3
1123
+ B3~
1124
+
1125
+ In this example, we observe that removing the `i=2` node from the
1126
+ Dynkin diagram produces a reducible diagram of type ``A1xA1xA1``.
1127
+ Thus we have a branching to
1128
+ `\mathfrak{sl}(2) \times \mathfrak{sl}(2) \times \mathfrak{sl}(2)`::
1129
+
1130
+ sage: A1xA1xA1 = WeylCharacterRing("A1xA1xA1",style='coroots') # needs sage.libs.gap
1131
+ sage: V.branch(i=2,weyl_character_ring=A1xA1xA1) # needs sage.libs.gap
1132
+ [A1xA1xA1(1,0,0),
1133
+ A1xA1xA1(0,1,2),
1134
+ A1xA1xA1(1,0,0) + A1xA1xA1(1,2,0) + A1xA1xA1(1,0,2),
1135
+ A1xA1xA1(2,1,2) + A1xA1xA1(0,1,0) + 2*A1xA1xA1(0,1,2),
1136
+ 3*A1xA1xA1(1,0,0) + 2*A1xA1xA1(1,2,0) + A1xA1xA1(1,2,2) + 2*A1xA1xA1(1,0,2) + A1xA1xA1(1,0,4) + A1xA1xA1(3,0,0),
1137
+ A1xA1xA1(2,1,0) + 3*A1xA1xA1(2,1,2) + 2*A1xA1xA1(0,1,0) + 5*A1xA1xA1(0,1,2) + A1xA1xA1(0,1,4) + A1xA1xA1(0,3,2)]
1138
+
1139
+ If the nodes of the two Dynkin diagrams are not in the same order, you
1140
+ must specify an additional parameter, ``sequence`` which gives a dictionary
1141
+ to the affine Dynkin diagram to the classical one.
1142
+
1143
+ EXAMPLES::
1144
+
1145
+ sage: Lambda = RootSystem(['F',4,1]).weight_lattice(extended=true).fundamental_weights()
1146
+ sage: V = IntegrableRepresentation(Lambda[0])
1147
+ sage: V.cartan_type().dynkin_diagram()
1148
+ O---O---O=>=O---O
1149
+ 0 1 2 3 4
1150
+ F4~
1151
+ sage: A1xC3 = WeylCharacterRing("A1xC3", style='coroots') # needs sage.groups
1152
+ sage: A1xC3.dynkin_diagram() # needs sage.groups
1153
+ O
1154
+ 1
1155
+ O---O=<=O
1156
+ 2 3 4
1157
+ A1xC3
1158
+
1159
+ Observe that removing the `i=1` node from the ``F4~`` Dynkin diagram
1160
+ gives the ``A1xC3`` diagram, but the roots are in a different order.
1161
+ The nodes `0, 2, 3, 4` of ``F4~`` correspond to ``1, 4, 3, 2``
1162
+ of ``A1xC3`` and so we encode this in a dictionary::
1163
+
1164
+ sage: # needs sage.groups
1165
+ sage: V.branch(i=1, weyl_character_ring=A1xC3, sequence={0:1,2:4,3:3,4:2}) # long time
1166
+ [A1xC3(1,0,0,0),
1167
+ A1xC3(0,0,0,1),
1168
+ A1xC3(1,0,0,0) + A1xC3(1,2,0,0),
1169
+ A1xC3(2,0,0,1) + A1xC3(0,0,0,1) + A1xC3(0,1,1,0),
1170
+ 2*A1xC3(1,0,0,0) + A1xC3(1,0,1,0) + 2*A1xC3(1,2,0,0) + A1xC3(1,0,2,0) + A1xC3(3,0,0,0),
1171
+ 2*A1xC3(2,0,0,1) + A1xC3(2,1,1,0) + A1xC3(0,1,0,0) + 3*A1xC3(0,0,0,1) + 2*A1xC3(0,1,1,0) + A1xC3(0,2,0,1)]
1172
+
1173
+ The branch method gives a way of computing the graded dimension of the integrable representation::
1174
+
1175
+ sage: # needs sage.groups
1176
+ sage: Lambda = RootSystem("A1~").weight_lattice(extended=true).fundamental_weights()
1177
+ sage: V=IntegrableRepresentation(Lambda[0])
1178
+ sage: r = [x.degree() for x in V.branch(depth=15)]; r
1179
+ [1, 3, 4, 7, 13, 19, 29, 43, 62, 90, 126, 174, 239, 325, 435, 580]
1180
+ sage: oeis(r) # optional -- internet
1181
+ 0: A029552: Expansion of phi(x) / f(-x) in powers of x where phi(), f() are Ramanujan theta functions.
1182
+ """
1183
+ if i is None:
1184
+ i = self._cartan_type.special_node()
1185
+ if i == self._cartan_type.special_node() or self._cartan_type.type() == 'A':
1186
+ if weyl_character_ring is None:
1187
+ weyl_character_ring = WeylCharacterRing(self._cartan_type.classical(), style='coroots')
1188
+ if weyl_character_ring.cartan_type() != self._cartan_type.classical():
1189
+ raise ValueError("Cartan type of WeylCharacterRing must be %s" % self.cartan_type().classical())
1190
+ elif weyl_character_ring is None:
1191
+ raise ValueError("the argument weyl_character_ring cannot be omitted if i != 0")
1192
+ if sequence is None:
1193
+ sequence = {}
1194
+ for j in self._index_set:
1195
+ if j < i:
1196
+ sequence[j] = j+1
1197
+ elif j > i:
1198
+ sequence[j] = j
1199
+
1200
+ def next_level(x):
1201
+ ret = []
1202
+ for j in self._index_set:
1203
+ t = list(x[0])
1204
+ t[j] += 1
1205
+ t = tuple(t)
1206
+ m = self.m(t)
1207
+ if m > 0 and t[i] <= depth:
1208
+ ret.append((t,m))
1209
+ return ret
1210
+ hwv = (tuple([0 for j in self._index_set]), 1)
1211
+ terms = RecursivelyEnumeratedSet([hwv], next_level)
1212
+ fw = weyl_character_ring.fundamental_weights()
1213
+ P = self.weight_lattice()
1214
+ ret = []
1215
+ for l in range(depth+1):
1216
+ lterms = [x for x in terms if x[0][i] == l]
1217
+ ldict = {}
1218
+ for x in lterms:
1219
+ mc = P(self.to_weight(x[0])).monomial_coefficients()
1220
+ contr = sum(fw[sequence[j]]*mc.get(j,0)
1221
+ for j in self._index_set if j != i).coerce_to_sl()
1222
+ if contr in ldict:
1223
+ ldict[contr] += x[1]
1224
+ else:
1225
+ ldict[contr] = x[1]
1226
+ ret.append(weyl_character_ring.char_from_weights(ldict))
1227
+ return ret