passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_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 (808) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +808 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +5 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgcc_s-0cd532bd.so.1 +0 -0
  6. passagemath_modules.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
  7. passagemath_modules.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
  8. passagemath_modules.libs/libgsl-42cda06f.so.28.0.0 +0 -0
  9. passagemath_modules.libs/libmpc-d8ebe4b5.so.3.3.1 +0 -0
  10. passagemath_modules.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
  11. passagemath_modules.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
  12. passagemath_modules.libs/libquadmath-bb76a5fc.so.0.0.0 +0 -0
  13. sage/algebras/all__sagemath_modules.py +20 -0
  14. sage/algebras/catalog.py +148 -0
  15. sage/algebras/clifford_algebra.py +3107 -0
  16. sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  17. sage/algebras/clifford_algebra_element.pxd +16 -0
  18. sage/algebras/clifford_algebra_element.pyx +997 -0
  19. sage/algebras/commutative_dga.py +4252 -0
  20. sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-musl.so +0 -0
  21. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  22. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  23. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  29. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  30. sage/algebras/finite_gca.py +528 -0
  31. sage/algebras/group_algebra.py +232 -0
  32. sage/algebras/lie_algebras/abelian.py +197 -0
  33. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  34. sage/algebras/lie_algebras/all.py +25 -0
  35. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  36. sage/algebras/lie_algebras/bch.py +177 -0
  37. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  38. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  39. sage/algebras/lie_algebras/center_uea.py +767 -0
  40. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  41. sage/algebras/lie_algebras/examples.py +683 -0
  42. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  43. sage/algebras/lie_algebras/heisenberg.py +820 -0
  44. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  47. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  48. sage/algebras/lie_algebras/morphism.py +661 -0
  49. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  50. sage/algebras/lie_algebras/onsager.py +1324 -0
  51. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  52. sage/algebras/lie_algebras/quotient.py +462 -0
  53. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  54. sage/algebras/lie_algebras/representation.py +1040 -0
  55. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  56. sage/algebras/lie_algebras/subalgebra.py +967 -0
  57. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  58. sage/algebras/lie_algebras/verma_module.py +1630 -0
  59. sage/algebras/lie_algebras/virasoro.py +1186 -0
  60. sage/algebras/octonion_algebra.cpython-314-x86_64-linux-musl.so +0 -0
  61. sage/algebras/octonion_algebra.pxd +20 -0
  62. sage/algebras/octonion_algebra.pyx +987 -0
  63. sage/algebras/orlik_solomon.py +907 -0
  64. sage/algebras/orlik_terao.py +779 -0
  65. sage/algebras/steenrod/all.py +7 -0
  66. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  67. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  68. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  69. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  70. sage/algebras/weyl_algebra.py +1126 -0
  71. sage/all__sagemath_modules.py +62 -0
  72. sage/calculus/all__sagemath_modules.py +19 -0
  73. sage/calculus/expr.py +205 -0
  74. sage/calculus/integration.cpython-314-x86_64-linux-musl.so +0 -0
  75. sage/calculus/integration.pyx +698 -0
  76. sage/calculus/interpolation.cpython-314-x86_64-linux-musl.so +0 -0
  77. sage/calculus/interpolation.pxd +13 -0
  78. sage/calculus/interpolation.pyx +387 -0
  79. sage/calculus/interpolators.cpython-314-x86_64-linux-musl.so +0 -0
  80. sage/calculus/interpolators.pyx +326 -0
  81. sage/calculus/ode.cpython-314-x86_64-linux-musl.so +0 -0
  82. sage/calculus/ode.pxd +5 -0
  83. sage/calculus/ode.pyx +610 -0
  84. sage/calculus/riemann.cpython-314-x86_64-linux-musl.so +0 -0
  85. sage/calculus/riemann.pyx +1521 -0
  86. sage/calculus/test_sympy.py +201 -0
  87. sage/calculus/transforms/all.py +7 -0
  88. sage/calculus/transforms/dft.py +844 -0
  89. sage/calculus/transforms/dwt.cpython-314-x86_64-linux-musl.so +0 -0
  90. sage/calculus/transforms/dwt.pxd +7 -0
  91. sage/calculus/transforms/dwt.pyx +160 -0
  92. sage/calculus/transforms/fft.cpython-314-x86_64-linux-musl.so +0 -0
  93. sage/calculus/transforms/fft.pxd +12 -0
  94. sage/calculus/transforms/fft.pyx +487 -0
  95. sage/calculus/wester.py +662 -0
  96. sage/coding/abstract_code.py +1108 -0
  97. sage/coding/ag_code.py +868 -0
  98. sage/coding/ag_code_decoders.cpython-314-x86_64-linux-musl.so +0 -0
  99. sage/coding/ag_code_decoders.pyx +2639 -0
  100. sage/coding/all.py +15 -0
  101. sage/coding/bch_code.py +494 -0
  102. sage/coding/binary_code.cpython-314-x86_64-linux-musl.so +0 -0
  103. sage/coding/binary_code.pxd +124 -0
  104. sage/coding/binary_code.pyx +4139 -0
  105. sage/coding/bounds_catalog.py +43 -0
  106. sage/coding/channel.py +819 -0
  107. sage/coding/channels_catalog.py +29 -0
  108. sage/coding/code_bounds.py +755 -0
  109. sage/coding/code_constructions.py +804 -0
  110. sage/coding/codes_catalog.py +111 -0
  111. sage/coding/cyclic_code.py +1329 -0
  112. sage/coding/databases.py +316 -0
  113. sage/coding/decoder.py +373 -0
  114. sage/coding/decoders_catalog.py +88 -0
  115. sage/coding/delsarte_bounds.py +709 -0
  116. sage/coding/encoder.py +390 -0
  117. sage/coding/encoders_catalog.py +64 -0
  118. sage/coding/extended_code.py +468 -0
  119. sage/coding/gabidulin_code.py +1058 -0
  120. sage/coding/golay_code.py +404 -0
  121. sage/coding/goppa_code.py +441 -0
  122. sage/coding/grs_code.py +2371 -0
  123. sage/coding/guava.py +107 -0
  124. sage/coding/guruswami_sudan/all.py +1 -0
  125. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  126. sage/coding/guruswami_sudan/interpolation.py +409 -0
  127. sage/coding/guruswami_sudan/utils.py +176 -0
  128. sage/coding/hamming_code.py +176 -0
  129. sage/coding/information_set_decoder.py +1032 -0
  130. sage/coding/kasami_codes.cpython-314-x86_64-linux-musl.so +0 -0
  131. sage/coding/kasami_codes.pyx +351 -0
  132. sage/coding/linear_code.py +3067 -0
  133. sage/coding/linear_code_no_metric.py +1354 -0
  134. sage/coding/linear_rank_metric.py +961 -0
  135. sage/coding/parity_check_code.py +353 -0
  136. sage/coding/punctured_code.py +719 -0
  137. sage/coding/reed_muller_code.py +999 -0
  138. sage/coding/self_dual_codes.py +942 -0
  139. sage/coding/source_coding/all.py +2 -0
  140. sage/coding/source_coding/huffman.py +553 -0
  141. sage/coding/subfield_subcode.py +423 -0
  142. sage/coding/two_weight_db.py +399 -0
  143. sage/combinat/all__sagemath_modules.py +7 -0
  144. sage/combinat/cartesian_product.py +347 -0
  145. sage/combinat/family.py +11 -0
  146. sage/combinat/free_module.py +1977 -0
  147. sage/combinat/root_system/all.py +147 -0
  148. sage/combinat/root_system/ambient_space.py +527 -0
  149. sage/combinat/root_system/associahedron.py +471 -0
  150. sage/combinat/root_system/braid_move_calculator.py +143 -0
  151. sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-musl.so +0 -0
  152. sage/combinat/root_system/braid_orbit.pyx +144 -0
  153. sage/combinat/root_system/branching_rules.py +2301 -0
  154. sage/combinat/root_system/cartan_matrix.py +1245 -0
  155. sage/combinat/root_system/cartan_type.py +3069 -0
  156. sage/combinat/root_system/coxeter_group.py +162 -0
  157. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  158. sage/combinat/root_system/coxeter_type.py +681 -0
  159. sage/combinat/root_system/dynkin_diagram.py +900 -0
  160. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  161. sage/combinat/root_system/fundamental_group.py +795 -0
  162. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  163. sage/combinat/root_system/integrable_representations.py +1227 -0
  164. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  165. sage/combinat/root_system/pieri_factors.py +1147 -0
  166. sage/combinat/root_system/plot.py +1615 -0
  167. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  168. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  169. sage/combinat/root_system/root_space.py +487 -0
  170. sage/combinat/root_system/root_system.py +882 -0
  171. sage/combinat/root_system/type_A.py +348 -0
  172. sage/combinat/root_system/type_A_affine.py +227 -0
  173. sage/combinat/root_system/type_A_infinity.py +241 -0
  174. sage/combinat/root_system/type_B.py +347 -0
  175. sage/combinat/root_system/type_BC_affine.py +287 -0
  176. sage/combinat/root_system/type_B_affine.py +216 -0
  177. sage/combinat/root_system/type_C.py +317 -0
  178. sage/combinat/root_system/type_C_affine.py +188 -0
  179. sage/combinat/root_system/type_D.py +357 -0
  180. sage/combinat/root_system/type_D_affine.py +208 -0
  181. sage/combinat/root_system/type_E.py +641 -0
  182. sage/combinat/root_system/type_E_affine.py +231 -0
  183. sage/combinat/root_system/type_F.py +387 -0
  184. sage/combinat/root_system/type_F_affine.py +137 -0
  185. sage/combinat/root_system/type_G.py +293 -0
  186. sage/combinat/root_system/type_G_affine.py +132 -0
  187. sage/combinat/root_system/type_H.py +105 -0
  188. sage/combinat/root_system/type_I.py +110 -0
  189. sage/combinat/root_system/type_Q.py +150 -0
  190. sage/combinat/root_system/type_affine.py +509 -0
  191. sage/combinat/root_system/type_dual.py +704 -0
  192. sage/combinat/root_system/type_folded.py +301 -0
  193. sage/combinat/root_system/type_marked.py +748 -0
  194. sage/combinat/root_system/type_reducible.py +601 -0
  195. sage/combinat/root_system/type_relabel.py +730 -0
  196. sage/combinat/root_system/type_super_A.py +837 -0
  197. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  198. sage/combinat/root_system/weight_space.py +639 -0
  199. sage/combinat/root_system/weyl_characters.py +2238 -0
  200. sage/crypto/__init__.py +4 -0
  201. sage/crypto/all.py +28 -0
  202. sage/crypto/block_cipher/all.py +7 -0
  203. sage/crypto/block_cipher/des.py +1065 -0
  204. sage/crypto/block_cipher/miniaes.py +2171 -0
  205. sage/crypto/block_cipher/present.py +909 -0
  206. sage/crypto/block_cipher/sdes.py +1527 -0
  207. sage/crypto/boolean_function.cpython-314-x86_64-linux-musl.so +0 -0
  208. sage/crypto/boolean_function.pxd +10 -0
  209. sage/crypto/boolean_function.pyx +1487 -0
  210. sage/crypto/cipher.py +78 -0
  211. sage/crypto/classical.py +3668 -0
  212. sage/crypto/classical_cipher.py +569 -0
  213. sage/crypto/cryptosystem.py +387 -0
  214. sage/crypto/key_exchange/all.py +7 -0
  215. sage/crypto/key_exchange/catalog.py +24 -0
  216. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  217. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  218. sage/crypto/lattice.py +312 -0
  219. sage/crypto/lfsr.py +295 -0
  220. sage/crypto/lwe.py +840 -0
  221. sage/crypto/mq/__init__.py +4 -0
  222. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  223. sage/crypto/mq/rijndael_gf.py +2345 -0
  224. sage/crypto/mq/sbox.py +7 -0
  225. sage/crypto/mq/sr.py +3344 -0
  226. sage/crypto/public_key/all.py +5 -0
  227. sage/crypto/public_key/blum_goldwasser.py +776 -0
  228. sage/crypto/sbox.cpython-314-x86_64-linux-musl.so +0 -0
  229. sage/crypto/sbox.pyx +2090 -0
  230. sage/crypto/sboxes.py +2090 -0
  231. sage/crypto/stream.py +390 -0
  232. sage/crypto/stream_cipher.py +297 -0
  233. sage/crypto/util.py +519 -0
  234. sage/ext/all__sagemath_modules.py +1 -0
  235. sage/ext/interpreters/__init__.py +1 -0
  236. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  237. sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-musl.so +0 -0
  238. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  239. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  240. sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-musl.so +0 -0
  241. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  242. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  243. sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-musl.so +0 -0
  244. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  245. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  246. sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-musl.so +0 -0
  247. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  248. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  249. sage/geometry/all__sagemath_modules.py +5 -0
  250. sage/geometry/toric_lattice.py +1745 -0
  251. sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-musl.so +0 -0
  252. sage/geometry/toric_lattice_element.pyx +432 -0
  253. sage/groups/abelian_gps/abelian_group.py +1925 -0
  254. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  255. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  256. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  257. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  258. sage/groups/abelian_gps/element_base.py +341 -0
  259. sage/groups/abelian_gps/values.py +488 -0
  260. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  261. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  262. sage/groups/additive_abelian/all.py +4 -0
  263. sage/groups/additive_abelian/qmodnz.py +231 -0
  264. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  265. sage/groups/affine_gps/affine_group.py +535 -0
  266. sage/groups/affine_gps/all.py +1 -0
  267. sage/groups/affine_gps/catalog.py +17 -0
  268. sage/groups/affine_gps/euclidean_group.py +246 -0
  269. sage/groups/affine_gps/group_element.py +562 -0
  270. sage/groups/all__sagemath_modules.py +12 -0
  271. sage/groups/galois_group.py +479 -0
  272. sage/groups/matrix_gps/all.py +4 -0
  273. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  274. sage/groups/matrix_gps/catalog.py +26 -0
  275. sage/groups/matrix_gps/coxeter_group.py +927 -0
  276. sage/groups/matrix_gps/finitely_generated.py +487 -0
  277. sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-musl.so +0 -0
  278. sage/groups/matrix_gps/group_element.pxd +11 -0
  279. sage/groups/matrix_gps/group_element.pyx +431 -0
  280. sage/groups/matrix_gps/linear.py +440 -0
  281. sage/groups/matrix_gps/matrix_group.py +617 -0
  282. sage/groups/matrix_gps/named_group.py +296 -0
  283. sage/groups/matrix_gps/orthogonal.py +544 -0
  284. sage/groups/matrix_gps/symplectic.py +251 -0
  285. sage/groups/matrix_gps/unitary.py +436 -0
  286. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  287. sage/groups/misc_gps/argument_groups.py +1905 -0
  288. sage/groups/misc_gps/imaginary_groups.py +479 -0
  289. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-musl.so +0 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  293. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-musl.so +0 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  296. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  297. sage/homology/algebraic_topological_model.py +595 -0
  298. sage/homology/all.py +2 -0
  299. sage/homology/all__sagemath_modules.py +8 -0
  300. sage/homology/chain_complex.py +2148 -0
  301. sage/homology/chain_complex_homspace.py +165 -0
  302. sage/homology/chain_complex_morphism.py +629 -0
  303. sage/homology/chain_homotopy.py +604 -0
  304. sage/homology/chains.py +653 -0
  305. sage/homology/free_resolution.py +923 -0
  306. sage/homology/graded_resolution.py +567 -0
  307. sage/homology/hochschild_complex.py +756 -0
  308. sage/homology/homology_group.py +188 -0
  309. sage/homology/homology_morphism.py +422 -0
  310. sage/homology/homology_vector_space_with_basis.py +1454 -0
  311. sage/homology/koszul_complex.py +169 -0
  312. sage/homology/matrix_utils.py +205 -0
  313. sage/libs/all__sagemath_modules.py +1 -0
  314. sage/libs/gsl/__init__.py +1 -0
  315. sage/libs/gsl/airy.pxd +56 -0
  316. sage/libs/gsl/all.pxd +66 -0
  317. sage/libs/gsl/array.cpython-314-x86_64-linux-musl.so +0 -0
  318. sage/libs/gsl/array.pxd +5 -0
  319. sage/libs/gsl/array.pyx +102 -0
  320. sage/libs/gsl/bessel.pxd +208 -0
  321. sage/libs/gsl/blas.pxd +116 -0
  322. sage/libs/gsl/blas_types.pxd +34 -0
  323. sage/libs/gsl/block.pxd +52 -0
  324. sage/libs/gsl/chebyshev.pxd +37 -0
  325. sage/libs/gsl/clausen.pxd +12 -0
  326. sage/libs/gsl/combination.pxd +47 -0
  327. sage/libs/gsl/complex.pxd +151 -0
  328. sage/libs/gsl/coulomb.pxd +30 -0
  329. sage/libs/gsl/coupling.pxd +21 -0
  330. sage/libs/gsl/dawson.pxd +12 -0
  331. sage/libs/gsl/debye.pxd +24 -0
  332. sage/libs/gsl/dilog.pxd +14 -0
  333. sage/libs/gsl/eigen.pxd +46 -0
  334. sage/libs/gsl/elementary.pxd +12 -0
  335. sage/libs/gsl/ellint.pxd +48 -0
  336. sage/libs/gsl/elljac.pxd +8 -0
  337. sage/libs/gsl/erf.pxd +32 -0
  338. sage/libs/gsl/errno.pxd +26 -0
  339. sage/libs/gsl/exp.pxd +44 -0
  340. sage/libs/gsl/expint.pxd +44 -0
  341. sage/libs/gsl/fermi_dirac.pxd +44 -0
  342. sage/libs/gsl/fft.pxd +121 -0
  343. sage/libs/gsl/fit.pxd +50 -0
  344. sage/libs/gsl/gamma.pxd +94 -0
  345. sage/libs/gsl/gegenbauer.pxd +26 -0
  346. sage/libs/gsl/histogram.pxd +176 -0
  347. sage/libs/gsl/hyperg.pxd +52 -0
  348. sage/libs/gsl/integration.pxd +69 -0
  349. sage/libs/gsl/interp.pxd +109 -0
  350. sage/libs/gsl/laguerre.pxd +24 -0
  351. sage/libs/gsl/lambert.pxd +16 -0
  352. sage/libs/gsl/legendre.pxd +90 -0
  353. sage/libs/gsl/linalg.pxd +185 -0
  354. sage/libs/gsl/log.pxd +26 -0
  355. sage/libs/gsl/math.pxd +43 -0
  356. sage/libs/gsl/matrix.pxd +143 -0
  357. sage/libs/gsl/matrix_complex.pxd +130 -0
  358. sage/libs/gsl/min.pxd +67 -0
  359. sage/libs/gsl/monte.pxd +56 -0
  360. sage/libs/gsl/ntuple.pxd +32 -0
  361. sage/libs/gsl/odeiv.pxd +70 -0
  362. sage/libs/gsl/permutation.pxd +78 -0
  363. sage/libs/gsl/poly.pxd +40 -0
  364. sage/libs/gsl/pow_int.pxd +12 -0
  365. sage/libs/gsl/psi.pxd +28 -0
  366. sage/libs/gsl/qrng.pxd +29 -0
  367. sage/libs/gsl/random.pxd +257 -0
  368. sage/libs/gsl/rng.pxd +100 -0
  369. sage/libs/gsl/roots.pxd +72 -0
  370. sage/libs/gsl/sort.pxd +36 -0
  371. sage/libs/gsl/statistics.pxd +59 -0
  372. sage/libs/gsl/sum.pxd +55 -0
  373. sage/libs/gsl/synchrotron.pxd +16 -0
  374. sage/libs/gsl/transport.pxd +24 -0
  375. sage/libs/gsl/trig.pxd +58 -0
  376. sage/libs/gsl/types.pxd +137 -0
  377. sage/libs/gsl/vector.pxd +101 -0
  378. sage/libs/gsl/vector_complex.pxd +83 -0
  379. sage/libs/gsl/wavelet.pxd +49 -0
  380. sage/libs/gsl/zeta.pxd +28 -0
  381. sage/libs/mpc/__init__.pxd +114 -0
  382. sage/libs/mpc/types.pxd +28 -0
  383. sage/libs/mpfr/__init__.pxd +299 -0
  384. sage/libs/mpfr/types.pxd +26 -0
  385. sage/libs/mpmath/__init__.py +1 -0
  386. sage/libs/mpmath/all.py +27 -0
  387. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  388. sage/libs/mpmath/utils.cpython-314-x86_64-linux-musl.so +0 -0
  389. sage/libs/mpmath/utils.pxd +4 -0
  390. sage/libs/mpmath/utils.pyx +319 -0
  391. sage/matrix/action.cpython-314-x86_64-linux-musl.so +0 -0
  392. sage/matrix/action.pxd +26 -0
  393. sage/matrix/action.pyx +596 -0
  394. sage/matrix/all.py +9 -0
  395. sage/matrix/args.cpython-314-x86_64-linux-musl.so +0 -0
  396. sage/matrix/args.pxd +144 -0
  397. sage/matrix/args.pyx +1668 -0
  398. sage/matrix/benchmark.py +1258 -0
  399. sage/matrix/berlekamp_massey.py +95 -0
  400. sage/matrix/compute_J_ideal.py +926 -0
  401. sage/matrix/constructor.cpython-314-x86_64-linux-musl.so +0 -0
  402. sage/matrix/constructor.pyx +750 -0
  403. sage/matrix/docs.py +430 -0
  404. sage/matrix/echelon_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  405. sage/matrix/echelon_matrix.pyx +155 -0
  406. sage/matrix/matrix.pxd +2 -0
  407. sage/matrix/matrix0.cpython-314-x86_64-linux-musl.so +0 -0
  408. sage/matrix/matrix0.pxd +68 -0
  409. sage/matrix/matrix0.pyx +6324 -0
  410. sage/matrix/matrix1.cpython-314-x86_64-linux-musl.so +0 -0
  411. sage/matrix/matrix1.pxd +8 -0
  412. sage/matrix/matrix1.pyx +2851 -0
  413. sage/matrix/matrix2.cpython-314-x86_64-linux-musl.so +0 -0
  414. sage/matrix/matrix2.pxd +25 -0
  415. sage/matrix/matrix2.pyx +20181 -0
  416. sage/matrix/matrix_cdv.cpython-314-x86_64-linux-musl.so +0 -0
  417. sage/matrix/matrix_cdv.pxd +4 -0
  418. sage/matrix/matrix_cdv.pyx +93 -0
  419. sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  420. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  421. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  422. sage/matrix/matrix_dense.cpython-314-x86_64-linux-musl.so +0 -0
  423. sage/matrix/matrix_dense.pxd +5 -0
  424. sage/matrix/matrix_dense.pyx +343 -0
  425. sage/matrix/matrix_domain_dense.pxd +5 -0
  426. sage/matrix/matrix_domain_sparse.pxd +5 -0
  427. sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  428. sage/matrix/matrix_double_dense.pxd +7 -0
  429. sage/matrix/matrix_double_dense.pyx +3906 -0
  430. sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  431. sage/matrix/matrix_double_sparse.pxd +6 -0
  432. sage/matrix/matrix_double_sparse.pyx +248 -0
  433. sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-musl.so +0 -0
  434. sage/matrix/matrix_generic_dense.pxd +7 -0
  435. sage/matrix/matrix_generic_dense.pyx +354 -0
  436. sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  437. sage/matrix/matrix_generic_sparse.pxd +7 -0
  438. sage/matrix/matrix_generic_sparse.pyx +461 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  441. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  442. sage/matrix/matrix_misc.py +313 -0
  443. sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
  444. sage/matrix/matrix_numpy_dense.pxd +14 -0
  445. sage/matrix/matrix_numpy_dense.pyx +450 -0
  446. sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  447. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  448. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  449. sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  450. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  451. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  452. sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  453. sage/matrix/matrix_real_double_dense.pxd +7 -0
  454. sage/matrix/matrix_real_double_dense.pyx +122 -0
  455. sage/matrix/matrix_space.py +2848 -0
  456. sage/matrix/matrix_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  457. sage/matrix/matrix_sparse.pxd +5 -0
  458. sage/matrix/matrix_sparse.pyx +1222 -0
  459. sage/matrix/matrix_window.cpython-314-x86_64-linux-musl.so +0 -0
  460. sage/matrix/matrix_window.pxd +37 -0
  461. sage/matrix/matrix_window.pyx +242 -0
  462. sage/matrix/misc_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  463. sage/matrix/misc_mpfr.pyx +80 -0
  464. sage/matrix/operation_table.py +1182 -0
  465. sage/matrix/special.py +3666 -0
  466. sage/matrix/strassen.cpython-314-x86_64-linux-musl.so +0 -0
  467. sage/matrix/strassen.pyx +851 -0
  468. sage/matrix/symplectic_basis.py +541 -0
  469. sage/matrix/template.pxd +6 -0
  470. sage/matrix/tests.py +71 -0
  471. sage/matroids/advanced.py +77 -0
  472. sage/matroids/all.py +13 -0
  473. sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  474. sage/matroids/basis_exchange_matroid.pxd +96 -0
  475. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  476. sage/matroids/basis_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  477. sage/matroids/basis_matroid.pxd +45 -0
  478. sage/matroids/basis_matroid.pyx +1217 -0
  479. sage/matroids/catalog.py +44 -0
  480. sage/matroids/chow_ring.py +473 -0
  481. sage/matroids/chow_ring_ideal.py +849 -0
  482. sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  483. sage/matroids/circuit_closures_matroid.pxd +16 -0
  484. sage/matroids/circuit_closures_matroid.pyx +559 -0
  485. sage/matroids/circuits_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  486. sage/matroids/circuits_matroid.pxd +38 -0
  487. sage/matroids/circuits_matroid.pyx +947 -0
  488. sage/matroids/constructor.py +1086 -0
  489. sage/matroids/database_collections.py +365 -0
  490. sage/matroids/database_matroids.py +5338 -0
  491. sage/matroids/dual_matroid.py +583 -0
  492. sage/matroids/extension.cpython-314-x86_64-linux-musl.so +0 -0
  493. sage/matroids/extension.pxd +34 -0
  494. sage/matroids/extension.pyx +519 -0
  495. sage/matroids/flats_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  496. sage/matroids/flats_matroid.pxd +28 -0
  497. sage/matroids/flats_matroid.pyx +715 -0
  498. sage/matroids/gammoid.py +600 -0
  499. sage/matroids/graphic_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  500. sage/matroids/graphic_matroid.pxd +39 -0
  501. sage/matroids/graphic_matroid.pyx +2024 -0
  502. sage/matroids/lean_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  503. sage/matroids/lean_matrix.pxd +126 -0
  504. sage/matroids/lean_matrix.pyx +3667 -0
  505. sage/matroids/linear_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  506. sage/matroids/linear_matroid.pxd +180 -0
  507. sage/matroids/linear_matroid.pyx +6649 -0
  508. sage/matroids/matroid.cpython-314-x86_64-linux-musl.so +0 -0
  509. sage/matroids/matroid.pxd +243 -0
  510. sage/matroids/matroid.pyx +8759 -0
  511. sage/matroids/matroids_catalog.py +190 -0
  512. sage/matroids/matroids_plot_helpers.py +890 -0
  513. sage/matroids/minor_matroid.py +480 -0
  514. sage/matroids/minorfix.h +9 -0
  515. sage/matroids/named_matroids.py +5 -0
  516. sage/matroids/rank_matroid.py +268 -0
  517. sage/matroids/set_system.cpython-314-x86_64-linux-musl.so +0 -0
  518. sage/matroids/set_system.pxd +38 -0
  519. sage/matroids/set_system.pyx +800 -0
  520. sage/matroids/transversal_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  521. sage/matroids/transversal_matroid.pxd +14 -0
  522. sage/matroids/transversal_matroid.pyx +893 -0
  523. sage/matroids/union_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  524. sage/matroids/union_matroid.pxd +20 -0
  525. sage/matroids/union_matroid.pyx +331 -0
  526. sage/matroids/unpickling.cpython-314-x86_64-linux-musl.so +0 -0
  527. sage/matroids/unpickling.pyx +843 -0
  528. sage/matroids/utilities.py +809 -0
  529. sage/misc/all__sagemath_modules.py +20 -0
  530. sage/misc/c3.cpython-314-x86_64-linux-musl.so +0 -0
  531. sage/misc/c3.pyx +238 -0
  532. sage/misc/compat.py +87 -0
  533. sage/misc/element_with_label.py +173 -0
  534. sage/misc/func_persist.py +79 -0
  535. sage/misc/pickle_old.cpython-314-x86_64-linux-musl.so +0 -0
  536. sage/misc/pickle_old.pyx +19 -0
  537. sage/misc/proof.py +7 -0
  538. sage/misc/replace_dot_all.py +472 -0
  539. sage/misc/sagedoc_conf.py +168 -0
  540. sage/misc/sphinxify.py +167 -0
  541. sage/misc/test_class_pickling.py +85 -0
  542. sage/modules/all.py +42 -0
  543. sage/modules/complex_double_vector.py +25 -0
  544. sage/modules/diamond_cutting.py +380 -0
  545. sage/modules/fg_pid/all.py +1 -0
  546. sage/modules/fg_pid/fgp_element.py +456 -0
  547. sage/modules/fg_pid/fgp_module.py +2091 -0
  548. sage/modules/fg_pid/fgp_morphism.py +550 -0
  549. sage/modules/filtered_vector_space.py +1271 -0
  550. sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-musl.so +0 -0
  551. sage/modules/finite_submodule_iter.pxd +27 -0
  552. sage/modules/finite_submodule_iter.pyx +452 -0
  553. sage/modules/fp_graded/all.py +1 -0
  554. sage/modules/fp_graded/element.py +346 -0
  555. sage/modules/fp_graded/free_element.py +298 -0
  556. sage/modules/fp_graded/free_homspace.py +53 -0
  557. sage/modules/fp_graded/free_module.py +1060 -0
  558. sage/modules/fp_graded/free_morphism.py +217 -0
  559. sage/modules/fp_graded/homspace.py +563 -0
  560. sage/modules/fp_graded/module.py +1340 -0
  561. sage/modules/fp_graded/morphism.py +1990 -0
  562. sage/modules/fp_graded/steenrod/all.py +1 -0
  563. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  564. sage/modules/fp_graded/steenrod/module.py +477 -0
  565. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  566. sage/modules/fp_graded/steenrod/profile.py +241 -0
  567. sage/modules/free_module.py +8447 -0
  568. sage/modules/free_module_element.cpython-314-x86_64-linux-musl.so +0 -0
  569. sage/modules/free_module_element.pxd +22 -0
  570. sage/modules/free_module_element.pyx +5445 -0
  571. sage/modules/free_module_homspace.py +369 -0
  572. sage/modules/free_module_integer.py +896 -0
  573. sage/modules/free_module_morphism.py +823 -0
  574. sage/modules/free_module_pseudohomspace.py +352 -0
  575. sage/modules/free_module_pseudomorphism.py +578 -0
  576. sage/modules/free_quadratic_module.py +1706 -0
  577. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  578. sage/modules/matrix_morphism.py +1745 -0
  579. sage/modules/misc.py +103 -0
  580. sage/modules/module_functors.py +192 -0
  581. sage/modules/multi_filtered_vector_space.py +719 -0
  582. sage/modules/ore_module.py +2208 -0
  583. sage/modules/ore_module_element.py +178 -0
  584. sage/modules/ore_module_homspace.py +147 -0
  585. sage/modules/ore_module_morphism.py +968 -0
  586. sage/modules/quotient_module.py +699 -0
  587. sage/modules/real_double_vector.py +22 -0
  588. sage/modules/submodule.py +255 -0
  589. sage/modules/tensor_operations.py +567 -0
  590. sage/modules/torsion_quadratic_module.py +1352 -0
  591. sage/modules/tutorial_free_modules.py +248 -0
  592. sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  593. sage/modules/vector_complex_double_dense.pxd +6 -0
  594. sage/modules/vector_complex_double_dense.pyx +117 -0
  595. sage/modules/vector_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  596. sage/modules/vector_double_dense.pxd +6 -0
  597. sage/modules/vector_double_dense.pyx +604 -0
  598. sage/modules/vector_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  599. sage/modules/vector_integer_dense.pxd +15 -0
  600. sage/modules/vector_integer_dense.pyx +361 -0
  601. sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  602. sage/modules/vector_integer_sparse.pxd +29 -0
  603. sage/modules/vector_integer_sparse.pyx +406 -0
  604. sage/modules/vector_modn_dense.cpython-314-x86_64-linux-musl.so +0 -0
  605. sage/modules/vector_modn_dense.pxd +12 -0
  606. sage/modules/vector_modn_dense.pyx +394 -0
  607. sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  608. sage/modules/vector_modn_sparse.pxd +21 -0
  609. sage/modules/vector_modn_sparse.pyx +298 -0
  610. sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
  611. sage/modules/vector_numpy_dense.pxd +15 -0
  612. sage/modules/vector_numpy_dense.pyx +304 -0
  613. sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  614. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  615. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  616. sage/modules/vector_rational_dense.cpython-314-x86_64-linux-musl.so +0 -0
  617. sage/modules/vector_rational_dense.pxd +15 -0
  618. sage/modules/vector_rational_dense.pyx +387 -0
  619. sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  620. sage/modules/vector_rational_sparse.pxd +30 -0
  621. sage/modules/vector_rational_sparse.pyx +413 -0
  622. sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  623. sage/modules/vector_real_double_dense.pxd +6 -0
  624. sage/modules/vector_real_double_dense.pyx +126 -0
  625. sage/modules/vector_space_homspace.py +430 -0
  626. sage/modules/vector_space_morphism.py +989 -0
  627. sage/modules/with_basis/all.py +15 -0
  628. sage/modules/with_basis/cell_module.py +494 -0
  629. sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-musl.so +0 -0
  630. sage/modules/with_basis/indexed_element.pxd +13 -0
  631. sage/modules/with_basis/indexed_element.pyx +1058 -0
  632. sage/modules/with_basis/invariant.py +1075 -0
  633. sage/modules/with_basis/morphism.py +1636 -0
  634. sage/modules/with_basis/representation.py +2939 -0
  635. sage/modules/with_basis/subquotient.py +685 -0
  636. sage/numerical/all__sagemath_modules.py +6 -0
  637. sage/numerical/gauss_legendre.cpython-314-x86_64-linux-musl.so +0 -0
  638. sage/numerical/gauss_legendre.pyx +381 -0
  639. sage/numerical/optimize.py +910 -0
  640. sage/probability/all.py +10 -0
  641. sage/probability/probability_distribution.cpython-314-x86_64-linux-musl.so +0 -0
  642. sage/probability/probability_distribution.pyx +1242 -0
  643. sage/probability/random_variable.py +411 -0
  644. sage/quadratic_forms/all.py +4 -0
  645. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  646. sage/quadratic_forms/binary_qf.py +2042 -0
  647. sage/quadratic_forms/bqf_class_group.py +748 -0
  648. sage/quadratic_forms/constructions.py +93 -0
  649. sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-musl.so +0 -0
  650. sage/quadratic_forms/count_local_2.pyx +365 -0
  651. sage/quadratic_forms/extras.py +195 -0
  652. sage/quadratic_forms/quadratic_form.py +1753 -0
  653. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  654. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-musl.so +0 -0
  656. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  657. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  658. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  659. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  660. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  661. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  662. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  663. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  664. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  665. sage/quadratic_forms/random_quadraticform.py +209 -0
  666. sage/quadratic_forms/ternary.cpython-314-x86_64-linux-musl.so +0 -0
  667. sage/quadratic_forms/ternary.pyx +1154 -0
  668. sage/quadratic_forms/ternary_qf.py +2027 -0
  669. sage/rings/all__sagemath_modules.py +28 -0
  670. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  671. sage/rings/asymptotic/misc.py +1252 -0
  672. sage/rings/cc.py +4 -0
  673. sage/rings/cfinite_sequence.py +1306 -0
  674. sage/rings/complex_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  675. sage/rings/complex_conversion.pxd +8 -0
  676. sage/rings/complex_conversion.pyx +23 -0
  677. sage/rings/complex_double.cpython-314-x86_64-linux-musl.so +0 -0
  678. sage/rings/complex_double.pxd +21 -0
  679. sage/rings/complex_double.pyx +2654 -0
  680. sage/rings/complex_mpc.cpython-314-x86_64-linux-musl.so +0 -0
  681. sage/rings/complex_mpc.pxd +21 -0
  682. sage/rings/complex_mpc.pyx +2576 -0
  683. sage/rings/complex_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  684. sage/rings/complex_mpfr.pxd +18 -0
  685. sage/rings/complex_mpfr.pyx +3602 -0
  686. sage/rings/derivation.py +2334 -0
  687. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  688. sage/rings/finite_rings/maps_finite_field.py +191 -0
  689. sage/rings/function_field/all__sagemath_modules.py +8 -0
  690. sage/rings/function_field/derivations.py +102 -0
  691. sage/rings/function_field/derivations_rational.py +132 -0
  692. sage/rings/function_field/differential.py +853 -0
  693. sage/rings/function_field/divisor.py +1107 -0
  694. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  695. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  696. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  697. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  698. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  699. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  700. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  701. sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-musl.so +0 -0
  702. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  703. sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-musl.so +0 -0
  704. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  705. sage/rings/invariants/all.py +4 -0
  706. sage/rings/invariants/invariant_theory.py +4597 -0
  707. sage/rings/invariants/reconstruction.py +395 -0
  708. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  709. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-musl.so +0 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  712. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  713. sage/rings/polynomial/ore_function_element.py +952 -0
  714. sage/rings/polynomial/ore_function_field.py +1028 -0
  715. sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
  716. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  717. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  718. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-musl.so +0 -0
  720. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  721. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  722. sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
  723. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  724. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-musl.so +0 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  727. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-musl.so +0 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  730. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  731. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  732. sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-musl.so +0 -0
  733. sage/rings/real_double_element_gsl.pxd +8 -0
  734. sage/rings/real_double_element_gsl.pyx +794 -0
  735. sage/rings/real_field.py +58 -0
  736. sage/rings/real_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  737. sage/rings/real_mpfr.pxd +29 -0
  738. sage/rings/real_mpfr.pyx +6122 -0
  739. sage/rings/ring_extension.cpython-314-x86_64-linux-musl.so +0 -0
  740. sage/rings/ring_extension.pxd +42 -0
  741. sage/rings/ring_extension.pyx +2779 -0
  742. sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  743. sage/rings/ring_extension_conversion.pxd +16 -0
  744. sage/rings/ring_extension_conversion.pyx +462 -0
  745. sage/rings/ring_extension_element.cpython-314-x86_64-linux-musl.so +0 -0
  746. sage/rings/ring_extension_element.pxd +21 -0
  747. sage/rings/ring_extension_element.pyx +1635 -0
  748. sage/rings/ring_extension_homset.py +64 -0
  749. sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-musl.so +0 -0
  750. sage/rings/ring_extension_morphism.pxd +35 -0
  751. sage/rings/ring_extension_morphism.pyx +920 -0
  752. sage/schemes/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/all__sagemath_modules.py +1 -0
  754. sage/schemes/projective/coherent_sheaf.py +300 -0
  755. sage/schemes/projective/cohomology.py +510 -0
  756. sage/stats/all.py +15 -0
  757. sage/stats/basic_stats.py +489 -0
  758. sage/stats/distributions/all.py +7 -0
  759. sage/stats/distributions/catalog.py +34 -0
  760. sage/stats/distributions/dgs.h +50 -0
  761. sage/stats/distributions/dgs.pxd +111 -0
  762. sage/stats/distributions/dgs_bern.h +400 -0
  763. sage/stats/distributions/dgs_gauss.h +614 -0
  764. sage/stats/distributions/dgs_misc.h +104 -0
  765. sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-musl.so +0 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  767. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  768. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  769. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  770. sage/stats/hmm/all.py +15 -0
  771. sage/stats/hmm/chmm.cpython-314-x86_64-linux-musl.so +0 -0
  772. sage/stats/hmm/chmm.pyx +1595 -0
  773. sage/stats/hmm/distributions.cpython-314-x86_64-linux-musl.so +0 -0
  774. sage/stats/hmm/distributions.pxd +29 -0
  775. sage/stats/hmm/distributions.pyx +531 -0
  776. sage/stats/hmm/hmm.cpython-314-x86_64-linux-musl.so +0 -0
  777. sage/stats/hmm/hmm.pxd +17 -0
  778. sage/stats/hmm/hmm.pyx +1388 -0
  779. sage/stats/hmm/util.cpython-314-x86_64-linux-musl.so +0 -0
  780. sage/stats/hmm/util.pxd +7 -0
  781. sage/stats/hmm/util.pyx +165 -0
  782. sage/stats/intlist.cpython-314-x86_64-linux-musl.so +0 -0
  783. sage/stats/intlist.pxd +14 -0
  784. sage/stats/intlist.pyx +588 -0
  785. sage/stats/r.py +49 -0
  786. sage/stats/time_series.cpython-314-x86_64-linux-musl.so +0 -0
  787. sage/stats/time_series.pxd +6 -0
  788. sage/stats/time_series.pyx +2546 -0
  789. sage/tensor/all.py +2 -0
  790. sage/tensor/modules/all.py +8 -0
  791. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  792. sage/tensor/modules/comp.py +5598 -0
  793. sage/tensor/modules/ext_pow_free_module.py +824 -0
  794. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  795. sage/tensor/modules/format_utilities.py +333 -0
  796. sage/tensor/modules/free_module_alt_form.py +858 -0
  797. sage/tensor/modules/free_module_automorphism.py +1207 -0
  798. sage/tensor/modules/free_module_basis.py +1074 -0
  799. sage/tensor/modules/free_module_element.py +284 -0
  800. sage/tensor/modules/free_module_homset.py +652 -0
  801. sage/tensor/modules/free_module_linear_group.py +564 -0
  802. sage/tensor/modules/free_module_morphism.py +1581 -0
  803. sage/tensor/modules/free_module_tensor.py +3289 -0
  804. sage/tensor/modules/reflexive_module.py +386 -0
  805. sage/tensor/modules/tensor_free_module.py +780 -0
  806. sage/tensor/modules/tensor_free_submodule.py +538 -0
  807. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  808. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,920 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ r"""
3
+ Morphisms between extension of rings
4
+
5
+ AUTHOR:
6
+
7
+ - Xavier Caruso (2019)
8
+ """
9
+
10
+ #############################################################################
11
+ # Copyright (C) 2019 Xavier Caruso <xavier.caruso@normalesup.org>
12
+ #
13
+ # This program is free software: you can redistribute it and/or modify
14
+ # it under the terms of the GNU General Public License as published by
15
+ # the Free Software Foundation, either version 2 of the License, or
16
+ # (at your option) any later version.
17
+ # http://www.gnu.org/licenses/
18
+ #****************************************************************************
19
+
20
+ from sage.misc.cachefunc import cached_method
21
+ from sage.structure.richcmp import op_EQ, op_NE
22
+
23
+ from sage.structure.element cimport Element
24
+ from sage.categories.map import Map
25
+ from sage.structure.parent cimport Parent
26
+ from sage.rings.morphism cimport RingMap
27
+ from sage.rings.ring_extension cimport RingExtension_generic, RingExtensionWithBasis
28
+ from sage.rings.ring_extension_element cimport RingExtensionElement
29
+ from sage.rings.ring_extension_conversion cimport backend_parent, backend_element, backend_morphism
30
+
31
+
32
+ # I don't trust the operator ==
33
+ cdef are_equal_morphisms(f, g):
34
+ r"""
35
+ Return ``True`` if ``f`` and ``g`` coincide on the
36
+ generators of the domain, ``False`` otherwise.
37
+
38
+ INPUT:
39
+
40
+ - ``f`` -- a ring homomorphism or ``None``; if ``None``,
41
+ we consider that ``f`` is a coercion map
42
+
43
+ - ``g`` -- a ring homomorphism or ``None``
44
+
45
+ TESTS::
46
+
47
+ sage: S.<x> = QQ[]
48
+ sage: T.<y> = S[]
49
+ sage: TT = T.over(QQ)
50
+ sage: H = End(TT)
51
+
52
+ sage: cc = S.hom([-x])
53
+ sage: f = T.hom([x^2 + y^2], base_map=cc)
54
+ sage: g = T.hom([x^2 + y^2])
55
+
56
+ sage: H(f) == H(g) # indirect doctest
57
+ False
58
+ sage: H(f^2) == H(g^2) # indirect doctest
59
+ True
60
+ """
61
+ cdef Parent b
62
+ cdef tuple gens
63
+ if f is None and g is None:
64
+ return True
65
+ if f is None:
66
+ f, g = g, f
67
+ gens = tuple()
68
+ b = f.domain()
69
+ while b is not b._base:
70
+ gens += b.gens()
71
+ b = b._base
72
+ if g is None:
73
+ for x in gens:
74
+ if f(x) != x: return False
75
+ else:
76
+ for x in gens:
77
+ if f(x) != g(x): return False
78
+ return True
79
+
80
+
81
+ cdef class RingExtensionHomomorphism(RingMap):
82
+ r"""
83
+ A class for ring homomorphisms between extensions.
84
+
85
+ TESTS::
86
+
87
+ sage: # needs sage.rings.finite_rings
88
+ sage: K.<a> = GF(5^2).over()
89
+ sage: L.<b> = GF(5^4).over(K)
90
+ sage: phi = L.hom([b^5, a^5]); phi
91
+ Ring endomorphism of Field in b
92
+ with defining polynomial x^2 + (3 - a)*x + a over its base
93
+ Defn: b |--> (2 + a) + 2*b
94
+ with map on base ring:
95
+ a |--> 1 - a
96
+ sage: type(phi)
97
+ <class 'sage.rings.ring_extension_morphism.RingExtensionHomomorphism'>
98
+ sage: TestSuite(phi).run()
99
+ """
100
+ def __init__(self, parent, defn, base_map=None, check=True):
101
+ r"""
102
+ Initialize this morphism.
103
+
104
+ INPUT:
105
+
106
+ - ``defn`` -- the definition of the morphism (either a map or images of generators)
107
+
108
+ - ``base_map`` -- a ring homomorphism or ``None`` (default: ``None``);
109
+ the action of this morphism on one of the bases of the domain;
110
+ if ``None``, a coercion map is used
111
+
112
+ - ``check`` -- boolean (default: ``True``); whether to check if
113
+ the given data define a valid homomorphism
114
+
115
+ TESTS::
116
+
117
+ sage: S.<x> = QQ[]
118
+ sage: T.<x,y> = QQ[]
119
+ sage: f = T.hom([x^2, y^2]); f
120
+ Ring endomorphism of Multivariate Polynomial Ring in x, y over Rational Field
121
+ Defn: x |--> x^2
122
+ y |--> y^2
123
+
124
+ sage: TT = T.over(QQ)
125
+ sage: End(TT)(f)
126
+ Ring endomorphism of Multivariate Polynomial Ring in x, y over Rational Field over its base
127
+ Defn: x |--> x^2
128
+ y |--> y^2
129
+
130
+ sage: TT = T.over(S)
131
+ sage: End(TT)(f)
132
+ Ring endomorphism of Multivariate Polynomial Ring in x, y over Rational Field over its base
133
+ Defn: y |--> y^2
134
+ with map on base ring:
135
+ x |--> x^2
136
+ """
137
+ RingMap.__init__(self, parent)
138
+ domain = self.domain()
139
+ backend_domain = backend_parent(domain)
140
+ codomain = self.codomain()
141
+ backend_codomain = backend_parent(codomain)
142
+ # We construct the backend morphism
143
+ if isinstance(defn, Map):
144
+ if base_map is not None:
145
+ raise ValueError("base_map cannot be set when passing in the backend morphism")
146
+ backend = backend_morphism(defn)
147
+ if backend.domain() is not backend_domain:
148
+ raise TypeError("the domain of the backend morphism is not correct")
149
+ if backend.codomain() is not backend_codomain:
150
+ raise TypeError("the codomain of the backend morphism is not correct")
151
+ self._backend = backend
152
+ self._im_gens = None
153
+ self._base_map_construction = False
154
+ elif isinstance(defn, (list, tuple)):
155
+ # We figure out what is the base
156
+ if base_map is not None:
157
+ base = base_map.domain()
158
+ gens = domain.gens(base)
159
+ else:
160
+ base = domain
161
+ gens = tuple()
162
+ while True:
163
+ if len(gens) == len(defn):
164
+ break
165
+ if len(gens) > len(defn) or base is base.base_ring():
166
+ raise ValueError("the number of images does not match the number of generators")
167
+ gens += base.gens()
168
+ base = base.base_ring()
169
+ # We construct the backend morphism
170
+ im_gens = [ codomain(x) for x in defn ]
171
+ backend_bases = [ backend_domain ]
172
+ b = backend_domain.base_ring()
173
+ while b is not b.base_ring():
174
+ backend_bases.append(b)
175
+ b = b.base_ring()
176
+ backend_bases.reverse()
177
+ current_morphism = None
178
+ for current_domain in backend_bases:
179
+ current_im_gens = [ ]
180
+ for x in current_domain.gens():
181
+ pol = domain(backend_domain(x)).polynomial(base)
182
+ if base_map is not None:
183
+ pol = pol.map_coefficients(base_map)
184
+ y = pol(im_gens)
185
+ current_im_gens.append(backend_element(y))
186
+ current_morphism = current_domain.hom(current_im_gens, base_map=current_morphism, check=check)
187
+ # We check that everything went well
188
+ if check:
189
+ for i in range(len(gens)):
190
+ x = backend_element(domain(gens[i]))
191
+ y = backend_element(im_gens[i])
192
+ if current_morphism(x) != y:
193
+ raise ValueError("images do not define a valid homomorphism")
194
+ coercion_morphism = backend_morphism(domain.defining_morphism(base))
195
+ if base_map is None:
196
+ backend_base_map = coercion_morphism
197
+ else:
198
+ backend_base_map = backend_morphism(base_map)
199
+ restriction_current_morphism = current_morphism * coercion_morphism
200
+ if not are_equal_morphisms(restriction_current_morphism, backend_base_map):
201
+ raise ValueError("images do not define a valid homomorphism")
202
+ self._backend = current_morphism
203
+ self._im_gens = im_gens[:domain.ngens()]
204
+ if base is domain.base_ring():
205
+ self._base_map_construction = base_map
206
+ else:
207
+ self._base_map_construction = {
208
+ 'im_gens': defn[domain.ngens():],
209
+ 'base_map': base_map,
210
+ 'check': False
211
+ }
212
+ else:
213
+ raise TypeError
214
+
215
+ def _repr_type(self):
216
+ r"""
217
+ Return a string that describes the type of this morphism.
218
+
219
+ EXAMPLES::
220
+
221
+ sage: K.<a> = GF(5^2).over() # over GF(5) # needs sage.rings.finite_rings
222
+ sage: f = K.hom([a^5]); f # needs sage.rings.finite_rings
223
+ Ring endomorphism of Field in a with defining polynomial x^2 + 4*x + 2 over its base
224
+ Defn: a |--> 1 - a
225
+
226
+ sage: f._repr_type() # needs sage.rings.finite_rings
227
+ 'Ring'
228
+ """
229
+ return "Ring"
230
+
231
+ cpdef Element _call_(self, x):
232
+ r"""
233
+ Return the image of ``x`` under this morphism.
234
+
235
+ INPUT:
236
+
237
+ - ``x`` -- an element in the domain of this morphism
238
+
239
+ EXAMPLES::
240
+
241
+ sage: # needs sage.rings.number_field
242
+ sage: x = polygen(QQ, 'x')
243
+ sage: A.<sqrt2> = QQ.extension(x^2 - 2)
244
+ sage: K.<sqrt2> = A.over()
245
+ sage: f = K.hom([-sqrt2]); f
246
+ Ring endomorphism of Field in sqrt2 with defining polynomial x^2 - 2 over its base
247
+ Defn: sqrt2 |--> -sqrt2
248
+ sage: f(sqrt2)
249
+ -sqrt2
250
+
251
+ TESTS::
252
+
253
+ sage: a = QQ.random_element()
254
+ sage: b = QQ.random_element()
255
+ sage: f(a + b*sqrt2) == a - b*sqrt2 # needs sage.rings.number_field
256
+ True
257
+ """
258
+ y = self._backend(backend_element(x))
259
+ if isinstance(self.codomain(), RingExtension_generic):
260
+ y = self._codomain(y)
261
+ return y
262
+
263
+ @cached_method
264
+ def base_map(self):
265
+ r"""
266
+ Return the base map of this morphism
267
+ or just ``None`` if the base map is a coercion map.
268
+
269
+ EXAMPLES::
270
+
271
+ sage: F = GF(5)
272
+ sage: K.<a> = GF(5^2).over(F) # needs sage.rings.finite_rings
273
+ sage: L.<b> = GF(5^6).over(K) # needs sage.rings.finite_rings
274
+
275
+ We define the absolute Frobenius of L::
276
+
277
+ sage: FrobL = L.hom([b^5, a^5]); FrobL # needs sage.rings.finite_rings
278
+ Ring endomorphism of
279
+ Field in b with defining polynomial x^3 + (2 + 2*a)*x - a over its base
280
+ Defn: b |--> (-1 + a) + (1 + 2*a)*b + a*b^2
281
+ with map on base ring:
282
+ a |--> 1 - a
283
+ sage: FrobL.base_map() # needs sage.rings.finite_rings
284
+ Ring morphism:
285
+ From: Field in a with defining polynomial x^2 + 4*x + 2 over its base
286
+ To: Field in b with defining polynomial x^3 + (2 + 2*a)*x - a over its base
287
+ Defn: a |--> 1 - a
288
+
289
+ The square of ``FrobL`` acts trivially on K; in other words, it has
290
+ a trivial base map::
291
+
292
+ sage: phi = FrobL^2; phi # needs sage.rings.finite_rings
293
+ Ring endomorphism of
294
+ Field in b with defining polynomial x^3 + (2 + 2*a)*x - a over its base
295
+ Defn: b |--> 2 + 2*a*b + (2 - a)*b^2
296
+ sage: phi.base_map() # needs sage.rings.finite_rings
297
+ """
298
+ domain = self.domain()
299
+ codomain = self.codomain()
300
+ base = domain.base_ring()
301
+ if base is base.base_ring():
302
+ return None
303
+ base_map = self._base_map_construction
304
+ if base_map is False:
305
+ if base is domain:
306
+ base_map = None
307
+ else:
308
+ base_map = self * domain.coerce_map_from(base)
309
+ elif isinstance(base_map, dict):
310
+ base_map = base.hom(**self._base_map_construction)
311
+ if base_map is None:
312
+ return None
313
+ if (codomain.has_coerce_map_from(base) and
314
+ are_equal_morphisms(backend_morphism(base_map),
315
+ backend_morphism(codomain.coerce_map_from(base)))):
316
+ return None
317
+ if base_map.codomain() is not self.codomain():
318
+ base_map = base_map.extend_codomain(self.codomain())
319
+ return base_map
320
+
321
+ cpdef _richcmp_(self, other, int op):
322
+ r"""
323
+ Compare this element with ``other`` according to
324
+ the rich comparison operator ``op``.
325
+
326
+ INPUT:
327
+
328
+ - ``other`` -- a morphism with the same codomain and codomain
329
+
330
+ - ``op`` -- the comparison operator
331
+
332
+ TESTS::
333
+
334
+ sage: # needs sage.rings.finite_rings
335
+ sage: K.<a> = GF(5^2).over() # over GF(5)
336
+ sage: L.<b> = GF(5^6).over(K)
337
+ sage: FrobK = K.hom([a^5])
338
+ sage: FrobL = L.hom([b^5], base_map=FrobK)
339
+ sage: FrobK^2 == End(K).identity()
340
+ True
341
+ sage: FrobL^6 == End(L).identity()
342
+ True
343
+ """
344
+ eq = are_equal_morphisms(self._backend, backend_morphism(other))
345
+ if op == op_EQ:
346
+ return eq
347
+ if op == op_NE:
348
+ return not eq
349
+ return NotImplemented
350
+
351
+ def is_identity(self):
352
+ r"""
353
+ Return whether this morphism is the identity.
354
+
355
+ EXAMPLES::
356
+
357
+ sage: # needs sage.rings.finite_rings
358
+ sage: K.<a> = GF(5^2).over() # over GF(5)
359
+ sage: FrobK = K.hom([a^5])
360
+ sage: FrobK.is_identity()
361
+ False
362
+ sage: (FrobK^2).is_identity()
363
+ True
364
+
365
+ Coercion maps are not considered as identity morphisms::
366
+
367
+ sage: # needs sage.rings.finite_rings
368
+ sage: L.<b> = GF(5^6).over(K)
369
+ sage: iota = L.defining_morphism(); iota
370
+ Ring morphism:
371
+ From: Field in a with defining polynomial x^2 + 4*x + 2 over its base
372
+ To: Field in b with defining polynomial x^3 + (2 + 2*a)*x - a over its base
373
+ Defn: a |--> a
374
+ sage: iota.is_identity()
375
+ False
376
+ """
377
+ if self.domain() is not self.codomain():
378
+ return False
379
+ return are_equal_morphisms(self._backend, None)
380
+
381
+ def is_injective(self):
382
+ r"""
383
+ Return whether this morphism is injective.
384
+
385
+ EXAMPLES::
386
+
387
+ sage: # needs sage.rings.finite_rings
388
+ sage: K = GF(5^10).over(GF(5^5))
389
+ sage: iota = K.defining_morphism(); iota
390
+ Ring morphism:
391
+ From: Finite Field in z5 of size 5^5
392
+ To: Field in z10 with defining polynomial
393
+ x^2 + (2*z5^3 + 2*z5^2 + 4*z5 + 4)*x + z5 over its base
394
+ Defn: z5 |--> z5
395
+ sage: iota.is_injective()
396
+ True
397
+
398
+ sage: K = GF(7).over(ZZ)
399
+ sage: iota = K.defining_morphism(); iota
400
+ Ring morphism:
401
+ From: Integer Ring
402
+ To: Finite Field of size 7 over its base
403
+ Defn: 1 |--> 1
404
+ sage: iota.is_injective()
405
+ False
406
+ """
407
+ return self._backend.is_injective()
408
+
409
+ def is_surjective(self):
410
+ r"""
411
+ Return whether this morphism is surjective.
412
+
413
+ EXAMPLES::
414
+
415
+ sage: # needs sage.rings.finite_rings
416
+ sage: K = GF(5^10).over(GF(5^5))
417
+ sage: iota = K.defining_morphism(); iota
418
+ Ring morphism:
419
+ From: Finite Field in z5 of size 5^5
420
+ To: Field in z10 with defining polynomial
421
+ x^2 + (2*z5^3 + 2*z5^2 + 4*z5 + 4)*x + z5 over its base
422
+ Defn: z5 |--> z5
423
+ sage: iota.is_surjective()
424
+ False
425
+
426
+ sage: K = GF(7).over(ZZ)
427
+ sage: iota = K.defining_morphism(); iota
428
+ Ring morphism:
429
+ From: Integer Ring
430
+ To: Finite Field of size 7 over its base
431
+ Defn: 1 |--> 1
432
+ sage: iota.is_surjective()
433
+ True
434
+ """
435
+ return self._backend.is_surjective()
436
+
437
+ def _repr_defn(self):
438
+ r"""
439
+ Return a string definition of this morphism.
440
+
441
+ By default, we show the action of the morphism on the
442
+ generators of the domain.
443
+
444
+ EXAMPLES::
445
+
446
+ sage: # needs sage.rings.finite_rings
447
+ sage: K.<a> = GF(5^2).over() # over GF(5)
448
+ sage: L.<b> = GF(5^6).over(K)
449
+ sage: FrobL = L.hom([b^5, a^5]) # absolute Frobenius
450
+ sage: print(FrobL._repr_defn())
451
+ b |--> (-1 + a) + (1 + 2*a)*b + a*b^2
452
+ with map on base ring:
453
+ a |--> 1 - a
454
+ """
455
+ import re
456
+ s = ""
457
+ gens = self.domain().gens()
458
+ if self._im_gens is None:
459
+ self._im_gens = [ self(x) for x in gens ]
460
+ for i in range(len(gens)):
461
+ s += "%s |--> %s\n" % (gens[i], self._im_gens[i])
462
+ if self.base_map() is not None:
463
+ s += "with map on base ring"
464
+ ss = self.base_map()._repr_defn()
465
+ ss = re.sub('\nwith map on base ring:?$', '', ss, flags=re.MULTILINE)
466
+ if ss != "": s += ":\n" + ss
467
+ if s != "" and s[-1] == "\n":
468
+ s = s[:-1]
469
+ return s
470
+
471
+ def _composition(self, right):
472
+ r"""
473
+ Return the composite ``self o right``.
474
+
475
+ TESTS::
476
+
477
+ sage: # needs sage.rings.number_field
478
+ sage: x = polygen(ZZ, 'x')
479
+ sage: A.<sqrt5> = QQ.extension(x^2 - 5)
480
+ sage: K.<sqrt5> = A.over()
481
+ sage: f = K.hom([-sqrt5]); f
482
+ Ring endomorphism of Field in sqrt5 with defining polynomial x^2 - 5 over its base
483
+ Defn: sqrt5 |--> -sqrt5
484
+ sage: f^2 # indirect doctest
485
+ Ring endomorphism of Field in sqrt5 with defining polynomial x^2 - 5 over its base
486
+ Defn: sqrt5 |--> sqrt5
487
+ """
488
+ domain = right.domain()
489
+ codomain = self.codomain()
490
+ backend_right = backend_morphism(right)
491
+ backend = self._backend * backend_right
492
+ if isinstance(domain, RingExtension_generic) or isinstance(codomain, RingExtension_generic):
493
+ return RingExtensionHomomorphism(domain.Hom(codomain), backend)
494
+ else:
495
+ return backend
496
+
497
+ cdef _update_slots(self, dict _slots):
498
+ """
499
+ Helper function for copying and pickling.
500
+
501
+ TESTS::
502
+
503
+ sage: # needs sage.rings.finite_rings
504
+ sage: K.<a> = GF(5^2).over() # over GF(5)
505
+ sage: f = K.hom([a^5])
506
+ sage: g = copy(f) # indirect doctest
507
+ sage: f == g
508
+ True
509
+ sage: f is g
510
+ False
511
+ """
512
+ self._backend = _slots['_backend']
513
+ RingMap._update_slots(self, _slots)
514
+
515
+ cdef dict _extra_slots(self):
516
+ """
517
+ Helper function for copying and pickling.
518
+
519
+ TESTS::
520
+
521
+ sage: K.<a> = GF(5^2).over() # over GF(5) # needs sage.rings.finite_rings
522
+ sage: f = K.hom([a^5]) # needs sage.rings.finite_rings
523
+ sage: loads(dumps(f)) == f # needs sage.rings.finite_rings
524
+ True
525
+ """
526
+ slots = RingMap._extra_slots(self)
527
+ slots['_backend'] = self._backend
528
+ return slots
529
+
530
+
531
+ cdef class RingExtensionBackendIsomorphism(RingExtensionHomomorphism):
532
+ r"""
533
+ A class for implementating isomorphisms taking an element of the
534
+ backend to its ring extension.
535
+
536
+ TESTS::
537
+
538
+ sage: # needs sage.rings.finite_rings
539
+ sage: K = GF(11^9).over(GF(11^3))
540
+ sage: f = K.coerce_map_from(GF(11^9)); f
541
+ Coercion morphism:
542
+ From: Finite Field in z9 of size 11^9
543
+ To: Field in z9 with defining polynomial
544
+ x^3 + (9*z3^2 + 5*z3 + 1)*x^2 + (4*z3 + 3)*x + 10*z3 over its base
545
+ sage: type(f)
546
+ <class 'sage.rings.ring_extension_morphism.RingExtensionBackendIsomorphism'>
547
+ sage: TestSuite(f).run()
548
+ """
549
+ def __init__(self, parent):
550
+ r"""
551
+ Initialize this morphism.
552
+
553
+ TESTS::
554
+
555
+ sage: x = polygen(ZZ, 'x')
556
+ sage: A.<a> = QQ.extension(x^2 - 5) # needs sage.rings.number_field
557
+ sage: K = A.over() # needs sage.rings.number_field
558
+ sage: K.coerce_map_from(A) # needs sage.rings.number_field
559
+ Coercion morphism:
560
+ From: Number Field in a with defining polynomial x^2 - 5
561
+ To: Field in a with defining polynomial x^2 - 5 over its base
562
+ """
563
+ RingMap.__init__(self, parent)
564
+ domain = self.domain()
565
+ self._backend = domain.Hom(domain).identity()
566
+
567
+ def _repr_type(self):
568
+ r"""
569
+ Return a string that describes the type of this morphism.
570
+
571
+ EXAMPLES::
572
+
573
+ sage: K.<a> = GF(5^2).over() # over GF(5) # needs sage.rings.finite_rings
574
+ sage: f = K.coerce_map_from(GF(5^2)); f # needs sage.rings.finite_rings
575
+ Coercion morphism:
576
+ From: Finite Field in z2 of size 5^2
577
+ To: Field in a with defining polynomial x^2 + 4*x + 2 over its base
578
+
579
+ sage: f._repr_type() # needs sage.rings.finite_rings
580
+ 'Coercion'
581
+ """
582
+ return "Coercion"
583
+
584
+ def _repr_defn(self):
585
+ r"""
586
+ Return the empty string since this morphism is canonical.
587
+
588
+ EXAMPLES::
589
+
590
+ sage: K.<a> = GF(5^2).over() # over GF(5) # needs sage.rings.finite_rings
591
+ sage: f = K.coerce_map_from(GF(5^2)); f # needs sage.rings.finite_rings
592
+ Coercion morphism:
593
+ From: Finite Field in z2 of size 5^2
594
+ To: Field in a with defining polynomial x^2 + 4*x + 2 over its base
595
+
596
+ sage: f._repr_defn() # needs sage.rings.finite_rings
597
+ ''
598
+ """
599
+ return ""
600
+
601
+ cpdef Element _call_(self, x):
602
+ r"""
603
+ Return the image of ``x`` under this morphism.
604
+
605
+ INPUT:
606
+
607
+ - ``x`` -- an element in the domain of this morphism
608
+
609
+ EXAMPLES::
610
+
611
+ sage: K.<a> = GF(5^2).over() # over GF(5) # needs sage.rings.finite_rings
612
+ sage: f = K.coerce_map_from(GF(5^2)) # needs sage.rings.finite_rings
613
+ sage: f(GF(5^2).gen()) # needs sage.rings.finite_rings
614
+ a
615
+ """
616
+ codomain = self.codomain()
617
+ return codomain.element_class(codomain, x)
618
+
619
+
620
+ cdef class RingExtensionBackendReverseIsomorphism(RingExtensionHomomorphism):
621
+ r"""
622
+ A class for implementating isomorphisms from a ring extension to
623
+ its backend.
624
+
625
+ TESTS::
626
+
627
+ sage: # needs sage.rings.finite_rings
628
+ sage: K = GF(11^9).over(GF(11^3))
629
+ sage: f = GF(11^9).convert_map_from(K); f
630
+ Canonical morphism:
631
+ From: Field in z9 with defining polynomial
632
+ x^3 + (9*z3^2 + 5*z3 + 1)*x^2 + (4*z3 + 3)*x + 10*z3 over its base
633
+ To: Finite Field in z9 of size 11^9
634
+ sage: type(f)
635
+ <class 'sage.rings.ring_extension_morphism.RingExtensionBackendReverseIsomorphism'>
636
+ sage: TestSuite(f).run()
637
+ """
638
+ def __init__(self, parent):
639
+ r"""
640
+ Initialize this morphism.
641
+
642
+ TESTS::
643
+
644
+ sage: x = polygen(ZZ, 'x')
645
+ sage: A.<a> = QQ.extension(x^2 - 5) # needs sage.rings.number_field
646
+ sage: K = A.over() # needs sage.rings.number_field
647
+ sage: A.convert_map_from(K) # needs sage.rings.number_field
648
+ Canonical morphism:
649
+ From: Field in a with defining polynomial x^2 - 5 over its base
650
+ To: Number Field in a with defining polynomial x^2 - 5
651
+ """
652
+ RingMap.__init__(self, parent)
653
+ codomain = self.codomain()
654
+ self._backend = codomain.Hom(codomain).identity()
655
+
656
+ def _repr_type(self):
657
+ r"""
658
+ Return a string that describes the type of this morphism.
659
+
660
+ EXAMPLES::
661
+
662
+ sage: K.<a> = GF(5^2).over() # over GF(5) # needs sage.rings.finite_rings
663
+ sage: f = GF(5^2).convert_map_from(K); f # needs sage.rings.finite_rings
664
+ Canonical morphism:
665
+ From: Field in a with defining polynomial x^2 + 4*x + 2 over its base
666
+ To: Finite Field in z2 of size 5^2
667
+
668
+ sage: f._repr_type() # needs sage.rings.finite_rings
669
+ 'Canonical'
670
+ """
671
+ return "Canonical"
672
+
673
+ def _repr_defn(self):
674
+ r"""
675
+ Return the empty string since this morphism is canonical.
676
+
677
+ EXAMPLES::
678
+
679
+ sage: K.<a> = GF(5^2).over() # over GF(5) # needs sage.rings.finite_rings
680
+ sage: f = GF(5^2).convert_map_from(K); f # needs sage.rings.finite_rings
681
+ Canonical morphism:
682
+ From: Field in a with defining polynomial x^2 + 4*x + 2 over its base
683
+ To: Finite Field in z2 of size 5^2
684
+
685
+ sage: f._repr_defn() # needs sage.rings.finite_rings
686
+ ''
687
+ """
688
+ return ""
689
+
690
+ cpdef Element _call_(self, x):
691
+ r"""
692
+ Return the image of ``x`` under this morphism.
693
+
694
+ INPUT:
695
+
696
+ - ``x`` -- an element in the domain of this morphism
697
+
698
+ EXAMPLES::
699
+
700
+ sage: K.<a> = GF(5^2).over() # over GF(5) # needs sage.rings.finite_rings
701
+ sage: f = GF(5^2).convert_map_from(K) # needs sage.rings.finite_rings
702
+ sage: f(a) # needs sage.rings.finite_rings
703
+ z2
704
+ """
705
+ return (<RingExtensionElement>x)._backend
706
+
707
+
708
+ cdef class MapFreeModuleToRelativeRing(Map):
709
+ """
710
+ Base class of the module isomorphism between a ring extension
711
+ and a free module over one of its bases.
712
+
713
+ TESTS::
714
+
715
+ sage: K = GF(5^2).over() # needs sage.rings.finite_rings
716
+ sage: V, i, j = K.free_module() # needs sage.rings.finite_rings
717
+ sage: type(i) # needs sage.rings.finite_rings
718
+ <class 'sage.rings.ring_extension_morphism.MapFreeModuleToRelativeRing'>
719
+ """
720
+ def __init__(self, E, K):
721
+ r"""
722
+ Initialize this morphism.
723
+
724
+ INPUT:
725
+
726
+ - ``E`` -- a ring extension
727
+
728
+ - ``K`` -- a commutative ring; one base of ``E``
729
+
730
+ TESTS::
731
+
732
+ sage: K = GF(11^6).over(GF(11^3)) # needs sage.rings.finite_rings
733
+ sage: V, i, j = K.free_module() # needs sage.rings.finite_rings
734
+ sage: i # needs sage.rings.finite_rings
735
+ Generic map:
736
+ From: Vector space of dimension 2 over Finite Field in z3 of size 11^3
737
+ To: Field in z6 with defining polynomial x^2 + (10*z3^2 + z3 + 6)*x + z3 over its base
738
+ """
739
+ self._degree = E.degree(K)
740
+ self._basis = [ (<RingExtensionElement>x)._backend for x in E.basis_over(K) ]
741
+ self._f = backend_morphism(E.defining_morphism(K), forget='codomain')
742
+ domain = K ** self._degree
743
+ parent = domain.Hom(E)
744
+ Map.__init__(self, parent)
745
+
746
+ def is_injective(self):
747
+ r"""
748
+ Return whether this morphism is injective.
749
+
750
+ EXAMPLES::
751
+
752
+ sage: K = GF(11^6).over(GF(11^3)) # needs sage.rings.finite_rings
753
+ sage: V, i, j = K.free_module() # needs sage.rings.finite_rings
754
+ sage: i.is_injective() # needs sage.rings.finite_rings
755
+ True
756
+ """
757
+ return True
758
+
759
+ def is_surjective(self):
760
+ r"""
761
+ Return whether this morphism is surjective.
762
+
763
+ EXAMPLES::
764
+
765
+ sage: K = GF(11^6).over(GF(11^3)) # needs sage.rings.finite_rings
766
+ sage: V, i, j = K.free_module() # needs sage.rings.finite_rings
767
+ sage: i.is_surjective() # needs sage.rings.finite_rings
768
+ True
769
+ """
770
+ return True
771
+
772
+ cpdef Element _call_(self, v):
773
+ r"""
774
+ Return the image of ``x`` under this morphism.
775
+
776
+ INPUT:
777
+
778
+ - ``x`` -- an element in the domain of this morphism
779
+
780
+ EXAMPLES::
781
+
782
+ sage: K.<a> = GF(11^6).over(GF(11^3)) # needs sage.rings.finite_rings
783
+ sage: V, i, j = K.free_module() # needs sage.rings.finite_rings
784
+ sage: i((0,1)) # needs sage.rings.finite_rings
785
+ a
786
+ """
787
+ cdef Element elt
788
+ elt = self._f(v[0]) * self._basis[0]
789
+ for i in range(1, self._degree):
790
+ elt += self._f(v[i]) * self._basis[i]
791
+ return self.codomain()(elt)
792
+
793
+
794
+ cdef class MapRelativeRingToFreeModule(Map):
795
+ """
796
+ Base class of the module isomorphism between a ring extension
797
+ and a free module over one of its bases.
798
+
799
+ TESTS::
800
+
801
+ sage: K = GF(5^2).over() # needs sage.rings.finite_rings
802
+ sage: V, i, j = K.free_module() # needs sage.rings.finite_rings
803
+ sage: type(j) # needs sage.rings.finite_rings
804
+ <class 'sage.rings.ring_extension_morphism.MapRelativeRingToFreeModule'>
805
+ """
806
+ def __init__(self, E, K):
807
+ r"""
808
+ Initialize this morphism.
809
+
810
+ INPUT:
811
+
812
+ - ``E`` -- a ring extension
813
+
814
+ - ``K`` -- a commutative ring; one base of ``E``
815
+
816
+ TESTS::
817
+
818
+ sage: K = GF(11^6).over(GF(11^3)) # needs sage.rings.finite_rings
819
+ sage: V, i, j = K.free_module() # needs sage.rings.finite_rings
820
+ sage: j # needs sage.rings.finite_rings
821
+ Generic map:
822
+ From: Field in z6 with defining polynomial x^2 + (10*z3^2 + z3 + 6)*x + z3 over its base
823
+ To: Vector space of dimension 2 over Finite Field in z3 of size 11^3
824
+ """
825
+ cdef Parent L, base
826
+
827
+ self._degree = (<RingExtensionWithBasis>E)._degree_over(K)
828
+ self._basis = [ (<RingExtensionElement>x)._backend for x in E.basis_over(K) ]
829
+ f = backend_morphism(E.defining_morphism(K), forget='codomain')
830
+ codomain = K ** self._degree
831
+ Map.__init__(self, E.Hom(codomain))
832
+
833
+ K = backend_parent(K)
834
+ L = (<RingExtensionWithBasis>E)._backend
835
+
836
+ # We compute the matrix of our isomorphism (over base)
837
+ from sage.rings.ring_extension import common_base
838
+ base = common_base(K, L, False)
839
+ EK, iK, jK = K.free_module(base, map=True)
840
+ EL, iL, jL = L.free_module(base, map=True)
841
+
842
+ self._dimK = EK.dimension()
843
+ self._iK = iK
844
+ self._jL = jL
845
+
846
+ M = [ ]
847
+ for x in self._basis:
848
+ for v in EK.basis():
849
+ y = x * f(iK(v))
850
+ M.append(jL(y))
851
+ from sage.matrix.matrix_space import MatrixSpace
852
+ self._matrix = MatrixSpace(base,len(M))(M).inverse_of_unit()
853
+
854
+ def is_injective(self):
855
+ r"""
856
+ Return whether this morphism is injective.
857
+
858
+ EXAMPLES::
859
+
860
+ sage: K = GF(11^6).over(GF(11^3)) # needs sage.rings.finite_rings
861
+ sage: V, i, j = K.free_module() # needs sage.rings.finite_rings
862
+ sage: j.is_injective() # needs sage.rings.finite_rings
863
+ True
864
+ """
865
+ return True
866
+
867
+ def is_surjective(self):
868
+ r"""
869
+ Return whether this morphism is injective.
870
+
871
+ EXAMPLES::
872
+
873
+ sage: K = GF(11^6).over(GF(11^3)) # needs sage.rings.finite_rings
874
+ sage: V, i, j = K.free_module() # needs sage.rings.finite_rings
875
+ sage: j.is_surjective() # needs sage.rings.finite_rings
876
+ True
877
+ """
878
+ return True
879
+
880
+ cpdef Element _call_(self, x):
881
+ r"""
882
+ Return the image of ``x`` under this morphism.
883
+
884
+ INPUT:
885
+
886
+ - ``x`` -- an element in the domain of this morphism
887
+
888
+ EXAMPLES::
889
+
890
+ sage: K.<a> = GF(11^6).over(GF(11^3)) # needs sage.rings.finite_rings
891
+ sage: V, i, j = K.free_module() # needs sage.rings.finite_rings
892
+ sage: j(a) # needs sage.rings.finite_rings
893
+ (0, 1)
894
+ """
895
+ coeffs = self.backend_coefficients(x)
896
+ return self.codomain()(coeffs)
897
+
898
+ cdef list backend_coefficients(self, RingExtensionElement x):
899
+ r"""
900
+ Return the coordinates of the image of ``x``
901
+ as elements of the backend ring.
902
+
903
+ INPUT:
904
+
905
+ - ``x`` -- an element in the domain of this morphism
906
+
907
+ TESTS::
908
+
909
+ sage: K.<a> = GF(11^9).over(GF(11^3)) # needs sage.rings.finite_rings
910
+ sage: V, i, j = K.free_module() # needs sage.rings.finite_rings
911
+ sage: j(a + 2*a^2) # indirect doctest # needs sage.rings.finite_rings
912
+ (0, 1, 2)
913
+ """
914
+ cdef list coeffs = [ ]
915
+ dK = self._dimK
916
+ w = (self._jL(x._backend) * self._matrix).list()
917
+ for i in range(self._degree):
918
+ coeff = self._iK(w[i*dK:(i+1)*dK])
919
+ coeffs.append(coeff)
920
+ return coeffs