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,968 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.rings.finite_rings
3
+ r"""
4
+ Morphisms between Ore modules
5
+
6
+ Let `R` be a commutative ring, `\theta : R \to R` by a ring
7
+ endomorphism and `\partial : R \to R` be a `\theta`-derivation.
8
+ Let also `\mathcal S = R[X; \theta, \partial]` denote the
9
+ associated Ore polynomial ring.
10
+
11
+ By definition, a Ore module is a module over `\mathcal S`. In
12
+ SageMath, there are rather represented as modules over `R`
13
+ equipped with the map giving the action of the Ore variable `X`.
14
+ We refer to :mod:`sage.modules.ore_module` for more details.
15
+
16
+ A morphism of Ore modules is a `R`-linear morphism commuting
17
+ with the Ore action, or equivalenty a `\mathcal S`-linear map.
18
+
19
+ .. RUBRIC:: Construction of morphisms
20
+
21
+ There are several ways for creating Ore modules morphisms in SageMath.
22
+ First of all, one can use the method :meth:`sage.modules.ore_module.OreModule.hom`,
23
+ passing to it the matrix (in the canonical bases) of the morphism
24
+ we want to build::
25
+
26
+ sage: K.<z> = GF(5^3)
27
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
28
+ sage: M.<e0,e1> = S.quotient_module(X^2 + X + z)
29
+
30
+ sage: mat = matrix(2, 2, [z, 3*z^2 + z + 2,
31
+ ....: z + 1, 4*z + 4])
32
+ sage: f = M.hom(mat)
33
+ sage: f
34
+ Ore module endomorphism of Ore module <e0, e1> over Finite Field in z of size 5^3 twisted by z |--> z^5
35
+
36
+ Clearly, this method is not optimal: typing all the entries of the
37
+ defining matrix is long and a potential source of errors.
38
+
39
+ Instead, one can use a dictionary encoding the values taken by the
40
+ morphism on a set of generators; the morphism is then automatically
41
+ prolonged by `\mathcal S`-linearity.
42
+ Actually here, `f` was just the multiplication by `X^3` on `M`.
43
+ We can then redefine it simply as follows::
44
+
45
+ sage: g = M.hom({e0: X^3*e0})
46
+ sage: g
47
+ Ore module endomorphism of Ore module <e0, e1> over Finite Field in z of size 5^3 twisted by z |--> z^5
48
+
49
+ One can then recover the matrix by using the method
50
+ :meth:`sage.modules.ore_module_morphism.OreModuleMorphism.matrix`::
51
+
52
+ sage: g.matrix()
53
+ [ z 3*z^2 + z + 2]
54
+ [ z + 1 4*z + 4]
55
+
56
+ Alternatively, one can use the method
57
+ :meth:`sage.modules.ore_module.OreModule.multiplication_map`::
58
+
59
+ sage: h = M.multiplication_map(X^3)
60
+ sage: h
61
+ Ore module endomorphism of Ore module <e0, e1> over Finite Field in z of size 5^3 twisted by z |--> z^5
62
+ sage: g == h
63
+ True
64
+
65
+ Of course, this method also accepts values in the base ring::
66
+
67
+ sage: h = M.multiplication_map(2)
68
+ sage: h
69
+ Ore module endomorphism of Ore module <e0, e1> over Finite Field in z of size 5^3 twisted by z |--> z^5
70
+ sage: h.matrix()
71
+ [2 0]
72
+ [0 2]
73
+
74
+ Be careful that scalar multiplications do not always properly
75
+ define a morphism of Ore modules::
76
+
77
+ sage: M.multiplication_map(z)
78
+ Traceback (most recent call last):
79
+ ...
80
+ ValueError: does not define a morphism of Ore modules
81
+
82
+ .. RUBRIC: Kernels, images and related things
83
+
84
+ SageMath provides methods to compute kernels, cokernels,
85
+ images and coimages. In order to illustrate this, we will
86
+ build the sequence
87
+
88
+ .. MATH::
89
+
90
+ 0 \to \mathcal S/ \mathcal S P
91
+ \to \mathcal S/ \mathcal S PQ
92
+ \to \mathcal S/ \mathcal S Q \to 0
93
+
94
+ and check that it is exact.
95
+ We first build the Ore modules::
96
+
97
+ sage: P = X^2 + z*X + 1
98
+ sage: Q = X^3 + z^2*X^2 + X + z
99
+ sage: U = S.quotient_module(P, names='u')
100
+ sage: U.inject_variables()
101
+ Defining u0, u1
102
+ sage: V = S.quotient_module(P*Q, names='v')
103
+ sage: V.inject_variables()
104
+ Defining v0, v1, v2, v3, v4
105
+ sage: W = S.quotient_module(Q, names='w')
106
+ sage: W.inject_variables()
107
+ Defining w0, w1, w2
108
+
109
+ Next, we build the morphisms::
110
+
111
+ sage: f = U.hom({u0: Q*v0})
112
+ sage: g = V.hom({v0: w0})
113
+
114
+ We can now check that `f` is injective by computing its
115
+ kernel::
116
+
117
+ sage: f.kernel()
118
+ Ore module of rank 0 over Finite Field in z of size 5^3 twisted by z |--> z^5
119
+
120
+ We see on the output that it has dimension `0`; so it
121
+ vanishes. Instead of reading the output, one can check
122
+ programmatically the vanishing of a Ore module using the
123
+ method :meth:`sage.modules.ore_module.OreModule.is_zero`::
124
+
125
+ sage: f.kernel().is_zero()
126
+ True
127
+
128
+ Actually, in our use case, one can, more simply, use the method
129
+ :meth:`sage.modules.ore_module_morphism.OreModuleMorphism.is_injective`::
130
+
131
+ sage: f.is_injective()
132
+ True
133
+
134
+ Similarly, one checks that `g` is surjective::
135
+
136
+ sage: g.is_surjective()
137
+ True
138
+
139
+ or equivalently::
140
+
141
+ sage: g.cokernel().is_zero()
142
+ True
143
+
144
+ Now, we need to check that the kernel of `g` equals the
145
+ image of `f`. For this, we compute both and compare the
146
+ results::
147
+
148
+ sage: ker = g.kernel()
149
+ sage: im = f.image()
150
+ sage: ker == im
151
+ True
152
+
153
+ As a sanity check, one can also verity that the composite
154
+ `g \circ f` vanishes::
155
+
156
+ sage: h = g * f
157
+ sage: h
158
+ Ore module morphism:
159
+ From: Ore module <u0, u1> over Finite Field in z of size 5^3 twisted by z |--> z^5
160
+ To: Ore module <w0, w1, w2> over Finite Field in z of size 5^3 twisted by z |--> z^5
161
+ sage: h.is_zero()
162
+ True
163
+
164
+ Let us now consider another morphism `f` and build the
165
+ canonical isomorphism `\text{coim }f \to \text{im }f`
166
+ that it induces.
167
+ We start by defining `f`::
168
+
169
+ sage: A = X + z
170
+ sage: B = X + z + 1
171
+ sage: P = X^2 + X + z
172
+ sage: U = S.quotient_module(B*P, names='u')
173
+ sage: U.inject_variables()
174
+ Defining u0, u1, u2
175
+ sage: V = S.quotient_module(P*A, names='v')
176
+ sage: V.inject_variables()
177
+ Defining v0, v1, v2
178
+
179
+ sage: f = U.hom({u0: A*v0})
180
+ sage: f
181
+ Ore module morphism:
182
+ From: Ore module <u0, u1, u2> over Finite Field in z of size 5^3 twisted by z |--> z^5
183
+ To: Ore module <v0, v1, v2> over Finite Field in z of size 5^3 twisted by z |--> z^5
184
+
185
+ Now we compute the image and the coimage::
186
+
187
+ sage: I = f.image(names='im')
188
+ sage: I
189
+ Ore module <im0, im1> over Finite Field in z of size 5^3 twisted by z |--> z^5
190
+
191
+ sage: C = f.coimage(names='co')
192
+ sage: C
193
+ Ore module <co0, co1> over Finite Field in z of size 5^3 twisted by z |--> z^5
194
+
195
+ We can already check that the image and the coimage have the
196
+ same rank. We now want to construct the isomorphism between
197
+ them. For this, we first need to corestrict `f` to its image.
198
+ This is achieved via the method
199
+ :meth:`sage.modules.ore_module.OreSubmodule.morphism_corestriction`
200
+ of the Ore module::
201
+
202
+ sage: g = I.morphism_corestriction(f)
203
+ sage: g
204
+ Ore module morphism:
205
+ From: Ore module <u0, u1, u2> over Finite Field in z of size 5^3 twisted by z |--> z^5
206
+ To: Ore module <im0, im1> over Finite Field in z of size 5^3 twisted by z |--> z^5
207
+
208
+ Next, we want to factor `g` by the coimage. We proceed as follows::
209
+
210
+ sage: h = C.morphism_quotient(g)
211
+ sage: h
212
+ Ore module morphism:
213
+ From: Ore module <co0, co1> over Finite Field in z of size 5^3 twisted by z |--> z^5
214
+ To: Ore module <im0, im1> over Finite Field in z of size 5^3 twisted by z |--> z^5
215
+
216
+ We have found the morphism we were looking for: it is `h`.
217
+ We can now check that it is an isomorphism::
218
+
219
+ sage: h.is_isomorphism()
220
+ True
221
+
222
+ As a shortcut, we can use explicit conversions as follows::
223
+
224
+ sage: H = Hom(C, I) # the hom space
225
+ sage: h2 = H(f)
226
+ sage: h2
227
+ Ore module morphism:
228
+ From: Ore module <co0, co1> over Finite Field in z of size 5^3 twisted by z |--> z^5
229
+ To: Ore module <im0, im1> over Finite Field in z of size 5^3 twisted by z |--> z^5
230
+ sage: h == h2
231
+ True
232
+
233
+ .. RUBRIC: Determinants and characteristic polynomials
234
+
235
+ For endomorphisms, one can compute classical invariants as
236
+ determinants and characteristic polynomials.
237
+ To illustrate this, we check on an example that the characteristic
238
+ polynomial of the multiplication by `X^3` on the quotient
239
+ `\mathcal S / \mathcal S P` is the reduced norm of `P`::
240
+
241
+ sage: P = X^5 + z*X^4 + z^2*X^2 + z + 1
242
+ sage: M = S.quotient_module(P)
243
+ sage: f = M.multiplication_map(X^3)
244
+ sage: f.charpoly()
245
+ x^5 + x^4 + x^3 + x^2 + 1
246
+
247
+ sage: P.reduced_norm('x')
248
+ x^5 + x^4 + x^3 + x^2 + 1
249
+
250
+ AUTHOR:
251
+
252
+ - Xavier Caruso (2024-10)
253
+ """
254
+
255
+ # ***************************************************************************
256
+ # Copyright (C) 2024 Xavier Caruso <xavier.caruso@normalesup.org>
257
+ #
258
+ # This program is free software: you can redistribute it and/or modify
259
+ # it under the terms of the GNU General Public License as published by
260
+ # the Free Software Foundation, either version 2 of the License, or
261
+ # (at your option) any later version.
262
+ # https://www.gnu.org/licenses/
263
+ # ***************************************************************************
264
+
265
+ from sage.misc.latex import latex
266
+ from sage.structure.element import Element
267
+ from sage.matrix.matrix0 import Matrix
268
+ from sage.matrix.constructor import matrix
269
+ from sage.categories.map import Map
270
+ from sage.categories.morphism import Morphism
271
+ from sage.modules.ore_module import OreSubmodule, OreQuotientModule
272
+
273
+
274
+ class OreModuleMorphism(Morphism):
275
+ r"""
276
+ Generic class for morphism between Ore modules.
277
+ """
278
+ def __init__(self, parent, im_gens, check=True):
279
+ r"""
280
+ Initialize this Ore module.
281
+
282
+ INPUT:
283
+
284
+ - ``parent`` -- the hom space
285
+
286
+ - ``im_gens`` -- the image of the generators (formatted as
287
+ a list, a tuple, a dictionary or a matrix) or a Ore modules
288
+ morphism
289
+
290
+ - ``check`` (default: ``True``) -- a boolean, whether we
291
+ should check if the given data correctly defined a morphism
292
+ of Ore modules
293
+
294
+ TESTS::
295
+
296
+ sage: K.<z> = GF(5^3)
297
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
298
+ sage: M = S.quotient_module(X^2 + z)
299
+ sage: f = M.multiplication_map(X^3)
300
+ sage: type(f)
301
+ <class 'sage.modules.ore_module_homspace.OreModule_homspace_with_category.element_class'>
302
+
303
+ sage: TestSuite(f).run()
304
+ """
305
+ Morphism.__init__(self, parent)
306
+ domain = parent.domain()
307
+ codomain = parent.codomain()
308
+ base = domain.base_ring()
309
+ MS = parent.matrix_space()
310
+ if (isinstance(im_gens, Element)
311
+ and base.has_coerce_map_from(im_gens.parent())):
312
+ self._matrix = MS(im_gens)
313
+ elif isinstance(im_gens, Matrix):
314
+ self._matrix = MS(im_gens)
315
+ elif isinstance(im_gens, OreModuleMorphism):
316
+ # Not optimal: too many intermediate morphisms constructed
317
+ f = im_gens
318
+ if f.domain() is not domain:
319
+ f = domain._hom_change_domain(f)
320
+ if f.codomain() is not codomain:
321
+ f = codomain._hom_change_codomain(f)
322
+ self._matrix = f._matrix
323
+ elif isinstance(im_gens, (list, tuple)):
324
+ if len(im_gens) != domain.rank():
325
+ raise ValueError("wrong number of generators")
326
+ self._matrix = matrix([codomain(v).list() for v in im_gens])
327
+ elif isinstance(im_gens, dict):
328
+ zero = parent.base_ring().zero()
329
+ dimd = domain.rank()
330
+ dimc = codomain.rank()
331
+ d = dimc + dimd
332
+ vs = [domain(x).list() + codomain(y).list() for x, y in im_gens.items()]
333
+ if len(vs) < 2*d:
334
+ vs += (2*d - len(vs)) * [d * [zero]]
335
+ M = matrix(vs)
336
+ M.echelonize()
337
+ oldr = 0
338
+ r = M.rank()
339
+ iter = 1
340
+ fd = domain._pseudohom
341
+ fc = codomain._pseudohom
342
+ while r > oldr:
343
+ for i in range(r):
344
+ row = M.row(i).list()
345
+ x = row[:dimd]
346
+ y = row[dimd:]
347
+ for _ in range(iter):
348
+ x = fd(x)
349
+ y = fc(y)
350
+ v = x.list() + y.list()
351
+ for j in range(d):
352
+ M[i+r,j] = v[j]
353
+ M.echelonize()
354
+ oldr = r
355
+ r = M.rank()
356
+ iter *= 2
357
+ if list(M.pivots()) != list(range(dimd)):
358
+ raise ValueError("does not define a morphism of Ore modules")
359
+ self._matrix = M.submatrix(0, dimd, dimd, dimc)
360
+ else:
361
+ raise ValueError("cannot construct a morphism from the given data")
362
+ if check:
363
+ for x in parent.domain().basis():
364
+ if self._call_(x.image()) != self._call_(x).image():
365
+ raise ValueError("does not define a morphism of Ore modules")
366
+
367
+ def _repr_type(self):
368
+ r"""
369
+ Return a string with the type of this morphism.
370
+
371
+ TESTS::
372
+
373
+ sage: K.<z> = GF(5^3)
374
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
375
+ sage: M = S.quotient_module(X^2 + z)
376
+ sage: f = M.multiplication_map(X^3)
377
+ sage: f._repr_type()
378
+ 'Ore module'
379
+ """
380
+ return "Ore module"
381
+
382
+ def _latex_(self):
383
+ r"""
384
+ Return a LaTeX representation of this morphism.
385
+
386
+ TESTS::
387
+
388
+ sage: K.<z> = GF(5^3)
389
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
390
+ sage: M = S.quotient_module(X^2 + z)
391
+ sage: f = M.multiplication_map(X^3)
392
+ sage: latex(f)
393
+ \begin{array}{l}
394
+ \text{\texttt{Ore module morphism:}} \\
395
+ \text{\texttt{{ }{ }From:}}\hspace{1ex} \texttt{Ore module of rank } 2\texttt{ over } \Bold{F}_{5^{3}} \texttt{ twisted by } z \mapsto z^{5} \\
396
+ \text{\texttt{{ }{ }To:}}\hspace{3ex} \texttt{Ore module of rank } 2\texttt{ over } \Bold{F}_{5^{3}} \texttt{ twisted by } z \mapsto z^{5}
397
+ \end{array}
398
+
399
+ ::
400
+
401
+ sage: Me = M.rename_basis('e')
402
+ sage: fe = Me.multiplication_map(X^3)
403
+ sage: latex(fe)
404
+ \begin{array}{l}
405
+ \text{\texttt{Ore module morphism:}} \\
406
+ \text{\texttt{{ }{ }From:}}\hspace{1ex} \left<e_{0}, e_{1}\right>_{\Bold{F}_{5^{3}} , z \mapsto z^{5} } \\
407
+ \text{\texttt{{ }{ }To:}}\hspace{3ex} \left<e_{0}, e_{1}\right>_{\Bold{F}_{5^{3}} , z \mapsto z^{5} }
408
+ \end{array}
409
+ """
410
+ s = "\\begin{array}{l}\n"
411
+ s += "\\text{\\texttt{%s morphism:}} \\\\\n" % self._repr_type()
412
+ s += "\\text{\\texttt{{ }{ }From:}}\\hspace{1ex} %s \\\\\n" % latex(self.domain())
413
+ s += "\\text{\\texttt{{ }{ }To:}}\\hspace{3ex} %s\n" % latex(self.codomain())
414
+ s += "\\end{array}"
415
+ return s
416
+
417
+ def matrix(self):
418
+ r"""
419
+ Return the matrix defining this morphism.
420
+
421
+ EXAMPLES::
422
+
423
+ sage: K.<z> = GF(5^3)
424
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
425
+ sage: M = S.quotient_module(X^2 + z)
426
+ sage: f = M.multiplication_map(2)
427
+ sage: f.matrix()
428
+ [2 0]
429
+ [0 2]
430
+
431
+ sage: g = M.multiplication_map(X^3)
432
+ sage: g.matrix()
433
+ [ 0 3*z^2 + z + 1]
434
+ [ 2*z + 1 0]
435
+ """
436
+ return self._matrix.__copy__()
437
+
438
+ def _call_(self, x):
439
+ r"""
440
+ Return the image of `x` by this morphism.
441
+
442
+ EXAMPLES::
443
+
444
+ sage: K.<z> = GF(5^3)
445
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
446
+ sage: M.<v,w> = S.quotient_module(X^2 + z*X + 1)
447
+ sage: f = M.multiplication_map(X^3)
448
+ sage: f(v)
449
+ (2*z^2+4*z+4)*v + (4*z^2+3*z+3)*w
450
+
451
+ We check that it is the correct answer::
452
+
453
+ sage: X^3 * v
454
+ (2*z^2+4*z+4)*v + (4*z^2+3*z+3)*w
455
+ """
456
+ return self.codomain()(x * self._matrix)
457
+
458
+ def is_zero(self) -> bool:
459
+ r"""
460
+ Return ``True`` if this morphism is zero.
461
+
462
+ EXAMPLES::
463
+
464
+ sage: K.<z> = GF(5^3)
465
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
466
+ sage: P = X^3 + z*X^2 + z^2 + 1
467
+ sage: M = S.quotient_module(P^2, names='e')
468
+ sage: M.inject_variables()
469
+ Defining e0, e1, e2, e3, e4, e5
470
+
471
+ sage: f = M.hom({e0: P*e0})
472
+ sage: f.is_zero()
473
+ False
474
+ sage: (f*f).is_zero()
475
+ True
476
+ """
477
+ return self._matrix.is_zero()
478
+
479
+ def is_identity(self) -> bool:
480
+ r"""
481
+ Return ``True`` if this morphism is the identity.
482
+
483
+ EXAMPLES::
484
+
485
+ sage: K.<z> = GF(5^3)
486
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
487
+ sage: M.<v,w> = S.quotient_module(X^2 + z)
488
+ sage: f = M.hom({v: v})
489
+ sage: f.is_identity()
490
+ True
491
+
492
+ sage: f = M.hom({v: 2*v})
493
+ sage: f.is_identity()
494
+ False
495
+ """
496
+ return self.domain() is self.codomain() and self._matrix.is_one()
497
+
498
+ def _add_(self, other):
499
+ r"""
500
+ Return the sum of this morphism and ``other``.
501
+
502
+ TESTS::
503
+
504
+ sage: K.<z> = GF(5^3)
505
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
506
+ sage: M = S.quotient_module(X^2 + z)
507
+ sage: f = M.multiplication_map(X^3)
508
+ sage: g = M.multiplication_map(X^6)
509
+ sage: h = f + g
510
+ sage: h == M.multiplication_map(X^3 + X^6)
511
+ True
512
+ """
513
+ if not isinstance(other, OreModuleMorphism):
514
+ raise ValueError("the morphism is not a morphism of Ore modules")
515
+ H = self.parent()
516
+ return H(self._matrix + other._matrix, check=False)
517
+
518
+ def _neg_(self):
519
+ r"""
520
+ Return the oppositive of this morphism.
521
+
522
+ TESTS::
523
+
524
+ sage: K.<z> = GF(5^3)
525
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
526
+ sage: M = S.quotient_module(X^2 + z)
527
+ sage: f = M.multiplication_map(X^3)
528
+ sage: g = -f
529
+ sage: g == M.multiplication_map(-X^3)
530
+ True
531
+ """
532
+ H = self.parent()
533
+ return H(-self._matrix, check=False)
534
+
535
+ def _sub_(self, other):
536
+ r"""
537
+ Return the different between this morphism and ``other``.
538
+
539
+ TESTS::
540
+
541
+ sage: K.<z> = GF(5^3)
542
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
543
+ sage: M = S.quotient_module(X^2 + z)
544
+ sage: f = M.multiplication_map(X^3)
545
+ sage: g = M.multiplication_map(X^6)
546
+ sage: h = f - g
547
+ sage: h == M.multiplication_map(X^3 - X^6)
548
+ True
549
+ """
550
+ if not isinstance(other, OreModuleMorphism):
551
+ raise ValueError("the morphism is not a morphism of Ore modules")
552
+ H = self.parent()
553
+ return H(self._matrix - other._matrix, check=False)
554
+
555
+ def _rmul_(self, a):
556
+ r"""
557
+ Return the product of the scalar `a` by this morphism.
558
+
559
+ TESTS::
560
+
561
+ sage: K.<z> = GF(5^3)
562
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
563
+ sage: M = S.quotient_module(X^2 + z)
564
+ sage: f = M.multiplication_map(X^3)
565
+ sage: g = 2*f
566
+ sage: g == M.multiplication_map(2*X^3)
567
+ True
568
+ """
569
+ H = self.parent()
570
+ return H(a*self._matrix, check=False)
571
+
572
+ def __eq__(self, other):
573
+ r"""
574
+ Return ``True`` if this morphism is equal to ``other``.
575
+
576
+ TESTS::
577
+
578
+ sage: K.<z> = GF(5^3)
579
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
580
+ sage: M = S.quotient_module(X^2 + z)
581
+ sage: f = 2*M.multiplication_map(X^3)
582
+ sage: g = M.multiplication_map(2*X^3)
583
+ sage: f == g
584
+ True
585
+ """
586
+ if not isinstance(other, OreModuleMorphism):
587
+ try:
588
+ other = self.parent()(other)
589
+ except ValueError:
590
+ return False
591
+ return self._matrix == other._matrix
592
+
593
+ def is_injective(self) -> bool:
594
+ r"""
595
+ Return ``True`` if this morphism is injective.
596
+
597
+ EXAMPLES::
598
+
599
+ sage: K.<z> = GF(5^3)
600
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
601
+ sage: P = X^3 + z*X^2 + z^2
602
+ sage: M = S.quotient_module(P^2, names='m')
603
+ sage: M.inject_variables()
604
+ Defining m0, m1, m2, m3, m4, m5
605
+ sage: N = S.quotient_module(P, names='n')
606
+ sage: N.inject_variables()
607
+ Defining n0, n1, n2
608
+
609
+ sage: f = N.hom({n0: P*m0})
610
+ sage: f.is_injective()
611
+ True
612
+
613
+ sage: g = M.hom({m0: n0})
614
+ sage: g.is_injective()
615
+ False
616
+ """
617
+ return self._matrix.rank() == self.domain().rank()
618
+
619
+ def is_surjective(self) -> bool:
620
+ r"""
621
+ Return ``True`` if this morphism is surjective.
622
+
623
+ EXAMPLES::
624
+
625
+ sage: K.<z> = GF(5^3)
626
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
627
+ sage: P = X^3 + z*X^2 + z^2
628
+ sage: M = S.quotient_module(P^2, names='m')
629
+ sage: M.inject_variables()
630
+ Defining m0, m1, m2, m3, m4, m5
631
+ sage: N = S.quotient_module(P, names='n')
632
+ sage: N.inject_variables()
633
+ Defining n0, n1, n2
634
+
635
+ sage: f = N.hom({n0: P*m0})
636
+ sage: f.is_surjective()
637
+ False
638
+
639
+ sage: g = M.hom({m0: n0})
640
+ sage: g.is_surjective()
641
+ True
642
+ """
643
+ return self._matrix.rank() == self.codomain().rank()
644
+
645
+ def is_bijective(self) -> bool:
646
+ r"""
647
+ Return ``True`` if this morphism is bijective.
648
+
649
+ EXAMPLES::
650
+
651
+ sage: K.<z> = GF(5^3)
652
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
653
+ sage: M = S.quotient_module(X^2 + z)
654
+ sage: f = M.multiplication_map(X^3)
655
+ sage: f.is_bijective()
656
+ True
657
+
658
+ sage: N = S.quotient_module(X^2)
659
+ sage: g = N.multiplication_map(X^3)
660
+ sage: g.is_bijective()
661
+ False
662
+ """
663
+ return self.is_injective() and self.is_surjective()
664
+
665
+ def is_isomorphism(self) -> bool:
666
+ r"""
667
+ Return ``True`` if this morphism is an isomorphism.
668
+
669
+ EXAMPLES::
670
+
671
+ sage: K.<z> = GF(5^3)
672
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
673
+ sage: M = S.quotient_module(X^2 + z)
674
+ sage: f = M.multiplication_map(X^3)
675
+ sage: f.is_isomorphism()
676
+ True
677
+
678
+ sage: N = S.quotient_module(X^2)
679
+ sage: g = N.multiplication_map(X^3)
680
+ sage: g.is_isomorphism()
681
+ False
682
+ """
683
+ return self.is_bijective()
684
+
685
+ def _composition_(self, other, homset):
686
+ r"""
687
+ Return the composite ``other`` `\circ` ``self``.
688
+
689
+ TESTS::
690
+
691
+ sage: K.<z> = GF(5^3)
692
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
693
+ sage: M = S.quotient_module(X^2 + z)
694
+ sage: f = M.multiplication_map(X^3)
695
+ sage: g = f * f
696
+ sage: g == M.multiplication_map(X^6)
697
+ True
698
+ """
699
+ if not isinstance(other, OreModuleMorphism):
700
+ raise ValueError("the morphism is not a morphism of Ore modules")
701
+ return homset(other._matrix * self._matrix, check=False)
702
+
703
+ def inverse(self):
704
+ r"""
705
+ Return the inverse of this morphism.
706
+
707
+ EXAMPLES::
708
+
709
+ sage: K.<z> = GF(5^3)
710
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
711
+ sage: P = X^2 + z
712
+ sage: M.<e0,e1,e2,e3> = S.quotient_module(P^2)
713
+
714
+ sage: f = M.multiplication_map(X^3)
715
+ sage: g = f.inverse()
716
+ sage: (f*g).is_identity()
717
+ True
718
+ sage: (g*f).is_identity()
719
+ True
720
+
721
+ If the morphism is not invertible, an error is raised::
722
+
723
+ sage: h = M.hom({e0: P*e0})
724
+ sage: h.inverse()
725
+ Traceback (most recent call last):
726
+ ...
727
+ ValueError: this morphism is not invertible
728
+ """
729
+ if not self.is_isomorphism():
730
+ raise ValueError("this morphism is not invertible")
731
+ H = self.parent()
732
+ return H(self._matrix.inverse(), check=False)
733
+
734
+ __invert__ = inverse
735
+
736
+ def kernel(self, names=None):
737
+ r"""
738
+ Return ``True`` if this morphism is injective.
739
+
740
+ EXAMPLES::
741
+
742
+ sage: K.<z> = GF(5^3)
743
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
744
+ sage: P = X^3 + z*X^2 + z^2
745
+ sage: M = S.quotient_module(P^2, names='m')
746
+ sage: M.inject_variables()
747
+ Defining m0, m1, m2, m3, m4, m5
748
+ sage: N = S.quotient_module(P, names='n')
749
+ sage: N.inject_variables()
750
+ Defining n0, n1, n2
751
+
752
+ sage: f = M.hom({m0: n0})
753
+ sage: ker = f.kernel()
754
+ sage: ker
755
+ Ore module of rank 3 over Finite Field in z of size 5^3 twisted by z |--> z^5
756
+ sage: ker.basis()
757
+ [m0 + (2*z^2+3*z+1)*m3 + (4*z^2+3*z+3)*m4 + (2*z^2+3*z)*m5,
758
+ m1 + (z+3)*m3 + (z^2+z+4)*m4,
759
+ m2 + (2*z^2+4*z+2)*m4 + (2*z^2+z+1)*m5]
760
+ """
761
+ ker = self._matrix.left_kernel_matrix()
762
+ return OreSubmodule(self.domain(), ker, names)
763
+
764
+ def image(self, names=None):
765
+ r"""
766
+ Return ``True`` if this morphism is injective.
767
+
768
+ EXAMPLES::
769
+
770
+ sage: K.<z> = GF(5^3)
771
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
772
+ sage: P = X^3 + z*X^2 + z^2
773
+ sage: M = S.quotient_module(P^2, names='m')
774
+ sage: M.inject_variables()
775
+ Defining m0, m1, m2, m3, m4, m5
776
+ sage: N = S.quotient_module(P, names='n')
777
+ sage: N.inject_variables()
778
+ Defining n0, n1, n2
779
+
780
+ sage: f = N.hom({n0: P*m0})
781
+ sage: im = f.image()
782
+ sage: im
783
+ Ore module of rank 3 over Finite Field in z of size 5^3 twisted by z |--> z^5
784
+ sage: im.basis()
785
+ [m0 + (2*z^2+3*z+1)*m3 + (4*z^2+3*z+3)*m4 + (2*z^2+3*z)*m5,
786
+ m1 + (z+3)*m3 + (z^2+z+4)*m4,
787
+ m2 + (2*z^2+4*z+2)*m4 + (2*z^2+z+1)*m5]
788
+ """
789
+ return OreSubmodule(self.codomain(), self._matrix, names)
790
+
791
+ def cokernel(self, names=None):
792
+ r"""
793
+ Return ``True`` if this morphism is injective.
794
+
795
+ EXAMPLES::
796
+
797
+ sage: K.<z> = GF(5^3)
798
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
799
+ sage: P = X^3 + z*X^2 + z^2
800
+ sage: M = S.quotient_module(P^2, names='m')
801
+ sage: M.inject_variables()
802
+ Defining m0, m1, m2, m3, m4, m5
803
+ sage: N = S.quotient_module(P, names='n')
804
+ sage: N.inject_variables()
805
+ Defining n0, n1, n2
806
+
807
+ sage: f = N.hom({n0: P*m0})
808
+ sage: coker = f.cokernel()
809
+ sage: coker
810
+ Ore module of rank 3 over Finite Field in z of size 5^3 twisted by z |--> z^5
811
+ sage: coker.basis()
812
+ [m3, m4, m5]
813
+ """
814
+ return OreQuotientModule(self.codomain(), self._matrix, names)
815
+
816
+ def coimage(self, names=None):
817
+ r"""
818
+ Return ``True`` if this morphism is injective.
819
+
820
+ EXAMPLES::
821
+
822
+ sage: K.<z> = GF(5^3)
823
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
824
+ sage: P = X^3 + z*X^2 + z^2
825
+ sage: M = S.quotient_module(P^2, names='m')
826
+ sage: M.inject_variables()
827
+ Defining m0, m1, m2, m3, m4, m5
828
+ sage: N = S.quotient_module(P, names='n')
829
+ sage: N.inject_variables()
830
+ Defining n0, n1, n2
831
+
832
+ sage: f = M.hom({m0: n0})
833
+ sage: coim = f.coimage()
834
+ sage: coim
835
+ Ore module of rank 3 over Finite Field in z of size 5^3 twisted by z |--> z^5
836
+ sage: coim.basis()
837
+ [m3, m4, m5]
838
+ """
839
+ ker = self._matrix.left_kernel_matrix()
840
+ return OreQuotientModule(self.domain(), ker, names)
841
+
842
+ def determinant(self):
843
+ r"""
844
+ Return the determinant of this endomorphism.
845
+
846
+ EXAMPLES::
847
+
848
+ sage: K.<z> = GF(5^3)
849
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
850
+ sage: M.<m0,m1> = S.quotient_module(X^2 + z)
851
+ sage: f = M.multiplication_map(X^3)
852
+ sage: f.determinant()
853
+ 2
854
+
855
+ If the domain differs from the codomain (even if they have
856
+ the same rank), an error is raised::
857
+
858
+ sage: N.<n0,n1> = S.quotient_module(X^2 + z^25)
859
+ sage: g = M.hom({z*m0: n0})
860
+ sage: g.determinant()
861
+ Traceback (most recent call last):
862
+ ...
863
+ ValueError: determinants are only defined for endomorphisms
864
+ """
865
+ if self.domain() is not self.codomain():
866
+ raise ValueError("determinants are only defined for endomorphisms")
867
+ return self._matrix.determinant()
868
+
869
+ det = determinant
870
+
871
+ def characteristic_polynomial(self, var='x'):
872
+ r"""
873
+ Return the determinant of this endomorphism.
874
+
875
+ EXAMPLES::
876
+
877
+ sage: K.<z> = GF(5^3)
878
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
879
+ sage: P = X^3 + z*X^2 + (z^2 + 3)*X + z^5
880
+ sage: M = S.quotient_module(P)
881
+ sage: f = M.multiplication_map(X^3)
882
+ sage: f.characteristic_polynomial()
883
+ x^3 + x^2 + 2*x + 2
884
+
885
+ We check that the latter is equal to the reduced norm
886
+ of `P`::
887
+
888
+ sage: P.reduced_norm('x')
889
+ x^3 + x^2 + 2*x + 2
890
+
891
+ TESTS::
892
+
893
+ sage: M.<m0,m1> = S.quotient_module(X^2 + z)
894
+ sage: N.<n0,n1> = S.quotient_module(X^2 + z^25)
895
+ sage: g = M.hom({z*m0: n0})
896
+ sage: g.characteristic_polynomial()
897
+ Traceback (most recent call last):
898
+ ...
899
+ ValueError: characteristic polynomials are only defined for endomorphisms
900
+ """
901
+ if self.domain() is not self.codomain():
902
+ raise ValueError("characteristic polynomials are only defined for endomorphisms")
903
+ return self._matrix.charpoly(var)
904
+
905
+ charpoly = characteristic_polynomial
906
+
907
+
908
+ class OreModuleRetraction(Map):
909
+ r"""
910
+ Conversion (partially defined) map from an ambient module
911
+ to one of its submodule.
912
+ """
913
+ def _call_(self, y):
914
+ r"""
915
+ TESTS::
916
+
917
+ sage: K.<z> = GF(5^3)
918
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
919
+ sage: P = X^2 + z*X + 1
920
+ sage: M = S.quotient_module(P^2, names='e')
921
+ sage: M.inject_variables()
922
+ Defining e0, e1, e2, e3
923
+ sage: N = M.span(P*e0, names='u')
924
+ sage: N(P*e0) # indirect doctest
925
+ u0 + z*u1
926
+
927
+ sage: N(e0)
928
+ Traceback (most recent call last):
929
+ ...
930
+ ValueError: not in the submodule
931
+ """
932
+ X = self.codomain()
933
+ try:
934
+ xs = X._basis.solve_left(y)
935
+ except ValueError:
936
+ raise ValueError("not in the submodule")
937
+ return X(xs)
938
+
939
+
940
+ class OreModuleSection(Map):
941
+ r"""
942
+ Section map of the projection onto a quotient.
943
+ It is not necessarily compatible with the Ore action.
944
+ """
945
+ def _call_(self, y):
946
+ r"""
947
+ TESTS::
948
+
949
+ sage: K.<z> = GF(5^3)
950
+ sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
951
+ sage: P = X^2 + z*X + 1
952
+ sage: M = S.quotient_module(P^2, names='e')
953
+ sage: M.inject_variables()
954
+ Defining e0, e1, e2, e3
955
+ sage: N = M.quo(P*e0, names='u')
956
+ sage: N.inject_variables()
957
+ Defining u0, u1
958
+ sage: M(u0) # indirect doctest
959
+ e2
960
+ """
961
+ X = self.codomain()
962
+ Y = self.domain()
963
+ indices = Y._indices
964
+ zero = X.base_ring().zero()
965
+ xs = X.rank() * [zero]
966
+ for i in range(Y.rank()):
967
+ xs[indices[i]] = y[i]
968
+ return X(xs)