passagemath-modules 10.6.31rc3__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.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +807 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +6 -0
  4. passagemath_modules-10.6.31rc3.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-82690d50.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,1126 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.combinat sage.modules
3
+ r"""
4
+ Weyl Algebras
5
+
6
+ AUTHORS:
7
+
8
+ - Travis Scrimshaw (2013-09-06): Initial version
9
+ """
10
+
11
+ # ****************************************************************************
12
+ # Copyright (C) 2013 Travis Scrimshaw <tscrim at ucdavis.edu>
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
+ # https://www.gnu.org/licenses/
19
+ # ****************************************************************************
20
+
21
+ from sage.misc.cachefunc import cached_method
22
+ from sage.misc.latex import latex, LatexExpr
23
+ from sage.misc.lazy_attribute import lazy_attribute
24
+ from sage.misc.misc_c import prod
25
+ from sage.structure.parent import Parent
26
+ from sage.structure.unique_representation import UniqueRepresentation
27
+ from sage.categories.action import Action
28
+ from sage.categories.rings import Rings
29
+ from sage.categories.algebras_with_basis import AlgebrasWithBasis
30
+ from sage.sets.family import Family
31
+ import sage.data_structures.blas_dict as blas
32
+ from sage.rings.polynomial.polynomial_ring import PolynomialRing_generic
33
+ from sage.rings.polynomial.multi_polynomial_ring_base import MPolynomialRing_base
34
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
35
+ from sage.structure.global_options import GlobalOptions
36
+ from sage.modules.with_basis.indexed_element import IndexedFreeModuleElement
37
+
38
+
39
+ def repr_from_monomials(monomials, term_repr, use_latex=False) -> str:
40
+ r"""
41
+ Return a string representation of an element of a free module
42
+ from the dictionary ``monomials``.
43
+
44
+ INPUT:
45
+
46
+ - ``monomials`` -- list of pairs ``[m, c]`` where ``m`` is the index
47
+ and ``c`` is the coefficient
48
+ - ``term_repr`` -- a function which returns a string given an index
49
+ (can be ``repr`` or ``latex``, for example)
50
+ - ``use_latex`` -- boolean (default: ``False``); if ``True`` then the
51
+ output is in latex format
52
+
53
+ EXAMPLES::
54
+
55
+ sage: from sage.algebras.weyl_algebra import repr_from_monomials
56
+ sage: R.<x,y,z> = QQ[]
57
+ sage: d = [(z, 4/7), (y, sqrt(2)), (x, -5)] # needs sage.symbolic
58
+ sage: repr_from_monomials(d, lambda m: repr(m)) # needs sage.symbolic
59
+ '4/7*z + sqrt(2)*y - 5*x'
60
+ sage: a = repr_from_monomials(d, lambda m: latex(m), True); a # needs sage.symbolic
61
+ \frac{4}{7} z + \sqrt{2} y - 5 x
62
+ sage: type(a) # needs sage.symbolic
63
+ <class 'sage.misc.latex.LatexExpr'>
64
+
65
+ The zero element::
66
+
67
+ sage: repr_from_monomials([], lambda m: repr(m))
68
+ '0'
69
+ sage: a = repr_from_monomials([], lambda m: latex(m), True); a
70
+ 0
71
+ sage: type(a)
72
+ <class 'sage.misc.latex.LatexExpr'>
73
+
74
+ A "unity" element::
75
+
76
+ sage: repr_from_monomials([(1, 1)], lambda m: repr(m))
77
+ '1'
78
+ sage: a = repr_from_monomials([(1, 1)], lambda m: latex(m), True); a
79
+ 1
80
+ sage: type(a)
81
+ <class 'sage.misc.latex.LatexExpr'>
82
+
83
+ ::
84
+
85
+ sage: repr_from_monomials([(1, -1)], lambda m: repr(m))
86
+ '-1'
87
+ sage: a = repr_from_monomials([(1, -1)], lambda m: latex(m), True); a
88
+ -1
89
+ sage: type(a)
90
+ <class 'sage.misc.latex.LatexExpr'>
91
+
92
+ Leading minus signs are dealt with appropriately::
93
+
94
+ sage: # needs sage.symbolic
95
+ sage: d = [(z, -4/7), (y, -sqrt(2)), (x, -5)]
96
+ sage: repr_from_monomials(d, lambda m: repr(m))
97
+ '-4/7*z - sqrt(2)*y - 5*x'
98
+ sage: a = repr_from_monomials(d, lambda m: latex(m), True); a
99
+ -\frac{4}{7} z - \sqrt{2} y - 5 x
100
+ sage: type(a)
101
+ <class 'sage.misc.latex.LatexExpr'>
102
+
103
+ Indirect doctests using a class that uses this function::
104
+
105
+ sage: R.<x,y> = QQ[]
106
+ sage: A = CliffordAlgebra(QuadraticForm(R, 3, [x,0,-1,3,-4,5]))
107
+ sage: a,b,c = A.gens()
108
+ sage: a*b*c
109
+ e0*e1*e2
110
+ sage: b*c
111
+ e1*e2
112
+ sage: (a*a + 2)
113
+ x + 2
114
+ sage: c*(a*a + 2)*b
115
+ (-x - 2)*e1*e2 - 4*x - 8
116
+ sage: latex(c*(a*a + 2)*b)
117
+ \left( -x - 2 \right) e_{1} e_{2} - 4 x - 8
118
+ """
119
+ if not monomials:
120
+ if use_latex:
121
+ return latex(0)
122
+ else:
123
+ return '0'
124
+
125
+ ret = ''
126
+ for m, c in monomials:
127
+ # Get the monomial portion
128
+ term = term_repr(m)
129
+
130
+ # Determine what to do with the coefficient
131
+ if use_latex:
132
+ coeff = latex(c)
133
+ else:
134
+ coeff = repr(c)
135
+
136
+ if not term or term == '1':
137
+ term = coeff
138
+ elif coeff == '-1':
139
+ term = '-' + term
140
+ elif coeff != '1':
141
+ atomic_repr = c.parent()._repr_option('element_is_atomic')
142
+ if not atomic_repr and (coeff.find("+") != -1 or coeff.rfind("-") > 0):
143
+ if use_latex:
144
+ term = '\\left(' + coeff + '\\right) ' + term
145
+ elif coeff not in ['', '-']:
146
+ term = '(' + coeff + ')*' + term
147
+ else:
148
+ if use_latex:
149
+ term = coeff + ' ' + term
150
+ else:
151
+ term = coeff + '*' + term
152
+
153
+ # Append this term with the correct sign
154
+ if ret:
155
+ if term[0] == '-':
156
+ ret += ' - ' + term[1:]
157
+ else:
158
+ ret += ' + ' + term
159
+ else:
160
+ ret = term
161
+ return ret
162
+
163
+
164
+ def repr_factored(w, latex_output=False) -> str:
165
+ r"""
166
+ Return a string representation of ``w`` with the `dx_i` generators
167
+ factored on the right.
168
+
169
+ EXAMPLES::
170
+
171
+ sage: from sage.algebras.weyl_algebra import repr_factored
172
+ sage: R.<t> = QQ[]
173
+ sage: D = DifferentialWeylAlgebra(R)
174
+ sage: t, dt = D.gens()
175
+ sage: x = dt^3*t^3 + dt^2*t^4
176
+ sage: x
177
+ t^3*dt^3 + t^4*dt^2 + 9*t^2*dt^2 + 8*t^3*dt + 18*t*dt + 12*t^2 + 6
178
+ sage: print(repr_factored(x))
179
+ (12*t^2 + 6) + (8*t^3 + 18*t)*dt + (t^4 + 9*t^2)*dt^2 + (t^3)*dt^3
180
+ sage: repr_factored(x, True)
181
+ (12 t^{2} + 6) + (8 t^{3} + 18 t) \frac{\partial}{\partial t}
182
+ + (t^{4} + 9 t^{2}) \frac{\partial^{2}}{\partial t^{2}}
183
+ + (t^{3}) \frac{\partial^{3}}{\partial t^{3}}
184
+ sage: repr_factored(D.zero())
185
+ '0'
186
+
187
+ With multiple variables::
188
+
189
+ sage: R.<x,y,z> = QQ[]
190
+ sage: D = DifferentialWeylAlgebra(R)
191
+ sage: x, y, z, dx, dy, dz = D.gens()
192
+ sage: elt = dx^3*x^3 + (y^3-z*x)*dx^3 + dy^3*x^3 + dx*dy*dz*x*y*z
193
+ sage: elt
194
+ x^3*dy^3 + x*y*z*dx*dy*dz + y^3*dx^3 + x^3*dx^3 - x*z*dx^3 + y*z*dy*dz
195
+ + x*z*dx*dz + x*y*dx*dy + 9*x^2*dx^2 + z*dz + y*dy + 19*x*dx + 7
196
+ sage: print(repr_factored(elt))
197
+ (7) + (z)*dz + (y)*dy + (y*z)*dy*dz + (x^3)*dy^3 + (19*x)*dx
198
+ + (x*z)*dx*dz + (x*y)*dx*dy + (x*y*z)*dx*dy*dz
199
+ + (9*x^2)*dx^2 + (x^3 + y^3 - x*z)*dx^3
200
+ sage: repr_factored(D.zero(), True)
201
+ 0
202
+ """
203
+ f = w.factor_differentials()
204
+ gens = w.parent().polynomial_ring().gens()
205
+
206
+ if latex_output:
207
+ def exp(e):
208
+ return '^{{{}}}'.format(e) if e > 1 else ''
209
+
210
+ def repr_dx(k):
211
+ total = sum(k)
212
+ if total == 0:
213
+ return ''
214
+ denom = ' '.join('\\partial {}{}'.format(latex(g), exp(e))
215
+ for e, g in zip(k, gens) if e != 0)
216
+ return ''.join(' \\frac{{\\partial{}}}{{{}}}'.format(exp(total), denom))
217
+ repr_x = latex
218
+ else:
219
+ def exp(e):
220
+ return '^{}'.format(e) if e > 1 else ''
221
+
222
+ def repr_dx(k):
223
+ return ''.join('*d{}{}'.format(g, exp(e)) for e, g in zip(k, gens) if e != 0)
224
+ repr_x = repr
225
+ ret = " + ".join("({}){}".format(repr_x(f[k]), repr_dx(k))
226
+ for k in sorted(f))
227
+ if not ret:
228
+ ret = '0'
229
+ if latex_output:
230
+ return LatexExpr(ret)
231
+ return ret
232
+
233
+
234
+ class DifferentialWeylAlgebraElement(IndexedFreeModuleElement):
235
+ """
236
+ An element in a differential Weyl algebra.
237
+
238
+ TESTS:
239
+
240
+ Some computations in the Weyl algebra, using the implicit
241
+ coercion from the polynomial ring into the Weyl algebra::
242
+
243
+ sage: W.<x,y,z> = DifferentialWeylAlgebra(QQ)
244
+ sage: dx,dy,dz = W.differentials()
245
+ sage: elt = ((x^3-z)*dx + dy)^2
246
+ sage: TestSuite(elt).run()
247
+
248
+ sage: R.<x,y,z> = QQ[]
249
+ sage: W = DifferentialWeylAlgebra(R)
250
+ sage: dx,dy,dz = W.differentials()
251
+ sage: dy*(x^3-y*z)*dx == -z*dx + x^3*dx*dy - y*z*dx*dy
252
+ True
253
+ sage: W.zero() == 0
254
+ True
255
+ sage: W.one() == 1
256
+ True
257
+ sage: x == 1
258
+ False
259
+ sage: x + 1 == 1
260
+ False
261
+ sage: W(x^3 - y*z) == x^3 - y*z
262
+ True
263
+ sage: W.<x,y,z> = DifferentialWeylAlgebra(QQ)
264
+ sage: dx,dy,dz = W.differentials()
265
+ sage: dx != dy
266
+ True
267
+ sage: W.one() != 1
268
+ False
269
+ sage: dy - (3*x - z)*dx
270
+ dy + z*dx - 3*x*dx
271
+ sage: (dx*dy) + dz + x^3 - 2
272
+ dx*dy + dz + x^3 - 2
273
+ sage: elt = (dy - (3*x - z)*dx)
274
+ sage: sorted(elt.monomial_coefficients().items())
275
+ [(((0, 0, 0), (0, 1, 0)), 1),
276
+ (((0, 0, 1), (1, 0, 0)), 1),
277
+ (((1, 0, 0), (1, 0, 0)), -3)]
278
+ sage: elt = dy - (3*x - z)*dx + 1
279
+ sage: sorted(elt.support())
280
+ [((0, 0, 0), (0, 0, 0)),
281
+ ((0, 0, 0), (0, 1, 0)),
282
+ ((0, 0, 1), (1, 0, 0)),
283
+ ((1, 0, 0), (1, 0, 0))]
284
+
285
+ Hashing works::
286
+
287
+ sage: hash(dx) == hash(dx) # hashing works
288
+ True
289
+
290
+ Comparison works, even if mathematically meaningless
291
+ (but useful e.g. for sorting)::
292
+
293
+ sage: dx < dy or dy < dx
294
+ True
295
+ """
296
+ def _repr_(self) -> str:
297
+ r"""
298
+ Return a string representation of ``self``.
299
+
300
+ TESTS::
301
+
302
+ sage: W.<x,y,z> = DifferentialWeylAlgebra(QQ)
303
+ sage: dx,dy,dz = W.differentials()
304
+ sage: ((x^3-z)*dx + dy)^2
305
+ dy^2 + 2*x^3*dx*dy - 2*z*dx*dy + x^6*dx^2 - 2*x^3*z*dx^2
306
+ + z^2*dx^2 + 3*x^5*dx - 3*x^2*z*dx
307
+ """
308
+ if self.parent().options.factor_representation:
309
+ return repr_factored(self, False)
310
+
311
+ def term(m):
312
+ ret = ''
313
+ for i, power in enumerate(m[0] + m[1]):
314
+ if power == 0:
315
+ continue
316
+ name = self.parent().variable_names()[i]
317
+ if ret:
318
+ ret += '*'
319
+ if power == 1:
320
+ ret += '{}'.format(name)
321
+ else:
322
+ ret += '{}^{}'.format(name, power)
323
+ return ret
324
+ return repr_from_monomials(self.list(), term)
325
+
326
+ def _latex_(self) -> str:
327
+ r"""
328
+ Return a `\LaTeX` representation of ``self``.
329
+
330
+ TESTS::
331
+
332
+ sage: R = PolynomialRing(QQ, 'x', 3)
333
+ sage: W = DifferentialWeylAlgebra(R)
334
+ sage: x0,x1,x2,dx0,dx1,dx2 = W.gens()
335
+ sage: latex( ((x0^3-x2)*dx0 + dx1)^2 )
336
+ \frac{\partial^{2}}{\partial x_{1}^{2}}
337
+ + 2 x_{0}^{3} \frac{\partial^{2}}{\partial x_{0} \partial x_{1}}
338
+ - 2 x_{2} \frac{\partial^{2}}{\partial x_{0} \partial x_{1}}
339
+ + x_{0}^{6} \frac{\partial^{2}}{\partial x_{0}^{2}}
340
+ - 2 x_{0}^{3} x_{2} \frac{\partial^{2}}{\partial x_{0}^{2}}
341
+ + x_{2}^{2} \frac{\partial^{2}}{\partial x_{0}^{2}}
342
+ + 3 x_{0}^{5} \frac{\partial}{\partial x_{0}}
343
+ - 3 x_{0}^{2} x_{2} \frac{\partial}{\partial x_{0}}
344
+ """
345
+ if self.parent().options.factor_representation:
346
+ return repr_factored(self, True)
347
+
348
+ def exp(e):
349
+ return '^{{{}}}'.format(e) if e > 1 else ''
350
+
351
+ def term(m):
352
+ R = self.parent()._poly_ring
353
+
354
+ def half_term(mon, polynomial):
355
+ total = sum(mon)
356
+ if total == 0:
357
+ return '1'
358
+ ret = ' '.join('{}{}'.format(latex(R.gen(i)), exp(power)) if polynomial
359
+ else '\\partial {}{}'.format(latex(R.gen(i)), exp(power))
360
+ for i, power in enumerate(mon) if power > 0)
361
+ if not polynomial:
362
+ return '\\frac{{\\partial{}}}{{{}}}'.format(exp(total), ret)
363
+ return ret
364
+ p = half_term(m[0], True)
365
+ d = half_term(m[1], False)
366
+ if p == '1': # No polynomial part
367
+ return d
368
+ elif d == '1': # No differential part
369
+ return p
370
+ else:
371
+ return p + ' ' + d
372
+ return repr_from_monomials(self.list(), term, True)
373
+
374
+ def _mul_(self, other):
375
+ """
376
+ Return ``self`` multiplied by ``other``.
377
+
378
+ EXAMPLES::
379
+
380
+ sage: W.<x,y,z> = DifferentialWeylAlgebra(QQ)
381
+ sage: dx,dy,dz = W.differentials()
382
+ sage: dx*(x*y + z)
383
+ x*y*dx + z*dx + y
384
+ sage: ((x^3-z)*dx + dy) * (dx*dz^2 - 10*x)
385
+ dx*dy*dz^2 + x^3*dx^2*dz^2 - z*dx^2*dz^2 - 10*x*dy - 10*x^4*dx
386
+ + 10*x*z*dx - 10*x^3 + 10*z
387
+ """
388
+ def add_tuples(x, y):
389
+ return tuple(a + y[i] for i, a in enumerate(x))
390
+
391
+ d = {}
392
+ n = self.parent()._n
393
+ t = tuple([0] * n)
394
+ zero = self.parent().base_ring().zero()
395
+ for ml in self._monomial_coefficients:
396
+ cl = self._monomial_coefficients[ml]
397
+ for mr in other._monomial_coefficients:
398
+ cr = other._monomial_coefficients[mr]
399
+ cur = [((mr[0], t), cl * cr)]
400
+ for i, p in enumerate(ml[1]):
401
+ for _ in range(p):
402
+ next = []
403
+ for m, c in cur: # Distribute and apply the derivative
404
+ diff = list(m[1])
405
+ diff[i] += 1
406
+ next.append(((m[0], tuple(diff)), c))
407
+ if m[0][i] != 0:
408
+ poly = list(m[0])
409
+ c *= poly[i]
410
+ poly[i] -= 1
411
+ next.append(((tuple(poly), m[1]), c))
412
+ cur = next
413
+
414
+ for m, c in cur:
415
+ # multiply the resulting term by the other term
416
+ m = (add_tuples(ml[0], m[0]), add_tuples(mr[1], m[1]))
417
+ d[m] = d.get(m, zero) + c
418
+ if d[m] == zero:
419
+ del d[m]
420
+ return self.__class__(self.parent(), d)
421
+
422
+ def _rmul_(self, other):
423
+ """
424
+ Multiply ``self`` on the right side of ``other``.
425
+
426
+ EXAMPLES::
427
+
428
+ sage: W.<x,y,z> = DifferentialWeylAlgebra(QQ)
429
+ sage: dx,dy,dz = W.differentials()
430
+ sage: a = (x*y + z) * dx
431
+ sage: 3/2 * a
432
+ 3/2*x*y*dx + 3/2*z*dx
433
+ """
434
+ if other == 0:
435
+ return self.parent().zero()
436
+ M = self._monomial_coefficients
437
+ return self.__class__(self.parent(), {t: other * M[t] for t in M})
438
+
439
+ def _lmul_(self, other):
440
+ """
441
+ Multiply ``self`` on the left side of ``other``.
442
+
443
+ EXAMPLES::
444
+
445
+ sage: W.<x,y,z> = DifferentialWeylAlgebra(QQ)
446
+ sage: dx,dy,dz = W.differentials()
447
+ sage: a = (x*y + z) * dx
448
+ sage: a * 3/2
449
+ 3/2*x*y*dx + 3/2*z*dx
450
+ """
451
+ if other == 0:
452
+ return self.parent().zero()
453
+ M = self._monomial_coefficients
454
+ return self.__class__(self.parent(), {t: M[t] * other for t in M})
455
+
456
+ def __iter__(self):
457
+ """
458
+ Return an iterator of ``self``.
459
+
460
+ This is the iterator of ``self.list()``.
461
+
462
+ EXAMPLES::
463
+
464
+ sage: W.<x,y,z> = DifferentialWeylAlgebra(QQ)
465
+ sage: dx,dy,dz = W.differentials()
466
+ sage: list(dy - (3*x - z)*dx)
467
+ [(((0, 0, 0), (0, 1, 0)), 1),
468
+ (((0, 0, 1), (1, 0, 0)), 1),
469
+ (((1, 0, 0), (1, 0, 0)), -3)]
470
+ """
471
+ return iter(self.list())
472
+
473
+ def list(self) -> list:
474
+ """
475
+ Return ``self`` as a list.
476
+
477
+ This list consists of pairs `(m, c)`, where `m` is a pair of
478
+ tuples indexing a basis element of ``self``, and `c` is the
479
+ coordinate of ``self`` corresponding to this basis element.
480
+ (Only nonzero coordinates are shown.)
481
+
482
+ EXAMPLES::
483
+
484
+ sage: W.<x,y,z> = DifferentialWeylAlgebra(QQ)
485
+ sage: dx,dy,dz = W.differentials()
486
+ sage: elt = dy - (3*x - z)*dx
487
+ sage: elt.list()
488
+ [(((0, 0, 0), (0, 1, 0)), 1),
489
+ (((0, 0, 1), (1, 0, 0)), 1),
490
+ (((1, 0, 0), (1, 0, 0)), -3)]
491
+ """
492
+ return sorted(self._monomial_coefficients.items(),
493
+ key=lambda x: (-sum(x[0][1]), x[0][1], -sum(x[0][0]), x[0][0]))
494
+
495
+ # This is essentially copied from
496
+ # sage.combinat.free_module.CombinatorialFreeModuleElement
497
+ def __truediv__(self, x):
498
+ """
499
+ Division by coefficients.
500
+
501
+ EXAMPLES::
502
+
503
+ sage: W.<x,y,z> = DifferentialWeylAlgebra(QQ)
504
+ sage: x / 2
505
+ 1/2*x
506
+ sage: W.<x,y,z> = DifferentialWeylAlgebra(ZZ)
507
+ sage: a = 2*x + 4*y*z
508
+ sage: a / 2
509
+ 2*y*z + x
510
+ """
511
+ F = self.parent()
512
+ D = self._monomial_coefficients
513
+ if F.base_ring().is_field():
514
+ x = F.base_ring()(x)
515
+ x_inv = x**-1
516
+ D = blas.linear_combination([(D, x_inv)])
517
+
518
+ return self.__class__(F, D)
519
+
520
+ return self.__class__(F, {t: D[t]._divide_if_possible(x) for t in D})
521
+
522
+ def factor_differentials(self) -> dict:
523
+ """
524
+ Return a dict representing ``self`` with the differentials
525
+ factored out.
526
+
527
+ EXAMPLES::
528
+
529
+ sage: R.<t> = QQ[]
530
+ sage: D = DifferentialWeylAlgebra(R)
531
+ sage: t, dt = D.gens()
532
+ sage: x = dt^3*t^3 + dt^2*t^4
533
+ sage: x
534
+ t^3*dt^3 + t^4*dt^2 + 9*t^2*dt^2 + 8*t^3*dt + 18*t*dt + 12*t^2 + 6
535
+ sage: x.factor_differentials()
536
+ {(0,): 12*t^2 + 6, (1,): 8*t^3 + 18*t, (2,): t^4 + 9*t^2, (3,): t^3}
537
+ sage: D.zero().factor_differentials()
538
+ {}
539
+
540
+ sage: R.<x,y,z> = QQ[]
541
+ sage: D = DifferentialWeylAlgebra(R)
542
+ sage: x, y, z, dx, dy, dz = D.gens()
543
+ sage: elt = dx^3*x^3 + (y^3-z*x)*dx^3 + dy^3*x^3 + dx*dy*dz*x*y*z
544
+ sage: elt
545
+ x^3*dy^3 + x*y*z*dx*dy*dz + y^3*dx^3 + x^3*dx^3 - x*z*dx^3 + y*z*dy*dz
546
+ + x*z*dx*dz + x*y*dx*dy + 9*x^2*dx^2 + z*dz + y*dy + 19*x*dx + 7
547
+ sage: elt.factor_differentials()
548
+ {(0, 0, 0): 7,
549
+ (0, 0, 1): z,
550
+ (0, 1, 0): y,
551
+ (0, 1, 1): y*z,
552
+ (0, 3, 0): x^3,
553
+ (1, 0, 0): 19*x,
554
+ (1, 0, 1): x*z,
555
+ (1, 1, 0): x*y,
556
+ (1, 1, 1): x*y*z,
557
+ (2, 0, 0): 9*x^2,
558
+ (3, 0, 0): x^3 + y^3 - x*z}
559
+ """
560
+ ret = {}
561
+ DW = self.parent()
562
+ P = DW.polynomial_ring()
563
+ gens = P.gens()
564
+ for m, c in self:
565
+ x, dx = m
566
+ if dx not in ret:
567
+ ret[dx] = P.zero()
568
+ ret[dx] += c * prod(g**e for e, g in zip(x, gens))
569
+ return ret
570
+
571
+ def diff(self, p):
572
+ """
573
+ Apply this differential operator to a polynomial.
574
+
575
+ INPUT:
576
+
577
+ - ``p`` -- polynomial of the underlying polynomial ring
578
+
579
+ OUTPUT:
580
+
581
+ The result of the left action of the Weyl algebra on the polynomial
582
+ ring via differentiation.
583
+
584
+ EXAMPLES::
585
+
586
+ sage: R.<x,y> = QQ[]
587
+ sage: W = R.weyl_algebra()
588
+ sage: dx, dy = W.differentials()
589
+ sage: dx.diff(x^3)
590
+ 3*x^2
591
+ sage: (dx*dy).diff(W(x^3*y^3))
592
+ 9*x^2*y^2
593
+ sage: (x*dx + dy + 1).diff(x^4*y^4 + 1)
594
+ 5*x^4*y^4 + 4*x^4*y^3 + 1
595
+ """
596
+ return self.parent().diff_action(self, p)
597
+
598
+
599
+ class DifferentialWeylAlgebra(UniqueRepresentation, Parent):
600
+ r"""
601
+ The differential Weyl algebra of a polynomial ring.
602
+
603
+ Let `R` be a commutative ring. The (differential) Weyl algebra `W` is
604
+ the algebra generated by `x_1, x_2, \ldots x_n, \partial_{x_1},
605
+ \partial_{x_2}, \ldots, \partial_{x_n}` subject to the relations:
606
+ `[x_i, x_j] = 0`, `[\partial_{x_i}, \partial_{x_j}] = 0`, and
607
+ `\partial_{x_i} x_j = x_j \partial_{x_i} + \delta_{ij}`. Therefore
608
+ `\partial_{x_i}` is acting as the partial differential operator on `x_i`.
609
+
610
+ The Weyl algebra can also be constructed as an iterated Ore extension
611
+ of the polynomial ring `R[x_1, x_2, \ldots, x_n]` by adding `x_i` at
612
+ each step. It can also be seen as a quantization of the symmetric algebra
613
+ `Sym(V)`, where `V` is a finite dimensional vector space over a field
614
+ of characteristic zero, by using a modified Groenewold-Moyal
615
+ product in the symmetric algebra.
616
+
617
+ The Weyl algebra (even for `n = 1`) over a field of characteristic 0
618
+ has many interesting properties.
619
+
620
+ - It's a non-commutative domain.
621
+ - It's a simple ring (but not in positive characteristic) that is not
622
+ a matrix ring over a division ring.
623
+ - It has no finite-dimensional representations.
624
+ - It's a quotient of the universal enveloping algebra of the
625
+ Heisenberg algebra `\mathfrak{h}_n`.
626
+
627
+ REFERENCES:
628
+
629
+ - :wikipedia:`Weyl_algebra`
630
+
631
+ INPUT:
632
+
633
+ - ``R`` -- a (polynomial) ring
634
+ - ``names`` -- (default: ``None``) if ``None`` and ``R`` is a
635
+ polynomial ring, then the variable names correspond to
636
+ those of ``R``; otherwise if ``names`` is specified, then ``R``
637
+ is the base ring
638
+
639
+ EXAMPLES:
640
+
641
+ There are two ways to create a Weyl algebra, the first is from
642
+ a polynomial ring::
643
+
644
+ sage: R.<x,y,z> = QQ[]
645
+ sage: W = DifferentialWeylAlgebra(R); W
646
+ Differential Weyl algebra of polynomials in x, y, z over Rational Field
647
+
648
+ We can call ``W.inject_variables()`` to give the polynomial ring
649
+ variables, now as elements of ``W``, and the differentials::
650
+
651
+ sage: W.inject_variables()
652
+ Defining x, y, z, dx, dy, dz
653
+ sage: (dx * dy * dz) * (x^2 * y * z + x * z * dy + 1)
654
+ x*z*dx*dy^2*dz + z*dy^2*dz + x^2*y*z*dx*dy*dz + dx*dy*dz
655
+ + x*dx*dy^2 + 2*x*y*z*dy*dz + dy^2 + x^2*z*dx*dz + x^2*y*dx*dy
656
+ + 2*x*z*dz + 2*x*y*dy + x^2*dx + 2*x
657
+
658
+ Or directly by specifying a base ring and variable names::
659
+
660
+ sage: W.<a,b> = DifferentialWeylAlgebra(QQ); W
661
+ Differential Weyl algebra of polynomials in a, b over Rational Field
662
+
663
+ .. TODO::
664
+
665
+ Implement the :meth:`graded_algebra` as a polynomial ring once
666
+ they are considered to be graded rings (algebras).
667
+ """
668
+ @staticmethod
669
+ def __classcall__(cls, R, names=None):
670
+ """
671
+ Normalize input to ensure a unique representation.
672
+
673
+ EXAMPLES::
674
+
675
+ sage: W1.<x,y,z> = DifferentialWeylAlgebra(QQ)
676
+ sage: W2 = DifferentialWeylAlgebra(QQ['x,y,z'])
677
+ sage: W1 is W2
678
+ True
679
+ """
680
+ if isinstance(R, (PolynomialRing_generic, MPolynomialRing_base)):
681
+ if names is None:
682
+ names = R.variable_names()
683
+ R = R.base_ring()
684
+ elif names is None:
685
+ raise ValueError("the names must be specified")
686
+ elif R not in Rings().Commutative():
687
+ raise TypeError("argument R must be a commutative ring")
688
+ return super().__classcall__(cls, R, names)
689
+
690
+ def __init__(self, R, names=None) -> None:
691
+ r"""
692
+ Initialize ``self``.
693
+
694
+ EXAMPLES::
695
+
696
+ sage: R.<x,y,z> = QQ[]
697
+ sage: W = DifferentialWeylAlgebra(R)
698
+ sage: TestSuite(W).run()
699
+ """
700
+ self._n = len(names)
701
+ self._poly_ring = PolynomialRing(R, names)
702
+ names = names + tuple('d' + n for n in names)
703
+ if len(names) != self._n * 2:
704
+ raise ValueError("variable names cannot differ by a leading 'd'")
705
+ # TODO: Make this into a filtered algebra under the natural grading of
706
+ # x_i and dx_i have degree 1
707
+ # Filtered is not included because it is a supercategory of super
708
+ if R.is_field():
709
+ cat = AlgebrasWithBasis(R).NoZeroDivisors().Super()
710
+ else:
711
+ cat = AlgebrasWithBasis(R).Super()
712
+ Parent.__init__(self, base=R, names=names, category=cat)
713
+
714
+ def _repr_(self) -> str:
715
+ r"""
716
+ Return a string representation of ``self``.
717
+
718
+ EXAMPLES::
719
+
720
+ sage: R.<x,y,z> = QQ[]
721
+ sage: DifferentialWeylAlgebra(R)
722
+ Differential Weyl algebra of polynomials in x, y, z over Rational Field
723
+ """
724
+ poly_gens = ', '.join(repr(x) for x in self.variables())
725
+ return "Differential Weyl algebra of polynomials in {} over {}".format(
726
+ poly_gens, self.base_ring())
727
+
728
+ # add options to class
729
+ class options(GlobalOptions):
730
+ r"""
731
+ Set the global options for elements of the differential Weyl
732
+ algebra class. The default is to have the factored
733
+ representations turned off.
734
+
735
+ @OPTIONS@
736
+
737
+ If no parameters are set, then the function returns a copy of the
738
+ options dictionary.
739
+
740
+ EXAMPLES::
741
+
742
+ sage: R.<t> = QQ[]
743
+ sage: D = DifferentialWeylAlgebra(R)
744
+ sage: t,dt = D.gens()
745
+ sage: x = dt^3*t^3 + dt^2*t^4
746
+ sage: x
747
+ t^3*dt^3 + t^4*dt^2 + 9*t^2*dt^2 + 8*t^3*dt + 18*t*dt + 12*t^2 + 6
748
+
749
+ sage: D.options.factor_representation = True
750
+ sage: x
751
+ (12*t^2 + 6) + (8*t^3 + 18*t)*dt + (t^4 + 9*t^2)*dt^2 + (t^3)*dt^3
752
+
753
+ sage: D.options._reset()
754
+ """
755
+ NAME = 'DifferentialWeylAlgebra'
756
+ module = 'sage.algebras.weyl_algebra'
757
+ factor_representation = {'default': False,
758
+ 'description': 'Controls whether to factor the differentials out or not in the output representations',
759
+ 'checker': lambda x: x in [True, False]}
760
+
761
+ def _element_constructor_(self, x):
762
+ """
763
+ Construct an element of ``self`` from ``x``.
764
+
765
+ EXAMPLES::
766
+
767
+ sage: R.<x,y,z> = QQ[]
768
+ sage: W = DifferentialWeylAlgebra(R)
769
+ sage: a = W(2); a
770
+ 2
771
+ sage: a.parent() is W
772
+ True
773
+ sage: W(x^2 - y*z)
774
+ -y*z + x^2
775
+ """
776
+ t = tuple([0] * (self._n))
777
+ if x in self.base_ring():
778
+ if x == self.base_ring().zero():
779
+ return self.zero()
780
+ return self.element_class(self, {(t, t): x})
781
+ if isinstance(x, DifferentialWeylAlgebraElement):
782
+ R = self.base_ring()
783
+ if x.parent().base_ring() is R:
784
+ return self.element_class(self, dict(x))
785
+ zero = R.zero()
786
+ return self.element_class(self, {i: R(c) for i, c in x if R(c) != zero})
787
+ x = self._poly_ring(x)
788
+ return self.element_class(self, {(tuple(m), t): c
789
+ for m, c in x.monomial_coefficients().items()})
790
+
791
+ def _coerce_map_from_(self, R):
792
+ """
793
+ Return data which determines if there is a coercion map
794
+ from ``R`` to ``self``.
795
+
796
+ If such a map exists, the output could be a map, callable,
797
+ or ``True``, which constructs a generic map. Otherwise the output
798
+ must be ``False`` or ``None``.
799
+
800
+ EXAMPLES::
801
+
802
+ sage: R.<x,y,z> = QQ[]
803
+ sage: W = DifferentialWeylAlgebra(R)
804
+ sage: W._coerce_map_from_(R)
805
+ True
806
+ sage: W._coerce_map_from_(QQ)
807
+ True
808
+ sage: W._coerce_map_from_(ZZ['x'])
809
+ True
810
+
811
+ Order of the names matter::
812
+
813
+ sage: Wp = DifferentialWeylAlgebra(QQ['x,z,y'])
814
+ sage: W.has_coerce_map_from(Wp)
815
+ False
816
+ sage: Wp.has_coerce_map_from(W)
817
+ False
818
+
819
+ Zero coordinates are handled appropriately::
820
+
821
+ sage: R.<x,y,z> = ZZ[]
822
+ sage: W3 = DifferentialWeylAlgebra(GF(3)['x,y,z'])
823
+ sage: W3.has_coerce_map_from(R)
824
+ True
825
+
826
+ sage: W.<x,y,z> = DifferentialWeylAlgebra(ZZ)
827
+ sage: W3.has_coerce_map_from(W)
828
+ True
829
+ sage: W3(3*x + y)
830
+ y
831
+ """
832
+ if self._poly_ring.has_coerce_map_from(R):
833
+ return True
834
+ if isinstance(R, DifferentialWeylAlgebra):
835
+ return (R.variable_names() == self.variable_names()
836
+ and self.base_ring().has_coerce_map_from(R.base_ring()))
837
+ return super()._coerce_map_from_(R)
838
+
839
+ def degree_on_basis(self, i):
840
+ """
841
+ Return the degree of the basis element indexed by ``i``.
842
+
843
+ EXAMPLES::
844
+
845
+ sage: W.<a,b> = DifferentialWeylAlgebra(QQ)
846
+ sage: W.degree_on_basis( ((1, 3, 2), (0, 1, 3)) )
847
+ 10
848
+
849
+ sage: W.<x,y,z> = DifferentialWeylAlgebra(QQ)
850
+ sage: dx,dy,dz = W.differentials()
851
+ sage: elt = y*dy - (3*x - z)*dx
852
+ sage: elt.degree()
853
+ 2
854
+ """
855
+ return sum(i[0]) + sum(i[1])
856
+
857
+ def polynomial_ring(self):
858
+ """
859
+ Return the associated polynomial ring of ``self``.
860
+
861
+ EXAMPLES::
862
+
863
+ sage: W.<a,b> = DifferentialWeylAlgebra(QQ)
864
+ sage: W.polynomial_ring()
865
+ Multivariate Polynomial Ring in a, b over Rational Field
866
+
867
+ ::
868
+
869
+ sage: R.<x,y,z> = QQ[]
870
+ sage: W = DifferentialWeylAlgebra(R)
871
+ sage: W.polynomial_ring() == R
872
+ True
873
+ """
874
+ return self._poly_ring
875
+
876
+ @cached_method
877
+ def basis(self):
878
+ """
879
+ Return a basis of ``self``.
880
+
881
+ EXAMPLES::
882
+
883
+ sage: W.<x,y> = DifferentialWeylAlgebra(QQ)
884
+ sage: B = W.basis()
885
+ sage: it = iter(B)
886
+ sage: [next(it) for i in range(20)]
887
+ [1, x, y, dx, dy, x^2, x*y, x*dx, x*dy, y^2, y*dx, y*dy,
888
+ dx^2, dx*dy, dy^2, x^3, x^2*y, x^2*dx, x^2*dy, x*y^2]
889
+ sage: dx, dy = W.differentials()
890
+ sage: sorted((dx*x).monomials(), key=str)
891
+ [1, x*dx]
892
+ sage: B[(x*y).support()[0]]
893
+ x*y
894
+ sage: sorted((dx*x).monomial_coefficients().items())
895
+ [(((0, 0), (0, 0)), 1), (((1, 0), (1, 0)), 1)]
896
+ """
897
+ n = self._n
898
+ from sage.combinat.integer_lists.nn import IntegerListsNN
899
+
900
+ def elt_map(u):
901
+ return (tuple(u[:n]), tuple(u[n:]))
902
+
903
+ I = IntegerListsNN(length=2 * n, element_constructor=elt_map)
904
+ one = self.base_ring().one()
905
+
906
+ def f(x):
907
+ return self.element_class(self, {(x[0], x[1]): one})
908
+
909
+ return Family(I, f, name="basis map")
910
+
911
+ @cached_method
912
+ def algebra_generators(self):
913
+ """
914
+ Return the algebra generators of ``self``.
915
+
916
+ .. SEEALSO::
917
+
918
+ :meth:`variables`, :meth:`differentials`
919
+
920
+ EXAMPLES::
921
+
922
+ sage: R.<x,y,z> = QQ[]
923
+ sage: W = DifferentialWeylAlgebra(R)
924
+ sage: W.algebra_generators()
925
+ Finite family {'x': x, 'y': y, 'z': z, 'dx': dx, 'dy': dy, 'dz': dz}
926
+ """
927
+ d = {x: self.gen(i) for i, x in enumerate(self.variable_names())}
928
+ return Family(self.variable_names(), lambda x: d[x])
929
+
930
+ gens = algebra_generators
931
+
932
+ @cached_method
933
+ def variables(self):
934
+ """
935
+ Return the variables of ``self``.
936
+
937
+ .. SEEALSO::
938
+
939
+ :meth:`algebra_generators`, :meth:`differentials`
940
+
941
+ EXAMPLES::
942
+
943
+ sage: W.<x,y,z> = DifferentialWeylAlgebra(QQ)
944
+ sage: W.variables()
945
+ Finite family {'x': x, 'y': y, 'z': z}
946
+ """
947
+ N = self.variable_names()[:self._n]
948
+ d = {x: self.gen(i) for i, x in enumerate(N)}
949
+ return Family(N, lambda x: d[x])
950
+
951
+ @cached_method
952
+ def differentials(self):
953
+ """
954
+ Return the differentials of ``self``.
955
+
956
+ .. SEEALSO::
957
+
958
+ :meth:`algebra_generators`, :meth:`variables`
959
+
960
+ EXAMPLES::
961
+
962
+ sage: W.<x,y,z> = DifferentialWeylAlgebra(QQ)
963
+ sage: W.differentials()
964
+ Finite family {'dx': dx, 'dy': dy, 'dz': dz}
965
+ """
966
+ N = self.variable_names()[self._n:]
967
+ d = {x: self.gen(self._n + i) for i, x in enumerate(N)}
968
+ return Family(N, lambda x: d[x])
969
+
970
+ def gen(self, i):
971
+ """
972
+ Return the ``i``-th generator of ``self``.
973
+
974
+ .. SEEALSO::
975
+
976
+ :meth:`algebra_generators`
977
+
978
+ EXAMPLES::
979
+
980
+ sage: R.<x,y,z> = QQ[]
981
+ sage: W = DifferentialWeylAlgebra(R)
982
+ sage: [W.gen(i) for i in range(6)]
983
+ [x, y, z, dx, dy, dz]
984
+ """
985
+ P = [0] * self._n
986
+ D = [0] * self._n
987
+ if i < self._n:
988
+ P[i] = 1
989
+ else:
990
+ D[i - self._n] = 1
991
+ return self.element_class(self, {(tuple(P), tuple(D)): self.base_ring().one()})
992
+
993
+ def ngens(self):
994
+ """
995
+ Return the number of generators of ``self``.
996
+
997
+ EXAMPLES::
998
+
999
+ sage: R.<x,y,z> = QQ[]
1000
+ sage: W = DifferentialWeylAlgebra(R)
1001
+ sage: W.ngens()
1002
+ 6
1003
+ """
1004
+ return self._n * 2
1005
+
1006
+ @cached_method
1007
+ def one(self):
1008
+ """
1009
+ Return the multiplicative identity element `1`.
1010
+
1011
+ EXAMPLES::
1012
+
1013
+ sage: R.<x,y,z> = QQ[]
1014
+ sage: W = DifferentialWeylAlgebra(R)
1015
+ sage: W.one()
1016
+ 1
1017
+ """
1018
+ t = tuple([0] * self._n)
1019
+ return self.element_class(self, {(t, t): self.base_ring().one()})
1020
+
1021
+ @cached_method
1022
+ def zero(self):
1023
+ """
1024
+ Return the additive identity element `0`.
1025
+
1026
+ EXAMPLES::
1027
+
1028
+ sage: R.<x,y,z> = QQ[]
1029
+ sage: W = DifferentialWeylAlgebra(R)
1030
+ sage: W.zero()
1031
+ 0
1032
+ """
1033
+ return self.element_class(self, {})
1034
+
1035
+ @lazy_attribute
1036
+ def diff_action(self):
1037
+ """
1038
+ Left action of this Weyl algebra on the underlying polynomial ring by
1039
+ differentiation.
1040
+
1041
+ EXAMPLES::
1042
+
1043
+ sage: R.<x,y> = QQ[]
1044
+ sage: W = R.weyl_algebra()
1045
+ sage: dx, dy = W.differentials()
1046
+ sage: W.diff_action
1047
+ Left action by Differential Weyl algebra of polynomials in x, y
1048
+ over Rational Field on Multivariate Polynomial Ring in x, y over
1049
+ Rational Field
1050
+ sage: W.diff_action(dx^2 + dy + 1, x^3*y^3)
1051
+ x^3*y^3 + 3*x^3*y^2 + 6*x*y^3
1052
+ """
1053
+ return DifferentialWeylAlgebraAction(self)
1054
+
1055
+ Element = DifferentialWeylAlgebraElement
1056
+
1057
+
1058
+ class DifferentialWeylAlgebraAction(Action):
1059
+ """
1060
+ Left action of a Weyl algebra on its underlying polynomial ring by
1061
+ differentiation.
1062
+
1063
+ EXAMPLES::
1064
+
1065
+ sage: R.<x,y> = QQ[]
1066
+ sage: W = R.weyl_algebra()
1067
+ sage: dx, dy = W.differentials()
1068
+ sage: W.diff_action
1069
+ Left action by Differential Weyl algebra of polynomials in x, y
1070
+ over Rational Field on Multivariate Polynomial Ring in x, y over
1071
+ Rational Field
1072
+
1073
+ ::
1074
+
1075
+ sage: g = dx^2 + x*dy
1076
+ sage: p = x^5 + x^3 + y^2*x^2 + 1
1077
+ sage: W.diff_action(g, p)
1078
+ 2*x^3*y + 20*x^3 + 2*y^2 + 6*x
1079
+
1080
+ The action is a left action::
1081
+
1082
+ sage: h = dx*x + x*y
1083
+ sage: W.diff_action(h, W.diff_action(g, p)) == W.diff_action(h*g, p)
1084
+ True
1085
+
1086
+ The action endomorphism of a differential operator::
1087
+
1088
+ sage: dg = W.diff_action(g); dg
1089
+ Action of dx^2 + x*dy on Multivariate Polynomial Ring in x, y over
1090
+ Rational Field under Left action by Differential Weyl algebra...
1091
+ sage: dg(p) == W.diff_action(g, p) == g.diff(p)
1092
+ True
1093
+ """
1094
+
1095
+ def __init__(self, G) -> None:
1096
+ """
1097
+ INPUT:
1098
+
1099
+ - ``G`` -- Weyl algebra
1100
+
1101
+ EXAMPLES::
1102
+
1103
+ sage: from sage.algebras.weyl_algebra import DifferentialWeylAlgebraAction
1104
+ sage: W.<x,y> = DifferentialWeylAlgebra(QQ)
1105
+ sage: DifferentialWeylAlgebraAction(W)
1106
+ Left action by Differential Weyl algebra of polynomials in x, y
1107
+ over Rational Field on Multivariate Polynomial Ring in x, y over
1108
+ Rational Field
1109
+ """
1110
+ super().__init__(G, G.polynomial_ring(), is_left=True)
1111
+
1112
+ def _act_(self, g, x):
1113
+ """
1114
+ Apply a differential operator to a polynomial.
1115
+
1116
+ EXAMPLES::
1117
+
1118
+ sage: W.<x,y> = DifferentialWeylAlgebra(QQ)
1119
+ sage: dx, dy = W.differentials()
1120
+ sage: W.diff_action(dx^3 + dx, x^3*y^3 + x*y)
1121
+ 3*x^2*y^3 + 6*y^3 + y
1122
+ """
1123
+ f = g * x
1124
+ D = {y: c for (y, dy), c in f.monomial_coefficients(copy=False).items()
1125
+ if all(dyi == 0 for dyi in dy)}
1126
+ return self.right_domain()(D)