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,1107 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.rings.finite_rings (because all doctests use finite fields)
3
+ # sage.doctest: needs sage.rings.function_field (because almost all doctests use function field extensions)
4
+ """
5
+ Divisors of function fields
6
+
7
+ Sage allows extensive computations with divisors on function fields.
8
+
9
+ EXAMPLES:
10
+
11
+ The divisor of an element of the function field is the formal sum of poles and zeros
12
+ of the element with multiplicities::
13
+
14
+ sage: K.<x> = FunctionField(GF(2)); R.<t> = K[]
15
+ sage: L.<y> = K.extension(t^3 + x^3*t + x)
16
+ sage: f = x/(y+1)
17
+ sage: f.divisor()
18
+ - Place (1/x, 1/x^3*y^2 + 1/x)
19
+ + Place (1/x, 1/x^3*y^2 + 1/x^2*y + 1)
20
+ + 3*Place (x, y)
21
+ - Place (x^3 + x + 1, y + 1)
22
+
23
+ The Riemann-Roch space of a divisor can be computed. We can get a basis of
24
+ the space as a vector space over the constant field::
25
+
26
+ sage: p = L.places_finite()[0]
27
+ sage: q = L.places_infinite()[0]
28
+ sage: (3*p + 2*q).basis_function_space()
29
+ [1/x*y^2 + x^2, 1, 1/x]
30
+
31
+ We verify the Riemann-Roch theorem::
32
+
33
+ sage: D = 3*p - q
34
+ sage: index_of_speciality = len(D.basis_differential_space())
35
+ sage: D.dimension() == D.degree() - L.genus() + 1 + index_of_speciality
36
+ True
37
+
38
+ AUTHORS:
39
+
40
+ - Kwankyu Lee (2017-04-30): initial version
41
+ """
42
+
43
+ # ****************************************************************************
44
+ # Copyright (C) 2016-2022 Kwankyu Lee <ekwankyu@gmail.com>
45
+ # 2019 Brent Baccala
46
+ #
47
+ # Distributed under the terms of the GNU General Public License (GPL)
48
+ # as published by the Free Software Foundation; either version 2 of
49
+ # the License, or (at your option) any later version.
50
+ # http://www.gnu.org/licenses/
51
+ # ****************************************************************************
52
+
53
+ import random
54
+
55
+ from sage.misc.cachefunc import cached_method
56
+ from sage.misc.latex import latex
57
+
58
+ from sage.arith.functions import lcm
59
+
60
+ from sage.structure.unique_representation import UniqueRepresentation
61
+ from sage.structure.parent import Parent
62
+ from sage.structure.element import ModuleElement
63
+ from sage.structure.richcmp import richcmp
64
+
65
+ from sage.categories.homset import Hom
66
+ from sage.categories.morphism import SetMorphism
67
+ from sage.categories.commutative_additive_groups import CommutativeAdditiveGroups
68
+
69
+ from sage.matrix.constructor import matrix
70
+
71
+ from sage.modules.free_module_element import vector
72
+
73
+ from sage.rings.integer_ring import IntegerRing
74
+ from sage.rings.integer import Integer
75
+
76
+ from .place import PlaceSet
77
+
78
+
79
+ def divisor(field, data):
80
+ """
81
+ Construct a divisor from the data.
82
+
83
+ INPUT:
84
+
85
+ - ``field`` -- function field
86
+
87
+ - ``data`` -- dictionary of place and multiplicity pairs
88
+
89
+ EXAMPLES::
90
+
91
+ sage: K.<x> = FunctionField(GF(2)); R.<t> = K[]
92
+ sage: F.<y> = K.extension(t^3 - x^2*(x^2 + x + 1)^2)
93
+ sage: from sage.rings.function_field.divisor import divisor
94
+ sage: p, q, r = F.places()
95
+ sage: divisor(F, {p: 1, q: 2, r: 3})
96
+ Place (1/x, 1/x^2*y + 1)
97
+ + 2*Place (x, (1/(x^3 + x^2 + x))*y^2)
98
+ + 3*Place (x + 1, y + 1)
99
+ """
100
+ divisor_group = field.divisor_group()
101
+ return divisor_group.element_class(divisor_group, data)
102
+
103
+
104
+ def prime_divisor(field, place, m=1):
105
+ """
106
+ Construct a prime divisor from the place.
107
+
108
+ INPUT:
109
+
110
+ - ``field`` -- function field
111
+
112
+ - ``place`` -- place of the function field
113
+
114
+ - ``m`` -- (default: 1) a positive integer; multiplicity at the place
115
+
116
+ EXAMPLES::
117
+
118
+ sage: K.<x> = FunctionField(GF(2)); R.<t> = K[]
119
+ sage: F.<y> = K.extension(t^3 - x^2*(x^2 + x + 1)^2)
120
+ sage: p = F.places()[0]
121
+ sage: from sage.rings.function_field.divisor import prime_divisor
122
+ sage: d = prime_divisor(F, p)
123
+ sage: 3 * d == prime_divisor(F, p, 3)
124
+ True
125
+ """
126
+ divisor_group = field.divisor_group()
127
+ return divisor_group.element_class(divisor_group, {place: Integer(m)})
128
+
129
+
130
+ class FunctionFieldDivisor(ModuleElement):
131
+ """
132
+ Divisors of function fields.
133
+
134
+ INPUT:
135
+
136
+ - ``parent`` -- divisor group
137
+
138
+ - ``data`` -- dictionary of place and multiplicity pairs
139
+
140
+ EXAMPLES::
141
+
142
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
143
+ sage: F.<y> = K.extension(Y^3 - x^2*(x^2 + x + 1)^2)
144
+ sage: f = x/(y + 1)
145
+ sage: f.divisor()
146
+ Place (1/x, 1/x^4*y^2 + 1/x^2*y + 1)
147
+ + Place (1/x, 1/x^2*y + 1)
148
+ + 3*Place (x, (1/(x^3 + x^2 + x))*y^2)
149
+ - 6*Place (x + 1, y + 1)
150
+ """
151
+ def __init__(self, parent, data):
152
+ """
153
+ Initialize.
154
+
155
+ TESTS::
156
+
157
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
158
+ sage: L.<y> = K.extension(Y^3 + x + x^3*Y)
159
+ sage: G = L.divisor_group()
160
+ sage: TestSuite(G).run()
161
+ """
162
+ ModuleElement.__init__(self, parent)
163
+ self._data = data
164
+
165
+ def __hash__(self):
166
+ """
167
+ Return the hash of the divisor.
168
+
169
+ EXAMPLES::
170
+
171
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
172
+ sage: F.<y> = K.extension(Y^3 - x^2*(x^2 + x + 1)^2)
173
+ sage: f = x/(y + 1)
174
+ sage: d = f.divisor()
175
+ sage: {d: 1}
176
+ {Place (1/x, 1/x^4*y^2 + 1/x^2*y + 1)
177
+ + Place (1/x, 1/x^2*y + 1)
178
+ + 3*Place (x, (1/(x^3 + x^2 + x))*y^2)
179
+ - 6*Place (x + 1, y + 1): 1}
180
+ """
181
+ return hash(tuple(sorted(self._data.items())))
182
+
183
+ def _format(self, formatter, mul, cr):
184
+ r"""
185
+ Return a string representation of ``self``.
186
+
187
+ This is used by both ``_repr_`` and ``_latex_`` methods.
188
+
189
+ INPUT:
190
+
191
+ - ``formatter`` -- either ``repr`` or ``latex``
192
+
193
+ - ``mul`` -- string inserted between multiplicity and place
194
+
195
+ - ``cr`` -- string inserted between places
196
+
197
+ TESTS::
198
+
199
+ sage: K.<x> = FunctionField(QQ)
200
+ sage: x.divisor() # indirect doctest
201
+ - Place (1/x) + Place (x)
202
+ sage: latex(x.divisor()) # indirect doctest
203
+ - \left(\frac{1}{x}\right) + \left(x\right)
204
+ """
205
+ plus = ' + '
206
+ minus = ' - '
207
+
208
+ places = sorted(self._data)
209
+
210
+ if len(places) == 0:
211
+ return '0'
212
+
213
+ p = places.pop(0)
214
+ m = self._data[p]
215
+ if m == 1:
216
+ r = formatter(p)
217
+ elif m == -1:
218
+ r = '- ' + formatter(p) # seems more readable than `-`
219
+ else: # nonzero
220
+ r = formatter(m) + mul + formatter(p)
221
+ for p in places:
222
+ m = self._data[p]
223
+ if m == 1:
224
+ r += cr + plus + formatter(p)
225
+ elif m == -1:
226
+ r += cr + minus + formatter(p)
227
+ elif m > 0:
228
+ r += cr + plus + formatter(m) + mul + formatter(p)
229
+ elif m < 0:
230
+ r += cr + minus + formatter(-m) + mul + formatter(p)
231
+ return r
232
+
233
+ def _repr_(self, split=True):
234
+ """
235
+ Return a string representation of the divisor.
236
+
237
+ INPUT:
238
+
239
+ - ``split`` -- boolean; if ``True``, split at the end of each place
240
+
241
+ EXAMPLES::
242
+
243
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
244
+ sage: F.<y> = K.extension(Y^3 - x^2*(x^2 + x + 1)^2)
245
+ sage: f = x/(y + 1)
246
+ sage: d = f.divisor()
247
+ sage: d._repr_(split=False)
248
+ 'Place (1/x, 1/x^4*y^2 + 1/x^2*y + 1) + Place (1/x, 1/x^2*y + 1)
249
+ + 3*Place (x, (1/(x^3 + x^2 + x))*y^2) - 6*Place (x + 1, y + 1)'
250
+ """
251
+ return self._format(repr, '*', '\n' if split else '')
252
+
253
+ def _latex_(self):
254
+ r"""
255
+ Return the LaTeX representation of the divisor.
256
+
257
+ EXAMPLES::
258
+
259
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
260
+ sage: F.<y> = K.extension(Y^3 - x^2*(x^2 + x + 1)^2)
261
+ sage: f = x/(y + 1)
262
+ sage: d = f.divisor()
263
+ sage: d._latex_()
264
+ \left(\frac{1}{x}, \frac{1}{x^{4}} y^{2} + \frac{1}{x^{2}} y + 1\right)
265
+ + \left(\frac{1}{x}, \frac{1}{x^{2}} y + 1\right)
266
+ + 3 \left(x, \left(\frac{1}{x^{3} + x^{2} + x}\right) y^{2}\right)
267
+ - 6 \left(x + 1, y + 1\right)
268
+ """
269
+ return self._format(latex, '', '')
270
+
271
+ def _richcmp_(self, other, op):
272
+ """
273
+ Compare the divisor and the other divisor with respect to the operator.
274
+
275
+ Divisors are compared lexicographically, viewed as lists of pairs of
276
+ place and multiplicity.
277
+
278
+ INPUT:
279
+
280
+ - ``other`` -- divisor
281
+
282
+ - ``op`` -- comparison operator
283
+
284
+ EXAMPLES::
285
+
286
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
287
+ sage: L.<y> = K.extension(Y^3 +x^3*Y + x)
288
+ sage: pls1 = L.places()
289
+ sage: D1 = pls1[0] + pls1[1]
290
+ sage: D2 = pls1[1] + 2*pls1[2]
291
+ sage: (D1 < D2) == (not D2 < D1)
292
+ True
293
+ sage: D1 + D2 == D2 + D1
294
+ True
295
+ """
296
+ s = sorted(self._data)
297
+ o = sorted(other._data)
298
+ while s and o:
299
+ skey = s[-1]
300
+ okey = o[-1]
301
+ if skey == okey:
302
+ svalue = self._data[skey]
303
+ ovalue = other._data[okey]
304
+ if svalue == ovalue:
305
+ s.pop()
306
+ o.pop()
307
+ continue
308
+ return richcmp(svalue, ovalue, op)
309
+ return richcmp(skey, okey, op)
310
+ return richcmp(len(s), len(o), op)
311
+
312
+ def _neg_(self):
313
+ """
314
+ Return the additive inverse of the divisor.
315
+
316
+ EXAMPLES::
317
+
318
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
319
+ sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
320
+ sage: f = x/(y + 1)
321
+ sage: D = f.divisor()
322
+ sage: D
323
+ - Place (1/x, 1/x^3*y^2 + 1/x)
324
+ + Place (1/x, 1/x^3*y^2 + 1/x^2*y + 1)
325
+ + 3*Place (x, y)
326
+ - Place (x^3 + x + 1, y + 1)
327
+ sage: -D
328
+ Place (1/x, 1/x^3*y^2 + 1/x)
329
+ - Place (1/x, 1/x^3*y^2 + 1/x^2*y + 1)
330
+ - 3*Place (x, y)
331
+ + Place (x^3 + x + 1, y + 1)
332
+ """
333
+ divisor_group = self.parent()
334
+ data = {}
335
+ for place in self._data:
336
+ data[place] = -self._data[place]
337
+ return divisor_group.element_class(divisor_group, data)
338
+
339
+ def _add_(self, other):
340
+ """
341
+ Add the divisor to the other divisor.
342
+
343
+ INPUT:
344
+
345
+ - ``other`` -- divisor
346
+
347
+ EXAMPLES::
348
+
349
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
350
+ sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
351
+ sage: f = x/(y + 1)
352
+ sage: D = f.divisor()
353
+ sage: D + 2*D == 3*D
354
+ True
355
+ sage: 3*D - D == 2*D
356
+ True
357
+ """
358
+ divisor_group = self.parent()
359
+ places = set(self.support()).union( set(other.support()))
360
+ data = {}
361
+ for place in places:
362
+ m = self.multiplicity(place) + other.multiplicity(place)
363
+ if m != 0:
364
+ data[place] = m
365
+ return divisor_group.element_class(divisor_group, data)
366
+
367
+ def _rmul_(self, i):
368
+ """
369
+ Multiply integer `i` to the divisor.
370
+
371
+ INPUT:
372
+
373
+ - ``i`` -- integer
374
+
375
+ EXAMPLES::
376
+
377
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
378
+ sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
379
+ sage: f = x/(y + 1)
380
+ sage: D = f.divisor()
381
+ sage: (-3)*(2*D) == -6*D
382
+ True
383
+ """
384
+ divisor_group = self.parent()
385
+ data = {}
386
+ for place in self._data:
387
+ m = i * self._data[place]
388
+ if m != 0:
389
+ data[place] = m
390
+ return divisor_group.element_class(divisor_group, data)
391
+
392
+ def dict(self):
393
+ """
394
+ Return the dictionary representing the divisor.
395
+
396
+ EXAMPLES::
397
+
398
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
399
+ sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
400
+ sage: f = x/(y + 1)
401
+ sage: D = f.divisor()
402
+ sage: D.dict()
403
+ {Place (1/x, 1/x^3*y^2 + 1/x): -1,
404
+ Place (1/x, 1/x^3*y^2 + 1/x^2*y + 1): 1,
405
+ Place (x, y): 3,
406
+ Place (x^3 + x + 1, y + 1): -1}
407
+ """
408
+ return self._data
409
+
410
+ def list(self):
411
+ """
412
+ Return the list of place and multiplicity pairs of the divisor.
413
+
414
+ EXAMPLES::
415
+
416
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
417
+ sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
418
+ sage: f = x/(y + 1)
419
+ sage: D = f.divisor()
420
+ sage: D.list()
421
+ [(Place (1/x, 1/x^3*y^2 + 1/x), -1),
422
+ (Place (1/x, 1/x^3*y^2 + 1/x^2*y + 1), 1),
423
+ (Place (x, y), 3),
424
+ (Place (x^3 + x + 1, y + 1), -1)]
425
+ """
426
+ return sorted(self._data.items())
427
+
428
+ def support(self):
429
+ """
430
+ Return the support of the divisor.
431
+
432
+ EXAMPLES::
433
+
434
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
435
+ sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
436
+ sage: f = x/(y + 1)
437
+ sage: D = f.divisor()
438
+ sage: D.support()
439
+ [Place (1/x, 1/x^3*y^2 + 1/x),
440
+ Place (1/x, 1/x^3*y^2 + 1/x^2*y + 1),
441
+ Place (x, y),
442
+ Place (x^3 + x + 1, y + 1)]
443
+ """
444
+ return sorted(self._data)
445
+
446
+ def multiplicity(self, place):
447
+ """
448
+ Return the multiplicity of the divisor at the place.
449
+
450
+ INPUT:
451
+
452
+ - ``place`` -- place of a function field
453
+
454
+ EXAMPLES::
455
+
456
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
457
+ sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
458
+ sage: p1,p2 = L.places()[:2]
459
+ sage: D = 2*p1 - 3*p2
460
+ sage: D.multiplicity(p1)
461
+ 2
462
+ sage: D.multiplicity(p2)
463
+ -3
464
+ """
465
+ if place not in self._data:
466
+ return Integer(0)
467
+ return self._data[place]
468
+
469
+ valuation = multiplicity
470
+
471
+ def is_effective(self):
472
+ """
473
+ Return ``True`` if this divisor has nonnegative multiplicity at all
474
+ places.
475
+
476
+ EXAMPLES::
477
+
478
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
479
+ sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
480
+ sage: p1, p2 = L.places()[:2]
481
+ sage: D = 2*p1 + 3*p2
482
+ sage: D.is_effective()
483
+ True
484
+ sage: E = D - 4*p2
485
+ sage: E.is_effective()
486
+ False
487
+ """
488
+ data = self._data
489
+ return all(data[place] >= 0 for place in data)
490
+
491
+ def numerator(self):
492
+ """
493
+ Return the numerator part of the divisor.
494
+
495
+ The numerator of a divisor is the positive part of the divisor.
496
+
497
+ EXAMPLES::
498
+
499
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
500
+ sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
501
+ sage: p1,p2 = L.places()[:2]
502
+ sage: D = 2*p1 - 3*p2
503
+ sage: D.numerator()
504
+ 2*Place (1/x, 1/x^3*y^2 + 1/x)
505
+ """
506
+ divisor_group = self.parent()
507
+ data = self._data
508
+ d = {}
509
+ for place in data:
510
+ m = data[place]
511
+ if m > 0:
512
+ d[place] = m
513
+ return divisor_group.element_class(self.parent(), d)
514
+
515
+ def denominator(self):
516
+ """
517
+ Return the denominator part of the divisor.
518
+
519
+ The denominator of a divisor is the negative of the negative part of
520
+ the divisor.
521
+
522
+ EXAMPLES::
523
+
524
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
525
+ sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
526
+ sage: p1,p2 = L.places()[:2]
527
+ sage: D = 2*p1 - 3*p2
528
+ sage: D.denominator()
529
+ 3*Place (1/x, 1/x^3*y^2 + 1/x^2*y + 1)
530
+ """
531
+ divisor_group = self.parent()
532
+ data = self._data
533
+ d = {}
534
+ for place in data:
535
+ m = data[place]
536
+ if m < 0:
537
+ d[place] = -m
538
+ return divisor_group.element_class(self.parent(), d)
539
+
540
+ def degree(self):
541
+ """
542
+ Return the degree of the divisor.
543
+
544
+ EXAMPLES::
545
+
546
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
547
+ sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
548
+ sage: p1,p2 = L.places()[:2]
549
+ sage: D = 2*p1 - 3*p2
550
+ sage: D.degree()
551
+ -1
552
+ """
553
+ return sum([p.degree() * m for p, m in self.list()])
554
+
555
+ def dimension(self):
556
+ """
557
+ Return the dimension of the Riemann-Roch space of the divisor.
558
+
559
+ EXAMPLES::
560
+
561
+ sage: K.<x> = FunctionField(GF(5)); _.<Y> = K[]
562
+ sage: F.<y> = K.extension(Y^2 - x^3 - 1)
563
+ sage: O = F.maximal_order()
564
+ sage: I = O.ideal(x - 2)
565
+ sage: P1 = I.divisor().support()[0]
566
+ sage: Pinf = F.places_infinite()[0]
567
+ sage: D = 3*Pinf + 2*P1
568
+ sage: D.dimension()
569
+ 5
570
+ """
571
+ return len(self.basis_function_space())
572
+
573
+ def basis_function_space(self):
574
+ """
575
+ Return a basis of the Riemann-Roch space of the divisor.
576
+
577
+ EXAMPLES::
578
+
579
+ sage: K.<x> = FunctionField(GF(5)); _.<Y> = K[]
580
+ sage: F.<y> = K.extension(Y^2 - x^3 - 1)
581
+ sage: O = F.maximal_order()
582
+ sage: I = O.ideal(x - 2)
583
+ sage: D = I.divisor()
584
+ sage: D.basis_function_space()
585
+ [x/(x + 3), 1/(x + 3)]
586
+ """
587
+ basis,_ = self._function_space()
588
+ return basis
589
+
590
+ @cached_method
591
+ def function_space(self):
592
+ """
593
+ Return the vector space of the Riemann-Roch space of the divisor.
594
+
595
+ OUTPUT:
596
+
597
+ - a vector space, an isomorphism from the vector space
598
+ to the Riemann-Roch space, and its inverse.
599
+
600
+ EXAMPLES::
601
+
602
+ sage: K.<x> = FunctionField(GF(5)); _.<Y> = K[]
603
+ sage: F.<y> = K.extension(Y^2-x^3-1)
604
+ sage: O = F.maximal_order()
605
+ sage: I = O.ideal(x - 2)
606
+ sage: D = I.divisor()
607
+ sage: V, from_V, to_V = D.function_space()
608
+ sage: all(to_V(from_V(e)) == e for e in V)
609
+ True
610
+ """
611
+ F = self.parent()._field
612
+ k = F.constant_base_field()
613
+
614
+ basis, coordinates = self._function_space()
615
+
616
+ n = len(basis)
617
+ V = k ** n
618
+
619
+ def from_V(v):
620
+ return sum(v[i] * basis[i] for i in range(n))
621
+
622
+ def to_V(f):
623
+ return vector(coordinates(f))
624
+
625
+ from sage.rings.function_field.maps import (
626
+ FunctionFieldLinearMap, FunctionFieldLinearMapSection)
627
+
628
+ mor_from_V = FunctionFieldLinearMap(Hom(V,F), from_V)
629
+ mor_to_V = FunctionFieldLinearMapSection(Hom(F,V), to_V)
630
+
631
+ return V, mor_from_V, mor_to_V
632
+
633
+ @cached_method
634
+ def _function_space(self):
635
+ """
636
+ Return an (echelon) basis and coordinates function for the Riemann-Roch
637
+ space of the divisor.
638
+
639
+ The return values are cached so that :meth:`basis_function_space` and
640
+ :meth:`function_space` methods give consistent outputs.
641
+
642
+ EXAMPLES::
643
+
644
+ sage: K.<x> = FunctionField(GF(5)); _.<Y> = K[]
645
+ sage: F.<y> = K.extension(Y^2 - x^3 - 1)
646
+ sage: O = F.maximal_order()
647
+ sage: I = O.ideal(x - 2)
648
+ sage: D = I.divisor()
649
+ sage: basis, coordinates = D._function_space()
650
+ sage: basis
651
+ [x/(x + 3), 1/(x + 3)]
652
+ sage: coordinates(basis[0])
653
+ [1, 0]
654
+ sage: coordinates(basis[1])
655
+ [0, 1]
656
+ sage: coordinates(basis[0] + basis[1])
657
+ [1, 1]
658
+ sage: coordinates((x + 4)/(x + 3))
659
+ [1, 4]
660
+ """
661
+ basis, coordinates_func = self._echelon_basis(self._basis())
662
+
663
+ return basis, coordinates_func
664
+
665
+ def basis_differential_space(self):
666
+ r"""
667
+ Return a basis of the space of differentials `\Omega(D)`
668
+ for the divisor `D`.
669
+
670
+ EXAMPLES:
671
+
672
+ We check the Riemann-Roch theorem::
673
+
674
+ sage: K.<x>=FunctionField(GF(4)); _.<Y> = K[]
675
+ sage: L.<y>=K.extension(Y^3 + x^3*Y + x)
676
+ sage: d = 3*L.places()[0]
677
+ sage: l = len(d.basis_function_space())
678
+ sage: i = len(d.basis_differential_space())
679
+ sage: l == d.degree() + 1 - L.genus() + i
680
+ True
681
+ """
682
+ F = self.parent()._field
683
+ W = F.space_of_differentials()
684
+
685
+ fbasis, _ = self._differential_space()
686
+ return [W.element_class(W, f) for f in fbasis]
687
+
688
+ def differential_space(self):
689
+ r"""
690
+ Return the vector space of the differential space `\Omega(D)` of the divisor `D`.
691
+
692
+ OUTPUT:
693
+
694
+ - a vector space isomorphic to `\Omega(D)`
695
+
696
+ - an isomorphism from the vector space to the differential space
697
+
698
+ - the inverse of the isomorphism
699
+
700
+ EXAMPLES::
701
+
702
+ sage: K.<x> = FunctionField(GF(5)); _.<Y> = K[]
703
+ sage: F.<y> = K.extension(Y^2 - x^3 - 1)
704
+ sage: O = F.maximal_order()
705
+ sage: I = O.ideal(x - 2)
706
+ sage: P1 = I.divisor().support()[0]
707
+ sage: Pinf = F.places_infinite()[0]
708
+ sage: D = -3*Pinf + P1
709
+ sage: V, from_V, to_V = D.differential_space()
710
+ sage: all(to_V(from_V(e)) == e for e in V)
711
+ True
712
+ """
713
+ F = self.parent()._field
714
+ W = F.space_of_differentials()
715
+ k = F.constant_base_field()
716
+
717
+ fbasis, coordinates = self._differential_space()
718
+
719
+ n = len(fbasis)
720
+ V = k ** n
721
+
722
+ def from_V(v):
723
+ f = sum(v[i] * fbasis[i] for i in range(n))
724
+ return W.element_class(W, f)
725
+
726
+ def to_V(w):
727
+ return vector(coordinates(w._f))
728
+
729
+ from sage.rings.function_field.maps import (
730
+ FunctionFieldLinearMap, FunctionFieldLinearMapSection)
731
+
732
+ mor_from_V = FunctionFieldLinearMap(Hom(V,W), from_V)
733
+ mor_to_V = FunctionFieldLinearMapSection(Hom(W,V), to_V)
734
+
735
+ return V, mor_from_V, mor_to_V
736
+
737
+ @cached_method
738
+ def _differential_space(self):
739
+ """
740
+ Return an (echelon) basis and coordinates function for the differential
741
+ space of the divisor.
742
+
743
+ The return values are cached so that :meth:`basis_differential_space` and
744
+ :meth:`differential_space` methods give consistent outputs.
745
+
746
+ EXAMPLES::
747
+
748
+ sage: K.<x> = FunctionField(GF(5)); _.<Y> = K[]
749
+ sage: F.<y> = K.extension(Y^2 - x^3 - 1)
750
+ sage: O = F.maximal_order()
751
+ sage: I = O.ideal(x - 2)
752
+ sage: D = -I.divisor()
753
+ sage: basis, coordinates = D._differential_space()
754
+ sage: basis
755
+ [(x/(x^4 + 3*x^3 + x + 3))*y, (1/(x^4 + 3*x^3 + x + 3))*y]
756
+ sage: D.basis_differential_space()
757
+ [((x/(x^4 + 3*x^3 + x + 3))*y) d(x), ((1/(x^4 + 3*x^3 + x + 3))*y) d(x)]
758
+ sage: coordinates(basis[0])
759
+ [1, 0]
760
+ sage: coordinates(basis[1])
761
+ [0, 1]
762
+ sage: coordinates(basis[0]+basis[1])
763
+ [1, 1]
764
+ """
765
+ F = self.parent()._field
766
+ x = F.base_field().gen()
767
+ d = (-2) * F(x).divisor_of_poles() + F.different() - self
768
+
769
+ fbasis, coordinates = self._echelon_basis(d._basis())
770
+ return fbasis, coordinates
771
+
772
+ def _basis(self):
773
+ """
774
+ Return a basis of the Riemann-Roch space of the divisor.
775
+
776
+ EXAMPLES::
777
+
778
+ sage: K.<x> = FunctionField(GF(5)); _.<Y> = K[]
779
+ sage: F.<y> = K.extension(Y^2 - x^3 - 1)
780
+ sage: O = F.maximal_order()
781
+ sage: I = O.ideal(x - 2)
782
+ sage: D = I.divisor()
783
+ sage: D._basis()
784
+ [1/(x + 3), x/(x + 3)]
785
+
786
+ This implements Hess' algorithm 6.1 in [Hes2002]_
787
+ """
788
+ F = self.parent()._field
789
+ n = F.degree()
790
+ O = F.maximal_order()
791
+ Oinf = F.maximal_order_infinite()
792
+
793
+ # Step 1: The ideal I is the inverse of the product of prime ideals attached
794
+ # to the finite places in the divisor while the ideal J corresponds
795
+ # to the infinite places in the divisor. The later steps are basically
796
+ # to compute the intersection of the ideals I and J.
797
+ I = O.ideal(1)
798
+ J = Oinf.ideal(1)
799
+ for p in self._data:
800
+ m = self._data[p]
801
+ if p.is_infinite_place():
802
+ J *= p.prime_ideal() ** (-m)
803
+ else:
804
+ I *= p.prime_ideal() ** (-m)
805
+
806
+ # Step 2: construct matrix M of rational functions in x such that
807
+ # M * B == C where B = [b1,b1,...,bn], C =[v1,v2,...,vn]
808
+ V,fr,to = F.free_module(map=True)
809
+ B = matrix([to(b) for b in J.gens_over_base()])
810
+ C = matrix([to(v) for v in I.gens_over_base()])
811
+ M = C * B.inverse()
812
+
813
+ # Step 2.5: get the denominator d of M and set mat = d * M
814
+ den = lcm([e.denominator() for e in M.list()])
815
+ R = den.parent() # polynomial ring
816
+ one = R.one()
817
+ mat = matrix(R, n, [e.numerator() for e in (den*M).list()])
818
+ gens = list(I.gens_over_base())
819
+
820
+ # Step 3: transform mat to a weak Popov form, together with gens
821
+
822
+ # initialise pivot_row and conflicts list
823
+ pivot_row = [[] for i in range(n)]
824
+ conflicts = []
825
+ for i in range(n):
826
+ bestp = -1
827
+ best = -1
828
+ for c in range(n):
829
+ d = mat[i,c].degree()
830
+ if d >= best:
831
+ bestp = c
832
+ best = d
833
+
834
+ if best >= 0:
835
+ pivot_row[bestp].append((i,best))
836
+ if len(pivot_row[bestp]) > 1:
837
+ conflicts.append(bestp)
838
+
839
+ # while there is a conflict, do a simple transformation
840
+ while conflicts:
841
+ c = conflicts.pop()
842
+ row = pivot_row[c]
843
+ i,ideg = row.pop()
844
+ j,jdeg = row.pop()
845
+
846
+ if jdeg > ideg:
847
+ i,j = j,i
848
+ ideg,jdeg = jdeg,ideg
849
+
850
+ coeff = - mat[i,c].lc() / mat[j,c].lc()
851
+ s = coeff * one.shift(ideg - jdeg)
852
+
853
+ mat.add_multiple_of_row(i, j, s)
854
+ gens[i] += s * gens[j]
855
+
856
+ row.append((j,jdeg))
857
+
858
+ bestp = -1
859
+ best = -1
860
+ for c in range(n):
861
+ d = mat[i,c].degree()
862
+ if d >= best:
863
+ bestp = c
864
+ best = d
865
+
866
+ if best >= 0:
867
+ pivot_row[bestp].append((i,best))
868
+ if len(pivot_row[bestp]) > 1:
869
+ conflicts.append(bestp)
870
+
871
+ # Step 4: build a Riemann-Roch basis from the data in mat and gens.
872
+ # Note that the values mat[i,j].degree() - den.degree() are known as
873
+ # invariants of M.
874
+ basis = []
875
+ for j in range(n):
876
+ i, ideg = pivot_row[j][0]
877
+ gi = gens[i]
878
+ basis.extend(one.shift(k) * gi
879
+ for k in range(den.degree() - ideg + 1))
880
+ # Done!
881
+ return basis
882
+
883
+ def _echelon_basis(self, basis):
884
+ """
885
+ This is a helper method to compute an echelonized basis of the subspace
886
+ generated by ``basis`` over `k`.
887
+
888
+ The entries of ``basis`` vectors are function field elements, viewed
889
+ as vectors of rational functions over `k`.
890
+
891
+ EXAMPLES::
892
+
893
+ sage: K.<x> = FunctionField(GF(5)); _.<Y> = K[]
894
+ sage: F.<y> = K.extension(Y^2 - x^3 - 1)
895
+ sage: D = F.divisor_group().zero()
896
+ sage: echelon_basis, coordinates = D._echelon_basis([x/y, (x + 1)/y])
897
+ sage: echelon_basis
898
+ [(x/(x^3 + 1))*y, (1/(x^3 + 1))*y]
899
+ sage: f1, f2 = echelon_basis
900
+ sage: coordinates(f1)
901
+ [1, 0]
902
+ sage: coordinates(f2)
903
+ [0, 1]
904
+ sage: coordinates(x/y)
905
+ [1, 0]
906
+ sage: coordinates((x + 1)/y)
907
+ [1, 1]
908
+ sage: 1 * f1 + 1 * f2 == (x + 1)/y
909
+ True
910
+ """
911
+ F = self.parent()._field
912
+ k = F.constant_base_field()
913
+ V, fr_V, to_V = F.free_module(map=True)
914
+ n = V.degree()
915
+ m = len(basis)
916
+
917
+ vbasis = [to_V(f) for f in basis]
918
+
919
+ # compute the pivot position for nonzero vector v over rational functions
920
+ def pivot(v):
921
+ for i in range(n):
922
+ e = v[i]
923
+ if e != 0:
924
+ return (i,e.numerator().degree() - e.denominator().degree())
925
+
926
+ def greater(v, w): # v and w are not equal
927
+ return v[0] < w[0] or v[0] == w[0] and v[1] > w[1]
928
+
929
+ # collate rows by their pivot position
930
+ pivot_rows = {}
931
+ for i in range(m):
932
+ p = pivot(vbasis[i])
933
+ if p in pivot_rows:
934
+ pivot_rows[p].append(i)
935
+ else:
936
+ pivot_rows[p] = [i]
937
+
938
+ # compute "echelon" basis in which pivot positions decrease strictly
939
+ nbasis = []
940
+ npivots = []
941
+ while pivot_rows:
942
+ pivots = list(pivot_rows)
943
+
944
+ head = pivots[0]
945
+ for p in pivots[1:]:
946
+ if not greater(head,p):
947
+ head = p
948
+
949
+ rows = pivot_rows[head]
950
+ if len(rows) > 1:
951
+ r = rows[0]
952
+ vr = vbasis[r][head[0]]
953
+ cr = vr.numerator().lc() / vr.denominator().lc()
954
+ for i in rows[1:]:
955
+ vi = vbasis[i][head[0]]
956
+ ci = vi.numerator().lc() / vi.denominator().lc()
957
+ vbasis[i] -= ci/cr * vbasis[r]
958
+ p = pivot(vbasis[i])
959
+ if p in pivot_rows:
960
+ pivot_rows[p].append(i)
961
+ else:
962
+ pivot_rows[p] = [i]
963
+ nbasis.append(vbasis[rows[0]])
964
+ npivots.append(head)
965
+ del pivot_rows[head]
966
+
967
+ def coordinates(f):
968
+ v = to_V(f)
969
+ coords = [k(0) for i in range(m)]
970
+ while v != 0:
971
+ p = pivot(v)
972
+ ind = npivots.index(p) # an exception implies x is not in the domain
973
+ w = nbasis[ind]
974
+ cv = v[p[0]].numerator().lc() / v[p[0]].denominator().lc()
975
+ cw = w[p[0]].numerator().lc() / w[p[0]].denominator().lc()
976
+ c = cv/cw
977
+ v -= c * w
978
+ coords[ind] = c
979
+ return coords
980
+
981
+ newbasis = [fr_V(f) for f in nbasis]
982
+
983
+ return newbasis, coordinates
984
+
985
+
986
+ class DivisorGroup(UniqueRepresentation, Parent):
987
+ """
988
+ Groups of divisors of function fields.
989
+
990
+ INPUT:
991
+
992
+ - ``field`` -- function field
993
+
994
+ EXAMPLES::
995
+
996
+ sage: K.<x> = FunctionField(GF(5)); _.<Y> = K[]
997
+ sage: F.<y> = K.extension(Y^2 - x^3 - 1)
998
+ sage: F.divisor_group()
999
+ Divisor group of Function field in y defined by y^2 + 4*x^3 + 4
1000
+ """
1001
+ Element = FunctionFieldDivisor
1002
+
1003
+ def __init__(self, field):
1004
+ """
1005
+ Initialize.
1006
+
1007
+ TESTS::
1008
+
1009
+ sage: K.<x> = FunctionField(GF(5)); _.<Y> = K[]
1010
+ sage: F.<y> = K.extension(Y^2 - x^3 - 1)
1011
+ sage: G = F.divisor_group()
1012
+ sage: TestSuite(G).run()
1013
+ """
1014
+ Parent.__init__(self, base=IntegerRing(), category=CommutativeAdditiveGroups())
1015
+
1016
+ self._field = field # function field
1017
+
1018
+ def _repr_(self):
1019
+ """
1020
+ Return the string representation of the group of divisors.
1021
+
1022
+ EXAMPLES::
1023
+
1024
+ sage: K.<x> = FunctionField(GF(5)); _.<Y> = K[]
1025
+ sage: F.<y> = K.extension(Y^2 - x^3 - 1)
1026
+ sage: F.divisor_group()
1027
+ Divisor group of Function field in y defined by y^2 + 4*x^3 + 4
1028
+ """
1029
+ return "Divisor group of %s" % (self._field,)
1030
+
1031
+ def _element_constructor_(self, x):
1032
+ """
1033
+ Construct a divisor from ``x``.
1034
+
1035
+ EXAMPLES::
1036
+
1037
+ sage: K.<x> = FunctionField(GF(5)); _.<Y> = K[]
1038
+ sage: F.<y> = K.extension(Y^2 - x^3 - 1)
1039
+ sage: G = F.divisor_group()
1040
+ sage: G(0)
1041
+ 0
1042
+ """
1043
+ if x == 0:
1044
+ return self.element_class(self, {})
1045
+ raise ValueError(f"cannot construct a divisor from {x}")
1046
+
1047
+ def _coerce_map_from_(self, S):
1048
+ """
1049
+ Define coercions.
1050
+
1051
+ EXAMPLES:
1052
+
1053
+ A place is converted to a prime divisor::
1054
+
1055
+ sage: K.<x> = FunctionField(GF(5)); _.<Y> = K[]
1056
+ sage: F.<y> = K.extension(Y^2 - x^3 - 1)
1057
+ sage: O = F.maximal_order()
1058
+ sage: I = O.ideal(x + 1,y)
1059
+ sage: P = I.place()
1060
+ sage: y.divisor() + P
1061
+ -3*Place (1/x, 1/x^2*y)
1062
+ + 2*Place (x + 1, y)
1063
+ + Place (x^2 + 4*x + 1, y)
1064
+ """
1065
+ if isinstance(S, PlaceSet):
1066
+ func = lambda place: prime_divisor(self._field, place)
1067
+ return SetMorphism(Hom(S,self), func)
1068
+
1069
+ def function_field(self):
1070
+ """
1071
+ Return the function field to which the divisor group is attached.
1072
+
1073
+ EXAMPLES::
1074
+
1075
+ sage: K.<x> = FunctionField(GF(5)); _.<Y> = K[]
1076
+ sage: F.<y> = K.extension(Y^2 - x^3 - 1)
1077
+ sage: G = F.divisor_group()
1078
+ sage: G.function_field()
1079
+ Function field in y defined by y^2 + 4*x^3 + 4
1080
+ """
1081
+ return self._field
1082
+
1083
+ def _an_element_(self):
1084
+ """
1085
+ Return a divisor.
1086
+
1087
+ EXAMPLES::
1088
+
1089
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
1090
+ sage: L.<y> = K.extension(Y^3 + x + x^3*Y)
1091
+ sage: G = L.divisor_group()
1092
+ sage: G.an_element() # random
1093
+ Place (1/x, 1/x^3*y^2 + 1/x^2*y + 1)
1094
+ + 2*Place (x^2 + x + 1, y + x + 1)
1095
+ + 2*Place (x^3 + x + 1, y + x^2)
1096
+ + Place (x^3 + x^2 + 1, y + x^2 + 1)
1097
+ """
1098
+ N = 10
1099
+ d = 1
1100
+ places = []
1101
+ while len(places) <= N: # collect at least N places
1102
+ places += self._field.places(d)
1103
+ d += 1
1104
+ e = self.element_class(self, {})
1105
+ for i in range(random.randint(0,N)):
1106
+ e += random.choice(places)
1107
+ return e