passagemath-modules 10.6.31__cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (807) hide show
  1. passagemath_modules-10.6.31.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31.dist-info/RECORD +807 -0
  3. passagemath_modules-10.6.31.dist-info/WHEEL +6 -0
  4. passagemath_modules-10.6.31.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgfortran-83c28eba.so.5.0.0 +0 -0
  6. passagemath_modules.libs/libgmp-6e109695.so.10.5.0 +0 -0
  7. passagemath_modules.libs/libgsl-cda90e79.so.28.0.0 +0 -0
  8. passagemath_modules.libs/libmpc-7f678fcf.so.3.3.1 +0 -0
  9. passagemath_modules.libs/libmpfr-ecd7067e.so.6.2.1 +0 -0
  10. passagemath_modules.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
  11. passagemath_modules.libs/libquadmath-2284e583.so.0.0.0 +0 -0
  12. sage/algebras/all__sagemath_modules.py +20 -0
  13. sage/algebras/catalog.py +148 -0
  14. sage/algebras/clifford_algebra.py +3107 -0
  15. sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
  16. sage/algebras/clifford_algebra_element.pxd +16 -0
  17. sage/algebras/clifford_algebra_element.pyx +997 -0
  18. sage/algebras/commutative_dga.py +4252 -0
  19. sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-gnu.so +0 -0
  20. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  21. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  22. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  23. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  29. sage/algebras/finite_gca.py +528 -0
  30. sage/algebras/group_algebra.py +232 -0
  31. sage/algebras/lie_algebras/abelian.py +197 -0
  32. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  33. sage/algebras/lie_algebras/all.py +25 -0
  34. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  35. sage/algebras/lie_algebras/bch.py +177 -0
  36. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  37. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  38. sage/algebras/lie_algebras/center_uea.py +767 -0
  39. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  40. sage/algebras/lie_algebras/examples.py +683 -0
  41. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  42. sage/algebras/lie_algebras/heisenberg.py +820 -0
  43. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  44. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  47. sage/algebras/lie_algebras/morphism.py +661 -0
  48. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  49. sage/algebras/lie_algebras/onsager.py +1324 -0
  50. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  51. sage/algebras/lie_algebras/quotient.py +462 -0
  52. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  53. sage/algebras/lie_algebras/representation.py +1040 -0
  54. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  55. sage/algebras/lie_algebras/subalgebra.py +967 -0
  56. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  57. sage/algebras/lie_algebras/verma_module.py +1630 -0
  58. sage/algebras/lie_algebras/virasoro.py +1186 -0
  59. sage/algebras/octonion_algebra.cpython-314-x86_64-linux-gnu.so +0 -0
  60. sage/algebras/octonion_algebra.pxd +20 -0
  61. sage/algebras/octonion_algebra.pyx +987 -0
  62. sage/algebras/orlik_solomon.py +907 -0
  63. sage/algebras/orlik_terao.py +779 -0
  64. sage/algebras/steenrod/all.py +7 -0
  65. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  66. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  67. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  68. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  69. sage/algebras/weyl_algebra.py +1126 -0
  70. sage/all__sagemath_modules.py +62 -0
  71. sage/calculus/all__sagemath_modules.py +19 -0
  72. sage/calculus/expr.py +205 -0
  73. sage/calculus/integration.cpython-314-x86_64-linux-gnu.so +0 -0
  74. sage/calculus/integration.pyx +698 -0
  75. sage/calculus/interpolation.cpython-314-x86_64-linux-gnu.so +0 -0
  76. sage/calculus/interpolation.pxd +13 -0
  77. sage/calculus/interpolation.pyx +387 -0
  78. sage/calculus/interpolators.cpython-314-x86_64-linux-gnu.so +0 -0
  79. sage/calculus/interpolators.pyx +326 -0
  80. sage/calculus/ode.cpython-314-x86_64-linux-gnu.so +0 -0
  81. sage/calculus/ode.pxd +5 -0
  82. sage/calculus/ode.pyx +610 -0
  83. sage/calculus/riemann.cpython-314-x86_64-linux-gnu.so +0 -0
  84. sage/calculus/riemann.pyx +1521 -0
  85. sage/calculus/test_sympy.py +201 -0
  86. sage/calculus/transforms/all.py +7 -0
  87. sage/calculus/transforms/dft.py +844 -0
  88. sage/calculus/transforms/dwt.cpython-314-x86_64-linux-gnu.so +0 -0
  89. sage/calculus/transforms/dwt.pxd +7 -0
  90. sage/calculus/transforms/dwt.pyx +160 -0
  91. sage/calculus/transforms/fft.cpython-314-x86_64-linux-gnu.so +0 -0
  92. sage/calculus/transforms/fft.pxd +12 -0
  93. sage/calculus/transforms/fft.pyx +487 -0
  94. sage/calculus/wester.py +662 -0
  95. sage/coding/abstract_code.py +1108 -0
  96. sage/coding/ag_code.py +868 -0
  97. sage/coding/ag_code_decoders.cpython-314-x86_64-linux-gnu.so +0 -0
  98. sage/coding/ag_code_decoders.pyx +2639 -0
  99. sage/coding/all.py +15 -0
  100. sage/coding/bch_code.py +494 -0
  101. sage/coding/binary_code.cpython-314-x86_64-linux-gnu.so +0 -0
  102. sage/coding/binary_code.pxd +124 -0
  103. sage/coding/binary_code.pyx +4139 -0
  104. sage/coding/bounds_catalog.py +43 -0
  105. sage/coding/channel.py +819 -0
  106. sage/coding/channels_catalog.py +29 -0
  107. sage/coding/code_bounds.py +755 -0
  108. sage/coding/code_constructions.py +804 -0
  109. sage/coding/codes_catalog.py +111 -0
  110. sage/coding/cyclic_code.py +1329 -0
  111. sage/coding/databases.py +316 -0
  112. sage/coding/decoder.py +373 -0
  113. sage/coding/decoders_catalog.py +88 -0
  114. sage/coding/delsarte_bounds.py +709 -0
  115. sage/coding/encoder.py +390 -0
  116. sage/coding/encoders_catalog.py +64 -0
  117. sage/coding/extended_code.py +468 -0
  118. sage/coding/gabidulin_code.py +1058 -0
  119. sage/coding/golay_code.py +404 -0
  120. sage/coding/goppa_code.py +441 -0
  121. sage/coding/grs_code.py +2371 -0
  122. sage/coding/guava.py +107 -0
  123. sage/coding/guruswami_sudan/all.py +1 -0
  124. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  125. sage/coding/guruswami_sudan/interpolation.py +409 -0
  126. sage/coding/guruswami_sudan/utils.py +176 -0
  127. sage/coding/hamming_code.py +176 -0
  128. sage/coding/information_set_decoder.py +1032 -0
  129. sage/coding/kasami_codes.cpython-314-x86_64-linux-gnu.so +0 -0
  130. sage/coding/kasami_codes.pyx +351 -0
  131. sage/coding/linear_code.py +3067 -0
  132. sage/coding/linear_code_no_metric.py +1354 -0
  133. sage/coding/linear_rank_metric.py +961 -0
  134. sage/coding/parity_check_code.py +353 -0
  135. sage/coding/punctured_code.py +719 -0
  136. sage/coding/reed_muller_code.py +999 -0
  137. sage/coding/self_dual_codes.py +942 -0
  138. sage/coding/source_coding/all.py +2 -0
  139. sage/coding/source_coding/huffman.py +553 -0
  140. sage/coding/subfield_subcode.py +423 -0
  141. sage/coding/two_weight_db.py +399 -0
  142. sage/combinat/all__sagemath_modules.py +7 -0
  143. sage/combinat/cartesian_product.py +347 -0
  144. sage/combinat/family.py +11 -0
  145. sage/combinat/free_module.py +1977 -0
  146. sage/combinat/root_system/all.py +147 -0
  147. sage/combinat/root_system/ambient_space.py +527 -0
  148. sage/combinat/root_system/associahedron.py +471 -0
  149. sage/combinat/root_system/braid_move_calculator.py +143 -0
  150. sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-gnu.so +0 -0
  151. sage/combinat/root_system/braid_orbit.pyx +144 -0
  152. sage/combinat/root_system/branching_rules.py +2301 -0
  153. sage/combinat/root_system/cartan_matrix.py +1245 -0
  154. sage/combinat/root_system/cartan_type.py +3069 -0
  155. sage/combinat/root_system/coxeter_group.py +162 -0
  156. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  157. sage/combinat/root_system/coxeter_type.py +681 -0
  158. sage/combinat/root_system/dynkin_diagram.py +900 -0
  159. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  160. sage/combinat/root_system/fundamental_group.py +795 -0
  161. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  162. sage/combinat/root_system/integrable_representations.py +1227 -0
  163. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  164. sage/combinat/root_system/pieri_factors.py +1147 -0
  165. sage/combinat/root_system/plot.py +1615 -0
  166. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  167. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  168. sage/combinat/root_system/root_space.py +487 -0
  169. sage/combinat/root_system/root_system.py +882 -0
  170. sage/combinat/root_system/type_A.py +348 -0
  171. sage/combinat/root_system/type_A_affine.py +227 -0
  172. sage/combinat/root_system/type_A_infinity.py +241 -0
  173. sage/combinat/root_system/type_B.py +347 -0
  174. sage/combinat/root_system/type_BC_affine.py +287 -0
  175. sage/combinat/root_system/type_B_affine.py +216 -0
  176. sage/combinat/root_system/type_C.py +317 -0
  177. sage/combinat/root_system/type_C_affine.py +188 -0
  178. sage/combinat/root_system/type_D.py +357 -0
  179. sage/combinat/root_system/type_D_affine.py +208 -0
  180. sage/combinat/root_system/type_E.py +641 -0
  181. sage/combinat/root_system/type_E_affine.py +231 -0
  182. sage/combinat/root_system/type_F.py +387 -0
  183. sage/combinat/root_system/type_F_affine.py +137 -0
  184. sage/combinat/root_system/type_G.py +293 -0
  185. sage/combinat/root_system/type_G_affine.py +132 -0
  186. sage/combinat/root_system/type_H.py +105 -0
  187. sage/combinat/root_system/type_I.py +110 -0
  188. sage/combinat/root_system/type_Q.py +150 -0
  189. sage/combinat/root_system/type_affine.py +509 -0
  190. sage/combinat/root_system/type_dual.py +704 -0
  191. sage/combinat/root_system/type_folded.py +301 -0
  192. sage/combinat/root_system/type_marked.py +748 -0
  193. sage/combinat/root_system/type_reducible.py +601 -0
  194. sage/combinat/root_system/type_relabel.py +730 -0
  195. sage/combinat/root_system/type_super_A.py +837 -0
  196. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  197. sage/combinat/root_system/weight_space.py +639 -0
  198. sage/combinat/root_system/weyl_characters.py +2238 -0
  199. sage/crypto/__init__.py +4 -0
  200. sage/crypto/all.py +28 -0
  201. sage/crypto/block_cipher/all.py +7 -0
  202. sage/crypto/block_cipher/des.py +1065 -0
  203. sage/crypto/block_cipher/miniaes.py +2171 -0
  204. sage/crypto/block_cipher/present.py +909 -0
  205. sage/crypto/block_cipher/sdes.py +1527 -0
  206. sage/crypto/boolean_function.cpython-314-x86_64-linux-gnu.so +0 -0
  207. sage/crypto/boolean_function.pxd +10 -0
  208. sage/crypto/boolean_function.pyx +1487 -0
  209. sage/crypto/cipher.py +78 -0
  210. sage/crypto/classical.py +3668 -0
  211. sage/crypto/classical_cipher.py +569 -0
  212. sage/crypto/cryptosystem.py +387 -0
  213. sage/crypto/key_exchange/all.py +7 -0
  214. sage/crypto/key_exchange/catalog.py +24 -0
  215. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  216. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  217. sage/crypto/lattice.py +312 -0
  218. sage/crypto/lfsr.py +295 -0
  219. sage/crypto/lwe.py +840 -0
  220. sage/crypto/mq/__init__.py +4 -0
  221. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  222. sage/crypto/mq/rijndael_gf.py +2345 -0
  223. sage/crypto/mq/sbox.py +7 -0
  224. sage/crypto/mq/sr.py +3344 -0
  225. sage/crypto/public_key/all.py +5 -0
  226. sage/crypto/public_key/blum_goldwasser.py +776 -0
  227. sage/crypto/sbox.cpython-314-x86_64-linux-gnu.so +0 -0
  228. sage/crypto/sbox.pyx +2090 -0
  229. sage/crypto/sboxes.py +2090 -0
  230. sage/crypto/stream.py +390 -0
  231. sage/crypto/stream_cipher.py +297 -0
  232. sage/crypto/util.py +519 -0
  233. sage/ext/all__sagemath_modules.py +1 -0
  234. sage/ext/interpreters/__init__.py +1 -0
  235. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  236. sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-gnu.so +0 -0
  237. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  238. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  239. sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-gnu.so +0 -0
  240. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  241. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  242. sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-gnu.so +0 -0
  243. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  244. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  245. sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-gnu.so +0 -0
  246. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  247. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  248. sage/geometry/all__sagemath_modules.py +5 -0
  249. sage/geometry/toric_lattice.py +1745 -0
  250. sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-gnu.so +0 -0
  251. sage/geometry/toric_lattice_element.pyx +432 -0
  252. sage/groups/abelian_gps/abelian_group.py +1925 -0
  253. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  254. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  255. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  256. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  257. sage/groups/abelian_gps/element_base.py +341 -0
  258. sage/groups/abelian_gps/values.py +488 -0
  259. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  260. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  261. sage/groups/additive_abelian/all.py +4 -0
  262. sage/groups/additive_abelian/qmodnz.py +231 -0
  263. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  264. sage/groups/affine_gps/affine_group.py +535 -0
  265. sage/groups/affine_gps/all.py +1 -0
  266. sage/groups/affine_gps/catalog.py +17 -0
  267. sage/groups/affine_gps/euclidean_group.py +246 -0
  268. sage/groups/affine_gps/group_element.py +562 -0
  269. sage/groups/all__sagemath_modules.py +12 -0
  270. sage/groups/galois_group.py +479 -0
  271. sage/groups/matrix_gps/all.py +4 -0
  272. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  273. sage/groups/matrix_gps/catalog.py +26 -0
  274. sage/groups/matrix_gps/coxeter_group.py +927 -0
  275. sage/groups/matrix_gps/finitely_generated.py +487 -0
  276. sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-gnu.so +0 -0
  277. sage/groups/matrix_gps/group_element.pxd +11 -0
  278. sage/groups/matrix_gps/group_element.pyx +431 -0
  279. sage/groups/matrix_gps/linear.py +440 -0
  280. sage/groups/matrix_gps/matrix_group.py +617 -0
  281. sage/groups/matrix_gps/named_group.py +296 -0
  282. sage/groups/matrix_gps/orthogonal.py +544 -0
  283. sage/groups/matrix_gps/symplectic.py +251 -0
  284. sage/groups/matrix_gps/unitary.py +436 -0
  285. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  286. sage/groups/misc_gps/argument_groups.py +1905 -0
  287. sage/groups/misc_gps/imaginary_groups.py +479 -0
  288. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  289. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-gnu.so +0 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  293. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-gnu.so +0 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  296. sage/homology/algebraic_topological_model.py +595 -0
  297. sage/homology/all.py +2 -0
  298. sage/homology/all__sagemath_modules.py +8 -0
  299. sage/homology/chain_complex.py +2148 -0
  300. sage/homology/chain_complex_homspace.py +165 -0
  301. sage/homology/chain_complex_morphism.py +629 -0
  302. sage/homology/chain_homotopy.py +604 -0
  303. sage/homology/chains.py +653 -0
  304. sage/homology/free_resolution.py +923 -0
  305. sage/homology/graded_resolution.py +567 -0
  306. sage/homology/hochschild_complex.py +756 -0
  307. sage/homology/homology_group.py +188 -0
  308. sage/homology/homology_morphism.py +422 -0
  309. sage/homology/homology_vector_space_with_basis.py +1454 -0
  310. sage/homology/koszul_complex.py +169 -0
  311. sage/homology/matrix_utils.py +205 -0
  312. sage/libs/all__sagemath_modules.py +1 -0
  313. sage/libs/gsl/__init__.py +1 -0
  314. sage/libs/gsl/airy.pxd +56 -0
  315. sage/libs/gsl/all.pxd +66 -0
  316. sage/libs/gsl/array.cpython-314-x86_64-linux-gnu.so +0 -0
  317. sage/libs/gsl/array.pxd +5 -0
  318. sage/libs/gsl/array.pyx +102 -0
  319. sage/libs/gsl/bessel.pxd +208 -0
  320. sage/libs/gsl/blas.pxd +116 -0
  321. sage/libs/gsl/blas_types.pxd +34 -0
  322. sage/libs/gsl/block.pxd +52 -0
  323. sage/libs/gsl/chebyshev.pxd +37 -0
  324. sage/libs/gsl/clausen.pxd +12 -0
  325. sage/libs/gsl/combination.pxd +47 -0
  326. sage/libs/gsl/complex.pxd +151 -0
  327. sage/libs/gsl/coulomb.pxd +30 -0
  328. sage/libs/gsl/coupling.pxd +21 -0
  329. sage/libs/gsl/dawson.pxd +12 -0
  330. sage/libs/gsl/debye.pxd +24 -0
  331. sage/libs/gsl/dilog.pxd +14 -0
  332. sage/libs/gsl/eigen.pxd +46 -0
  333. sage/libs/gsl/elementary.pxd +12 -0
  334. sage/libs/gsl/ellint.pxd +48 -0
  335. sage/libs/gsl/elljac.pxd +8 -0
  336. sage/libs/gsl/erf.pxd +32 -0
  337. sage/libs/gsl/errno.pxd +26 -0
  338. sage/libs/gsl/exp.pxd +44 -0
  339. sage/libs/gsl/expint.pxd +44 -0
  340. sage/libs/gsl/fermi_dirac.pxd +44 -0
  341. sage/libs/gsl/fft.pxd +121 -0
  342. sage/libs/gsl/fit.pxd +50 -0
  343. sage/libs/gsl/gamma.pxd +94 -0
  344. sage/libs/gsl/gegenbauer.pxd +26 -0
  345. sage/libs/gsl/histogram.pxd +176 -0
  346. sage/libs/gsl/hyperg.pxd +52 -0
  347. sage/libs/gsl/integration.pxd +69 -0
  348. sage/libs/gsl/interp.pxd +109 -0
  349. sage/libs/gsl/laguerre.pxd +24 -0
  350. sage/libs/gsl/lambert.pxd +16 -0
  351. sage/libs/gsl/legendre.pxd +90 -0
  352. sage/libs/gsl/linalg.pxd +185 -0
  353. sage/libs/gsl/log.pxd +26 -0
  354. sage/libs/gsl/math.pxd +43 -0
  355. sage/libs/gsl/matrix.pxd +143 -0
  356. sage/libs/gsl/matrix_complex.pxd +130 -0
  357. sage/libs/gsl/min.pxd +67 -0
  358. sage/libs/gsl/monte.pxd +56 -0
  359. sage/libs/gsl/ntuple.pxd +32 -0
  360. sage/libs/gsl/odeiv.pxd +70 -0
  361. sage/libs/gsl/permutation.pxd +78 -0
  362. sage/libs/gsl/poly.pxd +40 -0
  363. sage/libs/gsl/pow_int.pxd +12 -0
  364. sage/libs/gsl/psi.pxd +28 -0
  365. sage/libs/gsl/qrng.pxd +29 -0
  366. sage/libs/gsl/random.pxd +257 -0
  367. sage/libs/gsl/rng.pxd +100 -0
  368. sage/libs/gsl/roots.pxd +72 -0
  369. sage/libs/gsl/sort.pxd +36 -0
  370. sage/libs/gsl/statistics.pxd +59 -0
  371. sage/libs/gsl/sum.pxd +55 -0
  372. sage/libs/gsl/synchrotron.pxd +16 -0
  373. sage/libs/gsl/transport.pxd +24 -0
  374. sage/libs/gsl/trig.pxd +58 -0
  375. sage/libs/gsl/types.pxd +137 -0
  376. sage/libs/gsl/vector.pxd +101 -0
  377. sage/libs/gsl/vector_complex.pxd +83 -0
  378. sage/libs/gsl/wavelet.pxd +49 -0
  379. sage/libs/gsl/zeta.pxd +28 -0
  380. sage/libs/mpc/__init__.pxd +114 -0
  381. sage/libs/mpc/types.pxd +28 -0
  382. sage/libs/mpfr/__init__.pxd +299 -0
  383. sage/libs/mpfr/types.pxd +26 -0
  384. sage/libs/mpmath/__init__.py +1 -0
  385. sage/libs/mpmath/all.py +27 -0
  386. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  387. sage/libs/mpmath/utils.cpython-314-x86_64-linux-gnu.so +0 -0
  388. sage/libs/mpmath/utils.pxd +4 -0
  389. sage/libs/mpmath/utils.pyx +319 -0
  390. sage/matrix/action.cpython-314-x86_64-linux-gnu.so +0 -0
  391. sage/matrix/action.pxd +26 -0
  392. sage/matrix/action.pyx +596 -0
  393. sage/matrix/all.py +9 -0
  394. sage/matrix/args.cpython-314-x86_64-linux-gnu.so +0 -0
  395. sage/matrix/args.pxd +144 -0
  396. sage/matrix/args.pyx +1668 -0
  397. sage/matrix/benchmark.py +1258 -0
  398. sage/matrix/berlekamp_massey.py +95 -0
  399. sage/matrix/compute_J_ideal.py +926 -0
  400. sage/matrix/constructor.cpython-314-x86_64-linux-gnu.so +0 -0
  401. sage/matrix/constructor.pyx +750 -0
  402. sage/matrix/docs.py +430 -0
  403. sage/matrix/echelon_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
  404. sage/matrix/echelon_matrix.pyx +155 -0
  405. sage/matrix/matrix.pxd +2 -0
  406. sage/matrix/matrix0.cpython-314-x86_64-linux-gnu.so +0 -0
  407. sage/matrix/matrix0.pxd +68 -0
  408. sage/matrix/matrix0.pyx +6324 -0
  409. sage/matrix/matrix1.cpython-314-x86_64-linux-gnu.so +0 -0
  410. sage/matrix/matrix1.pxd +8 -0
  411. sage/matrix/matrix1.pyx +2851 -0
  412. sage/matrix/matrix2.cpython-314-x86_64-linux-gnu.so +0 -0
  413. sage/matrix/matrix2.pxd +25 -0
  414. sage/matrix/matrix2.pyx +20181 -0
  415. sage/matrix/matrix_cdv.cpython-314-x86_64-linux-gnu.so +0 -0
  416. sage/matrix/matrix_cdv.pxd +4 -0
  417. sage/matrix/matrix_cdv.pyx +93 -0
  418. sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  419. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  420. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  421. sage/matrix/matrix_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  422. sage/matrix/matrix_dense.pxd +5 -0
  423. sage/matrix/matrix_dense.pyx +343 -0
  424. sage/matrix/matrix_domain_dense.pxd +5 -0
  425. sage/matrix/matrix_domain_sparse.pxd +5 -0
  426. sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  427. sage/matrix/matrix_double_dense.pxd +7 -0
  428. sage/matrix/matrix_double_dense.pyx +3906 -0
  429. sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  430. sage/matrix/matrix_double_sparse.pxd +6 -0
  431. sage/matrix/matrix_double_sparse.pyx +248 -0
  432. sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  433. sage/matrix/matrix_generic_dense.pxd +7 -0
  434. sage/matrix/matrix_generic_dense.pyx +354 -0
  435. sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  436. sage/matrix/matrix_generic_sparse.pxd +7 -0
  437. sage/matrix/matrix_generic_sparse.pyx +461 -0
  438. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  441. sage/matrix/matrix_misc.py +313 -0
  442. sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  443. sage/matrix/matrix_numpy_dense.pxd +14 -0
  444. sage/matrix/matrix_numpy_dense.pyx +450 -0
  445. sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  446. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  447. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  448. sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  449. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  450. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  451. sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  452. sage/matrix/matrix_real_double_dense.pxd +7 -0
  453. sage/matrix/matrix_real_double_dense.pyx +122 -0
  454. sage/matrix/matrix_space.py +2848 -0
  455. sage/matrix/matrix_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  456. sage/matrix/matrix_sparse.pxd +5 -0
  457. sage/matrix/matrix_sparse.pyx +1222 -0
  458. sage/matrix/matrix_window.cpython-314-x86_64-linux-gnu.so +0 -0
  459. sage/matrix/matrix_window.pxd +37 -0
  460. sage/matrix/matrix_window.pyx +242 -0
  461. sage/matrix/misc_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
  462. sage/matrix/misc_mpfr.pyx +80 -0
  463. sage/matrix/operation_table.py +1182 -0
  464. sage/matrix/special.py +3666 -0
  465. sage/matrix/strassen.cpython-314-x86_64-linux-gnu.so +0 -0
  466. sage/matrix/strassen.pyx +851 -0
  467. sage/matrix/symplectic_basis.py +541 -0
  468. sage/matrix/template.pxd +6 -0
  469. sage/matrix/tests.py +71 -0
  470. sage/matroids/advanced.py +77 -0
  471. sage/matroids/all.py +13 -0
  472. sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  473. sage/matroids/basis_exchange_matroid.pxd +96 -0
  474. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  475. sage/matroids/basis_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  476. sage/matroids/basis_matroid.pxd +45 -0
  477. sage/matroids/basis_matroid.pyx +1217 -0
  478. sage/matroids/catalog.py +44 -0
  479. sage/matroids/chow_ring.py +473 -0
  480. sage/matroids/chow_ring_ideal.py +849 -0
  481. sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  482. sage/matroids/circuit_closures_matroid.pxd +16 -0
  483. sage/matroids/circuit_closures_matroid.pyx +559 -0
  484. sage/matroids/circuits_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  485. sage/matroids/circuits_matroid.pxd +38 -0
  486. sage/matroids/circuits_matroid.pyx +947 -0
  487. sage/matroids/constructor.py +1086 -0
  488. sage/matroids/database_collections.py +365 -0
  489. sage/matroids/database_matroids.py +5338 -0
  490. sage/matroids/dual_matroid.py +583 -0
  491. sage/matroids/extension.cpython-314-x86_64-linux-gnu.so +0 -0
  492. sage/matroids/extension.pxd +34 -0
  493. sage/matroids/extension.pyx +519 -0
  494. sage/matroids/flats_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  495. sage/matroids/flats_matroid.pxd +28 -0
  496. sage/matroids/flats_matroid.pyx +715 -0
  497. sage/matroids/gammoid.py +600 -0
  498. sage/matroids/graphic_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  499. sage/matroids/graphic_matroid.pxd +39 -0
  500. sage/matroids/graphic_matroid.pyx +2024 -0
  501. sage/matroids/lean_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
  502. sage/matroids/lean_matrix.pxd +126 -0
  503. sage/matroids/lean_matrix.pyx +3667 -0
  504. sage/matroids/linear_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  505. sage/matroids/linear_matroid.pxd +180 -0
  506. sage/matroids/linear_matroid.pyx +6649 -0
  507. sage/matroids/matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  508. sage/matroids/matroid.pxd +243 -0
  509. sage/matroids/matroid.pyx +8759 -0
  510. sage/matroids/matroids_catalog.py +190 -0
  511. sage/matroids/matroids_plot_helpers.py +890 -0
  512. sage/matroids/minor_matroid.py +480 -0
  513. sage/matroids/minorfix.h +9 -0
  514. sage/matroids/named_matroids.py +5 -0
  515. sage/matroids/rank_matroid.py +268 -0
  516. sage/matroids/set_system.cpython-314-x86_64-linux-gnu.so +0 -0
  517. sage/matroids/set_system.pxd +38 -0
  518. sage/matroids/set_system.pyx +800 -0
  519. sage/matroids/transversal_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  520. sage/matroids/transversal_matroid.pxd +14 -0
  521. sage/matroids/transversal_matroid.pyx +893 -0
  522. sage/matroids/union_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  523. sage/matroids/union_matroid.pxd +20 -0
  524. sage/matroids/union_matroid.pyx +331 -0
  525. sage/matroids/unpickling.cpython-314-x86_64-linux-gnu.so +0 -0
  526. sage/matroids/unpickling.pyx +843 -0
  527. sage/matroids/utilities.py +809 -0
  528. sage/misc/all__sagemath_modules.py +20 -0
  529. sage/misc/c3.cpython-314-x86_64-linux-gnu.so +0 -0
  530. sage/misc/c3.pyx +238 -0
  531. sage/misc/compat.py +87 -0
  532. sage/misc/element_with_label.py +173 -0
  533. sage/misc/func_persist.py +79 -0
  534. sage/misc/pickle_old.cpython-314-x86_64-linux-gnu.so +0 -0
  535. sage/misc/pickle_old.pyx +19 -0
  536. sage/misc/proof.py +7 -0
  537. sage/misc/replace_dot_all.py +472 -0
  538. sage/misc/sagedoc_conf.py +168 -0
  539. sage/misc/sphinxify.py +167 -0
  540. sage/misc/test_class_pickling.py +85 -0
  541. sage/modules/all.py +42 -0
  542. sage/modules/complex_double_vector.py +25 -0
  543. sage/modules/diamond_cutting.py +380 -0
  544. sage/modules/fg_pid/all.py +1 -0
  545. sage/modules/fg_pid/fgp_element.py +456 -0
  546. sage/modules/fg_pid/fgp_module.py +2091 -0
  547. sage/modules/fg_pid/fgp_morphism.py +550 -0
  548. sage/modules/filtered_vector_space.py +1271 -0
  549. sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-gnu.so +0 -0
  550. sage/modules/finite_submodule_iter.pxd +27 -0
  551. sage/modules/finite_submodule_iter.pyx +452 -0
  552. sage/modules/fp_graded/all.py +1 -0
  553. sage/modules/fp_graded/element.py +346 -0
  554. sage/modules/fp_graded/free_element.py +298 -0
  555. sage/modules/fp_graded/free_homspace.py +53 -0
  556. sage/modules/fp_graded/free_module.py +1060 -0
  557. sage/modules/fp_graded/free_morphism.py +217 -0
  558. sage/modules/fp_graded/homspace.py +563 -0
  559. sage/modules/fp_graded/module.py +1340 -0
  560. sage/modules/fp_graded/morphism.py +1990 -0
  561. sage/modules/fp_graded/steenrod/all.py +1 -0
  562. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  563. sage/modules/fp_graded/steenrod/module.py +477 -0
  564. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  565. sage/modules/fp_graded/steenrod/profile.py +241 -0
  566. sage/modules/free_module.py +8447 -0
  567. sage/modules/free_module_element.cpython-314-x86_64-linux-gnu.so +0 -0
  568. sage/modules/free_module_element.pxd +22 -0
  569. sage/modules/free_module_element.pyx +5445 -0
  570. sage/modules/free_module_homspace.py +369 -0
  571. sage/modules/free_module_integer.py +896 -0
  572. sage/modules/free_module_morphism.py +823 -0
  573. sage/modules/free_module_pseudohomspace.py +352 -0
  574. sage/modules/free_module_pseudomorphism.py +578 -0
  575. sage/modules/free_quadratic_module.py +1706 -0
  576. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  577. sage/modules/matrix_morphism.py +1745 -0
  578. sage/modules/misc.py +103 -0
  579. sage/modules/module_functors.py +192 -0
  580. sage/modules/multi_filtered_vector_space.py +719 -0
  581. sage/modules/ore_module.py +2208 -0
  582. sage/modules/ore_module_element.py +178 -0
  583. sage/modules/ore_module_homspace.py +147 -0
  584. sage/modules/ore_module_morphism.py +968 -0
  585. sage/modules/quotient_module.py +699 -0
  586. sage/modules/real_double_vector.py +22 -0
  587. sage/modules/submodule.py +255 -0
  588. sage/modules/tensor_operations.py +567 -0
  589. sage/modules/torsion_quadratic_module.py +1352 -0
  590. sage/modules/tutorial_free_modules.py +248 -0
  591. sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  592. sage/modules/vector_complex_double_dense.pxd +6 -0
  593. sage/modules/vector_complex_double_dense.pyx +117 -0
  594. sage/modules/vector_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  595. sage/modules/vector_double_dense.pxd +6 -0
  596. sage/modules/vector_double_dense.pyx +604 -0
  597. sage/modules/vector_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  598. sage/modules/vector_integer_dense.pxd +15 -0
  599. sage/modules/vector_integer_dense.pyx +361 -0
  600. sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  601. sage/modules/vector_integer_sparse.pxd +29 -0
  602. sage/modules/vector_integer_sparse.pyx +406 -0
  603. sage/modules/vector_modn_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  604. sage/modules/vector_modn_dense.pxd +12 -0
  605. sage/modules/vector_modn_dense.pyx +394 -0
  606. sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  607. sage/modules/vector_modn_sparse.pxd +21 -0
  608. sage/modules/vector_modn_sparse.pyx +298 -0
  609. sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  610. sage/modules/vector_numpy_dense.pxd +15 -0
  611. sage/modules/vector_numpy_dense.pyx +304 -0
  612. sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  613. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  614. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  615. sage/modules/vector_rational_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  616. sage/modules/vector_rational_dense.pxd +15 -0
  617. sage/modules/vector_rational_dense.pyx +387 -0
  618. sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  619. sage/modules/vector_rational_sparse.pxd +30 -0
  620. sage/modules/vector_rational_sparse.pyx +413 -0
  621. sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  622. sage/modules/vector_real_double_dense.pxd +6 -0
  623. sage/modules/vector_real_double_dense.pyx +126 -0
  624. sage/modules/vector_space_homspace.py +430 -0
  625. sage/modules/vector_space_morphism.py +989 -0
  626. sage/modules/with_basis/all.py +15 -0
  627. sage/modules/with_basis/cell_module.py +494 -0
  628. sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-gnu.so +0 -0
  629. sage/modules/with_basis/indexed_element.pxd +13 -0
  630. sage/modules/with_basis/indexed_element.pyx +1058 -0
  631. sage/modules/with_basis/invariant.py +1075 -0
  632. sage/modules/with_basis/morphism.py +1636 -0
  633. sage/modules/with_basis/representation.py +2939 -0
  634. sage/modules/with_basis/subquotient.py +685 -0
  635. sage/numerical/all__sagemath_modules.py +6 -0
  636. sage/numerical/gauss_legendre.cpython-314-x86_64-linux-gnu.so +0 -0
  637. sage/numerical/gauss_legendre.pyx +381 -0
  638. sage/numerical/optimize.py +910 -0
  639. sage/probability/all.py +10 -0
  640. sage/probability/probability_distribution.cpython-314-x86_64-linux-gnu.so +0 -0
  641. sage/probability/probability_distribution.pyx +1242 -0
  642. sage/probability/random_variable.py +411 -0
  643. sage/quadratic_forms/all.py +4 -0
  644. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  645. sage/quadratic_forms/binary_qf.py +2042 -0
  646. sage/quadratic_forms/bqf_class_group.py +748 -0
  647. sage/quadratic_forms/constructions.py +93 -0
  648. sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-gnu.so +0 -0
  649. sage/quadratic_forms/count_local_2.pyx +365 -0
  650. sage/quadratic_forms/extras.py +195 -0
  651. sage/quadratic_forms/quadratic_form.py +1753 -0
  652. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  653. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  654. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-gnu.so +0 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  656. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  657. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  658. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  659. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  660. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  661. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  662. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  663. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  664. sage/quadratic_forms/random_quadraticform.py +209 -0
  665. sage/quadratic_forms/ternary.cpython-314-x86_64-linux-gnu.so +0 -0
  666. sage/quadratic_forms/ternary.pyx +1154 -0
  667. sage/quadratic_forms/ternary_qf.py +2027 -0
  668. sage/rings/all__sagemath_modules.py +28 -0
  669. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  670. sage/rings/asymptotic/misc.py +1252 -0
  671. sage/rings/cc.py +4 -0
  672. sage/rings/cfinite_sequence.py +1306 -0
  673. sage/rings/complex_conversion.cpython-314-x86_64-linux-gnu.so +0 -0
  674. sage/rings/complex_conversion.pxd +8 -0
  675. sage/rings/complex_conversion.pyx +23 -0
  676. sage/rings/complex_double.cpython-314-x86_64-linux-gnu.so +0 -0
  677. sage/rings/complex_double.pxd +21 -0
  678. sage/rings/complex_double.pyx +2654 -0
  679. sage/rings/complex_mpc.cpython-314-x86_64-linux-gnu.so +0 -0
  680. sage/rings/complex_mpc.pxd +21 -0
  681. sage/rings/complex_mpc.pyx +2576 -0
  682. sage/rings/complex_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
  683. sage/rings/complex_mpfr.pxd +18 -0
  684. sage/rings/complex_mpfr.pyx +3602 -0
  685. sage/rings/derivation.py +2334 -0
  686. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  687. sage/rings/finite_rings/maps_finite_field.py +191 -0
  688. sage/rings/function_field/all__sagemath_modules.py +8 -0
  689. sage/rings/function_field/derivations.py +102 -0
  690. sage/rings/function_field/derivations_rational.py +132 -0
  691. sage/rings/function_field/differential.py +853 -0
  692. sage/rings/function_field/divisor.py +1107 -0
  693. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  694. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  695. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  696. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  697. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  698. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  699. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  700. sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-gnu.so +0 -0
  701. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  702. sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-gnu.so +0 -0
  703. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  704. sage/rings/invariants/all.py +4 -0
  705. sage/rings/invariants/invariant_theory.py +4597 -0
  706. sage/rings/invariants/reconstruction.py +395 -0
  707. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  708. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  709. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-gnu.so +0 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  712. sage/rings/polynomial/ore_function_element.py +952 -0
  713. sage/rings/polynomial/ore_function_field.py +1028 -0
  714. sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-gnu.so +0 -0
  715. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  716. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  717. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  718. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  720. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  721. sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-gnu.so +0 -0
  722. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  723. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  724. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-gnu.so +0 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  727. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-gnu.so +0 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  730. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  731. sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-gnu.so +0 -0
  732. sage/rings/real_double_element_gsl.pxd +8 -0
  733. sage/rings/real_double_element_gsl.pyx +794 -0
  734. sage/rings/real_field.py +58 -0
  735. sage/rings/real_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
  736. sage/rings/real_mpfr.pxd +29 -0
  737. sage/rings/real_mpfr.pyx +6122 -0
  738. sage/rings/ring_extension.cpython-314-x86_64-linux-gnu.so +0 -0
  739. sage/rings/ring_extension.pxd +42 -0
  740. sage/rings/ring_extension.pyx +2779 -0
  741. sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-gnu.so +0 -0
  742. sage/rings/ring_extension_conversion.pxd +16 -0
  743. sage/rings/ring_extension_conversion.pyx +462 -0
  744. sage/rings/ring_extension_element.cpython-314-x86_64-linux-gnu.so +0 -0
  745. sage/rings/ring_extension_element.pxd +21 -0
  746. sage/rings/ring_extension_element.pyx +1635 -0
  747. sage/rings/ring_extension_homset.py +64 -0
  748. sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-gnu.so +0 -0
  749. sage/rings/ring_extension_morphism.pxd +35 -0
  750. sage/rings/ring_extension_morphism.pyx +920 -0
  751. sage/schemes/all__sagemath_modules.py +1 -0
  752. sage/schemes/projective/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/coherent_sheaf.py +300 -0
  754. sage/schemes/projective/cohomology.py +510 -0
  755. sage/stats/all.py +15 -0
  756. sage/stats/basic_stats.py +489 -0
  757. sage/stats/distributions/all.py +7 -0
  758. sage/stats/distributions/catalog.py +34 -0
  759. sage/stats/distributions/dgs.h +50 -0
  760. sage/stats/distributions/dgs.pxd +111 -0
  761. sage/stats/distributions/dgs_bern.h +400 -0
  762. sage/stats/distributions/dgs_gauss.h +614 -0
  763. sage/stats/distributions/dgs_misc.h +104 -0
  764. sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-gnu.so +0 -0
  765. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  767. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  768. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  769. sage/stats/hmm/all.py +15 -0
  770. sage/stats/hmm/chmm.cpython-314-x86_64-linux-gnu.so +0 -0
  771. sage/stats/hmm/chmm.pyx +1595 -0
  772. sage/stats/hmm/distributions.cpython-314-x86_64-linux-gnu.so +0 -0
  773. sage/stats/hmm/distributions.pxd +29 -0
  774. sage/stats/hmm/distributions.pyx +531 -0
  775. sage/stats/hmm/hmm.cpython-314-x86_64-linux-gnu.so +0 -0
  776. sage/stats/hmm/hmm.pxd +17 -0
  777. sage/stats/hmm/hmm.pyx +1388 -0
  778. sage/stats/hmm/util.cpython-314-x86_64-linux-gnu.so +0 -0
  779. sage/stats/hmm/util.pxd +7 -0
  780. sage/stats/hmm/util.pyx +165 -0
  781. sage/stats/intlist.cpython-314-x86_64-linux-gnu.so +0 -0
  782. sage/stats/intlist.pxd +14 -0
  783. sage/stats/intlist.pyx +588 -0
  784. sage/stats/r.py +49 -0
  785. sage/stats/time_series.cpython-314-x86_64-linux-gnu.so +0 -0
  786. sage/stats/time_series.pxd +6 -0
  787. sage/stats/time_series.pyx +2546 -0
  788. sage/tensor/all.py +2 -0
  789. sage/tensor/modules/all.py +8 -0
  790. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  791. sage/tensor/modules/comp.py +5598 -0
  792. sage/tensor/modules/ext_pow_free_module.py +824 -0
  793. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  794. sage/tensor/modules/format_utilities.py +333 -0
  795. sage/tensor/modules/free_module_alt_form.py +858 -0
  796. sage/tensor/modules/free_module_automorphism.py +1207 -0
  797. sage/tensor/modules/free_module_basis.py +1074 -0
  798. sage/tensor/modules/free_module_element.py +284 -0
  799. sage/tensor/modules/free_module_homset.py +652 -0
  800. sage/tensor/modules/free_module_linear_group.py +564 -0
  801. sage/tensor/modules/free_module_morphism.py +1581 -0
  802. sage/tensor/modules/free_module_tensor.py +3289 -0
  803. sage/tensor/modules/reflexive_module.py +386 -0
  804. sage/tensor/modules/tensor_free_module.py +780 -0
  805. sage/tensor/modules/tensor_free_submodule.py +538 -0
  806. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  807. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,1184 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.combinat sage.graphs
