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,1630 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.graphs
3
+ r"""
4
+ Verma Modules
5
+
6
+ AUTHORS:
7
+
8
+ - Travis Scrimshaw (2017-06-30): Initial version
9
+
10
+ .. TODO::
11
+
12
+ Implement a :class:`sage.categories.pushout.ConstructionFunctor`
13
+ and return as the ``construction()``.
14
+ """
15
+
16
+ # ****************************************************************************
17
+ # Copyright (C) 2017 Travis Scrimshaw <tcscrims at gmail.com>
18
+ #
19
+ # This program is free software: you can redistribute it and/or modify
20
+ # it under the terms of the GNU General Public License as published by
21
+ # the Free Software Foundation, either version 2 of the License, or
22
+ # (at your option) any later version.
23
+ # https://www.gnu.org/licenses/
24
+ # ****************************************************************************
25
+
26
+ from sage.misc.lazy_attribute import lazy_attribute
27
+ from sage.misc.cachefunc import cached_method
28
+ from sage.categories.modules import Modules
29
+ from sage.categories.morphism import Morphism
30
+ from sage.categories.homset import Hom, Homset
31
+ from sage.monoids.indexed_free_monoid import IndexedFreeAbelianMonoid
32
+ from sage.combinat.free_module import CombinatorialFreeModule
33
+ from sage.sets.family import Family
34
+ from sage.structure.richcmp import richcmp
35
+ from sage.rings.integer_ring import ZZ
36
+
37
+
38
+ class ModulePrinting:
39
+ """
40
+ Helper mixin class for printing the module vectors.
41
+ """
42
+ def __init__(self, vector_name='v'):
43
+ r"""
44
+ Initialize ``self``.
45
+
46
+ EXAMPLES::
47
+
48
+ sage: from sage.algebras.lie_algebras.verma_module import ModulePrinting
49
+ sage: MP = ModulePrinting()
50
+ sage: TestSuite(MP).run(skip="_test_pickling")
51
+ """
52
+ self.__vector_name = vector_name
53
+
54
+ def _repr_generator(self, m):
55
+ r"""
56
+ Return a string representation of the generator indexed by ``m``.
57
+
58
+ EXAMPLES::
59
+
60
+ sage: L = lie_algebras.sp(QQ, 4)
61
+ sage: La = L.cartan_type().root_system().ambient_space().fundamental_weights()
62
+ sage: M = L.verma_module(-1/2*La[1] + 3/7*La[2])
63
+ sage: f1, f2 = L.f()
64
+ sage: x = M.pbw_basis()(L([f1, [f1, f2]]))
65
+ sage: v = x * M.highest_weight_vector()
66
+ sage: M._repr_generator(v.leading_support())
67
+ 'f[-2*alpha[1] - alpha[2]]*v[(-1/14, 3/7)]'
68
+
69
+ sage: M.highest_weight_vector()
70
+ v[(-1/14, 3/7)]
71
+ sage: 2 * M.highest_weight_vector()
72
+ 2*v[(-1/14, 3/7)]
73
+ """
74
+ ret = super()._repr_generator(m)
75
+ if ret == '1':
76
+ ret = ''
77
+ else:
78
+ ret += '*'
79
+ return ret + self.__vector_name + "[{}]".format(self._weight)
80
+
81
+ def _latex_generator(self, m):
82
+ r"""
83
+ Return a latex representation of the generator indexed by ``m``.
84
+
85
+ EXAMPLES::
86
+
87
+ sage: L = lie_algebras.sp(QQ, 4)
88
+ sage: La = L.cartan_type().root_system().ambient_space().fundamental_weights()
89
+ sage: M = L.verma_module(-1/2*La[1] + 3/7*La[2])
90
+ sage: f1, f2 = L.f()
91
+ sage: x = M.pbw_basis()(L([f1, [f1, f2]]))
92
+ sage: v = x * M.highest_weight_vector()
93
+ sage: M._latex_generator(v.leading_support())
94
+ f_{-2 \alpha_{1} - \alpha_{2}} v_{-\frac{1}{14} e_{0} + \frac{3}{7} e_{1}}
95
+
96
+ sage: latex(2 * M.highest_weight_vector())
97
+ 2 v_{-\frac{1}{14} e_{0} + \frac{3}{7} e_{1}}
98
+ sage: latex(M.highest_weight_vector())
99
+ v_{-\frac{1}{14} e_{0} + \frac{3}{7} e_{1}}
100
+ """
101
+ ret = super()._latex_generator(m)
102
+ if ret == '1':
103
+ ret = ''
104
+ from sage.misc.latex import latex
105
+ return ret + " {}_{{{}}}".format(self.__vector_name, latex(self._weight))
106
+
107
+ _repr_term = _repr_generator
108
+ _latex_term = _latex_generator
109
+
110
+
111
+ class VermaModule(ModulePrinting, CombinatorialFreeModule):
112
+ r"""
113
+ A Verma module.
114
+
115
+ Let `\lambda` be a weight and `\mathfrak{g}` be a Kac--Moody Lie
116
+ algebra with a fixed Borel subalgebra `\mathfrak{b} = \mathfrak{h}
117
+ \oplus \mathfrak{g}^+`. The *Verma module* `M_{\lambda}` is a
118
+ `U(\mathfrak{g})`-module given by
119
+
120
+ .. MATH::
121
+
122
+ M_{\lambda} := U(\mathfrak{g}) \otimes_{U(\mathfrak{b})} F_{\lambda},
123
+
124
+ where `F_{\lambda}` is the `U(\mathfrak{b})` module such that
125
+ `h \in U(\mathfrak{h})` acts as multiplication by
126
+ `\langle \lambda, h \rangle` and `U(\mathfrak{g}^+) F_{\lambda} = 0`.
127
+
128
+ INPUT:
129
+
130
+ - ``g`` -- a Lie algebra
131
+ - ``weight`` -- a weight
132
+
133
+ EXAMPLES::
134
+
135
+ sage: L = lie_algebras.sl(QQ, 3)
136
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
137
+ sage: M = L.verma_module(2*La[1] + 3*La[2])
138
+ sage: pbw = M.pbw_basis()
139
+ sage: E1,E2,F1,F2,H1,H2 = [pbw(g) for g in L.gens()]
140
+ sage: v = M.highest_weight_vector()
141
+ sage: x = F2^3 * F1 * v
142
+ sage: x
143
+ f[-alpha[2]]^3*f[-alpha[1]]*v[2*Lambda[1] + 3*Lambda[2]]
144
+ sage: F1 * x
145
+ f[-alpha[2]]^3*f[-alpha[1]]^2*v[2*Lambda[1] + 3*Lambda[2]]
146
+ + 3*f[-alpha[2]]^2*f[-alpha[1]]*f[-alpha[1] - alpha[2]]*v[2*Lambda[1] + 3*Lambda[2]]
147
+ sage: E1 * x
148
+ 2*f[-alpha[2]]^3*v[2*Lambda[1] + 3*Lambda[2]]
149
+ sage: H1 * x
150
+ 3*f[-alpha[2]]^3*f[-alpha[1]]*v[2*Lambda[1] + 3*Lambda[2]]
151
+ sage: H2 * x
152
+ -2*f[-alpha[2]]^3*f[-alpha[1]]*v[2*Lambda[1] + 3*Lambda[2]]
153
+
154
+ REFERENCES:
155
+
156
+ - :wikipedia:`Verma_module`
157
+ """
158
+ def __init__(self, g, weight, basis_key=None, prefix='f', **kwds):
159
+ """
160
+ Initialize ``self``.
161
+
162
+ TESTS::
163
+
164
+ sage: L = lie_algebras.sl(QQ, 3)
165
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
166
+ sage: M = L.verma_module(La[1] + 4*La[2])
167
+ sage: TestSuite(M).run()
168
+ sage: M = L.verma_module(La[1] - 2*La[2])
169
+ sage: TestSuite(M).run()
170
+
171
+ sage: L = lie_algebras.sp(QQ, 4)
172
+ sage: La = L.cartan_type().root_system().ambient_space().fundamental_weights()
173
+ sage: M = L.verma_module(-1/2*La[1] + 3/7*La[2])
174
+ sage: TestSuite(M).run()
175
+ """
176
+ if basis_key is not None:
177
+ self._basis_key = basis_key
178
+ else:
179
+ self._basis_key = g._basis_key
180
+
181
+ self._weight = weight
182
+
183
+ R = g.base_ring()
184
+ self._g = g
185
+ self._pbw = g.pbw_basis(basis_key=self._triangular_key)
186
+ monomials = IndexedFreeAbelianMonoid(g._negative_half_index_set(),
187
+ prefix,
188
+ sorting_key=self._monoid_key,
189
+ **kwds)
190
+ CombinatorialFreeModule.__init__(self, R, monomials,
191
+ prefix='', bracket=False, latex_bracket=False,
192
+ sorting_key=self._monomial_key,
193
+ category=Modules(R).WithBasis().Graded())
194
+ ModulePrinting.__init__(self)
195
+
196
+ def _triangular_key(self, x):
197
+ r"""
198
+ Return a key for sorting for the index ``x`` that respects
199
+ the triangular decomposition by `U^-, U^0, U^+`.
200
+
201
+ EXAMPLES::
202
+
203
+ sage: L = lie_algebras.sl(QQ, 3)
204
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
205
+ sage: M = L.verma_module(La[1])
206
+ sage: sorted(L.basis().keys(), key=L._basis_key)
207
+ [alpha[2], alpha[1], alpha[1] + alpha[2],
208
+ alphacheck[1], alphacheck[2],
209
+ -alpha[2], -alpha[1], -alpha[1] - alpha[2]]
210
+ sage: sorted(L.basis().keys(), key=M._triangular_key)
211
+ [-alpha[2], -alpha[1], -alpha[1] - alpha[2],
212
+ alphacheck[1], alphacheck[2],
213
+ alpha[2], alpha[1], alpha[1] + alpha[2]]
214
+
215
+ sage: def neg_key(x):
216
+ ....: return -L.basis().keys().index(x)
217
+ sage: sorted(L.basis().keys(), key=neg_key)
218
+ [-alpha[1] - alpha[2], -alpha[1], -alpha[2],
219
+ alphacheck[2], alphacheck[1],
220
+ alpha[1] + alpha[2], alpha[1], alpha[2]]
221
+ sage: N = L.verma_module(La[1], basis_key=neg_key)
222
+ sage: sorted(L.basis().keys(), key=N._triangular_key)
223
+ [-alpha[1] - alpha[2], -alpha[1], -alpha[2],
224
+ alphacheck[2], alphacheck[1],
225
+ alpha[1] + alpha[2], alpha[1], alpha[2]]
226
+ """
227
+ return (self._g._part_on_basis(x), self._basis_key(x))
228
+
229
+ def _monoid_key(self, x):
230
+ """
231
+ Return a key for comparison in the underlying monoid of ``self``.
232
+
233
+ EXAMPLES::
234
+
235
+ sage: L = lie_algebras.sl(QQ, 3)
236
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
237
+ sage: M = L.verma_module(La[1])
238
+ sage: monoid = M.basis().keys()
239
+ sage: prod(monoid.gens()) # indirect doctest
240
+ f[-alpha[2]]*f[-alpha[1]]*f[-alpha[1] - alpha[2]]
241
+ sage: [M._monoid_key(x) for x in monoid.an_element()._sorted_items()]
242
+ [5, 6, 7]
243
+
244
+ sage: def neg_key(x):
245
+ ....: return -L.basis().keys().index(x)
246
+ sage: M = L.verma_module(La[1], basis_key=neg_key)
247
+ sage: monoid = M.basis().keys()
248
+ sage: prod(monoid.gens()) # indirect doctest
249
+ f[-alpha[1] - alpha[2]]*f[-alpha[1]]*f[-alpha[2]]
250
+ sage: [M._monoid_key(x) for x in monoid.an_element()._sorted_items()]
251
+ [-7, -6, -5]
252
+ """
253
+ return self._basis_key(x[0])
254
+
255
+ def _monomial_key(self, x):
256
+ """
257
+ Compute the key for ``x`` so that the comparison is done by
258
+ triangular decomposition and then reverse degree lexicographic order.
259
+
260
+ EXAMPLES::
261
+
262
+ sage: L = lie_algebras.sl(QQ, 3)
263
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
264
+ sage: M = L.verma_module(La[1])
265
+ sage: pbw = M.pbw_basis()
266
+ sage: f1,f2 = pbw(L.f(1)), pbw(L.f(2))
267
+ sage: f1 * f2 * f1 * M.highest_weight_vector() # indirect doctest
268
+ f[-alpha[2]]*f[-alpha[1]]^2*v[Lambda[1]]
269
+ + f[-alpha[1]]*f[-alpha[1] - alpha[2]]*v[Lambda[1]]
270
+
271
+ sage: def neg_key(x):
272
+ ....: return -L.basis().keys().index(x)
273
+ sage: M = L.verma_module(La[1], basis_key=neg_key)
274
+ sage: f1 * f2 * f1 * M.highest_weight_vector() # indirect doctest
275
+ f[-alpha[1]]^2*f[-alpha[2]]*v[Lambda[1]]
276
+ - f[-alpha[1] - alpha[2]]*f[-alpha[1]]*v[Lambda[1]]
277
+ """
278
+ return (-len(x), [self._triangular_key(l) for l in x.to_word_list()])
279
+
280
+ def _repr_(self):
281
+ """
282
+ Return a string representation of ``self``.
283
+
284
+ EXAMPLES::
285
+
286
+ sage: L = LieAlgebra(QQ, cartan_type=['E',6])
287
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
288
+ sage: M = L.verma_module(2*La[1] + 3*La[2] - 5*La[5])
289
+ sage: M
290
+ Verma module with highest weight 2*Lambda[1] + 3*Lambda[2] - 5*Lambda[5]
291
+ of Lie algebra of ['E', 6] in the Chevalley basis
292
+ """
293
+ return "Verma module with highest weight {} of {}".format(self._weight, self._g)
294
+
295
+ def _latex_(self):
296
+ r"""
297
+ Return a latex representation of ``self``.
298
+
299
+ EXAMPLES::
300
+
301
+ sage: L = LieAlgebra(QQ, cartan_type=['E',7])
302
+ sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
303
+ sage: M = L.verma_module(2*La[1] + 7*La[4] - 3/4*La[7])
304
+ sage: latex(M)
305
+ M_{2 \Lambda_{1} + 7 \Lambda_{4} - \frac{3}{4} \Lambda_{7}}
306
+ """
307
+ from sage.misc.latex import latex
308
+ return "M_{{{}}}".format(latex(self._weight))
309
+
310
+ def lie_algebra(self):
311
+ r"""
312
+ Return the underlying Lie algebra of ``self``.
313
+
314
+ EXAMPLES::
315
+
316
+ sage: L = lie_algebras.so(QQ, 9)
317
+ sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
318
+ sage: M = L.verma_module(La[3] - 1/2*La[1])
319
+ sage: M.lie_algebra()
320
+ Lie algebra of ['B', 4] in the Chevalley basis
321
+ """
322
+ return self._g
323
+
324
+ def pbw_basis(self):
325
+ r"""
326
+ Return the PBW basis of the underlying Lie algebra
327
+ used to define ``self``.
328
+
329
+ EXAMPLES::
330
+
331
+ sage: L = lie_algebras.so(QQ, 8)
332
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
333
+ sage: M = L.verma_module(La[2] - 2*La[3])
334
+ sage: M.pbw_basis()
335
+ Universal enveloping algebra of Lie algebra of ['D', 4] in the Chevalley basis
336
+ in the Poincare-Birkhoff-Witt basis
337
+ """
338
+ return self._pbw
339
+
340
+ poincare_birkhoff_witt_basis = pbw_basis
341
+
342
+ @cached_method
343
+ def highest_weight_vector(self):
344
+ """
345
+ Return the highest weight vector of ``self``.
346
+
347
+ EXAMPLES::
348
+
349
+ sage: L = lie_algebras.sp(QQ, 6)
350
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
351
+ sage: M = L.verma_module(La[1] - 3*La[2])
352
+ sage: M.highest_weight_vector()
353
+ v[Lambda[1] - 3*Lambda[2]]
354
+ """
355
+ one = self.base_ring().one()
356
+ return self._from_dict({self._indices.one(): one},
357
+ remove_zeros=False, coerce=False)
358
+
359
+ def gens(self) -> tuple:
360
+ r"""
361
+ Return the generators of ``self`` as a `U(\mathfrak{g})`-module.
362
+
363
+ EXAMPLES::
364
+
365
+ sage: L = lie_algebras.sp(QQ, 6)
366
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
367
+ sage: M = L.verma_module(La[1] - 3*La[2])
368
+ sage: M.gens()
369
+ (v[Lambda[1] - 3*Lambda[2]],)
370
+ """
371
+ return (self.highest_weight_vector(),)
372
+
373
+ def highest_weight(self):
374
+ r"""
375
+ Return the highest weight of ``self``.
376
+
377
+ EXAMPLES::
378
+
379
+ sage: L = lie_algebras.so(QQ, 7)
380
+ sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
381
+ sage: M = L.verma_module(4*La[1] - 3/2*La[2])
382
+ sage: M.highest_weight()
383
+ 4*Lambda[1] - 3/2*Lambda[2]
384
+ """
385
+ return self._weight
386
+
387
+ def dual(self):
388
+ r"""
389
+ Return the dual module `M(\lambda)^{\vee}` in Category `\mathcal{O}`.
390
+
391
+ EXAMPLES::
392
+
393
+ sage: L = lie_algebras.sl(QQ, 2)
394
+ sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
395
+ sage: M = L.verma_module(2*La[1])
396
+ sage: Mc = M.dual()
397
+
398
+ sage: Mp = L.verma_module(-2*La[1])
399
+ sage: Mp.dual() is Mp
400
+ True
401
+ """
402
+ if self.is_simple():
403
+ return self
404
+ from sage.algebras.lie_algebras.bgg_dual_module import BGGDualModule
405
+ return BGGDualModule(self)
406
+
407
+ def degree_on_basis(self, m):
408
+ r"""
409
+ Return the degree (or weight) of the basis element indexed by ``m``.
410
+
411
+ EXAMPLES::
412
+
413
+ sage: L = lie_algebras.sl(QQ, 3)
414
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
415
+ sage: M = L.verma_module(2*La[1] + 3*La[2])
416
+ sage: v = M.highest_weight_vector()
417
+ sage: M.degree_on_basis(v.leading_support())
418
+ 2*Lambda[1] + 3*Lambda[2]
419
+
420
+ sage: pbw = M.pbw_basis()
421
+ sage: G = list(pbw.gens())
422
+ sage: f1, f2 = L.f()
423
+ sage: x = pbw(f1.bracket(f2)) * pbw(f1) * v
424
+ sage: x.degree()
425
+ -Lambda[1] + 3*Lambda[2]
426
+ """
427
+ P = self._weight.parent()
428
+ return self._weight + P.sum(P(e * self._g.degree_on_basis(k))
429
+ for k,e in m.dict().items())
430
+
431
+ def _coerce_map_from_(self, R):
432
+ r"""
433
+ Return if there is a coercion map from ``R`` to ``self``.
434
+
435
+ There is a coercion map from ``R`` if and only if
436
+
437
+ - there is a coercion from ``R`` into the base ring;
438
+ - ``R`` is a Verma module over the same Lie algebra and
439
+ there is a nonzero Verma module morphism from ``R``
440
+ into ``self``.
441
+
442
+ EXAMPLES::
443
+
444
+ sage: L = lie_algebras.so(QQ, 8)
445
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
446
+ sage: M = L.verma_module(La[1] + La[2])
447
+ sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
448
+ sage: Mpp = L.verma_module(M.highest_weight().dot_action([1,2]) + La[1])
449
+ sage: M._coerce_map_from_(Mp) is not None
450
+ True
451
+ sage: Mp._coerce_map_from_(M)
452
+ sage: M._coerce_map_from_(Mpp)
453
+ sage: M._coerce_map_from_(ZZ)
454
+ True
455
+ """
456
+ if self.base_ring().has_coerce_map_from(R):
457
+ return True
458
+ if isinstance(R, VermaModule) and R._g is self._g:
459
+ H = Hom(R, self)
460
+ if H.dimension() == 1:
461
+ return H.natural_map()
462
+ return super()._coerce_map_from_(R)
463
+
464
+ def _element_constructor_(self, x):
465
+ r"""
466
+ Construct an element of ``self`` from ``x``.
467
+
468
+ EXAMPLES::
469
+
470
+ sage: L = lie_algebras.sl(QQ, 3)
471
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
472
+ sage: M = L.verma_module(La[1] + 2*La[2])
473
+ sage: M(3)
474
+ 3*v[Lambda[1] + 2*Lambda[2]]
475
+ sage: pbw = M.pbw_basis()
476
+ sage: [M(g) for g in pbw.gens()]
477
+ [0,
478
+ 0,
479
+ 0,
480
+ v[Lambda[1] + 2*Lambda[2]],
481
+ 2*v[Lambda[1] + 2*Lambda[2]],
482
+ f[-alpha[2]]*v[Lambda[1] + 2*Lambda[2]],
483
+ f[-alpha[1]]*v[Lambda[1] + 2*Lambda[2]],
484
+ f[-alpha[1] - alpha[2]]*v[Lambda[1] + 2*Lambda[2]]]
485
+ """
486
+ if x in self.base_ring():
487
+ return self._from_dict({self._indices.one(): x})
488
+ if isinstance(x, self._pbw.element_class):
489
+ return self.highest_weight_vector()._acted_upon_(x, False)
490
+ return super()._element_constructor_(self, x)
491
+
492
+ def contravariant_form(self, x, y):
493
+ r"""
494
+ Return the contravariant form of ``x`` and ``y``.
495
+
496
+ Let `C(x, y)` denote the (universal) contravariant form on
497
+ `U(\mathfrak{g})`. Then the contravariant form on `M(\lambda)` is
498
+ given by evaluating `C(x, y) \in U(\mathfrak{h})` at `\lambda`.
499
+
500
+ EXAMPLES::
501
+
502
+ sage: g = LieAlgebra(QQ, cartan_type=['A', 1])
503
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
504
+ sage: M = g.verma_module(2*La[1])
505
+ sage: U = M.pbw_basis()
506
+ sage: v = M.highest_weight_vector()
507
+ sage: e, h, f = U.algebra_generators()
508
+ sage: elts = [f^k * v for k in range(8)]; elts
509
+ [v[2*Lambda[1]], f[-alpha[1]]*v[2*Lambda[1]],
510
+ f[-alpha[1]]^2*v[2*Lambda[1]], f[-alpha[1]]^3*v[2*Lambda[1]],
511
+ f[-alpha[1]]^4*v[2*Lambda[1]], f[-alpha[1]]^5*v[2*Lambda[1]],
512
+ f[-alpha[1]]^6*v[2*Lambda[1]], f[-alpha[1]]^7*v[2*Lambda[1]]]
513
+ sage: matrix([[M.contravariant_form(x, y) for x in elts] for y in elts])
514
+ [1 0 0 0 0 0 0 0]
515
+ [0 2 0 0 0 0 0 0]
516
+ [0 0 4 0 0 0 0 0]
517
+ [0 0 0 0 0 0 0 0]
518
+ [0 0 0 0 0 0 0 0]
519
+ [0 0 0 0 0 0 0 0]
520
+ [0 0 0 0 0 0 0 0]
521
+ [0 0 0 0 0 0 0 0]
522
+ """
523
+ pbw = self._pbw
524
+ I = pbw._indices
525
+ xlift = pbw.element_class(pbw, {I(m._monomial): c for m, c in x._monomial_coefficients.items()})
526
+ ylift = pbw.element_class(pbw, {I(m._monomial): c for m, c in y._monomial_coefficients.items()})
527
+ univ = pbw.contravariant_form(xlift, ylift)
528
+ la = self._weight
529
+ R = self.base_ring()
530
+ return R.sum(c * R.prod(la.scalar(k) ** e for k, e in m._monomial.items())
531
+ for m, c in univ._monomial_coefficients.items())
532
+
533
+ @lazy_attribute
534
+ def _dominant_data(self):
535
+ r"""
536
+ Return the closest to dominant weight in the dot orbit of
537
+ the highest weight of ``self`` and the corresponding reduced word.
538
+
539
+ EXAMPLES::
540
+
541
+ sage: L = lie_algebras.sl(QQ, 3)
542
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
543
+ sage: M = L.verma_module(La[1] + La[2])
544
+ sage: M._dominant_data
545
+ (Lambda[1] + Lambda[2], [])
546
+ sage: M = L.verma_module(M.highest_weight().dot_action([1,2]))
547
+ sage: M._dominant_data
548
+ (Lambda[1] + Lambda[2], [1, 2])
549
+ sage: M = L.verma_module(-4*La[1] - La[2])
550
+ sage: M._dominant_data
551
+ (-Lambda[1] + 2*Lambda[2], [1, 2])
552
+ """
553
+ P = self._weight.parent()
554
+ wt, w = (self._weight + P.rho()).to_dominant_chamber(reduced_word=True)
555
+ return (wt - P.rho(), w)
556
+
557
+ def is_singular(self):
558
+ r"""
559
+ Return if ``self`` is a singular Verma module.
560
+
561
+ A Verma module `M_{\lambda}` is *singular* if there does not
562
+ exist a dominant weight `\tilde{\lambda}` that is in the dot
563
+ orbit of `\lambda`. We call a Verma module *regular* otherwise.
564
+
565
+ EXAMPLES::
566
+
567
+ sage: L = lie_algebras.sl(QQ, 3)
568
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
569
+ sage: M = L.verma_module(La[1] + La[2])
570
+ sage: M.is_singular()
571
+ False
572
+ sage: M = L.verma_module(La[1] - La[2])
573
+ sage: M.is_singular()
574
+ True
575
+ sage: M = L.verma_module(2*La[1] - 10*La[2])
576
+ sage: M.is_singular()
577
+ False
578
+ sage: M = L.verma_module(-2*La[1] - 2*La[2])
579
+ sage: M.is_singular()
580
+ False
581
+ sage: M = L.verma_module(-4*La[1] - La[2])
582
+ sage: M.is_singular()
583
+ True
584
+ """
585
+ return not self._dominant_data[0].is_dominant()
586
+
587
+ def is_simple(self):
588
+ r"""
589
+ Return if ``self`` is a simple module.
590
+
591
+ A Verma module `M_{\lambda}` is simple if and only if `\lambda`
592
+ is *Verma antidominant* in the sense
593
+
594
+ .. MATH::
595
+
596
+ \langle \lambda + \rho, \alpha^{\vee} \rangle \notin \ZZ_{>0}
597
+
598
+ for all positive roots `\alpha`.
599
+
600
+ EXAMPLES::
601
+
602
+ sage: L = lie_algebras.sl(QQ, 3)
603
+ sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
604
+ sage: L.verma_module(La[1] + La[2]).is_simple()
605
+ False
606
+ sage: L.verma_module(-La[1] - La[2]).is_simple()
607
+ True
608
+ sage: L.verma_module(3/2*La[1] + 1/2*La[2]).is_simple()
609
+ False
610
+ sage: L.verma_module(3/2*La[1] + 1/3*La[2]).is_simple()
611
+ True
612
+ sage: L.verma_module(-3*La[1] + 2/3*La[2]).is_simple()
613
+ True
614
+ """
615
+ return self._weight.is_verma_dominant(positive=False)
616
+
617
+ def is_projective(self):
618
+ r"""
619
+ Return if ``self`` is a projective module in Category `\mathcal{O}`.
620
+
621
+ A Verma module `M_{\lambda}` is projective (in Category `\mathcal{O}`
622
+ if and only if `\lambda` is *Verma dominant* in the sense
623
+
624
+ .. MATH::
625
+
626
+ \langle \lambda + \rho, \alpha^{\vee} \rangle \notin \ZZ_{<0}
627
+
628
+ for all positive roots `\alpha`.
629
+
630
+ EXAMPLES::
631
+
632
+ sage: L = lie_algebras.sl(QQ, 3)
633
+ sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
634
+ sage: L.verma_module(La[1] + La[2]).is_projective()
635
+ True
636
+ sage: L.verma_module(-La[1] - La[2]).is_projective()
637
+ True
638
+ sage: L.verma_module(3/2*La[1] + 1/2*La[2]).is_projective()
639
+ True
640
+ sage: L.verma_module(3/2*La[1] + 1/3*La[2]).is_projective()
641
+ True
642
+ sage: L.verma_module(-3*La[1] + 2/3*La[2]).is_projective()
643
+ False
644
+ """
645
+ return self._weight.is_verma_dominant()
646
+
647
+ def homogeneous_component_basis(self, d):
648
+ r"""
649
+ Return a basis for the ``d``-th homogeneous component of ``self``.
650
+
651
+ EXAMPLES::
652
+
653
+ sage: L = lie_algebras.sl(QQ, 3)
654
+ sage: P = L.cartan_type().root_system().weight_lattice()
655
+ sage: La = P.fundamental_weights()
656
+ sage: al = P.simple_roots()
657
+ sage: mu = 2*La[1] + 3*La[2]
658
+ sage: M = L.verma_module(mu)
659
+ sage: M.homogeneous_component_basis(mu - al[2])
660
+ [f[-alpha[2]]*v[2*Lambda[1] + 3*Lambda[2]]]
661
+ sage: M.homogeneous_component_basis(mu - 3*al[2])
662
+ [f[-alpha[2]]^3*v[2*Lambda[1] + 3*Lambda[2]]]
663
+ sage: M.homogeneous_component_basis(mu - 3*al[2] - 2*al[1])
664
+ [f[-alpha[2]]*f[-alpha[1] - alpha[2]]^2*v[2*Lambda[1] + 3*Lambda[2]],
665
+ f[-alpha[2]]^2*f[-alpha[1]]*f[-alpha[1] - alpha[2]]*v[2*Lambda[1] + 3*Lambda[2]],
666
+ f[-alpha[2]]^3*f[-alpha[1]]^2*v[2*Lambda[1] + 3*Lambda[2]]]
667
+ sage: M.homogeneous_component_basis(mu - La[1])
668
+ Family ()
669
+ """
670
+ diff = (d - self._weight)._to_root_vector()
671
+ if diff is None or not all(coeff <= 0 and coeff in ZZ for coeff in diff):
672
+ return Family([])
673
+ return sorted(self._homogeneous_component_f(diff))
674
+
675
+ weight_space_basis = homogeneous_component_basis
676
+
677
+ @cached_method
678
+ def _homogeneous_component_f(self, d):
679
+ r"""
680
+ Return a basis of the PBW given by ``d`` expressed in the
681
+ root lattice in terms of the simple roots.
682
+
683
+ INPUT:
684
+
685
+ - ``d`` -- the coefficients of the simple roots as a vector
686
+
687
+ EXAMPLES::
688
+
689
+ sage: L = lie_algebras.sl(QQ, 3)
690
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
691
+ sage: M = L.verma_module(La[1] + La[2])
692
+ sage: sorted(M._homogeneous_component_f(vector([-1,-2])), key=str)
693
+ [f[-alpha[2]]*f[-alpha[1] - alpha[2]]*v[Lambda[1] + Lambda[2]],
694
+ f[-alpha[2]]^2*f[-alpha[1]]*v[Lambda[1] + Lambda[2]]]
695
+ sage: sorted(M._homogeneous_component_f(vector([-5,-4])), key=str)
696
+ [f[-alpha[1]]*f[-alpha[1] - alpha[2]]^4*v[Lambda[1] + Lambda[2]],
697
+ f[-alpha[2]]*f[-alpha[1]]^2*f[-alpha[1] - alpha[2]]^3*v[Lambda[1] + Lambda[2]],
698
+ f[-alpha[2]]^2*f[-alpha[1]]^3*f[-alpha[1] - alpha[2]]^2*v[Lambda[1] + Lambda[2]],
699
+ f[-alpha[2]]^3*f[-alpha[1]]^4*f[-alpha[1] - alpha[2]]*v[Lambda[1] + Lambda[2]],
700
+ f[-alpha[2]]^4*f[-alpha[1]]^5*v[Lambda[1] + Lambda[2]]]
701
+ """
702
+ if not d:
703
+ return frozenset([self.highest_weight_vector()])
704
+ f = {i: self._pbw(g) for i, g in enumerate(self._g.f())}
705
+ basis = d.parent().basis() # Standard basis vectors
706
+ ret = set()
707
+
708
+ def degree(m):
709
+ m = m.dict()
710
+ if not m:
711
+ return d.parent().zero()
712
+ return sum(e * self._g.degree_on_basis(k)
713
+ for k, e in m.items()).to_vector()
714
+ for i, fi in f.items():
715
+ if d[i] == 0:
716
+ continue
717
+ for b in self._homogeneous_component_f(d + basis[i]):
718
+ temp = fi * b
719
+ ret.update([self.monomial(m) for m in temp.support()
720
+ if degree(m) == d])
721
+ return frozenset(ret)
722
+
723
+ def _Hom_(self, Y, category=None, **options):
724
+ r"""
725
+ Return the homset from ``self`` to ``Y`` in the
726
+ category ``category``.
727
+
728
+ INPUT:
729
+
730
+ - ``Y`` -- an object
731
+ - ``category`` -- a subcategory of :class:`Crystals`() or ``None``
732
+
733
+ The sole purpose of this method is to construct the homset as a
734
+ :class:`~sage.algebras.lie_algebras.verma_module.VermaModuleHomset`.
735
+ If ``category`` is specified and is not a subcategory of
736
+ ``self.category()``, a :exc:`TypeError` is raised instead.
737
+
738
+ This method is not meant to be called directly. Please use
739
+ :func:`sage.categories.homset.Hom` instead.
740
+
741
+ EXAMPLES::
742
+
743
+ sage: L = lie_algebras.sl(QQ, 3)
744
+ sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
745
+ sage: M = L.verma_module(La[1] + La[2])
746
+ sage: Mp = L.verma_module(3*La[1] - 3*La[2])
747
+ sage: H = Hom(M, Mp)
748
+ sage: type(H)
749
+ <...VermaModuleHomset_with_category_with_equality_by_id'>
750
+ """
751
+ from sage.algebras.lie_algebras.bgg_dual_module import BGGDualModule, SimpleModule
752
+ if not ((isinstance(Y, (VermaModule, SimpleModule))
753
+ or (isinstance(Y, BGGDualModule) and Y._module is self))
754
+ and self._g is Y.lie_algebra()):
755
+ raise TypeError("{} must be an object in Category O of {}".format(Y, self._g))
756
+ if category is not None and not category.is_subcategory(self.category()):
757
+ raise TypeError("{} is not a subcategory of {}".format(category, self.category()))
758
+ return VermaModuleHomset(self, Y)
759
+
760
+ class Element(CombinatorialFreeModule.Element):
761
+ def _acted_upon_(self, scalar, self_on_left=False):
762
+ r"""
763
+ Return the action of ``scalar`` on ``self``.
764
+
765
+ EXAMPLES:
766
+
767
+ Check that other PBW algebras have an action::
768
+
769
+ sage: L = lie_algebras.sp(QQ, 6)
770
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
771
+ sage: M = L.verma_module(La[1] - 3*La[2])
772
+ sage: PBW = L.pbw_basis()
773
+ sage: F1 = PBW(L.f(1))
774
+ sage: F1 * M.highest_weight_vector()
775
+ f[-alpha[1]]*v[Lambda[1] - 3*Lambda[2]]
776
+ sage: F1.parent() is M.pbw_basis()
777
+ False
778
+ sage: F1 * M.highest_weight_vector()
779
+ f[-alpha[1]]*v[Lambda[1] - 3*Lambda[2]]
780
+ sage: E1 = PBW(L.e(1))
781
+ sage: E1 * F1
782
+ PBW[alpha[1]]*PBW[-alpha[1]]
783
+ sage: E1 * F1 * M.highest_weight_vector()
784
+ v[Lambda[1] - 3*Lambda[2]]
785
+ sage: M.pbw_basis()(E1 * F1)
786
+ PBW[-alpha[1]]*PBW[alpha[1]] + PBW[alphacheck[1]]
787
+ """
788
+ P = self.parent()
789
+ # Check for scalars first
790
+ # TODO: Pass by these checks if a PBW basis element of the Lie algebra
791
+ if scalar in P.base_ring():
792
+ # Don't have this be a super call
793
+ return CombinatorialFreeModule.Element._acted_upon_(self, scalar, self_on_left)
794
+
795
+ # Check for Lie algebra elements
796
+ try:
797
+ scalar = P._g(scalar)
798
+ except (ValueError, TypeError):
799
+ pass
800
+
801
+ # Check for PBW elements
802
+ try:
803
+ scalar = P._pbw(scalar)
804
+ except (ValueError, TypeError):
805
+ # Cannot be made into a PBW element, so propagate it up
806
+ return CombinatorialFreeModule.Element._acted_upon_(self,
807
+ scalar, self_on_left)
808
+
809
+ # We only implement x * self, i.e., as a left module
810
+ if self_on_left:
811
+ return None
812
+
813
+ # Lift ``self`` to the PBW basis and do multiplication there
814
+ mc = self._monomial_coefficients
815
+ d = {P._pbw._indices(x.dict()): mc[x] for x in mc} # Lift the index set
816
+ ret = scalar * P._pbw._from_dict(d, remove_zeros=False, coerce=False)
817
+
818
+ # Now have ``ret`` act on the highest weight vector
819
+ d = {}
820
+ for m in ret._monomial_coefficients:
821
+ c = ret._monomial_coefficients[m]
822
+ mp = {}
823
+ for k,e in reversed(m._sorted_items()):
824
+ part = P._g._part_on_basis(k)
825
+ if part > 0:
826
+ mp = None
827
+ break
828
+ elif part == 0:
829
+ c *= P._g._weight_action(k, P._weight)**e
830
+ else:
831
+ mp[k] = e
832
+ # This term is 0, so nothing to do
833
+ if mp is None:
834
+ continue
835
+ # Convert back to an element of the indexing set
836
+ mp = P._indices(mp)
837
+ if mp in d:
838
+ d[mp] += c
839
+ else:
840
+ d[mp] = c
841
+ return P._from_dict(d)
842
+
843
+ _lmul_ = _acted_upon_
844
+ _rmul_ = _acted_upon_
845
+
846
+
847
+ #####################################################################
848
+ # Morphisms and Homset
849
+
850
+
851
+ class VermaModuleMorphism(Morphism):
852
+ r"""
853
+ A morphism of a Verma module to another module in Category `\mathcal{O}`.
854
+ """
855
+ def __init__(self, parent, scalar):
856
+ """
857
+ Initialize ``self``.
858
+
859
+ EXAMPLES::
860
+
861
+ sage: L = lie_algebras.sl(QQ, 3)
862
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
863
+ sage: M = L.verma_module(La[1] + La[2])
864
+ sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
865
+ sage: phi = Hom(Mp, M).natural_map()
866
+ sage: TestSuite(phi).run()
867
+ """
868
+ self._scalar = scalar
869
+ Morphism.__init__(self, parent)
870
+
871
+ def _repr_type(self):
872
+ """
873
+ Return a string describing the specific type of this map,
874
+ to be used when printing ``self``.
875
+
876
+ EXAMPLES::
877
+
878
+ sage: L = lie_algebras.sl(QQ, 3)
879
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
880
+ sage: M = L.verma_module(La[1] + La[2])
881
+ sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
882
+ sage: phi = Hom(Mp, M).natural_map()
883
+ sage: phi._repr_type()
884
+ 'Verma module'
885
+ """
886
+ return "Verma module"
887
+
888
+ def _repr_defn(self):
889
+ r"""
890
+ Return a string describing the definition of ``self``,
891
+ to be used when printing ``self``.
892
+
893
+ EXAMPLES::
894
+
895
+ sage: L = lie_algebras.sl(QQ, 3)
896
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
897
+ sage: M = L.verma_module(La[1] + La[2])
898
+ sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
899
+ sage: phi = Hom(Mp, M).natural_map()
900
+ sage: phi._repr_defn()
901
+ 'v[-5*Lambda[1] + Lambda[2]] |--> f[-alpha[2]]^2*f[-alpha[1]]^4*v[Lambda[1]
902
+ + Lambda[2]] + 8*f[-alpha[2]]*f[-alpha[1]]^3*f[-alpha[1] - alpha[2]]*v[Lambda[1]
903
+ + Lambda[2]] + 12*f[-alpha[1]]^2*f[-alpha[1] - alpha[2]]^2*v[Lambda[1] + Lambda[2]]'
904
+
905
+ alpha[1]]^2*f[-alpha[1] - alpha[2]]^2*v[Lambda[1] + Lambda[2]]'
906
+ sage: psi = Hom(M, Mp).natural_map()
907
+ sage: psi
908
+ Verma module morphism:
909
+ From: Verma module with highest weight Lambda[1] + Lambda[2]
910
+ of Lie algebra of ['A', 2] in the Chevalley basis
911
+ To: Verma module with highest weight -5*Lambda[1] + Lambda[2]
912
+ of Lie algebra of ['A', 2] in the Chevalley basis
913
+ Defn: v[Lambda[1] + Lambda[2]] |--> 0
914
+ """
915
+ v = self.domain().highest_weight_vector()
916
+ if not self._scalar:
917
+ return "{} |--> {}".format(v, self.codomain().zero())
918
+ return "{} |--> {}".format(v, self._scalar * self.parent().highest_weight_image())
919
+
920
+ def _richcmp_(self, other, op):
921
+ r"""
922
+ Return whether this morphism and ``other`` satisfy ``op``.
923
+
924
+ EXAMPLES::
925
+
926
+ sage: L = lie_algebras.sl(QQ, 3)
927
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
928
+ sage: M = L.verma_module(La[1] + La[2])
929
+ sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
930
+ sage: H = Hom(Mp, M)
931
+ sage: H(1) < H(2)
932
+ True
933
+ sage: H(2) < H(1)
934
+ False
935
+ sage: H.zero() == H(0)
936
+ True
937
+ sage: H(3) <= H(3)
938
+ True
939
+ """
940
+ return richcmp(self._scalar, other._scalar, op)
941
+
942
+ def _call_(self, x):
943
+ r"""
944
+ Apply this morphism to ``x``.
945
+
946
+ EXAMPLES::
947
+
948
+ sage: L = lie_algebras.sl(QQ, 3)
949
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
950
+ sage: M = L.verma_module(La[1] + La[2])
951
+ sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
952
+ sage: pbw = M.pbw_basis()
953
+ sage: f1, f2 = pbw.f()
954
+ sage: v = Mp.highest_weight_vector()
955
+ sage: phi = Hom(Mp, M).natural_map()
956
+ sage: phi(f1 * v) == f1 * phi(v)
957
+ True
958
+ sage: phi(f2 * f1 * v) == f2 * f1 * phi(v)
959
+ True
960
+ sage: phi(f1 * f2 * f1 * v) == f1 * f2 * f1 * phi(v)
961
+ True
962
+
963
+ sage: Mpp = L.verma_module(M.highest_weight().dot_action([1,2]) + La[1])
964
+ sage: psi = Hom(Mpp, M).natural_map()
965
+ sage: v = Mpp.highest_weight_vector()
966
+ sage: psi(v)
967
+ 0
968
+ """
969
+ if not self._scalar or not self.parent().highest_weight_image():
970
+ return self.codomain().zero()
971
+ mc = x.monomial_coefficients(copy=False)
972
+ return self.codomain().linear_combination((self._on_basis(m), self._scalar * c)
973
+ for m,c in mc.items())
974
+
975
+ def _on_basis(self, m):
976
+ r"""
977
+ Return the image of the basis element indexed by ``m``.
978
+
979
+ EXAMPLES::
980
+
981
+ sage: L = lie_algebras.sl(QQ, 3)
982
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
983
+ sage: M = L.verma_module(La[1] + La[2])
984
+ sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
985
+ sage: pbw = M.pbw_basis()
986
+ sage: f1, f2 = pbw.f()
987
+ sage: v = Mp.highest_weight_vector()
988
+ sage: phi = Hom(Mp, M).natural_map()
989
+ sage: phi._on_basis((f1 * v).leading_support()) == f1 * phi(v)
990
+ True
991
+ """
992
+ vec = self.parent().highest_weight_image()
993
+ if not vec:
994
+ return vec
995
+ pbw = self.codomain()._pbw
996
+ return pbw.monomial(pbw._indices(m.dict())) * vec
997
+
998
+ def _add_(self, other):
999
+ """
1000
+ Add ``self`` and ``other``.
1001
+
1002
+ EXAMPLES::
1003
+
1004
+ sage: L = lie_algebras.sl(QQ, 3)
1005
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
1006
+ sage: M = L.verma_module(La[1] + La[2])
1007
+ sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
1008
+ sage: phi = Hom(Mp, M).natural_map()
1009
+ sage: (phi + 3/2 * phi)._scalar
1010
+ 5/2
1011
+ """
1012
+ return type(self)(self.parent(), self._scalar + other._scalar)
1013
+
1014
+ def _sub_(self, other):
1015
+ """
1016
+ Subtract ``self`` and ``other``.
1017
+
1018
+ EXAMPLES::
1019
+
1020
+ sage: L = lie_algebras.sl(QQ, 3)
1021
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
1022
+ sage: M = L.verma_module(La[1] + La[2])
1023
+ sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
1024
+ sage: phi = Hom(Mp, M).natural_map()
1025
+ sage: (phi - 3/2 * phi)._scalar
1026
+ -1/2
1027
+ """
1028
+ return type(self)(self.parent(), self._scalar - other._scalar)
1029
+
1030
+ def _acted_upon_(self, other, self_on_left):
1031
+ """
1032
+ Return the action of ``other`` on ``self``.
1033
+
1034
+ EXAMPLES::
1035
+
1036
+ sage: L = lie_algebras.sl(QQ, 3)
1037
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
1038
+ sage: M = L.verma_module(La[1] + La[2])
1039
+ sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
1040
+ sage: phi = Hom(Mp, M).natural_map()
1041
+ sage: phi._scalar
1042
+ 1
1043
+ sage: (0 * phi)._scalar
1044
+ 0
1045
+ sage: R.<x> = QQ[]
1046
+ sage: x * phi
1047
+ Traceback (most recent call last):
1048
+ ...
1049
+ TypeError: unsupported operand parent(s) for *: ...
1050
+ """
1051
+ R = self.parent().base_ring()
1052
+ if other not in R:
1053
+ return None
1054
+ return type(self)(self.parent(), R(other) * self._scalar)
1055
+
1056
+ def _composition_(self, right, homset):
1057
+ r"""
1058
+ Return the composition of ``self`` and ``right``.
1059
+
1060
+ INPUT:
1061
+
1062
+ - ``self``, ``right`` -- maps
1063
+ - ``homset`` -- a homset
1064
+
1065
+ ASSUMPTION:
1066
+
1067
+ The codomain of ``right`` is contained in the domain of ``self``.
1068
+ This assumption is not verified.
1069
+
1070
+ EXAMPLES::
1071
+
1072
+ sage: L = lie_algebras.sl(QQ, 3)
1073
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
1074
+ sage: M = L.verma_module(La[1] + La[2])
1075
+ sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
1076
+ sage: Mpp = L.verma_module(M.highest_weight().dot_action([1,2]) + La[1])
1077
+ sage: phi = Hom(Mp, M).natural_map()
1078
+ sage: psi = Hom(Mpp, Mp).natural_map()
1079
+ sage: xi = phi * psi
1080
+ sage: xi._scalar
1081
+ 0
1082
+ """
1083
+ if (isinstance(right, VermaModuleMorphism)
1084
+ and right.domain()._g is self.codomain()._g):
1085
+ return homset.element_class(homset, right._scalar * self._scalar)
1086
+ return super()._composition_(right, homset)
1087
+
1088
+ def is_injective(self):
1089
+ r"""
1090
+ Return if ``self`` is injective or not.
1091
+
1092
+ A morphism `\phi : M \to M'` from a Verma module `M` to another
1093
+ Verma module `M'` is injective if and only if `\dim \hom(M, M') = 1`
1094
+ and `\phi \neq 0`. If `M'` is a dual Verma or simple module, then
1095
+ the result is not injective.
1096
+
1097
+ EXAMPLES::
1098
+
1099
+ sage: L = lie_algebras.sl(QQ, 3)
1100
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
1101
+ sage: M = L.verma_module(La[1] + La[2])
1102
+ sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
1103
+ sage: Mpp = L.verma_module(M.highest_weight().dot_action([1,2]) + La[1])
1104
+ sage: phi = Hom(Mp, M).natural_map()
1105
+ sage: phi.is_injective()
1106
+ True
1107
+ sage: (0 * phi).is_injective()
1108
+ False
1109
+ sage: psi = Hom(Mpp, Mp).natural_map()
1110
+ sage: psi.is_injective()
1111
+ False
1112
+ """
1113
+ if not isinstance(self.codomain(), VermaModule):
1114
+ return False
1115
+ return bool(self._scalar)
1116
+
1117
+ def is_surjective(self):
1118
+ r"""
1119
+ Return if ``self`` is surjective or not.
1120
+
1121
+ A morphism `\phi : M \to M'` from a Verma module `M` to another
1122
+ Verma module `M'` is surjective if and only if the domain is
1123
+ equal to the codomain and it is not the zero morphism.
1124
+
1125
+ If `M'` is a simple module, then this surjective if and only if
1126
+ `\dim \hom(M, M') = 1` and `\phi \neq 0`.
1127
+
1128
+ EXAMPLES::
1129
+
1130
+ sage: L = lie_algebras.sl(QQ, 3)
1131
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
1132
+ sage: M = L.verma_module(La[1] + La[2])
1133
+ sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
1134
+ sage: phi = Hom(M, M).natural_map()
1135
+ sage: phi.is_surjective()
1136
+ True
1137
+ sage: (0 * phi).is_surjective()
1138
+ False
1139
+ sage: psi = Hom(Mp, M).natural_map()
1140
+ sage: psi.is_surjective()
1141
+ False
1142
+ """
1143
+ if not bool(self._scalar):
1144
+ return False
1145
+
1146
+ if isinstance(self.codomain(), VermaModule):
1147
+ return self.domain() == self.codomain()
1148
+
1149
+ from sage.algebras.lie_algebras.bgg_dual_module import SimpleModule
1150
+ if isinstance(self.codomain(), SimpleModule):
1151
+ return self.domain().highest_weight() == self.codomain().highest_weight()
1152
+
1153
+ return False
1154
+
1155
+ def image(self):
1156
+ r"""
1157
+ Return the image of ``self``.
1158
+
1159
+ EXAMPLES::
1160
+
1161
+ sage: g = LieAlgebra(QQ, cartan_type=['B', 2])
1162
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
1163
+ sage: M = g.verma_module(La[1] + 2*La[2])
1164
+ sage: Mp = g.verma_module(La[1] + 3*La[2])
1165
+ sage: phi = Hom(M, Mp).natural_map()
1166
+ sage: phi.image()
1167
+ Free module generated by {} over Rational Field
1168
+ sage: Mc = M.dual()
1169
+ sage: phi = Hom(M, Mc).natural_map()
1170
+ sage: L = phi.image(); L
1171
+ Simple module with highest weight Lambda[1] + 2*Lambda[2] of
1172
+ Lie algebra of ['B', 2] in the Chevalley basis
1173
+ sage: psi = Hom(M, L).natural_map()
1174
+ sage: psi.image()
1175
+ Simple module with highest weight Lambda[1] + 2*Lambda[2] of
1176
+ Lie algebra of ['B', 2] in the Chevalley basis
1177
+ """
1178
+ C = self.codomain()
1179
+ if not bool(self._scalar):
1180
+ return C.submodule([])
1181
+
1182
+ if isinstance(C, VermaModule):
1183
+ if self.domain() == C:
1184
+ return C
1185
+ raise NotImplementedError("submodules of Verma modules not yet implemented")
1186
+
1187
+ from sage.algebras.lie_algebras.bgg_dual_module import BGGDualModule, SimpleModule
1188
+ if isinstance(C, BGGDualModule) and isinstance(C._module, VermaModule):
1189
+ return SimpleModule(C.lie_algebra(), C.highest_weight(), prefix=C._indices.prefix(),
1190
+ basis_key=C._module._basis_key)
1191
+
1192
+ if isinstance(self.codomain(), SimpleModule):
1193
+ return self.codomain()
1194
+
1195
+
1196
+ class VermaModuleHomset(Homset):
1197
+ r"""
1198
+ The set of morphisms from a Verma module to another module in
1199
+ Category `\mathcal{O}` considered as `U(\mathfrak{g})`-representations.
1200
+
1201
+ This currently assumes the codomain is a Verma module, its dual,
1202
+ or a simple module.
1203
+
1204
+ Let `M_{w \cdot \lambda}` and `M_{w' \cdot \lambda'}` be
1205
+ Verma modules, `\cdot` is the dot action, and `\lambda + \rho`,
1206
+ `\lambda' + \rho` are dominant weights. Then we have
1207
+
1208
+ .. MATH::
1209
+
1210
+ \dim \hom(M_{w \cdot \lambda}, M_{w' \cdot \lambda'}) = 1
1211
+
1212
+ if and only if `\lambda = \lambda'` and `w' \leq w` in Bruhat
1213
+ order. Otherwise the homset is 0 dimensional.
1214
+
1215
+ If the codomain is a dual Verma module `M_{\mu}^{\vee}`, then the
1216
+ homset is `\delta_{\lambda\mu}` dimensional. When `\mu = \lambda`,
1217
+ the image is the simple module `L_{\lambda}`.
1218
+ """
1219
+ def __call__(self, x, **options):
1220
+ r"""
1221
+ Construct a morphism in this homset from ``x`` if possible.
1222
+
1223
+ EXAMPLES::
1224
+
1225
+ sage: L = lie_algebras.sl(QQ, 3)
1226
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
1227
+ sage: M = L.verma_module(La[1] + La[2])
1228
+ sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
1229
+ sage: Mpp = L.verma_module(M.highest_weight().dot_action([1,2,1]))
1230
+ sage: phi = Hom(Mp, M).natural_map()
1231
+ sage: Hom(Mpp, M)(phi)
1232
+ Verma module morphism:
1233
+ From: Verma module with highest weight -3*Lambda[1] - 3*Lambda[2]
1234
+ of Lie algebra of ['A', 2] in the Chevalley basis
1235
+ To: Verma module with highest weight Lambda[1] + Lambda[2]
1236
+ of Lie algebra of ['A', 2] in the Chevalley basis
1237
+ Defn: v[-3*Lambda[1] - 3*Lambda[2]] |-->
1238
+ f[-alpha[2]]^4*f[-alpha[1]]^4*v[Lambda[1] + Lambda[2]]
1239
+ + 8*f[-alpha[2]]^3*f[-alpha[1]]^3*f[-alpha[1] - alpha[2]]*v[Lambda[1] + Lambda[2]]
1240
+ + 12*f[-alpha[2]]^2*f[-alpha[1]]^2*f[-alpha[1] - alpha[2]]^2*v[Lambda[1] + Lambda[2]]
1241
+
1242
+ sage: psi = Hom(Mpp, Mp).natural_map()
1243
+ sage: Hom(Mpp, M)(psi)
1244
+ Verma module morphism:
1245
+ From: Verma module with highest weight -3*Lambda[1] - 3*Lambda[2]
1246
+ of Lie algebra of ['A', 2] in the Chevalley basis
1247
+ To: Verma module with highest weight Lambda[1] + Lambda[2]
1248
+ of Lie algebra of ['A', 2] in the Chevalley basis
1249
+ Defn: v[-3*Lambda[1] - 3*Lambda[2]] |-->
1250
+ f[-alpha[2]]^4*f[-alpha[1]]^4*v[Lambda[1] + Lambda[2]]
1251
+ + 8*f[-alpha[2]]^3*f[-alpha[1]]^3*f[-alpha[1] - alpha[2]]*v[Lambda[1] + Lambda[2]]
1252
+ + 12*f[-alpha[2]]^2*f[-alpha[1]]^2*f[-alpha[1] - alpha[2]]^2*v[Lambda[1] + Lambda[2]]
1253
+ """
1254
+ if isinstance(x, VermaModuleMorphism):
1255
+ if x.parent() is self:
1256
+ return x
1257
+ if x.parent() == self:
1258
+ x._set_parent(self) # needed due to non-uniqueness of homsets
1259
+ return x
1260
+
1261
+ if x.domain() != self.domain():
1262
+ x = x * Hom(self.domain(), x.domain()).natural_map()
1263
+ if x.codomain() != self.codomain():
1264
+ x = Hom(x.codomain(), self.codomain()).natural_map() * x
1265
+
1266
+ return x
1267
+
1268
+ if x in self.base_ring():
1269
+ if self.singular_vector() is None:
1270
+ return self.zero()
1271
+ return self.element_class(self, self.base_ring()(x))
1272
+
1273
+ return super().__call__(x, **options)
1274
+
1275
+ def _an_element_(self):
1276
+ r"""
1277
+ Return an element of ``self``.
1278
+
1279
+ EXAMPLES::
1280
+
1281
+ sage: L = lie_algebras.sl(QQ, 3)
1282
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
1283
+ sage: M = L.verma_module(La[1] + La[2])
1284
+ sage: Mp = L.verma_module(M.highest_weight().dot_action([2]))
1285
+ sage: H = Hom(Mp, M)
1286
+ sage: H._an_element_()
1287
+ Verma module morphism:
1288
+ From: Verma module with highest weight 3*Lambda[1] - 3*Lambda[2]
1289
+ of Lie algebra of ['A', 2] in the Chevalley basis
1290
+ To: Verma module with highest weight Lambda[1] + Lambda[2]
1291
+ of Lie algebra of ['A', 2] in the Chevalley basis
1292
+ Defn: v[3*Lambda[1] - 3*Lambda[2]] |-->
1293
+ f[-alpha[2]]^2*v[Lambda[1] + Lambda[2]]
1294
+ """
1295
+ return self.natural_map()
1296
+
1297
+ def highest_weight_image(self):
1298
+ r"""
1299
+ Return the image of the highest weight vector of the domain
1300
+ in the codomain.
1301
+
1302
+ EXAMPLES::
1303
+
1304
+ sage: g = LieAlgebra(QQ, cartan_type=['C', 3])
1305
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
1306
+ sage: M = g.verma_module(La[1] + 2*La[3])
1307
+ sage: Mc = M.dual()
1308
+ sage: H = Hom(M, Mc)
1309
+ sage: H.highest_weight_image()
1310
+ v[Lambda[1] + 2*Lambda[3]]^*
1311
+ sage: L = H.natural_map().image()
1312
+ sage: Hp = Hom(M, L)
1313
+ sage: Hp.highest_weight_image()
1314
+ u[Lambda[1] + 2*Lambda[3]]
1315
+ """
1316
+ C = self.codomain()
1317
+ if isinstance(C, VermaModule):
1318
+ # singular_vector() is cached, so we can safely call it twice
1319
+ if self.singular_vector() is None:
1320
+ return C.zero()
1321
+ return self.singular_vector()
1322
+ # Otherwise, it is a dual Verma or a simple, so the image
1323
+ # must be the highest weight vector.
1324
+ if self.domain().highest_weight() == C.highest_weight():
1325
+ return C.highest_weight_vector()
1326
+ return C.zero()
1327
+
1328
+ @cached_method
1329
+ def singular_vector(self):
1330
+ r"""
1331
+ Return the singular vector in the codomain corresponding
1332
+ to the domain's highest weight element or ``None`` if no
1333
+ such element exists.
1334
+
1335
+ ALGORITHM:
1336
+
1337
+ We essentially follow the algorithm laid out in [deG2005]_.
1338
+ We split the main computation into two cases. If there exists
1339
+ an `i` such that `\langle \lambda + \rho, \alpha_i^{\vee}
1340
+ \rangle = m > 0` (i.e., the weight `\lambda` is `i`-dominant
1341
+ with respect to the dot action), then we use the `\mathfrak{sl}_2`
1342
+ relation on `M_{s_i \cdot \lambda} \to M_{\lambda}` to
1343
+ construct the singular vector `f_i^m v_{\lambda}`. Otherwise
1344
+ we find the shortest root `\alpha` such that `\langle \lambda
1345
+ + \rho, \alpha^{\vee} \rangle > 0` and explicitly compute the
1346
+ kernel with respect to the weight basis elements. We iterate
1347
+ this until we reach `\mu`.
1348
+
1349
+ EXAMPLES::
1350
+
1351
+ sage: L = lie_algebras.sp(QQ, 6)
1352
+ sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
1353
+ sage: la = La[1] - La[3]
1354
+ sage: mu = la.dot_action([1,2])
1355
+ sage: M = L.verma_module(la)
1356
+ sage: Mp = L.verma_module(mu)
1357
+ sage: H = Hom(Mp, M)
1358
+ sage: v = H.singular_vector(); v # needs sage.rings.number_field
1359
+ f[-alpha[2]]*f[-alpha[1]]^3*v[Lambda[1] - Lambda[3]]
1360
+ + 3*f[-alpha[1]]^2*f[-alpha[1] - alpha[2]]*v[Lambda[1] - Lambda[3]]
1361
+ sage: v.degree() == Mp.highest_weight() # needs sage.rings.number_field
1362
+ True
1363
+
1364
+ ::
1365
+
1366
+ sage: L = LieAlgebra(QQ, cartan_type=['F', 4])
1367
+ sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
1368
+ sage: la = La[1] + La[2] - La[3]
1369
+ sage: mu = la.dot_action([1,2,3,2])
1370
+ sage: M = L.verma_module(la)
1371
+ sage: Mp = L.verma_module(mu)
1372
+ sage: H = Hom(Mp, M)
1373
+ sage: v = H.singular_vector() # needs sage.rings.number_field
1374
+ sage: pbw = M.pbw_basis()
1375
+ sage: E = [pbw(e) for e in L.e()]
1376
+ sage: all(e * v == M.zero() for e in E) # long time # needs sage.rings.number_field
1377
+ True
1378
+ sage: v.degree() == Mp.highest_weight() # needs sage.rings.number_field
1379
+ True
1380
+
1381
+ When `w \cdot \lambda \notin \lambda + Q^-`, there does not
1382
+ exist a singular vector::
1383
+
1384
+ sage: L = lie_algebras.sl(QQ, 4)
1385
+ sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
1386
+ sage: la = 3/7*La[1] - 1/2*La[3]
1387
+ sage: mu = la.dot_action([1,2])
1388
+ sage: M = L.verma_module(la)
1389
+ sage: Mp = L.verma_module(mu)
1390
+ sage: H = Hom(Mp, M)
1391
+ sage: H.singular_vector() is None # needs sage.rings.number_field
1392
+ True
1393
+
1394
+ When we need to apply a non-simple reflection, we can compute
1395
+ the singular vector (see :issue:`36793`)::
1396
+
1397
+ sage: g = LieAlgebra(QQ, cartan_type=['A', 2])
1398
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
1399
+ sage: M = g.verma_module((0*La[1]).dot_action([1]))
1400
+ sage: Mp = g.verma_module((0*La[1]).dot_action([1,2]))
1401
+ sage: H = Hom(Mp, M)
1402
+ sage: v = H.singular_vector(); v # needs sage.rings.number_field
1403
+ 1/2*f[-alpha[2]]*f[-alpha[1]]*v[-2*Lambda[1] + Lambda[2]]
1404
+ + f[-alpha[1] - alpha[2]]*v[-2*Lambda[1] + Lambda[2]]
1405
+ sage: pbw = M.pbw_basis()
1406
+ sage: E = [pbw(e) for e in g.e()]
1407
+ sage: all(e * v == M.zero() for e in E) # needs sage.rings.number_field
1408
+ True
1409
+ sage: v.degree() == Mp.highest_weight() # needs sage.rings.number_field
1410
+ True
1411
+
1412
+ TESTS::
1413
+
1414
+ sage: L = lie_algebras.sl(QQ, 3)
1415
+ sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
1416
+ sage: al = L.cartan_type().root_system().root_lattice().simple_roots()
1417
+ sage: M = L.verma_module(La[1] + La[2])
1418
+ sage: pbw = M.pbw_basis()
1419
+ sage: E = {i: pbw(L.e(i)) for i in L.cartan_type().index_set()}
1420
+ sage: all(not E[i] * Hom(L.verma_module(mu), M).singular_vector() # needs sage.rings.number_field
1421
+ ....: for i in L.cartan_type().index_set()
1422
+ ....: for mu in M.highest_weight().dot_orbit())
1423
+ True
1424
+ """
1425
+ if self.is_endomorphism_set():
1426
+ return self.codomain().highest_weight_vector()
1427
+ if self.domain()._dominant_data[0] != self.codomain()._dominant_data[0]:
1428
+ return None
1429
+
1430
+ from sage.combinat.root_system.coxeter_group import CoxeterGroup
1431
+ from sage.matrix.constructor import matrix
1432
+ W = CoxeterGroup(self.domain()._g._cartan_type)
1433
+ # We take the inverse to account for the left versus right action
1434
+ wp = W.from_reduced_word(reversed(self.domain()._dominant_data[1]))
1435
+ w = W.from_reduced_word(reversed(self.codomain()._dominant_data[1]))
1436
+ if not w.bruhat_le(wp):
1437
+ return None
1438
+ C = self.codomain()
1439
+ pbw = C._pbw
1440
+ F = pbw.f()
1441
+ E = pbw.e()
1442
+ index_set = F.keys()
1443
+ cur_w = w
1444
+ rho = C._weight.parent().rho()
1445
+ ac = C._weight.parent().simple_coroots()
1446
+ elt = pbw.one()
1447
+ wt = C._weight
1448
+ pos_roots_by_ht = C._g._cartan_type.root_system().root_lattice().positive_roots_by_height()
1449
+ assert all(sum(rt.coefficients()) == 1 for rt in pos_roots_by_ht[:len(index_set)])
1450
+ # for this, we don't need to check the simple roots
1451
+ pos_roots_by_ht = pos_roots_by_ht[len(index_set):]
1452
+
1453
+ while cur_w != wp:
1454
+ ind = None
1455
+ for i in cur_w.descents(side='right', positive=True):
1456
+ exp = (wt + rho).scalar(ac[i])
1457
+ if exp not in ZZ or exp <= 0:
1458
+ continue
1459
+ # We need to check that the result is still smaller in Bruhat order
1460
+ next_w = cur_w.apply_simple_reflection_right(i)
1461
+ if not next_w.bruhat_le(wp):
1462
+ continue
1463
+ ind = i
1464
+ # favor a path in weak order so we only do sl_2 relations
1465
+ if not next_w.weak_le(wp, side="right"):
1466
+ continue
1467
+ break
1468
+ if ind is None: # no simple root; need a more general approach
1469
+ # We search for the shortest root that can be applied to minimize
1470
+ # the size of the basis needed to compute the kernel.
1471
+ for rt in pos_roots_by_ht:
1472
+ exp = (wt + rho).scalar(rt.associated_coroot())
1473
+ # We need to check that the result is still smaller in Bruhat order
1474
+ i, wd = rt.to_simple_root(reduced_word=True)
1475
+ refl = wd + (i,) + tuple(reversed(wd))
1476
+ next_w = cur_w.apply_reflections(refl, side='right', word_type="simple")
1477
+ if exp not in ZZ or exp <= 0:
1478
+ continue
1479
+ if not next_w.bruhat_le(wp):
1480
+ continue
1481
+ # We construct the Verma module of the appropriate weight in
1482
+ # order to reduce the dimension and number of multiplications.
1483
+ Mp = C._g.verma_module(wt)
1484
+ basis = sorted(Mp._homogeneous_component_f(-rt.to_vector()), key=str)
1485
+ for i in index_set:
1486
+ image = [E[i] * b for b in basis]
1487
+ supp = set()
1488
+ for vec in image:
1489
+ supp.update(vec._monomial_coefficients)
1490
+ supp = sorted(supp, key=pbw._monomial_key)
1491
+ if not supp: # everything is in the kernel
1492
+ continue
1493
+ M = matrix(pbw.base_ring(), [[v[s] for v in image] for s in supp])
1494
+ ker = M.right_kernel_matrix()
1495
+ basis = [C.linear_combination((basis[j], c) for j, c in kv.iteritems())
1496
+ for kv in ker.rows()]
1497
+
1498
+ assert len(basis) == 1
1499
+ if Mp is C: # We've constructed the element in the codomain
1500
+ assert next_w == wp
1501
+ assert basis[0].degree() == self.domain().highest_weight()
1502
+ return basis[0]
1503
+ pbw_elt = pbw.element_class(pbw, {pbw._indices(m._monomial): c
1504
+ for m, c in basis[0]._monomial_coefficients.items()})
1505
+ elt = pbw_elt * elt
1506
+ wt = wt.dot_action(refl)
1507
+ cur_w = next_w
1508
+ break
1509
+ else:
1510
+ #assert False, "unable to find root"
1511
+ # Have a more explicit check at the beginning using the integral
1512
+ # orbit action for the correct version of dominance; see, e.g.,
1513
+ # Humphreys "Representations of Semisimple Lie Algebras in the BGG Category O".
1514
+ return None
1515
+ else:
1516
+ # Construct the singular vector by iterated embeddings of Verma
1517
+ # modules from the sl_2 relations (without constructing
1518
+ # the modules themselves)
1519
+ elt = F[ind]**ZZ(exp) * elt
1520
+ wt = wt.dot_action([ind])
1521
+ cur_w = cur_w.apply_simple_reflection_right(ind)
1522
+ ret = C.highest_weight_vector()._acted_upon_(elt, False)
1523
+ assert ret.degree() == self.domain().highest_weight()
1524
+ return ret
1525
+
1526
+ @cached_method
1527
+ def natural_map(self):
1528
+ """
1529
+ Return the "natural map" of ``self``.
1530
+
1531
+ EXAMPLES::
1532
+
1533
+ sage: L = lie_algebras.sl(QQ, 3)
1534
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
1535
+ sage: M = L.verma_module(La[1] + La[2])
1536
+ sage: Mp = L.verma_module(M.highest_weight().dot_action([2]))
1537
+ sage: H = Hom(Mp, M)
1538
+ sage: H.natural_map()
1539
+ Verma module morphism:
1540
+ From: Verma module with highest weight 3*Lambda[1] - 3*Lambda[2]
1541
+ of Lie algebra of ['A', 2] in the Chevalley basis
1542
+ To: Verma module with highest weight Lambda[1] + Lambda[2]
1543
+ of Lie algebra of ['A', 2] in the Chevalley basis
1544
+ Defn: v[3*Lambda[1] - 3*Lambda[2]] |-->
1545
+ f[-alpha[2]]^2*v[Lambda[1] + Lambda[2]]
1546
+
1547
+ sage: Mp = L.verma_module(La[1] + 2*La[2])
1548
+ sage: H = Hom(Mp, M)
1549
+ sage: H.natural_map()
1550
+ Verma module morphism:
1551
+ From: Verma module with highest weight Lambda[1] + 2*Lambda[2]
1552
+ of Lie algebra of ['A', 2] in the Chevalley basis
1553
+ To: Verma module with highest weight Lambda[1] + Lambda[2]
1554
+ of Lie algebra of ['A', 2] in the Chevalley basis
1555
+ Defn: v[Lambda[1] + 2*Lambda[2]] |--> 0
1556
+ """
1557
+ if not self.highest_weight_image():
1558
+ return self.zero()
1559
+ return self.element_class(self, self.base_ring().one())
1560
+
1561
+ @cached_method
1562
+ def zero(self):
1563
+ """
1564
+ Return the zero morphism of ``self``.
1565
+
1566
+ EXAMPLES::
1567
+
1568
+ sage: L = lie_algebras.sp(QQ, 6)
1569
+ sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
1570
+ sage: M = L.verma_module(La[1] + 2/3*La[2])
1571
+ sage: Mp = L.verma_module(La[2] - La[3])
1572
+ sage: H = Hom(Mp, M)
1573
+ sage: H.zero()
1574
+ Verma module morphism:
1575
+ From: Verma module with highest weight Lambda[2] - Lambda[3]
1576
+ of Lie algebra of ['C', 3] in the Chevalley basis
1577
+ To: Verma module with highest weight Lambda[1] + 2/3*Lambda[2]
1578
+ of Lie algebra of ['C', 3] in the Chevalley basis
1579
+ Defn: v[Lambda[2] - Lambda[3]] |--> 0
1580
+ """
1581
+ return self.element_class(self, self.base_ring().zero())
1582
+
1583
+ def dimension(self):
1584
+ r"""
1585
+ Return the dimension of ``self`` (as a vector space over
1586
+ the base ring).
1587
+
1588
+ EXAMPLES::
1589
+
1590
+ sage: L = lie_algebras.sl(QQ, 3)
1591
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
1592
+ sage: M = L.verma_module(La[1] + La[2])
1593
+ sage: Mp = L.verma_module(M.highest_weight().dot_action([2]))
1594
+ sage: H = Hom(Mp, M)
1595
+ sage: H.dimension()
1596
+ 1
1597
+
1598
+ sage: Mp = L.verma_module(La[1] + 2*La[2])
1599
+ sage: H = Hom(Mp, M)
1600
+ sage: H.dimension()
1601
+ 0
1602
+ """
1603
+ if not self.highest_weight_image():
1604
+ return ZZ.zero()
1605
+ return ZZ.one()
1606
+
1607
+ def basis(self):
1608
+ r"""
1609
+ Return a basis of ``self``.
1610
+
1611
+ EXAMPLES::
1612
+
1613
+ sage: L = lie_algebras.sl(QQ, 3)
1614
+ sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
1615
+ sage: M = L.verma_module(La[1] + La[2])
1616
+ sage: Mp = L.verma_module(M.highest_weight().dot_action([2]))
1617
+ sage: H = Hom(Mp, M)
1618
+ sage: list(H.basis()) == [H.natural_map()]
1619
+ True
1620
+
1621
+ sage: Mp = L.verma_module(La[1] + 2*La[2])
1622
+ sage: H = Hom(Mp, M)
1623
+ sage: H.basis()
1624
+ Family ()
1625
+ """
1626
+ if not self.highest_weight_image():
1627
+ return Family([])
1628
+ return Family([self.natural_map()])
1629
+
1630
+ Element = VermaModuleMorphism