3
+ r"""
4
+ BGG Category O Dual Modules
5
+
6
+ AUTHORS:
7
+
8
+ - Travis Scrimshaw (2024-01-07): Initial version
9
+ """
10
+
11
+ #*****************************************************************************
12
+ # Copyright (C) 2024 Travis Scrimshaw <tcscrims at gmail.com>
13
+ #
14
+ # This program is free software: you can redistribute it and/or modify
15
+ # it under the terms of the GNU General Public License as published by
16
+ # the Free Software Foundation, either version 2 of the License, or
17
+ # (at your option) any later version.
18
+ # http://www.gnu.org/licenses/
19
+ #*****************************************************************************
20
+
21
+ try:
22
+ from typing import Self # type: ignore (Python >= 3.11)
23
+ except ImportError:
24
+ from typing_extensions import Self # type: ignore (Python 3.10)
25
+
26
+ from sage.algebras.lie_algebras.verma_module import ModulePrinting
27
+ from sage.categories.enumerated_sets import EnumeratedSets
28
+ from sage.categories.monoids import Monoids
29
+ from sage.combinat.free_module import CombinatorialFreeModule
30
+ from sage.data_structures.blas_dict import iaxpy
31
+ from sage.matrix.constructor import matrix
32
+ from sage.misc.cachefunc import cached_method
33
+ from sage.misc.lazy_attribute import lazy_attribute
34
+ from sage.monoids.indexed_free_monoid import IndexedFreeAbelianMonoid, IndexedMonoid
35
+ from sage.rings.integer_ring import ZZ
36
+ from sage.sets.family import Family
37
+ from sage.sets.finite_enumerated_set import FiniteEnumeratedSet
38
+ from sage.structure.indexed_generators import IndexedGenerators
39
+ from sage.structure.parent import Parent
40
+
41
+
42
+ class BGGDualModule(CombinatorialFreeModule):
43
+ r"""
44
+ The dual module `M^{\vee}` in the BGG Category `\mathcal{O}`.
45
+
46
+ Let `\tau` be the transpose map of a semisimple (finite dimensional)
47
+ Lie algebra `\mathfrak{g}` over a field `R`. Let `M \in \mathcal{O}`.
48
+ The *BGG dual module* is the `R`-module `M^{\vee} :=
49
+ \bigoplus_{\lambda} M_{\lambda}^*` which has a `U(\mathfrak{g})`-module
50
+ structure given by
51
+
52
+ .. MATH::
53
+
54
+ x \cdot \phi(v) := \phi(\tau(x) \cdot v),
55
+
56
+ which is also a weight module with the same grading as `M`.
57
+
58
+ The basis we chose to work with here is the natural dual basis to the
59
+ distinguished basis `B` of `M`. That is, we define the dual function
60
+ to `b` as `\phi_b(c) = \delta_{bc}`.
61
+
62
+ EXAMPLES::
63
+
64
+ sage: g = LieAlgebra(QQ, cartan_type=['A', 1])
65
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
66
+ sage: M = g.verma_module(2*La[1])
67
+ sage: Mc = M.dual()
68
+ sage: B = Mc.basis()
69
+ sage: it = iter(B)
70
+ sage: elts = [next(it) for _ in range(7)]; elts
71
+ [v[2*Lambda[1]]^*,
72
+ f[-alpha[1]]*v[2*Lambda[1]]^*,
73
+ f[-alpha[1]]^2*v[2*Lambda[1]]^*,
74
+ f[-alpha[1]]^3*v[2*Lambda[1]]^*,
75
+ f[-alpha[1]]^4*v[2*Lambda[1]]^*,
76
+ f[-alpha[1]]^5*v[2*Lambda[1]]^*,
77
+ f[-alpha[1]]^6*v[2*Lambda[1]]^*]
78
+ sage: e, h, f = g.pbw_basis().algebra_generators()
79
+ sage: [f * vec for vec in elts]
80
+ [2*f[-alpha[1]]*v[2*Lambda[1]]^*,
81
+ 2*f[-alpha[1]]^2*v[2*Lambda[1]]^*,
82
+ 0,
83
+ -4*f[-alpha[1]]^4*v[2*Lambda[1]]^*,
84
+ -10*f[-alpha[1]]^5*v[2*Lambda[1]]^*,
85
+ -18*f[-alpha[1]]^6*v[2*Lambda[1]]^*,
86
+ -28*f[-alpha[1]]^7*v[2*Lambda[1]]^*]
87
+ sage: [e * vec for vec in elts]
88
+ [0,
89
+ v[2*Lambda[1]]^*,
90
+ f[-alpha[1]]*v[2*Lambda[1]]^*,
91
+ f[-alpha[1]]^2*v[2*Lambda[1]]^*,
92
+ f[-alpha[1]]^3*v[2*Lambda[1]]^*,
93
+ f[-alpha[1]]^4*v[2*Lambda[1]]^*,
94
+ f[-alpha[1]]^5*v[2*Lambda[1]]^*]
95
+ sage: [h * vec for vec in elts]
96
+ [2*v[2*Lambda[1]]^*,
97
+ 0,
98
+ -2*f[-alpha[1]]^2*v[2*Lambda[1]]^*,
99
+ -4*f[-alpha[1]]^3*v[2*Lambda[1]]^*,
100
+ -6*f[-alpha[1]]^4*v[2*Lambda[1]]^*,
101
+ -8*f[-alpha[1]]^5*v[2*Lambda[1]]^*,
102
+ -10*f[-alpha[1]]^6*v[2*Lambda[1]]^*]
103
+
104
+ REFERENCES:
105
+
106
+ - [Humphreys08]_
107
+ """
108
+ def __init__(self, module):
109
+ r"""
110
+ Initialize ``self``.
111
+
112
+ EXAMPLES::
113
+
114
+ sage: g = LieAlgebra(QQ, cartan_type=['B', 2])
115
+ sage: La = g.cartan_type().root_system().weight_space().fundamental_weights()
116
+ sage: M = g.verma_module(2*La[1] + La[2])
117
+ sage: Mc = M.dual()
118
+ sage: TestSuite(Mc).run()
119
+
120
+ sage: M = g.verma_module(2/3*La[1] - 3/5*La[2])
121
+ sage: Mc = M.dual()
122
+ sage: TestSuite(Mc).run()
123
+ """
124
+ self._module = module
125
+ self._g = module.lie_algebra()
126
+ self._pbw = self._g.pbw_basis()
127
+ base_ring = module.base_ring()
128
+ indices = module.indices()
129
+ category = module.category()
130
+ CombinatorialFreeModule.__init__(self, base_ring, indices, category=category,
131
+ **module.print_options())
132
+
133
+ def _repr_(self):
134
+ r"""
135
+ Return a string representation of ``self``.
136
+
137
+ EXAMPLES::
138
+
139
+ sage: g = LieAlgebra(QQ, cartan_type=['A', 1])
140
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
141
+ sage: M = g.verma_module(2*La[1])
142
+ sage: M.dual()
143
+ BGG Dual of Verma module with highest weight 2*Lambda[1] of
144
+ Lie algebra of ['A', 1] in the Chevalley basis
145
+ """
146
+ return "BGG Dual of " + repr(self._module)
147
+
148
+ def _latex_(self):
149
+ r"""
150
+ Return a latex representation of ``self``.
151
+
152
+ EXAMPLES::
153
+
154
+ sage: g = LieAlgebra(QQ, cartan_type=['A', 1])
155
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
156
+ sage: M = g.verma_module(2*La[1])
157
+ sage: Mc = M.dual()
158
+ sage: latex(Mc)
159
+ { M_{2 \Lambda_{1}} }^{\vee}
160
+ """
161
+ from sage.misc.latex import latex
162
+ return "{" + latex(self._module) + "}^{\\vee}"
163
+
164
+ def _repr_generator(self, m):
165
+ r"""
166
+ Return a string representation of the generator indexed by ``m``.
167
+
168
+ EXAMPLES::
169
+
170
+ sage: g = lie_algebras.sp(QQ, 4)
171
+ sage: La = g.cartan_type().root_system().ambient_space().fundamental_weights()
172
+ sage: Mc = g.verma_module(La[1] + 3/7*La[2]).dual()
173
+ sage: f1, f2 = g.f()
174
+ sage: x = g.pbw_basis()(g([f1, [f1, f2]]))
175
+ sage: v = x * Mc.highest_weight_vector()
176
+ sage: Mc._repr_generator(v.leading_support())
177
+ 'f[-alpha[1]]*f[-alpha[1] - alpha[2]]*v[(10/7, 3/7)]^*'
178
+ """
179
+ return self._module._repr_generator(m) + "^*"
180
+
181
+ def _latex_generator(self, m):
182
+ r"""
183
+ Return a latex representation of the generator indexed by ``m``.
184
+
185
+ EXAMPLES::
186
+
187
+ sage: g = lie_algebras.sp(QQ, 4)
188
+ sage: La = g.cartan_type().root_system().ambient_space().fundamental_weights()
189
+ sage: Mc = g.verma_module(La[1] + 3/7*La[2]).dual()
190
+ sage: f1, f2 = g.f()
191
+ sage: x = g.pbw_basis()(g([f1, [f1, f2]]))
192
+ sage: v = x * Mc.highest_weight_vector()
193
+ sage: Mc._latex_generator(v.leading_support())
194
+ { f_{-\alpha_{1}} f_{-\alpha_{1} - \alpha_{2}} v_{\frac{10}{7} e_{0} + \frac{3}{7} e_{1}} }^{\vee}
195
+ """
196
+ return "{" + self._module._latex_generator(m) + "}^{\\vee}"
197
+
198
+ _repr_term = _repr_generator
199
+ _latex_term = _latex_generator
200
+
201
+ def degree_on_basis(self, m):
202
+ r"""
203
+ Return the degree of the basis element indexed by ``m``.
204
+
205
+ EXAMPLES::
206
+
207
+ sage: g = LieAlgebra(QQ, cartan_type=['D', 5])
208
+ sage: La = g.cartan_type().root_system().weight_space().fundamental_weights()
209
+ sage: M = g.verma_module(La[1] + La[4] - 1/3*La[5])
210
+ sage: Mc = M.dual()
211
+ sage: elt = Mc.an_element(); elt
212
+ f[-alpha[5]]^2*f[-alpha[4]]^2*f[-alpha[3]]^3*v[Lambda[1] + Lambda[4] - 1/3*Lambda[5]]^*
213
+ + 2*f[-alpha[5]]*v[Lambda[1] + Lambda[4] - 1/3*Lambda[5]]^*
214
+ + 3*f[-alpha[4]]*v[Lambda[1] + Lambda[4] - 1/3*Lambda[5]]^*
215
+ + v[Lambda[1] + Lambda[4] - 1/3*Lambda[5]]^*
216
+ sage: [M.degree_on_basis(m) for m in elt.support()]
217
+ [Lambda[1] + 3*Lambda[2] - 2*Lambda[3] - 4/3*Lambda[5],
218
+ Lambda[1] + Lambda[4] - 1/3*Lambda[5],
219
+ Lambda[1] + Lambda[3] + Lambda[4] - 7/3*Lambda[5],
220
+ Lambda[1] + Lambda[3] - Lambda[4] - 1/3*Lambda[5]]
221
+ """
222
+ return self._module.degree_on_basis(m)
223
+
224
+ def highest_weight(self):
225
+ r"""
226
+ Return the highest weight of ``self``.
227
+
228
+ EXAMPLES::
229
+
230
+ sage: g = LieAlgebra(QQ, cartan_type=['E', 7])
231
+ sage: La = g.cartan_type().root_system().weight_space().fundamental_weights()
232
+ sage: M = g.verma_module(2*La[1] + 5/3*La[4] - 3*La[6])
233
+ sage: Mc = M.dual()
234
+ sage: Mc.highest_weight()
235
+ 2*Lambda[1] + 5/3*Lambda[4] - 3*Lambda[6]
236
+ """
237
+ return self._module.highest_weight()
238
+
239
+ def highest_weight_vector(self):
240
+ r"""
241
+ Return the highest weight vector of ``self`` (assuming the
242
+ defining module defines such a vector).
243
+
244
+ EXAMPLES::
245
+
246
+ sage: g = LieAlgebra(QQ, cartan_type=['A', 1])
247
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
248
+ sage: M = g.verma_module(2*La[1])
249
+ sage: Mc = M.dual()
250
+ sage: Mc.highest_weight_vector()
251
+ v[2*Lambda[1]]^*
252
+ """
253
+ hwv = self._module.highest_weight_vector()
254
+ return self.element_class(self, hwv.monomial_coefficients(copy=False))
255
+
256
+ def lie_algebra(self):
257
+ r"""
258
+ Return the underlying Lie algebra of ``self``.
259
+
260
+ EXAMPLES::
261
+
262
+ sage: g = LieAlgebra(QQ, cartan_type=['B', 3])
263
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
264
+ sage: M = g.verma_module(2*La[1] + La[3])
265
+ sage: Mc = M.dual()
266
+ sage: Mc.lie_algebra() is g
267
+ True
268
+ """
269
+ return self._g
270
+
271
+ def dual(self):
272
+ r"""
273
+ Return the dual module of ``self``.
274
+
275
+ In Category `\mathcal{O}`, we have `(M^{\vee})^{\vee} \cong M`, so
276
+ we return the defining module `M` of `M^{\vee}`.
277
+
278
+ EXAMPLES::
279
+
280
+ sage: g = LieAlgebra(QQ, cartan_type=['F', 4])
281
+ sage: La = g.cartan_type().root_system().weight_space().fundamental_weights()
282
+ sage: M = g.verma_module(La[1] - 5/3*La[2] + 3*La[4])
283
+ sage: Mc = M.dual()
284
+ sage: Mc.dual() is M
285
+ True
286
+ """
287
+ return self._module
288
+
289
+ @cached_method
290
+ def _lie_algebra_on_basis(self, b, m):
291
+ r"""
292
+ Return the action of the Lie algebra basis element indexed by ``b``
293
+ on the basis element of ``self`` indexed by ``m``.
294
+
295
+ EXAMPLES::
296
+
297
+ sage: g = LieAlgebra(QQ, cartan_type=['B', 2])
298
+ sage: La = g.cartan_type().root_system().weight_space().fundamental_weights()
299
+ sage: M = g.verma_module(La[1])
300
+ sage: Mc = M.dual()
301
+ sage: it = iter(Mc.basis())
302
+ sage: list(g.basis())
303
+ [E[alpha[2]], E[alpha[1]], E[alpha[1] + alpha[2]], E[alpha[1] + 2*alpha[2]],
304
+ h1, h2,
305
+ E[-alpha[2]], E[-alpha[1]], E[-alpha[1] - alpha[2]], E[-alpha[1] - 2*alpha[2]]]
306
+ sage: for _ in range(3):
307
+ ....: m = next(it).leading_support()
308
+ ....: print(m, [Mc._lie_algebra_on_basis(k, m) for k in g.basis().keys()])
309
+ 1 [0, 0, 0, 0, v[Lambda[1]]^*, 0, 0, f[-alpha[1]]*v[Lambda[1]]^*,
310
+ -2*f[-alpha[2]]*f[-alpha[1]]*v[Lambda[1]]^* + 2*f[-alpha[1] - alpha[2]]*v[Lambda[1]]^*,
311
+ -2*f[-alpha[2]]^2*f[-alpha[1]]*v[Lambda[1]]^*
312
+ + 2*f[-alpha[2]]*f[-alpha[1] - alpha[2]]*v[Lambda[1]]^*
313
+ + f[-alpha[1] - 2*alpha[2]]*v[Lambda[1]]^*]
314
+ f[-alpha[2]] [v[Lambda[1]]^*, 0, 0, 0, 2*f[-alpha[2]]*v[Lambda[1]]^*,
315
+ -2*f[-alpha[2]]*v[Lambda[1]]^*, -2*f[-alpha[2]]^2*v[Lambda[1]]^*,
316
+ f[-alpha[2]]*f[-alpha[1]]*v[Lambda[1]]^* + f[-alpha[1] - alpha[2]]*v[Lambda[1]]^*,
317
+ -4*f[-alpha[2]]^2*f[-alpha[1]]*v[Lambda[1]]^* - f[-alpha[1] - 2*alpha[2]]*v[Lambda[1]]^*,
318
+ -6*f[-alpha[2]]^3*f[-alpha[1]]*v[Lambda[1]]^* + 2*f[-alpha[2]]^2*f[-alpha[1] - alpha[2]]*v[Lambda[1]]^*]
319
+ f[-alpha[1]] [0, v[Lambda[1]]^*, 0, 0, -f[-alpha[1]]*v[Lambda[1]]^*,
320
+ 2*f[-alpha[1]]*v[Lambda[1]]^*,
321
+ 2*f[-alpha[2]]*f[-alpha[1]]*v[Lambda[1]]^* - 2*f[-alpha[1] - alpha[2]]*v[Lambda[1]]^*,
322
+ 0, 0, f[-alpha[1]]*f[-alpha[1] - 2*alpha[2]]*v[Lambda[1]]^* + 2*f[-alpha[1] - alpha[2]]^2*v[Lambda[1]]^*]
323
+ """
324
+ al = self._g.degree_on_basis(b)
325
+ wt = self.degree_on_basis(m)
326
+ if al == 0: # b is indexing part of the Cartan subalgebra
327
+ # We are assuming b is part of the coroot lattice.
328
+ # FIXME: Add something at the category level to return this.
329
+ ac = b
330
+ return self.term(m, wt.scalar(ac))
331
+
332
+ # TODO: Avoid calling homogeneous_component_basis() as the result is not cached
333
+ gens = self._module.homogeneous_component_basis(wt + al)
334
+ elt = self._g.basis()[b]
335
+ # TODO: Determine if we can meaningfully store these results.
336
+ # Computing gens is ~1/3 of the computation and vecs is ~2/3.
337
+ vecs = {g.leading_support(): elt.transpose() * g for g in gens}
338
+ return self.element_class(self, {k: c for k, v in vecs.items() if (c := v[m])})
339
+
340
+ def _pbw_monomial_on_basis(self, p, m):
341
+ r"""
342
+ Return the action of the PBW monomial indexed by ``p`` on the basis
343
+ element of ``self`` indexed by ``m``.
344
+
345
+ EXAMPLES::
346
+
347
+ sage: g = LieAlgebra(QQ, cartan_type=['A', 1])
348
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
349
+ sage: PBW = g.pbw_basis()
350
+ sage: e, h, f = PBW.algebra_generators()
351
+ sage: M = g.verma_module(2*La[1])
352
+ sage: Mc = M.dual()
353
+ sage: v = Mc.highest_weight_vector()
354
+ sage: Mc._pbw_monomial_on_basis((e*f^2).leading_support(), v.leading_support())
355
+ 4*f[-alpha[1]]*v[2*Lambda[1]]^*
356
+ sage: B = Mc.basis()
357
+ sage: it = iter(B)
358
+ sage: elts = [next(it) for _ in range(7)]; elts
359
+ [v[2*Lambda[1]]^*,
360
+ f[-alpha[1]]*v[2*Lambda[1]]^*,
361
+ f[-alpha[1]]^2*v[2*Lambda[1]]^*,
362
+ f[-alpha[1]]^3*v[2*Lambda[1]]^*,
363
+ f[-alpha[1]]^4*v[2*Lambda[1]]^*,
364
+ f[-alpha[1]]^5*v[2*Lambda[1]]^*,
365
+ f[-alpha[1]]^6*v[2*Lambda[1]]^*]
366
+ """
367
+ ret = self.monomial(m)
368
+ for b, exp in reversed(p._sorted_items()):
369
+ for _ in range(exp):
370
+ ret = self.linear_combination((self._lie_algebra_on_basis(b, m), mc)
371
+ for m, mc in ret._monomial_coefficients.items())
372
+ return ret
373
+
374
+ class Element(CombinatorialFreeModule.Element):
375
+ def _acted_upon_(self, scalar, self_on_left=False):
376
+ r"""
377
+ Return the action of ``scalar`` on ``self``.
378
+
379
+ EXAMPLES::
380
+
381
+ sage: g = LieAlgebra(QQ, cartan_type=['A', 1])
382
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
383
+ sage: PBW = g.pbw_basis()
384
+ sage: e, h, f = PBW.algebra_generators()
385
+ sage: M = g.verma_module(2*La[1])
386
+ sage: Mc = M.dual()
387
+ sage: v = Mc.highest_weight_vector()
388
+ sage: (h*e^2*f^2) * v
389
+ 8*v[2*Lambda[1]]^*
390
+ sage: g.casimir_element(UEA=PBW) * v
391
+ v[2*Lambda[1]]^*
392
+ sage: 5 * v
393
+ 5*v[2*Lambda[1]]^*
394
+ """
395
+ P = self.parent()
396
+ # Check for scalars first
397
+ if scalar in P.base_ring():
398
+ # Don't have this be a super call
399
+ return CombinatorialFreeModule.Element._acted_upon_(self, scalar, self_on_left)
400
+
401
+ # Check for Lie algebra elements
402
+ try:
403
+ scalar = P._g(scalar)
404
+ except (ValueError, TypeError):
405
+ pass
406
+ if scalar.parent() is P._g:
407
+ if self_on_left: # only implemented as a left module
408
+ return None
409
+ mc = scalar.monomial_coefficients(copy=False)
410
+ return P.linear_combination((P._lie_algebra_on_basis(b, m), bc * mc)
411
+ for b, bc in mc.items()
412
+ for m, mc in self._monomial_coefficients.items())
413
+
414
+ # Check for PBW elements
415
+ try:
416
+ scalar = P._pbw(scalar)
417
+ except (ValueError, TypeError):
418
+ # Cannot be made into a PBW element, so propagate it up
419
+ return CombinatorialFreeModule.Element._acted_upon_(self,
420
+ scalar, self_on_left)
421
+
422
+ # We only implement x * self, i.e., as a left module
423
+ if self_on_left:
424
+ return None
425
+
426
+ mc = scalar.monomial_coefficients(copy=False)
427
+ return P.linear_combination((P._pbw_monomial_on_basis(p, m), pc * mc)
428
+ for p, pc in mc.items()
429
+ for m, mc in self._monomial_coefficients.items())
430
+
431
+
432
+ #####################################################################
433
+ # Simple modules
434
+
435
+
436
+ # This is an abuse as the monoid is not free.
437
+ # TODO: Rewrite this (or the indexed monoid class) to use explicit vectors
438
+ # since we only want to consider ordered elements.
439
+ # Note, such a rewrite would force the Lie algebra to be finite dimensional.
440
+ class SimpleModuleIndices(IndexedFreeAbelianMonoid):
441
+ r"""
442
+ The indices of the basis for a simple `U(\mathfrak{g})`-module.
443
+
444
+ .. NOTE::
445
+
446
+ The current implementation assumes the Lie algebra `\mathfrak{g}`
447
+ is finite dimensional.
448
+ """
449
+ # This is only necessary because of the IndexedMonoid.__classcall__.
450
+ @staticmethod
451
+ def __classcall__(cls, simple, prefix='f', **kwds):
452
+ r"""
453
+ Normalize input to ensure a unique representation.
454
+
455
+ TESTS::
456
+
457
+ sage: g = LieAlgebra(QQ, cartan_type=['E', 6])
458
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
459
+ sage: L = g.simple_module(La[1] + La[3])
460
+ sage: from sage.algebras.lie_algebras.bgg_dual_module import SimpleModuleIndices
461
+ sage: SimpleModuleIndices(L) is L._indices
462
+ True
463
+ """
464
+ return super(IndexedMonoid, cls).__classcall__(cls, simple, prefix=prefix, **kwds)
465
+
466
+ def __init__(self, simple, prefix, category=None, **kwds):
467
+ r"""
468
+ Initialize ``self``.
469
+
470
+ TESTS::
471
+
472
+ sage: g = LieAlgebra(QQ, cartan_type=['A', 2])
473
+ sage: La = g.cartan_type().root_system().weight_space().fundamental_weights()
474
+ sage: I = g.simple_module(2*La[1] + La[2]).indices()
475
+ sage: TestSuite(I).run()
476
+
477
+ sage: I = g.simple_module(2*La[1] - 1/3*La[2]).indices()
478
+ sage: TestSuite(I).run(max_runs=150) # long time
479
+ """
480
+ self._simple = simple
481
+ self._g = simple.lie_algebra()
482
+ self._reached_max_depth = False
483
+ # Below was mostly copied from IndexedMonoid.__init__()
484
+ self._indices = FiniteEnumeratedSet(self._g._negative_half_index_set())
485
+ category = Monoids().or_subcategory(category)
486
+ category = category & EnumeratedSets()
487
+ category = category.FinitelyGeneratedAsMagma()
488
+ if self._simple._dom_int:
489
+ category = category.Finite()
490
+ else:
491
+ category = category.Infinite()
492
+ Parent.__init__(self, category=category)
493
+
494
+ # ignore the optional 'key' since it only affects CachedRepresentation
495
+ kwds.pop('key', None)
496
+ sorting_key = kwds.pop('sorting_key', self._simple._pbw._monoid_key)
497
+ IndexedGenerators.__init__(self, self._indices, prefix, sorting_key=sorting_key, **kwds)
498
+
499
+ self._sorted_supp = sorted(self._g._negative_half_index_set(), key=self._simple._pbw._basis_key,
500
+ reverse=self.print_options()['sorting_reverse'])
501
+ self._basis = {self.one(): self._simple._ambient.highest_weight_vector()}
502
+ self._lead_supp_to_index = {self._simple._ambient.highest_weight_vector().leading_support(): self.one()}
503
+ # This is used for iteration and keeps track of the current depth
504
+ self._basis_by_depth = [dict(self._basis)]
505
+ # The basis is given as a list of indices corresponding to basis vectors in self._basis
506
+ self._weight_space_bases = {self._simple.highest_weight(): [self.one()]}
507
+
508
+ def _an_element_(self):
509
+ r"""
510
+ Return an element of ``self``.
511
+
512
+ The only element we can quickly guarantee is in ``self`` is 1,
513
+ so we return this.
514
+
515
+ EXAMPLES::
516
+
517
+ sage: g = LieAlgebra(QQ, cartan_type=['E', 6])
518
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
519
+ sage: I = g.simple_module(2*La[1] + La[2]).indices()
520
+ sage: I._an_element_()
521
+ 1
522
+ """
523
+ return self.one()
524
+
525
+ def _weight_max_depth(self, mu):
526
+ r"""
527
+ Return the maximum depth of the weight ``mu``.
528
+
529
+ EXAMPLES::
530
+
531
+ sage: g = LieAlgebra(QQ, cartan_type=['E', 6])
532
+ sage: P = g.cartan_type().root_system().weight_lattice()
533
+ sage: La = P.fundamental_weights()
534
+ sage: al = P.simple_roots()
535
+ sage: wt = 2*La[1] + La[2]
536
+ sage: I = g.simple_module(wt).indices()
537
+ sage: I._weight_max_depth(wt)
538
+ 0
539
+ sage: I._weight_max_depth(wt + al[2]) is None
540
+ True
541
+ sage: I._weight_max_depth(wt - 2*al[2] - 5*al[4] - 3*al[6])
542
+ 10
543
+
544
+ sage: g = LieAlgebra(QQ, cartan_type=['F', 4])
545
+ sage: P = g.cartan_type().root_system().weight_space()
546
+ sage: La = P.fundamental_weights()
547
+ sage: al = P.simple_roots()
548
+ sage: wt = 2*La[1] - 3/2*La[2]
549
+ sage: I = g.simple_module(wt).indices()
550
+ sage: I._weight_max_depth(wt)
551
+ 0
552
+ sage: I._weight_max_depth(wt + al[2]) is None
553
+ True
554
+ sage: I._weight_max_depth(wt - 2*al[2] - 3*al[4])
555
+ 5
556
+ sage: I._weight_max_depth(wt - 2/3*al[1]) is None
557
+ True
558
+ """
559
+ al = (self._simple.highest_weight() - mu)._to_root_vector()
560
+ if any(c not in ZZ or c < 0 for c in al):
561
+ return None
562
+ return sum(al)
563
+
564
+ def weight_space_basis(self, mu):
565
+ r"""
566
+ Return the indices of the ``mu`` weight space basis elements.
567
+
568
+ EXAMPLES::
569
+
570
+ sage: g = LieAlgebra(QQ, cartan_type=['A', 2])
571
+ sage: P = g.cartan_type().root_system().weight_lattice()
572
+ sage: La = P.fundamental_weights()
573
+ sage: al = P.simple_roots()
574
+ sage: wt = -3*La[1] + 3*La[2]
575
+ sage: I = g.simple_module(wt).indices()
576
+ sage: I.weight_space_basis(wt)
577
+ [1]
578
+ sage: I.weight_space_basis(wt - al[1])
579
+ [f[-alpha[1]]]
580
+ sage: I.weight_space_basis(wt - al[2])
581
+ [f[-alpha[2]]]
582
+ sage: I.weight_space_basis(wt - al[1] - al[2])
583
+ [f[-alpha[1] - alpha[2]], f[-alpha[2]]*f[-alpha[1]]]
584
+ sage: I.weight_space_basis(wt - 4*al[1])
585
+ [f[-alpha[1]]^4]
586
+ sage: I.weight_space_basis(wt - 4*al[2])
587
+ []
588
+ """
589
+ if self._reached_max_depth:
590
+ return self._weight_space_bases.get(mu, [])
591
+
592
+ max_depth = self._weight_max_depth(mu)
593
+ while max_depth >= len(self._basis_by_depth):
594
+ if self._reached_max_depth: # we've already reached everything
595
+ break
596
+ self._construct_next_level()
597
+ return self._weight_space_bases.get(mu, [])
598
+
599
+ def __contains__(self, m):
600
+ r"""
601
+ Check if ``m`` is contained in ``self``.
602
+
603
+ EXAMPLES::
604
+
605
+ sage: g = LieAlgebra(QQ, cartan_type=['G', 2])
606
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
607
+ sage: L = g.simple_module(La[1])
608
+ sage: I = L.indices()
609
+ sage: I.one() in I
610
+ True
611
+ sage: it = iter(I)
612
+ sage: for _ in range(3):
613
+ ....: elt = next(it)
614
+ ....: print(elt, elt in I)
615
+ 1 True
616
+ f[-alpha[1]] True
617
+ f[-alpha[1] - alpha[2]] True
618
+ sage: gens = list(I.gens()); gens
619
+ [f[-alpha[2]],
620
+ f[-alpha[1]],
621
+ f[-alpha[1] - alpha[2]],
622
+ f[-2*alpha[1] - alpha[2]],
623
+ f[-3*alpha[1] - alpha[2]],
624
+ f[-3*alpha[1] - 2*alpha[2]]]
625
+ sage: gens[1] in I
626
+ True
627
+ sage: gens[0] * gens[1] in I
628
+ False
629
+ sage: gens[2] in I
630
+ True
631
+ sage: gens[0]^10 in I
632
+ False
633
+ sage: gens[5]^6 * gens[2]^10 in I
634
+ False
635
+ """
636
+ if not isinstance(m, self.Element) or m.parent() is not self:
637
+ return False
638
+ depth = m.length()
639
+ while depth >= len(self._basis_by_depth):
640
+ if self._reached_max_depth: # we've already reached everything
641
+ break
642
+ self._construct_next_level()
643
+ return m in self._basis
644
+
645
+ def __iter__(self):
646
+ r"""
647
+ Iterate over ``self``.
648
+
649
+ EXAMPLES::
650
+
651
+ sage: g = LieAlgebra(QQ, cartan_type=['B', 2])
652
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
653
+ sage: L = g.simple_module(La[2])
654
+ sage: I = L.indices()
655
+ sage: list(I)
656
+ [1, f[-alpha[2]], f[-alpha[1] - alpha[2]], f[-alpha[1] - 2*alpha[2]]]
657
+
658
+ sage: L = g.simple_module(La[1]-La[2])
659
+ sage: I = L.indices()
660
+ sage: it = iter(I)
661
+ sage: [next(it) for _ in range(6)]
662
+ [1, f[-alpha[2]], f[-alpha[1]], f[-alpha[1] - alpha[2]],
663
+ f[-alpha[1] - 2*alpha[2]], f[-alpha[2]]^2]
664
+ """
665
+ depth = 0
666
+ while True:
667
+ while depth >= len(self._basis_by_depth):
668
+ if self._reached_max_depth: # we've already reached everything
669
+ return
670
+ self._construct_next_level()
671
+ yield from self._basis_by_depth[depth]
672
+ depth += 1
673
+
674
+ def _construct_next_level(self):
675
+ r"""
676
+ Construct the image for the next level of ``self``.
677
+
678
+ ALGORITHM:
679
+
680
+ For each image vector of `f_{\beta_1}^{b_1} \cdots f_{\beta_k}^{b_k}
681
+ v_{\lambda}` at the current depth `b_1 + \cdots b_k`, consider the
682
+ image under multiplication by every generator `f_{\alpha}` for
683
+ all `\alpha \leq \beta_1` in the fixed PBW ordering of the (dual)
684
+ Verma module.
685
+
686
+ .. TODO::
687
+
688
+ Avoid unnecessary computations by using the corresponding
689
+ (combinatorial) crystal.
690
+
691
+ EXAMPLES::
692
+
693
+ sage: g = LieAlgebra(QQ, cartan_type=['C', 3])
694
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
695
+ sage: L = g.simple_module(La[1])
696
+ sage: I = L.indices()
697
+ sage: len(I._basis)
698
+ 1
699
+ sage: I._construct_next_level()
700
+ sage: len(I._basis)
701
+ 6
702
+ sage: I._reached_max_depth
703
+ False
704
+ sage: I._construct_next_level() # long time
705
+ sage: len(I._basis) # long time
706
+ 6
707
+ sage: I._reached_max_depth # long time
708
+ True
709
+ sage: I._construct_next_level() # long time
710
+ """
711
+ if self._reached_max_depth: # we've already reached everything
712
+ return # so nothing more to do
713
+
714
+ gens = self._g.basis()
715
+ next_level = {}
716
+ R = self._g.base_ring()
717
+ ambient = self._simple._ambient
718
+ pbw = ambient._pbw
719
+ for m, vec in self._basis_by_depth[-1].items():
720
+ # find the first support index
721
+ ind = len(self._sorted_supp)
722
+ for i, ls in enumerate(self._sorted_supp):
723
+ if ls in m._monomial:
724
+ ind = i + 1
725
+ break
726
+
727
+ for ls in self._sorted_supp[:ind]:
728
+ mp = dict(m._monomial) # make a (shallow) copy
729
+ mp[ls] = mp.get(ls, 0) + 1
730
+ key = self.element_class(self, mp)
731
+ new_vec = gens[ls] * vec
732
+ if not new_vec:
733
+ continue
734
+ # Echelonize the corresponding weight space
735
+ mu = ambient.degree_on_basis(key)
736
+ if mu not in self._weight_space_bases:
737
+ # the only vector in the weight space
738
+ self._weight_space_bases[mu] = [key]
739
+ next_level[key] = new_vec
740
+ self._basis[key] = next_level[key]
741
+ lead_supp = next_level[key].trailing_support(key=pbw._monomial_key)
742
+ self._lead_supp_to_index[lead_supp] = key
743
+ continue
744
+
745
+ supp = set()
746
+ wt_basis = [self._basis[k] for k in self._weight_space_bases[mu]]
747
+ wt_basis.append(new_vec)
748
+ for b in wt_basis:
749
+ supp.update(b.support())
750
+ supp = sorted(supp, key=pbw._monomial_key)
751
+ mat = matrix(R, [[b[s] for s in supp] for b in wt_basis])
752
+ mat.echelonize()
753
+ for i, k in enumerate(self._weight_space_bases[mu]):
754
+ data = {supp[ind]: R(c) for ind, c in mat[i].iteritems() if c}
755
+ self._basis[k] = ambient.element_class(ambient, data)
756
+ i = mat.nrows() - 1
757
+ data = {supp[ind]: R(c) for ind, c in mat[i].iteritems() if c}
758
+ if data:
759
+ next_level[key] = ambient.element_class(ambient, data)
760
+ self._basis[key] = next_level[key]
761
+ lead_supp = next_level[key].trailing_support(key=pbw._monomial_key)
762
+ self._lead_supp_to_index[lead_supp] = key
763
+ self._weight_space_bases[mu].append(key)
764
+
765
+ if not next_level:
766
+ self._reached_max_depth = True
767
+ return
768
+ self._basis_by_depth.append(next_level)
769
+
770
+ @cached_method
771
+ def cardinality(self):
772
+ r"""
773
+ Return the cardinality of ``self``.
774
+
775
+ EXAMPLES::
776
+
777
+ sage: g = LieAlgebra(QQ, cartan_type=['E', 6])
778
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
779
+ sage: L = g.simple_module(La[1]+La[4])
780
+ sage: L._indices.cardinality()
781
+ 51975
782
+ """
783
+ if self._simple._dom_int:
784
+ weight = self._simple.highest_weight()
785
+ Phi = self._g.cartan_type().root_system()
786
+ P = Phi.weight_lattice()
787
+ coroots = Phi.root_lattice().simple_coroots()
788
+ la = P._from_dict({i: weight.scalar(ac) for i, ac in coroots.items()})
789
+ from sage.combinat.crystals.monomial_crystals import (
790
+ CrystalOfNakajimaMonomials,
791
+ )
792
+ return CrystalOfNakajimaMonomials(la).cardinality()
793
+ from sage.rings.infinity import infinity
794
+ return infinity
795
+
796
+
797
+ class SimpleModule(ModulePrinting, CombinatorialFreeModule):
798
+ r"""
799
+ Return the simple module `L_{\lambda}` as the image of the natural
800
+ morphism `\phi: M_{\lambda} \to M_{\lambda}^{\vee}`.
801
+ """
802
+ @staticmethod
803
+ def __classcall_private__(cls, g, weight, *args, **kwds):
804
+ r"""
805
+ Normalize input to ensure a unique representation and return
806
+ the correct type.
807
+
808
+ EXAMPLES::
809
+
810
+ sage: g = LieAlgebra(QQ, cartan_type=['E', 6])
811
+ sage: La = g.cartan_type().root_system().weight_space().fundamental_weights()
812
+ sage: type(g.simple_module(La[1] + La[2]))
813
+ <class 'sage.algebras.lie_algebras.bgg_dual_module.FiniteDimensionalSimpleModule_with_category'>
814
+ sage: type(g.simple_module(La[1] - La[2]))
815
+ <class 'sage.algebras.lie_algebras.bgg_dual_module.SimpleModule_with_category'>
816
+ sage: type(g.simple_module(La[1] + 3/2*La[2]))
817
+ <class 'sage.algebras.lie_algebras.bgg_dual_module.SimpleModule_with_category'>
818
+ """
819
+ if weight.is_dominant_weight():
820
+ return FiniteDimensionalSimpleModule(g, weight, *args, **kwds)
821
+ return super().__classcall__(cls, g, weight, *args, **kwds)
822
+
823
+ def __init__(self, g, weight, prefix='f', basis_key=None, **kwds):
824
+ r"""
825
+ Initialize ``self``.
826
+
827
+ EXAMPLES::
828
+
829
+ sage: g = LieAlgebra(QQ, cartan_type=['G', 2])
830
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
831
+ sage: L = g.simple_module(La[1] + La[2])
832
+ sage: TestSuite(L).run()
833
+
834
+ sage: g = LieAlgebra(QQ, cartan_type=['A', 2])
835
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
836
+ sage: L = g.simple_module(La[1] - La[2])
837
+ sage: TestSuite(L).run()
838
+ """
839
+ self._g = g
840
+ self._weight = weight
841
+ self._dom_int = weight.is_dominant_weight()
842
+ self._verma = g.verma_module(weight, basis_key=basis_key)
843
+ self._ambient = self._verma.dual()
844
+ self._pbw = self._verma.pbw_basis()
845
+ base_ring = self._g.base_ring()
846
+ indices = SimpleModuleIndices(self, prefix=prefix, **kwds)
847
+ category = self._ambient.category().Subobjects()
848
+ if self._dom_int:
849
+ category = category.FiniteDimensional()
850
+ ModulePrinting.__init__(self, 'u')
851
+ CombinatorialFreeModule.__init__(self, base_ring, indices, category=category,
852
+ **self._ambient.print_options())
853
+
854
+ def _repr_(self):
855
+ r"""
856
+ Return a string representation of ``self``.
857
+
858
+ EXAMPLES::
859
+
860
+ sage: g = LieAlgebra(QQ, cartan_type=['A', 1])
861
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
862
+ sage: g.simple_module(2*La[1])
863
+ Simple module with highest weight 2*Lambda[1] of
864
+ Lie algebra of ['A', 1] in the Chevalley basis
865
+ """
866
+ return "Simple module with highest weight {} of {}".format(self._weight, self._g)
867
+
868
+ def _latex_(self):
869
+ r"""
870
+ Return a latex representation of ``self``.
871
+
872
+ EXAMPLES::
873
+
874
+ sage: g = LieAlgebra(QQ, cartan_type=['A', 1])
875
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
876
+ sage: L = g.simple_module(2*La[1])
877
+ sage: latex(L)
878
+ L_{2 \Lambda_{1}}
879
+ """
880
+ from sage.misc.latex import latex
881
+ return "L_{{{}}}".format(latex(self._weight))
882
+
883
+ def ambient(self):
884
+ r"""
885
+ Return the ambient module of ``self``.
886
+
887
+ EXAMPLES::
888
+
889
+ sage: g = LieAlgebra(QQ, cartan_type=['G', 2])
890
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
891
+ sage: L = g.simple_module(2*La[1])
892
+ sage: L.ambient()
893
+ BGG Dual of Verma module with highest weight 2*Lambda[1] of
894
+ Lie algebra of ['G', 2] in the Chevalley basis
895
+ """
896
+ return self._ambient
897
+
898
+ @lazy_attribute
899
+ def lift(self):
900
+ r"""
901
+ Return the lift map of ``self`` to the ambient dual Verma module.
902
+
903
+ EXAMPLES::
904
+
905
+ sage: g = LieAlgebra(QQ, cartan_type=['G', 2])
906
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
907
+ sage: L = g.simple_module(La[1])
908
+ sage: [L.lift(b) for b in L.basis()] # long time
909
+ [v[Lambda[1]]^*,
910
+ f[-alpha[1]]*v[Lambda[1]]^*,
911
+ f[-alpha[2]]*f[-alpha[1]]*v[Lambda[1]]^* - f[-alpha[1] - alpha[2]]*v[Lambda[1]]^*,
912
+ f[-alpha[1]]*f[-alpha[1] - alpha[2]]*v[Lambda[1]]^*
913
+ + f[-2*alpha[1] - alpha[2]]*v[Lambda[1]]^*,
914
+ f[-alpha[1]]^2*f[-alpha[1] - alpha[2]]*v[Lambda[1]]^*
915
+ + f[-alpha[1]]*f[-2*alpha[1] - alpha[2]]*v[Lambda[1]]^*
916
+ + 1/2*f[-3*alpha[1] - alpha[2]]*v[Lambda[1]]^*,
917
+ f[-alpha[2]]*f[-alpha[1]]^2*f[-alpha[1] - alpha[2]]*v[Lambda[1]]^*
918
+ + f[-alpha[2]]*f[-alpha[1]]*f[-2*alpha[1] - alpha[2]]*v[Lambda[1]]^*
919
+ + 1/2*f[-alpha[2]]*f[-3*alpha[1] - alpha[2]]*v[Lambda[1]]^*
920
+ - f[-alpha[1] - alpha[2]]*f[-2*alpha[1] - alpha[2]]*v[Lambda[1]]^*
921
+ + 1/2*f[-3*alpha[1] - 2*alpha[2]]*v[Lambda[1]]^*,
922
+ f[-alpha[1]]*f[-alpha[1] - alpha[2]]*f[-2*alpha[1] - alpha[2]]*v[Lambda[1]]^*
923
+ - 1/2*f[-alpha[1]]*f[-3*alpha[1] - 2*alpha[2]]*v[Lambda[1]]^*
924
+ - 1/2*f[-alpha[1] - alpha[2]]*f[-3*alpha[1] - alpha[2]]*v[Lambda[1]]^*
925
+ + f[-2*alpha[1] - alpha[2]]^2*v[Lambda[1]]^*]
926
+ """
927
+ return self.module_morphism(self._lift_on_basis, codomain=self._ambient, unitriangular="upper")
928
+
929
+ def retract(self, x):
930
+ r"""
931
+ Return the retraction of ``x`` in ``self``.
932
+
933
+ EXAMPLES::
934
+
935
+ sage: g = LieAlgebra(QQ, cartan_type=['A', 2])
936
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
937
+ sage: L = g.simple_module(2*La[1])
938
+ sage: L.retract(L.lift(sum(L.basis())))
939
+ f[-alpha[1]]^2*u[2*Lambda[1]] + f[-alpha[1]]*f[-alpha[1] - alpha[2]]*u[2*Lambda[1]]
940
+ + f[-alpha[1] - alpha[2]]^2*u[2*Lambda[1]] + f[-alpha[1]]*u[2*Lambda[1]]
941
+ + f[-alpha[1] - alpha[2]]*u[2*Lambda[1]] + u[2*Lambda[1]]
942
+ sage: B = list(L.basis())
943
+ sage: L.retract(3/2*L.lift(B[0]) - L.lift(B[2]) - 10/3*L.lift(B[3]))
944
+ -10/3*f[-alpha[1]]^2*u[2*Lambda[1]]
945
+ - f[-alpha[1] - alpha[2]]*u[2*Lambda[1]]
946
+ + 3/2*u[2*Lambda[1]]
947
+ """
948
+ supp = sorted(x.support(), key=self._pbw._monomial_key)
949
+ data = x.monomial_coefficients(copy=True) # this is destructive to data
950
+ R = self.base_ring()
951
+ ret = {}
952
+ for ls in supp:
953
+ if ls not in data:
954
+ continue
955
+ if ls not in self._indices._lead_supp_to_index:
956
+ mu = self._ambient.degree_on_basis(ls)
957
+ # this will guarantee the computation is correct
958
+ self._indices.weight_space_basis(mu)
959
+ if ls not in self._indices._lead_supp_to_index:
960
+ raise ValueError(f"not an element of the simple module of weight {self._weight}")
961
+ key = self._indices._lead_supp_to_index[ls]
962
+ vec = self._indices._basis[key]
963
+ coeff = R(data[ls] / vec[ls])
964
+ iaxpy(-coeff, vec._monomial_coefficients, data)
965
+ ret[key] = coeff
966
+ return self.element_class(self, ret)
967
+
968
+ def _lift_on_basis(self, m):
969
+ r"""
970
+ Return the lift of the basis element indexed by ``m``.
971
+
972
+ EXAMPLES::
973
+
974
+ sage: g = LieAlgebra(QQ, cartan_type=['A', 1])
975
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
976
+ sage: L = g.simple_module(2*La[1])
977
+ sage: I = L.indices()
978
+ sage: gen = list(I.gens())[0]
979
+ sage: L._lift_on_basis(gen^2)
980
+ 4*f[-alpha[1]]^2*v[2*Lambda[1]]^*
981
+ sage: L._lift_on_basis(gen^3)
982
+ Traceback (most recent call last):
983
+ ...
984
+ ValueError: f[-alpha[1]]^3 does not index a basis element
985
+ """
986
+ # This builds the result up to the necessary depth
987
+ if m not in self._indices:
988
+ raise ValueError(f"{m} does not index a basis element")
989
+ return self._indices._basis[m]
990
+
991
+ def dual(self) -> Self:
992
+ r"""
993
+ Return the dual module of ``self``, which is ``self`` since simple
994
+ modules are self-dual.
995
+
996
+ EXAMPLES::
997
+
998
+ sage: g = LieAlgebra(QQ, cartan_type=['B', 4])
999
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
1000
+ sage: L = g.simple_module(2*La[1] + 3*La[4])
1001
+ sage: L.dual() is L
1002
+ True
1003
+ """
1004
+ return self
1005
+
1006
+ def highest_weight(self):
1007
+ r"""
1008
+ Return the highest weight of ``self``.
1009
+
1010
+ EXAMPLES::
1011
+
1012
+ sage: g = lie_algebras.so(QQ, 7)
1013
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
1014
+ sage: L = g.simple_module(La[1] + La[2])
1015
+ sage: L.highest_weight()
1016
+ Lambda[1] + Lambda[2]
1017
+ """
1018
+ return self._weight
1019
+
1020
+ @cached_method
1021
+ def highest_weight_vector(self):
1022
+ r"""
1023
+ Return the highest weight vector of ``self``.
1024
+
1025
+ EXAMPLES::
1026
+
1027
+ sage: g = lie_algebras.sp(QQ, 6)
1028
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
1029
+ sage: L = g.simple_module(La[1] + La[2])
1030
+ sage: L.highest_weight_vector()
1031
+ u[Lambda[1] + Lambda[2]]
1032
+ """
1033
+ one = self.base_ring().one()
1034
+ return self._from_dict({self._indices.one(): one},
1035
+ remove_zeros=False, coerce=False)
1036
+
1037
+ def lie_algebra(self):
1038
+ r"""
1039
+ Return the underlying Lie algebra of ``self``.
1040
+
1041
+ EXAMPLES::
1042
+
1043
+ sage: g = lie_algebras.so(QQ, 9)
1044
+ sage: La = g.cartan_type().root_system().weight_space().fundamental_weights()
1045
+ sage: L = g.simple_module(La[3] - 1/2*La[1])
1046
+ sage: L.lie_algebra()
1047
+ Lie algebra of ['B', 4] in the Chevalley basis
1048
+ """
1049
+ return self._g
1050
+
1051
+ def pbw_basis(self):
1052
+ r"""
1053
+ Return the PBW basis of the underlying Lie algebra
1054
+ used to define ``self``.
1055
+
1056
+ EXAMPLES::
1057
+
1058
+ sage: g = lie_algebras.so(QQ, 8)
1059
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
1060
+ sage: L = g.simple_module(La[2] - 2*La[3])
1061
+ sage: L.pbw_basis()
1062
+ Universal enveloping algebra of Lie algebra of ['D', 4] in the Chevalley basis
1063
+ in the Poincare-Birkhoff-Witt basis
1064
+ """
1065
+ return self._pbw
1066
+
1067
+ def homogeneous_component_basis(self, mu):
1068
+ r"""
1069
+ Return a basis for the ``mu`` weight space of ``self``.
1070
+
1071
+ EXAMPLES::
1072
+
1073
+ sage: g = LieAlgebra(QQ, cartan_type=['A', 2])
1074
+ sage: P = g.cartan_type().root_system().weight_lattice()
1075
+ sage: La = P.fundamental_weights()
1076
+ sage: la = La[1] + La[2]
1077
+ sage: L = g.simple_module(la)
1078
+ sage: from itertools import product
1079
+ sage: al = P.simple_roots()
1080
+ sage: for wts in product(range(4), repeat=2):
1081
+ ....: mu = la - wts[0] * al[1] - wts[1] * al[2]
1082
+ ....: print(mu)
1083
+ ....: print(L.homogeneous_component_basis(mu))
1084
+ Lambda[1] + Lambda[2]
1085
+ Family (u[Lambda[1] + Lambda[2]],)
1086
+ 2*Lambda[1] - Lambda[2]
1087
+ Family (f[-alpha[2]]*u[Lambda[1] + Lambda[2]],)
1088
+ 3*Lambda[1] - 3*Lambda[2]
1089
+ Family ()
1090
+ 4*Lambda[1] - 5*Lambda[2]
1091
+ Family ()
1092
+ -Lambda[1] + 2*Lambda[2]
1093
+ Family (f[-alpha[1]]*u[Lambda[1] + Lambda[2]],)
1094
+ 0
1095
+ Family (f[-alpha[1] - alpha[2]]*u[Lambda[1] + Lambda[2]], f[-alpha[2]]*f[-alpha[1]]*u[Lambda[1] + Lambda[2]])
1096
+ Lambda[1] - 2*Lambda[2]
1097
+ Family (f[-alpha[2]]*f[-alpha[1] - alpha[2]]*u[Lambda[1] + Lambda[2]],)
1098
+ 2*Lambda[1] - 4*Lambda[2]
1099
+ Family ()
1100
+ -3*Lambda[1] + 3*Lambda[2]
1101
+ Family ()
1102
+ -2*Lambda[1] + Lambda[2]
1103
+ Family (f[-alpha[1]]*f[-alpha[1] - alpha[2]]*u[Lambda[1] + Lambda[2]],)
1104
+ -Lambda[1] - Lambda[2]
1105
+ Family (f[-alpha[1] - alpha[2]]^2*u[Lambda[1] + Lambda[2]],)
1106
+ -3*Lambda[2]
1107
+ Family ()
1108
+ -5*Lambda[1] + 4*Lambda[2]
1109
+ Family ()
1110
+ -4*Lambda[1] + 2*Lambda[2]
1111
+ Family ()
1112
+ -3*Lambda[1]
1113
+ Family ()
1114
+ -2*Lambda[1] - 2*Lambda[2]
1115
+ Family ()
1116
+ """
1117
+ return Family([self.monomial(b) for b in self._indices.weight_space_basis(mu)])
1118
+
1119
+ weight_space_basis = homogeneous_component_basis
1120
+
1121
+ class Element(CombinatorialFreeModule.Element):
1122
+ def _acted_upon_(self, scalar, self_on_left=True):
1123
+ r"""
1124
+ Return the action of ``scalar`` on ``self``.
1125
+
1126
+ EXAMPLES::
1127
+
1128
+ sage: g = LieAlgebra(QQ, cartan_type=['A', 2])
1129
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
1130
+ sage: L = g.simple_module(La[1] + La[2])
1131
+ sage: v = L.highest_weight_vector(); v
1132
+ u[Lambda[1] + Lambda[2]]
1133
+ sage: f1, f2 = g.pbw_basis().f()
1134
+ sage: 5 * v
1135
+ 5*u[Lambda[1] + Lambda[2]]
1136
+ sage: f1 * f2 * v
1137
+ f[-alpha[2]]*f[-alpha[1]]*u[Lambda[1] + Lambda[2]]
1138
+ + f[-alpha[1] - alpha[2]]*u[Lambda[1] + Lambda[2]]
1139
+ sage: f2 * f1 * v
1140
+ -f[-alpha[2]]*f[-alpha[1]]*u[Lambda[1] + Lambda[2]]
1141
+ + 2*f[-alpha[1] - alpha[2]]*u[Lambda[1] + Lambda[2]]
1142
+ sage: f2 * f2 * f1 * v
1143
+ -2*f[-alpha[2]]*f[-alpha[1] - alpha[2]]*u[Lambda[1] + Lambda[2]]
1144
+ sage: f1 * f2 * f1 * v
1145
+ f[-alpha[1]]*f[-alpha[1] - alpha[2]]*u[Lambda[1] + Lambda[2]]
1146
+ sage: f2 * f1 * f2 * f1 * v
1147
+ f[-alpha[1] - alpha[2]]^2*u[Lambda[1] + Lambda[2]]
1148
+ sage: f1 * f2 * f2 * f1 * v
1149
+ 2*f[-alpha[1] - alpha[2]]^2*u[Lambda[1] + Lambda[2]]
1150
+ """
1151
+ # check for scalars first
1152
+ ret = CombinatorialFreeModule.Element._acted_upon_(self, scalar, self_on_left)
1153
+ if ret is not None:
1154
+ return ret
1155
+
1156
+ if self_on_left: # this is a left module action
1157
+ return None
1158
+
1159
+ P = self.parent()
1160
+ return P.retract(scalar * P.lift(self))
1161
+
1162
+ _lmul_ = _acted_upon_
1163
+ _rmul_ = _acted_upon_
1164
+
1165
+
1166
+ class FiniteDimensionalSimpleModule(SimpleModule):
1167
+ """
1168
+ A finite dimensional simple module.
1169
+ """
1170
+ def bgg_resolution(self):
1171
+ """
1172
+ Return the BGG resolution of ``self``.
1173
+
1174
+ EXAMPLES::
1175
+
1176
+ sage: g = LieAlgebra(QQ, cartan_type=['A', 2])
1177
+ sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
1178
+ sage: L = g.simple_module(La[1] + La[2])
1179
+ sage: L.bgg_resolution() # needs sage.groups
1180
+ BGG resolution of Simple module with highest weight Lambda[1] + Lambda[2]
1181
+ of Lie algebra of ['A', 2] in the Chevalley basis
1182
+ """
1183
+ from sage.algebras.lie_algebras.bgg_resolution import BGGResolution
1184
+ return BGGResolution(self)