passagemath-categories 10.6.32__cp314-cp314t-musllinux_1_2_aarch64.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.
Files changed (719) hide show
  1. passagemath_categories-10.6.32.dist-info/METADATA +156 -0
  2. passagemath_categories-10.6.32.dist-info/RECORD +719 -0
  3. passagemath_categories-10.6.32.dist-info/WHEEL +5 -0
  4. passagemath_categories-10.6.32.dist-info/top_level.txt +2 -0
  5. passagemath_categories.libs/libgcc_s-2d945d6c.so.1 +0 -0
  6. passagemath_categories.libs/libgmp-28992bcb.so.10.5.0 +0 -0
  7. passagemath_categories.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
  8. sage/all__sagemath_categories.py +28 -0
  9. sage/arith/all.py +38 -0
  10. sage/arith/constants.pxd +27 -0
  11. sage/arith/functions.cpython-314t-aarch64-linux-musl.so +0 -0
  12. sage/arith/functions.pxd +4 -0
  13. sage/arith/functions.pyx +221 -0
  14. sage/arith/misc.py +6552 -0
  15. sage/arith/multi_modular.cpython-314t-aarch64-linux-musl.so +0 -0
  16. sage/arith/multi_modular.pxd +39 -0
  17. sage/arith/multi_modular.pyx +994 -0
  18. sage/arith/rational_reconstruction.cpython-314t-aarch64-linux-musl.so +0 -0
  19. sage/arith/rational_reconstruction.pxd +4 -0
  20. sage/arith/rational_reconstruction.pyx +115 -0
  21. sage/arith/srange.cpython-314t-aarch64-linux-musl.so +0 -0
  22. sage/arith/srange.pyx +571 -0
  23. sage/calculus/all__sagemath_categories.py +2 -0
  24. sage/calculus/functional.py +481 -0
  25. sage/calculus/functions.py +151 -0
  26. sage/categories/additive_groups.py +73 -0
  27. sage/categories/additive_magmas.py +1044 -0
  28. sage/categories/additive_monoids.py +114 -0
  29. sage/categories/additive_semigroups.py +184 -0
  30. sage/categories/affine_weyl_groups.py +238 -0
  31. sage/categories/algebra_ideals.py +95 -0
  32. sage/categories/algebra_modules.py +96 -0
  33. sage/categories/algebras.py +349 -0
  34. sage/categories/algebras_with_basis.py +377 -0
  35. sage/categories/all.py +160 -0
  36. sage/categories/aperiodic_semigroups.py +29 -0
  37. sage/categories/associative_algebras.py +47 -0
  38. sage/categories/bialgebras.py +101 -0
  39. sage/categories/bialgebras_with_basis.py +414 -0
  40. sage/categories/bimodules.py +206 -0
  41. sage/categories/chain_complexes.py +268 -0
  42. sage/categories/classical_crystals.py +480 -0
  43. sage/categories/coalgebras.py +405 -0
  44. sage/categories/coalgebras_with_basis.py +232 -0
  45. sage/categories/coercion_methods.cpython-314t-aarch64-linux-musl.so +0 -0
  46. sage/categories/coercion_methods.pyx +52 -0
  47. sage/categories/commutative_additive_groups.py +104 -0
  48. sage/categories/commutative_additive_monoids.py +45 -0
  49. sage/categories/commutative_additive_semigroups.py +48 -0
  50. sage/categories/commutative_algebra_ideals.py +87 -0
  51. sage/categories/commutative_algebras.py +94 -0
  52. sage/categories/commutative_ring_ideals.py +58 -0
  53. sage/categories/commutative_rings.py +736 -0
  54. sage/categories/complete_discrete_valuation.py +293 -0
  55. sage/categories/complex_reflection_groups.py +145 -0
  56. sage/categories/complex_reflection_or_generalized_coxeter_groups.py +1249 -0
  57. sage/categories/coxeter_group_algebras.py +186 -0
  58. sage/categories/coxeter_groups.py +3402 -0
  59. sage/categories/crystals.py +2628 -0
  60. sage/categories/cw_complexes.py +216 -0
  61. sage/categories/dedekind_domains.py +137 -0
  62. sage/categories/discrete_valuation.py +325 -0
  63. sage/categories/distributive_magmas_and_additive_magmas.py +100 -0
  64. sage/categories/division_rings.py +114 -0
  65. sage/categories/domains.py +95 -0
  66. sage/categories/drinfeld_modules.py +789 -0
  67. sage/categories/dual.py +42 -0
  68. sage/categories/enumerated_sets.py +1146 -0
  69. sage/categories/euclidean_domains.py +271 -0
  70. sage/categories/examples/algebras_with_basis.py +102 -0
  71. sage/categories/examples/all.py +1 -0
  72. sage/categories/examples/commutative_additive_monoids.py +130 -0
  73. sage/categories/examples/commutative_additive_semigroups.py +199 -0
  74. sage/categories/examples/coxeter_groups.py +8 -0
  75. sage/categories/examples/crystals.py +236 -0
  76. sage/categories/examples/cw_complexes.py +163 -0
  77. sage/categories/examples/facade_sets.py +187 -0
  78. sage/categories/examples/filtered_algebras_with_basis.py +204 -0
  79. sage/categories/examples/filtered_modules_with_basis.py +154 -0
  80. sage/categories/examples/finite_coxeter_groups.py +252 -0
  81. sage/categories/examples/finite_dimensional_algebras_with_basis.py +148 -0
  82. sage/categories/examples/finite_dimensional_lie_algebras_with_basis.py +495 -0
  83. sage/categories/examples/finite_enumerated_sets.py +208 -0
  84. sage/categories/examples/finite_monoids.py +150 -0
  85. sage/categories/examples/finite_semigroups.py +190 -0
  86. sage/categories/examples/finite_weyl_groups.py +191 -0
  87. sage/categories/examples/graded_connected_hopf_algebras_with_basis.py +152 -0
  88. sage/categories/examples/graded_modules_with_basis.py +168 -0
  89. sage/categories/examples/graphs.py +122 -0
  90. sage/categories/examples/hopf_algebras_with_basis.py +145 -0
  91. sage/categories/examples/infinite_enumerated_sets.py +190 -0
  92. sage/categories/examples/lie_algebras.py +352 -0
  93. sage/categories/examples/lie_algebras_with_basis.py +196 -0
  94. sage/categories/examples/magmas.py +162 -0
  95. sage/categories/examples/manifolds.py +94 -0
  96. sage/categories/examples/monoids.py +144 -0
  97. sage/categories/examples/posets.py +178 -0
  98. sage/categories/examples/semigroups.py +580 -0
  99. sage/categories/examples/semigroups_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  100. sage/categories/examples/semigroups_cython.pyx +221 -0
  101. sage/categories/examples/semirings.py +249 -0
  102. sage/categories/examples/sets_cat.py +706 -0
  103. sage/categories/examples/sets_with_grading.py +101 -0
  104. sage/categories/examples/with_realizations.py +542 -0
  105. sage/categories/fields.py +991 -0
  106. sage/categories/filtered_algebras.py +63 -0
  107. sage/categories/filtered_algebras_with_basis.py +548 -0
  108. sage/categories/filtered_hopf_algebras_with_basis.py +138 -0
  109. sage/categories/filtered_modules.py +210 -0
  110. sage/categories/filtered_modules_with_basis.py +1209 -0
  111. sage/categories/finite_complex_reflection_groups.py +1506 -0
  112. sage/categories/finite_coxeter_groups.py +1138 -0
  113. sage/categories/finite_crystals.py +103 -0
  114. sage/categories/finite_dimensional_algebras_with_basis.py +1860 -0
  115. sage/categories/finite_dimensional_bialgebras_with_basis.py +33 -0
  116. sage/categories/finite_dimensional_coalgebras_with_basis.py +33 -0
  117. sage/categories/finite_dimensional_graded_lie_algebras_with_basis.py +231 -0
  118. sage/categories/finite_dimensional_hopf_algebras_with_basis.py +38 -0
  119. sage/categories/finite_dimensional_lie_algebras_with_basis.py +2774 -0
  120. sage/categories/finite_dimensional_modules_with_basis.py +1407 -0
  121. sage/categories/finite_dimensional_nilpotent_lie_algebras_with_basis.py +167 -0
  122. sage/categories/finite_dimensional_semisimple_algebras_with_basis.py +270 -0
  123. sage/categories/finite_enumerated_sets.py +769 -0
  124. sage/categories/finite_fields.py +252 -0
  125. sage/categories/finite_groups.py +256 -0
  126. sage/categories/finite_lattice_posets.py +242 -0
  127. sage/categories/finite_monoids.py +316 -0
  128. sage/categories/finite_permutation_groups.py +339 -0
  129. sage/categories/finite_posets.py +1994 -0
  130. sage/categories/finite_semigroups.py +136 -0
  131. sage/categories/finite_sets.py +93 -0
  132. sage/categories/finite_weyl_groups.py +39 -0
  133. sage/categories/finitely_generated_lambda_bracket_algebras.py +112 -0
  134. sage/categories/finitely_generated_lie_conformal_algebras.py +114 -0
  135. sage/categories/finitely_generated_magmas.py +57 -0
  136. sage/categories/finitely_generated_semigroups.py +214 -0
  137. sage/categories/function_fields.py +76 -0
  138. sage/categories/g_sets.py +77 -0
  139. sage/categories/gcd_domains.py +65 -0
  140. sage/categories/generalized_coxeter_groups.py +94 -0
  141. sage/categories/graded_algebras.py +85 -0
  142. sage/categories/graded_algebras_with_basis.py +258 -0
  143. sage/categories/graded_bialgebras.py +32 -0
  144. sage/categories/graded_bialgebras_with_basis.py +32 -0
  145. sage/categories/graded_coalgebras.py +65 -0
  146. sage/categories/graded_coalgebras_with_basis.py +51 -0
  147. sage/categories/graded_hopf_algebras.py +41 -0
  148. sage/categories/graded_hopf_algebras_with_basis.py +169 -0
  149. sage/categories/graded_lie_algebras.py +91 -0
  150. sage/categories/graded_lie_algebras_with_basis.py +44 -0
  151. sage/categories/graded_lie_conformal_algebras.py +74 -0
  152. sage/categories/graded_modules.py +133 -0
  153. sage/categories/graded_modules_with_basis.py +329 -0
  154. sage/categories/graphs.py +138 -0
  155. sage/categories/group_algebras.py +430 -0
  156. sage/categories/groupoid.py +94 -0
  157. sage/categories/groups.py +667 -0
  158. sage/categories/h_trivial_semigroups.py +64 -0
  159. sage/categories/hecke_modules.py +185 -0
  160. sage/categories/highest_weight_crystals.py +980 -0
  161. sage/categories/hopf_algebras.py +219 -0
  162. sage/categories/hopf_algebras_with_basis.py +309 -0
  163. sage/categories/infinite_enumerated_sets.py +115 -0
  164. sage/categories/integral_domains.py +203 -0
  165. sage/categories/j_trivial_semigroups.py +29 -0
  166. sage/categories/kac_moody_algebras.py +82 -0
  167. sage/categories/kahler_algebras.py +203 -0
  168. sage/categories/l_trivial_semigroups.py +63 -0
  169. sage/categories/lambda_bracket_algebras.py +280 -0
  170. sage/categories/lambda_bracket_algebras_with_basis.py +107 -0
  171. sage/categories/lattice_posets.py +89 -0
  172. sage/categories/left_modules.py +49 -0
  173. sage/categories/lie_algebras.py +1070 -0
  174. sage/categories/lie_algebras_with_basis.py +261 -0
  175. sage/categories/lie_conformal_algebras.py +350 -0
  176. sage/categories/lie_conformal_algebras_with_basis.py +147 -0
  177. sage/categories/lie_groups.py +73 -0
  178. sage/categories/loop_crystals.py +1290 -0
  179. sage/categories/magmas.py +1189 -0
  180. sage/categories/magmas_and_additive_magmas.py +149 -0
  181. sage/categories/magmatic_algebras.py +365 -0
  182. sage/categories/manifolds.py +352 -0
  183. sage/categories/matrix_algebras.py +40 -0
  184. sage/categories/metric_spaces.py +387 -0
  185. sage/categories/modular_abelian_varieties.py +78 -0
  186. sage/categories/modules.py +989 -0
  187. sage/categories/modules_with_basis.py +2794 -0
  188. sage/categories/monoid_algebras.py +38 -0
  189. sage/categories/monoids.py +739 -0
  190. sage/categories/noetherian_rings.py +87 -0
  191. sage/categories/number_fields.py +242 -0
  192. sage/categories/ore_modules.py +189 -0
  193. sage/categories/partially_ordered_monoids.py +49 -0
  194. sage/categories/permutation_groups.py +63 -0
  195. sage/categories/pointed_sets.py +42 -0
  196. sage/categories/polyhedra.py +74 -0
  197. sage/categories/poor_man_map.py +270 -0
  198. sage/categories/posets.py +722 -0
  199. sage/categories/principal_ideal_domains.py +270 -0
  200. sage/categories/quantum_group_representations.py +543 -0
  201. sage/categories/quotient_fields.py +728 -0
  202. sage/categories/r_trivial_semigroups.py +45 -0
  203. sage/categories/regular_crystals.py +898 -0
  204. sage/categories/regular_supercrystals.py +170 -0
  205. sage/categories/right_modules.py +49 -0
  206. sage/categories/ring_ideals.py +74 -0
  207. sage/categories/rings.py +1904 -0
  208. sage/categories/rngs.py +175 -0
  209. sage/categories/schemes.py +393 -0
  210. sage/categories/semigroups.py +1060 -0
  211. sage/categories/semirings.py +71 -0
  212. sage/categories/semisimple_algebras.py +114 -0
  213. sage/categories/sets_with_grading.py +235 -0
  214. sage/categories/shephard_groups.py +43 -0
  215. sage/categories/signed_tensor.py +120 -0
  216. sage/categories/simplicial_complexes.py +134 -0
  217. sage/categories/simplicial_sets.py +1206 -0
  218. sage/categories/super_algebras.py +149 -0
  219. sage/categories/super_algebras_with_basis.py +144 -0
  220. sage/categories/super_hopf_algebras_with_basis.py +126 -0
  221. sage/categories/super_lie_conformal_algebras.py +193 -0
  222. sage/categories/super_modules.py +229 -0
  223. sage/categories/super_modules_with_basis.py +193 -0
  224. sage/categories/supercommutative_algebras.py +99 -0
  225. sage/categories/supercrystals.py +406 -0
  226. sage/categories/tensor.py +110 -0
  227. sage/categories/topological_spaces.py +170 -0
  228. sage/categories/triangular_kac_moody_algebras.py +439 -0
  229. sage/categories/tutorial.py +58 -0
  230. sage/categories/unique_factorization_domains.py +318 -0
  231. sage/categories/unital_algebras.py +426 -0
  232. sage/categories/vector_bundles.py +159 -0
  233. sage/categories/vector_spaces.py +357 -0
  234. sage/categories/weyl_groups.py +853 -0
  235. sage/combinat/all__sagemath_categories.py +34 -0
  236. sage/combinat/backtrack.py +180 -0
  237. sage/combinat/combinat.py +2269 -0
  238. sage/combinat/combinat_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  239. sage/combinat/combinat_cython.pxd +6 -0
  240. sage/combinat/combinat_cython.pyx +390 -0
  241. sage/combinat/combination.py +796 -0
  242. sage/combinat/combinatorial_map.py +416 -0
  243. sage/combinat/composition.py +2192 -0
  244. sage/combinat/dlx.py +510 -0
  245. sage/combinat/integer_lists/__init__.py +7 -0
  246. sage/combinat/integer_lists/base.cpython-314t-aarch64-linux-musl.so +0 -0
  247. sage/combinat/integer_lists/base.pxd +16 -0
  248. sage/combinat/integer_lists/base.pyx +713 -0
  249. sage/combinat/integer_lists/invlex.cpython-314t-aarch64-linux-musl.so +0 -0
  250. sage/combinat/integer_lists/invlex.pxd +4 -0
  251. sage/combinat/integer_lists/invlex.pyx +1650 -0
  252. sage/combinat/integer_lists/lists.py +328 -0
  253. sage/combinat/integer_lists/nn.py +48 -0
  254. sage/combinat/integer_vector.py +1818 -0
  255. sage/combinat/integer_vector_weighted.py +413 -0
  256. sage/combinat/matrices/all__sagemath_categories.py +5 -0
  257. sage/combinat/matrices/dancing_links.cpython-314t-aarch64-linux-musl.so +0 -0
  258. sage/combinat/matrices/dancing_links.pyx +1159 -0
  259. sage/combinat/matrices/dancing_links_c.h +380 -0
  260. sage/combinat/matrices/dlxcpp.py +136 -0
  261. sage/combinat/partition.py +10070 -0
  262. sage/combinat/partitions.cpython-314t-aarch64-linux-musl.so +0 -0
  263. sage/combinat/partitions.pyx +743 -0
  264. sage/combinat/permutation.py +10168 -0
  265. sage/combinat/permutation_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  266. sage/combinat/permutation_cython.pxd +11 -0
  267. sage/combinat/permutation_cython.pyx +407 -0
  268. sage/combinat/q_analogues.py +1090 -0
  269. sage/combinat/ranker.py +268 -0
  270. sage/combinat/subset.py +1561 -0
  271. sage/combinat/subsets_hereditary.py +202 -0
  272. sage/combinat/subsets_pairwise.py +184 -0
  273. sage/combinat/tools.py +63 -0
  274. sage/combinat/tuple.py +348 -0
  275. sage/data_structures/all.py +2 -0
  276. sage/data_structures/all__sagemath_categories.py +2 -0
  277. sage/data_structures/binary_matrix.pxd +138 -0
  278. sage/data_structures/binary_search.cpython-314t-aarch64-linux-musl.so +0 -0
  279. sage/data_structures/binary_search.pxd +3 -0
  280. sage/data_structures/binary_search.pyx +66 -0
  281. sage/data_structures/bitset.cpython-314t-aarch64-linux-musl.so +0 -0
  282. sage/data_structures/bitset.pxd +40 -0
  283. sage/data_structures/bitset.pyx +2385 -0
  284. sage/data_structures/bitset_base.cpython-314t-aarch64-linux-musl.so +0 -0
  285. sage/data_structures/bitset_base.pxd +926 -0
  286. sage/data_structures/bitset_base.pyx +117 -0
  287. sage/data_structures/bitset_intrinsics.h +487 -0
  288. sage/data_structures/blas_dict.cpython-314t-aarch64-linux-musl.so +0 -0
  289. sage/data_structures/blas_dict.pxd +12 -0
  290. sage/data_structures/blas_dict.pyx +469 -0
  291. sage/data_structures/list_of_pairs.cpython-314t-aarch64-linux-musl.so +0 -0
  292. sage/data_structures/list_of_pairs.pxd +16 -0
  293. sage/data_structures/list_of_pairs.pyx +122 -0
  294. sage/data_structures/mutable_poset.py +3312 -0
  295. sage/data_structures/pairing_heap.cpython-314t-aarch64-linux-musl.so +0 -0
  296. sage/data_structures/pairing_heap.h +346 -0
  297. sage/data_structures/pairing_heap.pxd +88 -0
  298. sage/data_structures/pairing_heap.pyx +1464 -0
  299. sage/data_structures/sparse_bitset.pxd +62 -0
  300. sage/data_structures/stream.py +5070 -0
  301. sage/databases/all__sagemath_categories.py +7 -0
  302. sage/databases/sql_db.py +2236 -0
  303. sage/ext/all__sagemath_categories.py +3 -0
  304. sage/ext/fast_callable.cpython-314t-aarch64-linux-musl.so +0 -0
  305. sage/ext/fast_callable.pxd +4 -0
  306. sage/ext/fast_callable.pyx +2746 -0
  307. sage/ext/fast_eval.cpython-314t-aarch64-linux-musl.so +0 -0
  308. sage/ext/fast_eval.pxd +1 -0
  309. sage/ext/fast_eval.pyx +102 -0
  310. sage/ext/interpreters/__init__.py +1 -0
  311. sage/ext/interpreters/all__sagemath_categories.py +2 -0
  312. sage/ext/interpreters/wrapper_el.cpython-314t-aarch64-linux-musl.so +0 -0
  313. sage/ext/interpreters/wrapper_el.pxd +18 -0
  314. sage/ext/interpreters/wrapper_el.pyx +148 -0
  315. sage/ext/interpreters/wrapper_py.cpython-314t-aarch64-linux-musl.so +0 -0
  316. sage/ext/interpreters/wrapper_py.pxd +17 -0
  317. sage/ext/interpreters/wrapper_py.pyx +133 -0
  318. sage/functions/airy.py +937 -0
  319. sage/functions/all.py +97 -0
  320. sage/functions/bessel.py +2102 -0
  321. sage/functions/error.py +784 -0
  322. sage/functions/exp_integral.py +1529 -0
  323. sage/functions/gamma.py +1087 -0
  324. sage/functions/generalized.py +672 -0
  325. sage/functions/hyperbolic.py +747 -0
  326. sage/functions/hypergeometric.py +1156 -0
  327. sage/functions/jacobi.py +1705 -0
  328. sage/functions/log.py +1402 -0
  329. sage/functions/min_max.py +338 -0
  330. sage/functions/orthogonal_polys.py +3106 -0
  331. sage/functions/other.py +2303 -0
  332. sage/functions/piecewise.py +1505 -0
  333. sage/functions/prime_pi.cpython-314t-aarch64-linux-musl.so +0 -0
  334. sage/functions/prime_pi.pyx +262 -0
  335. sage/functions/special.py +1212 -0
  336. sage/functions/spike_function.py +278 -0
  337. sage/functions/transcendental.py +690 -0
  338. sage/functions/trig.py +1062 -0
  339. sage/functions/wigner.py +726 -0
  340. sage/geometry/abc.cpython-314t-aarch64-linux-musl.so +0 -0
  341. sage/geometry/abc.pyx +82 -0
  342. sage/geometry/all__sagemath_categories.py +1 -0
  343. sage/groups/all__sagemath_categories.py +11 -0
  344. sage/groups/generic.py +1733 -0
  345. sage/groups/groups_catalog.py +113 -0
  346. sage/groups/perm_gps/all__sagemath_categories.py +1 -0
  347. sage/groups/perm_gps/partn_ref/all.py +1 -0
  348. sage/groups/perm_gps/partn_ref/all__sagemath_categories.py +1 -0
  349. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.cpython-314t-aarch64-linux-musl.so +0 -0
  350. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pxd +52 -0
  351. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx +906 -0
  352. sage/groups/perm_gps/partn_ref/canonical_augmentation.cpython-314t-aarch64-linux-musl.so +0 -0
  353. sage/groups/perm_gps/partn_ref/canonical_augmentation.pxd +85 -0
  354. sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx +534 -0
  355. sage/groups/perm_gps/partn_ref/data_structures.cpython-314t-aarch64-linux-musl.so +0 -0
  356. sage/groups/perm_gps/partn_ref/data_structures.pxd +576 -0
  357. sage/groups/perm_gps/partn_ref/data_structures.pyx +1792 -0
  358. sage/groups/perm_gps/partn_ref/double_coset.cpython-314t-aarch64-linux-musl.so +0 -0
  359. sage/groups/perm_gps/partn_ref/double_coset.pxd +45 -0
  360. sage/groups/perm_gps/partn_ref/double_coset.pyx +739 -0
  361. sage/groups/perm_gps/partn_ref/refinement_lists.cpython-314t-aarch64-linux-musl.so +0 -0
  362. sage/groups/perm_gps/partn_ref/refinement_lists.pxd +18 -0
  363. sage/groups/perm_gps/partn_ref/refinement_lists.pyx +82 -0
  364. sage/groups/perm_gps/partn_ref/refinement_python.cpython-314t-aarch64-linux-musl.so +0 -0
  365. sage/groups/perm_gps/partn_ref/refinement_python.pxd +16 -0
  366. sage/groups/perm_gps/partn_ref/refinement_python.pyx +564 -0
  367. sage/groups/perm_gps/partn_ref/refinement_sets.cpython-314t-aarch64-linux-musl.so +0 -0
  368. sage/groups/perm_gps/partn_ref/refinement_sets.pxd +60 -0
  369. sage/groups/perm_gps/partn_ref/refinement_sets.pyx +858 -0
  370. sage/interfaces/abc.py +140 -0
  371. sage/interfaces/all.py +58 -0
  372. sage/interfaces/all__sagemath_categories.py +1 -0
  373. sage/interfaces/expect.py +1643 -0
  374. sage/interfaces/interface.py +1682 -0
  375. sage/interfaces/process.cpython-314t-aarch64-linux-musl.so +0 -0
  376. sage/interfaces/process.pxd +5 -0
  377. sage/interfaces/process.pyx +288 -0
  378. sage/interfaces/quit.py +167 -0
  379. sage/interfaces/sage0.py +604 -0
  380. sage/interfaces/sagespawn.cpython-314t-aarch64-linux-musl.so +0 -0
  381. sage/interfaces/sagespawn.pyx +308 -0
  382. sage/interfaces/tab_completion.py +101 -0
  383. sage/misc/all__sagemath_categories.py +78 -0
  384. sage/misc/allocator.cpython-314t-aarch64-linux-musl.so +0 -0
  385. sage/misc/allocator.pxd +6 -0
  386. sage/misc/allocator.pyx +47 -0
  387. sage/misc/binary_tree.cpython-314t-aarch64-linux-musl.so +0 -0
  388. sage/misc/binary_tree.pxd +29 -0
  389. sage/misc/binary_tree.pyx +537 -0
  390. sage/misc/callable_dict.cpython-314t-aarch64-linux-musl.so +0 -0
  391. sage/misc/callable_dict.pyx +89 -0
  392. sage/misc/citation.cpython-314t-aarch64-linux-musl.so +0 -0
  393. sage/misc/citation.pyx +159 -0
  394. sage/misc/converting_dict.py +293 -0
  395. sage/misc/defaults.py +129 -0
  396. sage/misc/derivative.cpython-314t-aarch64-linux-musl.so +0 -0
  397. sage/misc/derivative.pyx +223 -0
  398. sage/misc/functional.py +2005 -0
  399. sage/misc/html.py +589 -0
  400. sage/misc/latex.py +2673 -0
  401. sage/misc/latex_macros.py +236 -0
  402. sage/misc/latex_standalone.py +1833 -0
  403. sage/misc/map_threaded.py +38 -0
  404. sage/misc/mathml.py +76 -0
  405. sage/misc/method_decorator.py +88 -0
  406. sage/misc/mrange.py +755 -0
  407. sage/misc/multireplace.py +41 -0
  408. sage/misc/object_multiplexer.py +92 -0
  409. sage/misc/parser.cpython-314t-aarch64-linux-musl.so +0 -0
  410. sage/misc/parser.pyx +1107 -0
  411. sage/misc/random_testing.py +264 -0
  412. sage/misc/rest_index_of_methods.py +377 -0
  413. sage/misc/search.cpython-314t-aarch64-linux-musl.so +0 -0
  414. sage/misc/search.pxd +2 -0
  415. sage/misc/search.pyx +68 -0
  416. sage/misc/stopgap.cpython-314t-aarch64-linux-musl.so +0 -0
  417. sage/misc/stopgap.pyx +95 -0
  418. sage/misc/table.py +853 -0
  419. sage/monoids/all__sagemath_categories.py +1 -0
  420. sage/monoids/indexed_free_monoid.py +1071 -0
  421. sage/monoids/monoid.py +82 -0
  422. sage/numerical/all__sagemath_categories.py +1 -0
  423. sage/numerical/backends/all__sagemath_categories.py +1 -0
  424. sage/numerical/backends/generic_backend.cpython-314t-aarch64-linux-musl.so +0 -0
  425. sage/numerical/backends/generic_backend.pxd +61 -0
  426. sage/numerical/backends/generic_backend.pyx +1893 -0
  427. sage/numerical/backends/generic_sdp_backend.cpython-314t-aarch64-linux-musl.so +0 -0
  428. sage/numerical/backends/generic_sdp_backend.pxd +38 -0
  429. sage/numerical/backends/generic_sdp_backend.pyx +755 -0
  430. sage/parallel/all.py +6 -0
  431. sage/parallel/decorate.py +575 -0
  432. sage/parallel/map_reduce.py +1997 -0
  433. sage/parallel/multiprocessing_sage.py +76 -0
  434. sage/parallel/ncpus.py +35 -0
  435. sage/parallel/parallelism.py +364 -0
  436. sage/parallel/reference.py +47 -0
  437. sage/parallel/use_fork.py +333 -0
  438. sage/rings/abc.cpython-314t-aarch64-linux-musl.so +0 -0
  439. sage/rings/abc.pxd +31 -0
  440. sage/rings/abc.pyx +526 -0
  441. sage/rings/algebraic_closure_finite_field.py +1154 -0
  442. sage/rings/all__sagemath_categories.py +91 -0
  443. sage/rings/big_oh.py +227 -0
  444. sage/rings/continued_fraction.py +2754 -0
  445. sage/rings/continued_fraction_gosper.py +220 -0
  446. sage/rings/factorint.cpython-314t-aarch64-linux-musl.so +0 -0
  447. sage/rings/factorint.pyx +295 -0
  448. sage/rings/fast_arith.cpython-314t-aarch64-linux-musl.so +0 -0
  449. sage/rings/fast_arith.pxd +21 -0
  450. sage/rings/fast_arith.pyx +535 -0
  451. sage/rings/finite_rings/all__sagemath_categories.py +9 -0
  452. sage/rings/finite_rings/conway_polynomials.py +542 -0
  453. sage/rings/finite_rings/element_base.cpython-314t-aarch64-linux-musl.so +0 -0
  454. sage/rings/finite_rings/element_base.pxd +12 -0
  455. sage/rings/finite_rings/element_base.pyx +1176 -0
  456. sage/rings/finite_rings/finite_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
  457. sage/rings/finite_rings/finite_field_base.pxd +7 -0
  458. sage/rings/finite_rings/finite_field_base.pyx +2171 -0
  459. sage/rings/finite_rings/finite_field_constructor.py +827 -0
  460. sage/rings/finite_rings/finite_field_prime_modn.py +372 -0
  461. sage/rings/finite_rings/galois_group.py +154 -0
  462. sage/rings/finite_rings/hom_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
  463. sage/rings/finite_rings/hom_finite_field.pxd +23 -0
  464. sage/rings/finite_rings/hom_finite_field.pyx +856 -0
  465. sage/rings/finite_rings/hom_prime_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
  466. sage/rings/finite_rings/hom_prime_finite_field.pxd +15 -0
  467. sage/rings/finite_rings/hom_prime_finite_field.pyx +164 -0
  468. sage/rings/finite_rings/homset.py +357 -0
  469. sage/rings/finite_rings/integer_mod.cpython-314t-aarch64-linux-musl.so +0 -0
  470. sage/rings/finite_rings/integer_mod.pxd +56 -0
  471. sage/rings/finite_rings/integer_mod.pyx +4586 -0
  472. sage/rings/finite_rings/integer_mod_limits.h +11 -0
  473. sage/rings/finite_rings/integer_mod_ring.py +2044 -0
  474. sage/rings/finite_rings/residue_field.cpython-314t-aarch64-linux-musl.so +0 -0
  475. sage/rings/finite_rings/residue_field.pxd +30 -0
  476. sage/rings/finite_rings/residue_field.pyx +1811 -0
  477. sage/rings/finite_rings/stdint.pxd +19 -0
  478. sage/rings/fraction_field.py +1452 -0
  479. sage/rings/fraction_field_element.cpython-314t-aarch64-linux-musl.so +0 -0
  480. sage/rings/fraction_field_element.pyx +1357 -0
  481. sage/rings/function_field/all.py +7 -0
  482. sage/rings/function_field/all__sagemath_categories.py +2 -0
  483. sage/rings/function_field/constructor.py +218 -0
  484. sage/rings/function_field/element.cpython-314t-aarch64-linux-musl.so +0 -0
  485. sage/rings/function_field/element.pxd +11 -0
  486. sage/rings/function_field/element.pyx +1008 -0
  487. sage/rings/function_field/element_rational.cpython-314t-aarch64-linux-musl.so +0 -0
  488. sage/rings/function_field/element_rational.pyx +513 -0
  489. sage/rings/function_field/extensions.py +230 -0
  490. sage/rings/function_field/function_field.py +1468 -0
  491. sage/rings/function_field/function_field_rational.py +1005 -0
  492. sage/rings/function_field/ideal.py +1155 -0
  493. sage/rings/function_field/ideal_rational.py +629 -0
  494. sage/rings/function_field/jacobian_base.py +826 -0
  495. sage/rings/function_field/jacobian_hess.py +1053 -0
  496. sage/rings/function_field/jacobian_khuri_makdisi.py +1027 -0
  497. sage/rings/function_field/maps.py +1039 -0
  498. sage/rings/function_field/order.py +281 -0
  499. sage/rings/function_field/order_basis.py +586 -0
  500. sage/rings/function_field/order_rational.py +576 -0
  501. sage/rings/function_field/place.py +426 -0
  502. sage/rings/function_field/place_rational.py +181 -0
  503. sage/rings/generic.py +320 -0
  504. sage/rings/homset.py +332 -0
  505. sage/rings/ideal.py +1885 -0
  506. sage/rings/ideal_monoid.py +215 -0
  507. sage/rings/infinity.py +1890 -0
  508. sage/rings/integer.cpython-314t-aarch64-linux-musl.so +0 -0
  509. sage/rings/integer.pxd +45 -0
  510. sage/rings/integer.pyx +7874 -0
  511. sage/rings/integer_ring.cpython-314t-aarch64-linux-musl.so +0 -0
  512. sage/rings/integer_ring.pxd +8 -0
  513. sage/rings/integer_ring.pyx +1693 -0
  514. sage/rings/laurent_series_ring.py +931 -0
  515. sage/rings/laurent_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  516. sage/rings/laurent_series_ring_element.pxd +11 -0
  517. sage/rings/laurent_series_ring_element.pyx +1927 -0
  518. sage/rings/lazy_series.py +7815 -0
  519. sage/rings/lazy_series_ring.py +4356 -0
  520. sage/rings/localization.py +1043 -0
  521. sage/rings/morphism.cpython-314t-aarch64-linux-musl.so +0 -0
  522. sage/rings/morphism.pxd +39 -0
  523. sage/rings/morphism.pyx +3299 -0
  524. sage/rings/multi_power_series_ring.py +1145 -0
  525. sage/rings/multi_power_series_ring_element.py +2184 -0
  526. sage/rings/noncommutative_ideals.cpython-314t-aarch64-linux-musl.so +0 -0
  527. sage/rings/noncommutative_ideals.pyx +423 -0
  528. sage/rings/number_field/all__sagemath_categories.py +1 -0
  529. sage/rings/number_field/number_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
  530. sage/rings/number_field/number_field_base.pxd +8 -0
  531. sage/rings/number_field/number_field_base.pyx +507 -0
  532. sage/rings/number_field/number_field_element_base.cpython-314t-aarch64-linux-musl.so +0 -0
  533. sage/rings/number_field/number_field_element_base.pxd +6 -0
  534. sage/rings/number_field/number_field_element_base.pyx +36 -0
  535. sage/rings/number_field/number_field_ideal.py +3550 -0
  536. sage/rings/padics/all__sagemath_categories.py +4 -0
  537. sage/rings/padics/local_generic.py +1670 -0
  538. sage/rings/padics/local_generic_element.cpython-314t-aarch64-linux-musl.so +0 -0
  539. sage/rings/padics/local_generic_element.pxd +5 -0
  540. sage/rings/padics/local_generic_element.pyx +1017 -0
  541. sage/rings/padics/misc.py +256 -0
  542. sage/rings/padics/padic_generic.py +1911 -0
  543. sage/rings/padics/pow_computer.cpython-314t-aarch64-linux-musl.so +0 -0
  544. sage/rings/padics/pow_computer.pxd +38 -0
  545. sage/rings/padics/pow_computer.pyx +671 -0
  546. sage/rings/padics/precision_error.py +24 -0
  547. sage/rings/polynomial/all__sagemath_categories.py +25 -0
  548. sage/rings/polynomial/commutative_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  549. sage/rings/polynomial/commutative_polynomial.pxd +6 -0
  550. sage/rings/polynomial/commutative_polynomial.pyx +24 -0
  551. sage/rings/polynomial/cyclotomic.cpython-314t-aarch64-linux-musl.so +0 -0
  552. sage/rings/polynomial/cyclotomic.pyx +404 -0
  553. sage/rings/polynomial/flatten.py +711 -0
  554. sage/rings/polynomial/ideal.py +102 -0
  555. sage/rings/polynomial/infinite_polynomial_element.py +1768 -0
  556. sage/rings/polynomial/infinite_polynomial_ring.py +1653 -0
  557. sage/rings/polynomial/laurent_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  558. sage/rings/polynomial/laurent_polynomial.pxd +18 -0
  559. sage/rings/polynomial/laurent_polynomial.pyx +2190 -0
  560. sage/rings/polynomial/laurent_polynomial_ideal.py +590 -0
  561. sage/rings/polynomial/laurent_polynomial_ring.py +832 -0
  562. sage/rings/polynomial/laurent_polynomial_ring_base.py +708 -0
  563. sage/rings/polynomial/multi_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  564. sage/rings/polynomial/multi_polynomial.pxd +12 -0
  565. sage/rings/polynomial/multi_polynomial.pyx +3082 -0
  566. sage/rings/polynomial/multi_polynomial_element.py +2570 -0
  567. sage/rings/polynomial/multi_polynomial_ideal.py +5771 -0
  568. sage/rings/polynomial/multi_polynomial_ring.py +947 -0
  569. sage/rings/polynomial/multi_polynomial_ring_base.cpython-314t-aarch64-linux-musl.so +0 -0
  570. sage/rings/polynomial/multi_polynomial_ring_base.pxd +15 -0
  571. sage/rings/polynomial/multi_polynomial_ring_base.pyx +1855 -0
  572. sage/rings/polynomial/multi_polynomial_sequence.py +2204 -0
  573. sage/rings/polynomial/polydict.cpython-314t-aarch64-linux-musl.so +0 -0
  574. sage/rings/polynomial/polydict.pxd +45 -0
  575. sage/rings/polynomial/polydict.pyx +2701 -0
  576. sage/rings/polynomial/polynomial_compiled.cpython-314t-aarch64-linux-musl.so +0 -0
  577. sage/rings/polynomial/polynomial_compiled.pxd +59 -0
  578. sage/rings/polynomial/polynomial_compiled.pyx +509 -0
  579. sage/rings/polynomial/polynomial_element.cpython-314t-aarch64-linux-musl.so +0 -0
  580. sage/rings/polynomial/polynomial_element.pxd +64 -0
  581. sage/rings/polynomial/polynomial_element.pyx +13255 -0
  582. sage/rings/polynomial/polynomial_element_generic.py +1637 -0
  583. sage/rings/polynomial/polynomial_fateman.py +97 -0
  584. sage/rings/polynomial/polynomial_quotient_ring.py +2465 -0
  585. sage/rings/polynomial/polynomial_quotient_ring_element.py +779 -0
  586. sage/rings/polynomial/polynomial_ring.py +3784 -0
  587. sage/rings/polynomial/polynomial_ring_constructor.py +1051 -0
  588. sage/rings/polynomial/polynomial_ring_homomorphism.cpython-314t-aarch64-linux-musl.so +0 -0
  589. sage/rings/polynomial/polynomial_ring_homomorphism.pxd +5 -0
  590. sage/rings/polynomial/polynomial_ring_homomorphism.pyx +121 -0
  591. sage/rings/polynomial/polynomial_singular_interface.py +549 -0
  592. sage/rings/polynomial/symmetric_ideal.py +989 -0
  593. sage/rings/polynomial/symmetric_reduction.cpython-314t-aarch64-linux-musl.so +0 -0
  594. sage/rings/polynomial/symmetric_reduction.pxd +8 -0
  595. sage/rings/polynomial/symmetric_reduction.pyx +669 -0
  596. sage/rings/polynomial/term_order.py +2279 -0
  597. sage/rings/polynomial/toy_buchberger.py +449 -0
  598. sage/rings/polynomial/toy_d_basis.py +387 -0
  599. sage/rings/polynomial/toy_variety.py +362 -0
  600. sage/rings/power_series_mpoly.cpython-314t-aarch64-linux-musl.so +0 -0
  601. sage/rings/power_series_mpoly.pxd +9 -0
  602. sage/rings/power_series_mpoly.pyx +161 -0
  603. sage/rings/power_series_poly.cpython-314t-aarch64-linux-musl.so +0 -0
  604. sage/rings/power_series_poly.pxd +10 -0
  605. sage/rings/power_series_poly.pyx +1317 -0
  606. sage/rings/power_series_ring.py +1441 -0
  607. sage/rings/power_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  608. sage/rings/power_series_ring_element.pxd +12 -0
  609. sage/rings/power_series_ring_element.pyx +3028 -0
  610. sage/rings/puiseux_series_ring.py +487 -0
  611. sage/rings/puiseux_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  612. sage/rings/puiseux_series_ring_element.pxd +7 -0
  613. sage/rings/puiseux_series_ring_element.pyx +1055 -0
  614. sage/rings/qqbar_decorators.py +167 -0
  615. sage/rings/quotient_ring.py +1598 -0
  616. sage/rings/quotient_ring_element.py +979 -0
  617. sage/rings/rational.cpython-314t-aarch64-linux-musl.so +0 -0
  618. sage/rings/rational.pxd +20 -0
  619. sage/rings/rational.pyx +4284 -0
  620. sage/rings/rational_field.py +1730 -0
  621. sage/rings/real_double.cpython-314t-aarch64-linux-musl.so +0 -0
  622. sage/rings/real_double.pxd +16 -0
  623. sage/rings/real_double.pyx +2218 -0
  624. sage/rings/real_lazy.cpython-314t-aarch64-linux-musl.so +0 -0
  625. sage/rings/real_lazy.pxd +30 -0
  626. sage/rings/real_lazy.pyx +1773 -0
  627. sage/rings/ring.cpython-314t-aarch64-linux-musl.so +0 -0
  628. sage/rings/ring.pxd +30 -0
  629. sage/rings/ring.pyx +850 -0
  630. sage/rings/semirings/all.py +3 -0
  631. sage/rings/semirings/non_negative_integer_semiring.py +107 -0
  632. sage/rings/semirings/tropical_mpolynomial.py +972 -0
  633. sage/rings/semirings/tropical_polynomial.py +997 -0
  634. sage/rings/semirings/tropical_semiring.cpython-314t-aarch64-linux-musl.so +0 -0
  635. sage/rings/semirings/tropical_semiring.pyx +676 -0
  636. sage/rings/semirings/tropical_variety.py +1701 -0
  637. sage/rings/sum_of_squares.cpython-314t-aarch64-linux-musl.so +0 -0
  638. sage/rings/sum_of_squares.pxd +3 -0
  639. sage/rings/sum_of_squares.pyx +336 -0
  640. sage/rings/tests.py +504 -0
  641. sage/schemes/affine/affine_homset.py +508 -0
  642. sage/schemes/affine/affine_morphism.py +1574 -0
  643. sage/schemes/affine/affine_point.py +460 -0
  644. sage/schemes/affine/affine_rational_point.py +308 -0
  645. sage/schemes/affine/affine_space.py +1264 -0
  646. sage/schemes/affine/affine_subscheme.py +592 -0
  647. sage/schemes/affine/all.py +25 -0
  648. sage/schemes/all__sagemath_categories.py +5 -0
  649. sage/schemes/generic/algebraic_scheme.py +2092 -0
  650. sage/schemes/generic/all.py +5 -0
  651. sage/schemes/generic/ambient_space.py +400 -0
  652. sage/schemes/generic/divisor.py +465 -0
  653. sage/schemes/generic/divisor_group.py +313 -0
  654. sage/schemes/generic/glue.py +84 -0
  655. sage/schemes/generic/homset.py +820 -0
  656. sage/schemes/generic/hypersurface.py +234 -0
  657. sage/schemes/generic/morphism.py +2107 -0
  658. sage/schemes/generic/point.py +237 -0
  659. sage/schemes/generic/scheme.py +1190 -0
  660. sage/schemes/generic/spec.py +199 -0
  661. sage/schemes/product_projective/all.py +6 -0
  662. sage/schemes/product_projective/homset.py +236 -0
  663. sage/schemes/product_projective/morphism.py +517 -0
  664. sage/schemes/product_projective/point.py +568 -0
  665. sage/schemes/product_projective/rational_point.py +550 -0
  666. sage/schemes/product_projective/space.py +1301 -0
  667. sage/schemes/product_projective/subscheme.py +466 -0
  668. sage/schemes/projective/all.py +24 -0
  669. sage/schemes/projective/proj_bdd_height.py +453 -0
  670. sage/schemes/projective/projective_homset.py +718 -0
  671. sage/schemes/projective/projective_morphism.py +2792 -0
  672. sage/schemes/projective/projective_point.py +1484 -0
  673. sage/schemes/projective/projective_rational_point.py +569 -0
  674. sage/schemes/projective/projective_space.py +2571 -0
  675. sage/schemes/projective/projective_subscheme.py +1574 -0
  676. sage/sets/all.py +17 -0
  677. sage/sets/cartesian_product.py +376 -0
  678. sage/sets/condition_set.py +525 -0
  679. sage/sets/disjoint_set.cpython-314t-aarch64-linux-musl.so +0 -0
  680. sage/sets/disjoint_set.pxd +36 -0
  681. sage/sets/disjoint_set.pyx +998 -0
  682. sage/sets/disjoint_union_enumerated_sets.py +625 -0
  683. sage/sets/family.cpython-314t-aarch64-linux-musl.so +0 -0
  684. sage/sets/family.pxd +12 -0
  685. sage/sets/family.pyx +1556 -0
  686. sage/sets/finite_enumerated_set.py +406 -0
  687. sage/sets/finite_set_map_cy.cpython-314t-aarch64-linux-musl.so +0 -0
  688. sage/sets/finite_set_map_cy.pxd +34 -0
  689. sage/sets/finite_set_map_cy.pyx +708 -0
  690. sage/sets/finite_set_maps.py +591 -0
  691. sage/sets/image_set.py +448 -0
  692. sage/sets/integer_range.py +829 -0
  693. sage/sets/non_negative_integers.py +241 -0
  694. sage/sets/positive_integers.py +93 -0
  695. sage/sets/primes.py +188 -0
  696. sage/sets/real_set.py +2760 -0
  697. sage/sets/recursively_enumerated_set.cpython-314t-aarch64-linux-musl.so +0 -0
  698. sage/sets/recursively_enumerated_set.pxd +31 -0
  699. sage/sets/recursively_enumerated_set.pyx +2082 -0
  700. sage/sets/set.py +2083 -0
  701. sage/sets/set_from_iterator.py +1021 -0
  702. sage/sets/totally_ordered_finite_set.py +329 -0
  703. sage/symbolic/all__sagemath_categories.py +1 -0
  704. sage/symbolic/function.cpython-314t-aarch64-linux-musl.so +0 -0
  705. sage/symbolic/function.pxd +29 -0
  706. sage/symbolic/function.pyx +1488 -0
  707. sage/symbolic/symbols.py +56 -0
  708. sage/tests/all__sagemath_categories.py +1 -0
  709. sage/tests/cython.cpython-314t-aarch64-linux-musl.so +0 -0
  710. sage/tests/cython.pyx +37 -0
  711. sage/tests/stl_vector.cpython-314t-aarch64-linux-musl.so +0 -0
  712. sage/tests/stl_vector.pyx +171 -0
  713. sage/typeset/all.py +6 -0
  714. sage/typeset/ascii_art.py +295 -0
  715. sage/typeset/character_art.py +789 -0
  716. sage/typeset/character_art_factory.py +572 -0
  717. sage/typeset/symbols.py +334 -0
  718. sage/typeset/unicode_art.py +183 -0
  719. sage/typeset/unicode_characters.py +101 -0
@@ -0,0 +1,1008 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Elements of function fields
4
+
5
+ Sage provides arithmetic with elements of function fields.
6
+
7
+ EXAMPLES:
8
+
9
+ Arithmetic with rational functions::
10
+
11
+ sage: K.<t> = FunctionField(QQ)
12
+ sage: f = t - 1
13
+ sage: g = t^2 - 3
14
+ sage: h = f^2/g^3
15
+ sage: h.valuation(t-1)
16
+ 2
17
+ sage: h.valuation(t)
18
+ 0
19
+ sage: h.valuation(t^2 - 3)
20
+ -3
21
+
22
+ Derivatives of elements in separable extensions::
23
+
24
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[] # needs sage.rings.finite_rings
25
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x) # needs sage.rings.finite_rings sage.rings.function_field
26
+ sage: (y^3 + x).derivative() # needs sage.rings.finite_rings sage.rings.function_field
27
+ ((x^2 + 1)/x^2)*y + (x^4 + x^3 + 1)/x^3
28
+
29
+ The divisor of an element of a global function field::
30
+
31
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
32
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x) # needs sage.rings.function_field
33
+ sage: y.divisor() # needs sage.rings.function_field
34
+ - Place (1/x, 1/x*y)
35
+ - Place (x, x*y)
36
+ + 2*Place (x + 1, x*y)
37
+
38
+ AUTHORS:
39
+
40
+ - William Stein: initial version
41
+
42
+ - Robert Bradshaw (2010-05-27): cythonize function field elements
43
+
44
+ - Julian Rueth (2011-06-28, 2020-09-01): treat zero correctly; implement nth_root/is_nth_power
45
+
46
+ - Maarten Derickx (2011-09-11): added doctests, fixed pickling
47
+
48
+ - Kwankyu Lee (2017-04-30): added elements for global function fields
49
+
50
+ - Vincent Macri (2024-09-03): added subs method
51
+ """
52
+ # *****************************************************************************
53
+ # Copyright (C) 2010 William Stein <wstein@gmail.com>
54
+ # 2010 Robert Bradshaw <robertwb@math.washington.edu>
55
+ # 2011-2020 Julian Rueth <julian.rueth@gmail.com>
56
+ # 2011 Maarten Derickx <m.derickx.student@gmail.com>
57
+ # 2015 Nils Bruin
58
+ # 2016 Frédéric Chapoton
59
+ # 2017-2019 Kwankyu Lee
60
+ # 2018-2020 Travis Scrimshaw
61
+ # 2019 Brent Baccala
62
+ # 2021 Saher Amasha
63
+ # 2024 Vincent Macri
64
+ #
65
+ # Distributed under the terms of the GNU General Public License (GPL)
66
+ # as published by the Free Software Foundation; either version 2 of
67
+ # the License, or (at your option) any later version.
68
+ # https://www.gnu.org/licenses/
69
+ # *****************************************************************************
70
+
71
+ from sage.categories.function_fields import FunctionFields
72
+ from sage.misc.cachefunc import cached_method
73
+ from sage.structure.element cimport FieldElement
74
+
75
+
76
+ def is_FunctionFieldElement(x):
77
+ """
78
+ Return ``True`` if ``x`` is any type of function field element.
79
+
80
+ EXAMPLES::
81
+
82
+ sage: t = FunctionField(QQ,'t').gen()
83
+ sage: sage.rings.function_field.element.is_FunctionFieldElement(t)
84
+ doctest:warning...
85
+ DeprecationWarning: The function is_FunctionFieldElement is deprecated;
86
+ use '....parent() in FunctionFields()' instead.
87
+ See https://github.com/sagemath/sage/issues/38289 for details.
88
+ True
89
+ sage: sage.rings.function_field.element.is_FunctionFieldElement(0)
90
+ False
91
+ """
92
+ from sage.misc.superseded import deprecation_cython
93
+ deprecation_cython(38289,
94
+ "The function is_FunctionFieldElement is deprecated; "
95
+ "use '....parent() in FunctionFields()' instead.")
96
+ if isinstance(x, FunctionFieldElement):
97
+ return True
98
+ from sage.rings.function_field.function_field import FunctionField
99
+ if isinstance(x.parent(), FunctionField):
100
+ return True
101
+ return x.parent() in FunctionFields()
102
+
103
+
104
+ def make_FunctionFieldElement(parent, element_class, representing_element):
105
+ """
106
+ Used for unpickling FunctionFieldElement objects (and subclasses).
107
+
108
+ EXAMPLES::
109
+
110
+ sage: from sage.rings.function_field.element import make_FunctionFieldElement
111
+ sage: K.<x> = FunctionField(QQ)
112
+ sage: make_FunctionFieldElement(K, K.element_class, (x+1)/x)
113
+ (x + 1)/x
114
+ """
115
+ return element_class(parent, representing_element, reduce=False)
116
+
117
+
118
+ cdef class FunctionFieldElement(FieldElement):
119
+ """
120
+ Abstract base class for function field elements.
121
+
122
+ EXAMPLES::
123
+
124
+ sage: t = FunctionField(QQ,'t').gen()
125
+ sage: isinstance(t, sage.rings.function_field.element.FunctionFieldElement)
126
+ True
127
+ """
128
+ def __reduce__(self):
129
+ """
130
+ EXAMPLES::
131
+
132
+ sage: K = FunctionField(QQ,'x')
133
+ sage: f = K.random_element()
134
+ sage: loads(f.dumps()) == f
135
+ True
136
+ """
137
+ return (make_FunctionFieldElement,
138
+ (self._parent, type(self), self._x))
139
+
140
+ cdef FunctionFieldElement _new_c(self):
141
+ cdef type t = type(self)
142
+ cdef FunctionFieldElement x = <FunctionFieldElement>t.__new__(t)
143
+ x._parent = self._parent
144
+ return x
145
+
146
+ def __pari__(self):
147
+ r"""
148
+ Coerce the element to PARI.
149
+
150
+ PARI does not know about general function field elements, so this
151
+ raises an Exception.
152
+
153
+ TESTS:
154
+
155
+ Check that :issue:`16369` has been resolved::
156
+
157
+ sage: K.<a> = FunctionField(QQ)
158
+ sage: R.<b> = K[]
159
+ sage: L.<b> = K.extension(b^2 - a) # needs sage.rings.function_field
160
+ sage: b.__pari__() # needs sage.rings.function_field
161
+ Traceback (most recent call last):
162
+ ...
163
+ NotImplementedError: PARI does not support general function field elements.
164
+ """
165
+ raise NotImplementedError("PARI does not support general function field elements.")
166
+
167
+ def _latex_(self):
168
+ r"""
169
+ EXAMPLES::
170
+
171
+ sage: K.<t> = FunctionField(QQ)
172
+ sage: latex((t+1)/t)
173
+ \frac{t + 1}{t}
174
+ sage: latex((t+1)/t^67)
175
+ \frac{t + 1}{t^{67}}
176
+ sage: latex((t+1/2)/t^67)
177
+ \frac{t + \frac{1}{2}}{t^{67}}
178
+ """
179
+ return self._x._latex_()
180
+
181
+ def subs(self, in_dict=None, **kwds):
182
+ r"""
183
+ Substitute the given generators with given values while not touching
184
+ other generators.
185
+
186
+ INPUT:
187
+
188
+ - ``in_dict`` -- (optional) dictionary of inputs
189
+
190
+ - ``**kwds`` -- named parameters
191
+
192
+ OUTPUT: new object if substitution is possible, otherwise ``self``
193
+
194
+ EXAMPLES:
195
+
196
+ Basic substitution::
197
+
198
+ sage: K = GF(7)
199
+ sage: Kx.<x> = FunctionField(K)
200
+ sage: y = polygen(Kx)
201
+ sage: f = x^6 + 3; f
202
+ x^6 + 3
203
+
204
+ We also substitute the generators in any base fields::
205
+
206
+ sage: # needs sage.rings.function_field
207
+ sage: K.<x> = FunctionField(QQ)
208
+ sage: R.<y> = K[]
209
+ sage: L.<y> = K.extension(y^3 - (x^3 + 2*x*y + 1/x))
210
+ sage: S.<t> = L[]
211
+ sage: M.<t> = L.extension(t^2 - x*y)
212
+ sage: f = 7 * t + 3*x*y
213
+ sage: f.subs(t=9)
214
+ 3*x*y + 63
215
+ sage: f.subs(x=2, y=4)
216
+ 7*t + 24
217
+ sage: f.subs(t=1, x=2, y=3)
218
+ 25
219
+
220
+ Because of the possibility of extension fields, a generator to
221
+ substitute must be specified::
222
+
223
+ sage: K.<x> = FunctionField(QQ)
224
+ sage: f = x
225
+ sage: f.subs(2)
226
+ Traceback (most recent call last):
227
+ ...
228
+ TypeError: in_dict must be a dict
229
+
230
+ sage: # needs sage.rings.function_field
231
+ sage: R.<y> = K[]
232
+ sage: L.<y> = K.extension(y^3 - (x^3 + 2*x*y + 1/x))
233
+ sage: f = x + y
234
+ sage: f.subs(0)
235
+ Traceback (most recent call last):
236
+ ...
237
+ TypeError: in_dict must be a dict
238
+
239
+ We can also substitute using dictionary syntax::
240
+
241
+ sage: # needs sage.rings.function_field
242
+ sage: K.<x> = FunctionField(QQ)
243
+ sage: R.<y> = K[]
244
+ sage: L.<y> = K.extension(y^3 - (x^3 + 2*x*y + 1/x))
245
+ sage: S.<t> = L[]
246
+ sage: M.<t> = L.extension(t^2 - x*y)
247
+ sage: f = x + y + t
248
+ sage: f.subs({x: 1, y: 3, t: 4})
249
+ 8
250
+ sage: f.subs({x: 1, t: 4})
251
+ y + 5
252
+
253
+ TESTS:
254
+
255
+ Check that we correctly handle extension fields::
256
+
257
+ sage: # needs sage.rings.function_field
258
+ sage: K.<x> = FunctionField(QQ)
259
+ sage: R.<y> = K[]
260
+ sage: L.<y> = K.extension(y^3 - (x^3 + 2*x*y + 1/x))
261
+ sage: S.<t> = L[]
262
+ sage: M.<t> = L.extension(t^2 - x*y)
263
+ sage: f = t + x*y
264
+ sage: f.subs(x=1, y=3, t=5)
265
+ 8
266
+ sage: f_sub = f.subs(x=1); f_sub
267
+ t + y
268
+ sage: f_sub.parent() == f.parent()
269
+ True
270
+ sage: f.subs(y=2)
271
+ t + 2*x
272
+ sage: f_sub = f.subs(x=1, y=1, t=1); f_sub
273
+ 2
274
+ sage: f_sub.parent() == M
275
+ True
276
+
277
+ Test that substitution works for rational functions::
278
+
279
+ sage: # needs sage.rings.function_field
280
+ sage: K.<x> = FunctionField(QQ)
281
+ sage: R.<y> = K[]
282
+ sage: L.<y> = K.extension(y^4 - 3)
283
+ sage: f = x / y
284
+ sage: f.subs(x=2) == 2 / y
285
+ True
286
+ sage: f.subs(y=3)
287
+ 9*x
288
+ sage: f.subs(t=-1) is f
289
+ True
290
+ sage: f.subs({x: 2, y: 4})
291
+ 128/3
292
+
293
+ Make sure that we return the same object when there is no
294
+ substitution::
295
+
296
+ sage: K = GF(7)
297
+ sage: Kx.<x> = FunctionField(K)
298
+ sage: y = polygen(Kx)
299
+ sage: f = x^6 + 3
300
+ sage: g = f.subs(z=2)
301
+ sage: g == f
302
+ True
303
+ sage: g is f
304
+ True
305
+
306
+ Same purpose as above but over an extension field over the rationals::
307
+
308
+ sage: # needs sage.rings.function_field
309
+ sage: K.<x> = FunctionField(QQ)
310
+ sage: R.<y> = K[]
311
+ sage: L.<y> = K.extension(y^3 - (x^3 + 2*x*y + 1/x))
312
+ sage: S.<t> = L[]
313
+ sage: M.<t> = L.extension(t^2 - x*y)
314
+ sage: f = t + x*y
315
+ sage: f.subs() is f
316
+ True
317
+ sage: f.subs(w=7) is f
318
+ True
319
+ sage: f.subs(w=7) is f.subs(w=7)
320
+ True
321
+ sage: f.subs(y=y) is f
322
+ True
323
+ sage: f.subs({y: y}) is f
324
+ True
325
+ sage: f.subs(x=x, y=y, t=t) is f
326
+ True
327
+
328
+ Test proper handling of not making substitutions::
329
+
330
+ sage: # needs sage.rings.function_field
331
+ sage: K.<x> = FunctionField(QQ)
332
+ sage: f = x
333
+ sage: f.subs() is f
334
+ True
335
+ sage: f.subs(dict()) is f
336
+ True
337
+ sage: f.subs(w=0) is f
338
+ True
339
+ sage: R.<y> = K[]
340
+ sage: L.<y> = K.extension(y^3 - (x^3 + 2*x*y + 1/x))
341
+ sage: f = 3*y
342
+ sage: f.subs(x=0)
343
+ 3*y
344
+ sage: f = 3*y
345
+ sage: f.subs(x=0, y=y)
346
+ 3*y
347
+
348
+ Test error handling for wrong argument type::
349
+
350
+ sage: K.<x> = FunctionField(QQ)
351
+ sage: f = x
352
+ sage: f.subs(0)
353
+ Traceback (most recent call last):
354
+ ...
355
+ TypeError: in_dict must be a dict
356
+
357
+ Test error handling for dictionary with keys that don't match
358
+ generators::
359
+
360
+ sage: K.<x> = FunctionField(QQ)
361
+ sage: f = x
362
+ sage: f.subs({1: 1})
363
+ Traceback (most recent call last):
364
+ ...
365
+ TypeError: key does not match any field generators
366
+
367
+ Test error handling with ambiguously named generators::
368
+
369
+ sage: # needs sage.rings.function_field
370
+ sage: K.<x> = FunctionField(QQ)
371
+ sage: R.<x> = K[]
372
+ sage: L.<x> = K.extension(x^3 - x)
373
+ sage: str(L.gen()) == str(K.gen())
374
+ True
375
+ sage: f = K.gen() - L.gen()
376
+ sage: f.subs(x=2)
377
+ Traceback (most recent call last):
378
+ ...
379
+ TypeError: multiple generators have the same name, making substitution ambiguous. Rename generators or pass substitution values in using dictionary format
380
+ sage: f.subs({K.gen(): 1})
381
+ -x + 1
382
+ sage: f.subs({L.gen(): 2})
383
+ x - 2
384
+ sage: f.subs({K.gen(): 1, L.gen(): 2})
385
+ -1
386
+ sage: f.subs({K.gen(): 2, L.gen(): 1})
387
+ 1
388
+ """
389
+ def sub_recurse(ff_element, sub_dict):
390
+ # Helper method to recurse through base fields.
391
+ ff = ff_element.parent()
392
+ if ff.base_field() == ff:
393
+ return ff(ff_element._x.subs({ff.gen(): sub_dict[ff.gen()]}))
394
+ total = ff.zero()
395
+ for i, v in enumerate(list(ff_element._x)):
396
+ total += sub_recurse(v, sub_dict) * sub_dict[ff.gen()]**i
397
+ return ff(total)
398
+
399
+ if in_dict is None and kwds is None:
400
+ return self
401
+
402
+ if in_dict is not None and not isinstance(in_dict, dict):
403
+ raise TypeError('in_dict must be a dict')
404
+
405
+ field_tower = [self.parent()]
406
+ ff = self.parent()
407
+
408
+ while ff.base_field() != ff:
409
+ ff = ff.base_field()
410
+ field_tower.append(ff)
411
+ sub_dict = {f.gen(): f.gen() for f in field_tower}
412
+
413
+ made_substitution = False
414
+ if in_dict is not None:
415
+ for k, v in in_dict.items():
416
+ if k not in sub_dict:
417
+ raise TypeError('key does not match any field generators')
418
+ sub_dict[k] = v
419
+ if v != k:
420
+ made_substitution = True
421
+ else:
422
+ used_kwds = {k: False for k in kwds}
423
+ for g in sub_dict:
424
+ strg = str(g)
425
+ if strg not in kwds:
426
+ continue
427
+ v = kwds[strg]
428
+ sub_dict[g] = v
429
+
430
+ if used_kwds[strg]:
431
+ raise TypeError('multiple generators have the '
432
+ 'same name, making substitution '
433
+ 'ambiguous. Rename generators '
434
+ 'or pass substitution values in '
435
+ 'using dictionary format')
436
+ used_kwds[strg] = True
437
+ if g != v:
438
+ made_substitution = True
439
+
440
+ if made_substitution:
441
+ return sub_recurse(self, sub_dict)
442
+ return self
443
+
444
+ @cached_method
445
+ def matrix(self, base=None):
446
+ r"""
447
+ Return the matrix of multiplication by this element, interpreting this
448
+ element as an element of a vector space over ``base``.
449
+
450
+ INPUT:
451
+
452
+ - ``base`` -- a function field (default: ``None``); if ``None``, then
453
+ the matrix is formed over the base field of this function field
454
+
455
+ EXAMPLES:
456
+
457
+ A rational function field::
458
+
459
+ sage: K.<t> = FunctionField(QQ)
460
+ sage: t.matrix() # needs sage.modules
461
+ [t]
462
+ sage: (1/(t+1)).matrix() # needs sage.modules
463
+ [1/(t + 1)]
464
+
465
+ Now an example in a nontrivial extension of a rational function field::
466
+
467
+ sage: # needs sage.rings.function_field
468
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
469
+ sage: L.<y> = K.extension(y^2 - x*y + 4*x^3)
470
+ sage: y.matrix()
471
+ [ 0 1]
472
+ [-4*x^3 x]
473
+ sage: y.matrix().charpoly('Z')
474
+ Z^2 - x*Z + 4*x^3
475
+
476
+ An example in a relative extension, where neither function
477
+ field is rational::
478
+
479
+ sage: # needs sage.rings.function_field
480
+ sage: K.<x> = FunctionField(QQ)
481
+ sage: R.<y> = K[]
482
+ sage: L.<y> = K.extension(y^2 - x*y + 4*x^3)
483
+ sage: M.<T> = L[]
484
+ sage: Z.<alpha> = L.extension(T^3 - y^2*T + x)
485
+ sage: alpha.matrix()
486
+ [ 0 1 0]
487
+ [ 0 0 1]
488
+ [ -x x*y - 4*x^3 0]
489
+ sage: alpha.matrix(K)
490
+ [ 0 0 1 0 0 0]
491
+ [ 0 0 0 1 0 0]
492
+ [ 0 0 0 0 1 0]
493
+ [ 0 0 0 0 0 1]
494
+ [ -x 0 -4*x^3 x 0 0]
495
+ [ 0 -x -4*x^4 -4*x^3 + x^2 0 0]
496
+ sage: alpha.matrix(Z)
497
+ [alpha]
498
+
499
+ We show that this matrix does indeed work as expected when making a
500
+ vector space from a function field::
501
+
502
+ sage: # needs sage.rings.function_field
503
+ sage: K.<x> = FunctionField(QQ)
504
+ sage: R.<y> = K[]
505
+ sage: L.<y> = K.extension(y^5 - (x^3 + 2*x*y + 1/x))
506
+ sage: V, from_V, to_V = L.vector_space()
507
+ sage: y5 = to_V(y^5); y5
508
+ ((x^4 + 1)/x, 2*x, 0, 0, 0)
509
+ sage: y4y = to_V(y^4) * y.matrix(); y4y
510
+ ((x^4 + 1)/x, 2*x, 0, 0, 0)
511
+ sage: y5 == y4y
512
+ True
513
+ """
514
+ # multiply each element of the vector space isomorphic to the parent
515
+ # with this element; make matrix whose rows are the coefficients of the
516
+ # result, and transpose
517
+ V, f, t = self.parent().vector_space(base)
518
+ rows = [t(self*f(b)) for b in V.basis()]
519
+ from sage.matrix.matrix_space import MatrixSpace
520
+ MS = MatrixSpace(V.base_field(), V.dimension())
521
+ ret = MS(rows)
522
+ ret.transpose()
523
+ ret.set_immutable()
524
+ return ret
525
+
526
+ def trace(self):
527
+ """
528
+ Return the trace of the element.
529
+
530
+ EXAMPLES::
531
+
532
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
533
+ sage: L.<y> = K.extension(y^2 - x*y + 4*x^3) # needs sage.rings.function_field
534
+ sage: y.trace() # needs sage.rings.function_field
535
+ x
536
+ """
537
+ return self.matrix().trace()
538
+
539
+ def norm(self):
540
+ """
541
+ Return the norm of the element.
542
+
543
+ EXAMPLES::
544
+
545
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
546
+ sage: L.<y> = K.extension(y^2 - x*y + 4*x^3) # needs sage.rings.function_field
547
+ sage: y.norm() # needs sage.rings.function_field
548
+ 4*x^3
549
+
550
+ The norm is relative::
551
+
552
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
553
+ sage: L.<y> = K.extension(y^2 - x*y + 4*x^3); R.<z> = L[] # needs sage.rings.function_field
554
+ sage: M.<z> = L.extension(z^3 - y^2*z + x) # needs sage.rings.function_field
555
+ sage: z.norm() # needs sage.rings.function_field
556
+ -x
557
+ sage: z.norm().parent() # needs sage.rings.function_field
558
+ Function field in y defined by y^2 - x*y + 4*x^3
559
+ """
560
+ return self.matrix().determinant()
561
+
562
+ def degree(self):
563
+ """
564
+ Return the max degree between the denominator and numerator.
565
+
566
+ EXAMPLES::
567
+
568
+ sage: FF.<t> = FunctionField(QQ)
569
+ sage: f = (t^2 + 3) / (t^3 - 1/3); f
570
+ (t^2 + 3)/(t^3 - 1/3)
571
+ sage: f.degree()
572
+ 3
573
+
574
+ sage: FF.<t> = FunctionField(QQ)
575
+ sage: f = (t+8); f
576
+ t + 8
577
+ sage: f.degree()
578
+ 1
579
+
580
+ TESTS::
581
+
582
+ sage: FF.<t> = FunctionField(QQ)
583
+ sage: f = FF(0); f
584
+ 0
585
+ sage: f.degree()
586
+ 0
587
+ sage: f = (t+1) / (t^2 - 1/3); f
588
+ (t + 1)/(t^2 - 1/3)
589
+ sage: f.degree()
590
+ 2
591
+ sage: f = (t+1); f
592
+ t + 1
593
+ sage: f.degree()
594
+ 1
595
+ """
596
+ return max(self._x.denominator().degree(), self._x.numerator().degree())
597
+
598
+ def characteristic_polynomial(self, *args, **kwds):
599
+ """
600
+ Return the characteristic polynomial of the element. Give an optional
601
+ input string to name the variable in the characteristic polynomial.
602
+
603
+ EXAMPLES::
604
+
605
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
606
+ sage: x.characteristic_polynomial('W') # needs sage.modules
607
+ W - x
608
+
609
+ sage: # needs sage.rings.function_field
610
+ sage: L.<y> = K.extension(y^2 - x*y + 4*x^3); R.<z> = L[]
611
+ sage: M.<z> = L.extension(z^3 - y^2*z + x)
612
+ sage: y.characteristic_polynomial('W')
613
+ W^2 - x*W + 4*x^3
614
+ sage: z.characteristic_polynomial('W')
615
+ W^3 + (-x*y + 4*x^3)*W + x
616
+ """
617
+ return self.matrix().characteristic_polynomial(*args, **kwds)
618
+
619
+ charpoly = characteristic_polynomial
620
+
621
+ def minimal_polynomial(self, *args, **kwds):
622
+ """
623
+ Return the minimal polynomial of the element. Give an optional input
624
+ string to name the variable in the characteristic polynomial.
625
+
626
+ EXAMPLES::
627
+
628
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
629
+ sage: x.minimal_polynomial('W') # needs sage.modules
630
+ W - x
631
+
632
+ sage: # needs sage.rings.function_field
633
+ sage: L.<y> = K.extension(y^2 - x*y + 4*x^3); R.<z> = L[]
634
+ sage: M.<z> = L.extension(z^3 - y^2*z + x)
635
+ sage: y.minimal_polynomial('W')
636
+ W^2 - x*W + 4*x^3
637
+ sage: z.minimal_polynomial('W')
638
+ W^3 + (-x*y + 4*x^3)*W + x
639
+ """
640
+ return self.matrix().minimal_polynomial(*args, **kwds)
641
+
642
+ minpoly = minimal_polynomial
643
+
644
+ def is_integral(self):
645
+ r"""
646
+ Determine if the element is integral over the maximal order of the base field.
647
+
648
+ EXAMPLES::
649
+
650
+ sage: # needs sage.rings.function_field
651
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
652
+ sage: L.<y> = K.extension(y^2 - x*y + 4*x^3)
653
+ sage: y.is_integral()
654
+ True
655
+ sage: (y/x).is_integral()
656
+ True
657
+ sage: (y/x)^2 - (y/x) + 4*x
658
+ 0
659
+ sage: (y/x^2).is_integral()
660
+ False
661
+ sage: (y/x).minimal_polynomial('W')
662
+ W^2 - W + 4*x
663
+ """
664
+ R = self.parent().base_field().maximal_order()
665
+ return all(a in R for a in self.minimal_polynomial())
666
+
667
+ def differential(self):
668
+ """
669
+ Return the differential `dx` where `x` is the element.
670
+
671
+ EXAMPLES::
672
+
673
+ sage: K.<t> = FunctionField(QQ)
674
+ sage: f = 1 / t
675
+ sage: f.differential() # needs sage.modules
676
+ (-1/t^2) d(t)
677
+
678
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[] # needs sage.rings.finite_rings
679
+ sage: L.<y> = K.extension(Y^2 + Y + x +1/x) # needs sage.rings.finite_rings sage.rings.function_field
680
+ sage: (y^3 + x).differential() # needs sage.rings.finite_rings sage.rings.function_field
681
+ (((x^2 + 1)/x^2)*y + (x^4 + x^3 + 1)/x^3) d(x)
682
+
683
+ TESTS:
684
+
685
+ Verify that :issue:`27712` is resolved::
686
+
687
+ sage: K.<x> = FunctionField(GF(31))
688
+ sage: x.differential() # needs sage.modules
689
+ d(x)
690
+
691
+ sage: # needs sage.rings.function_field
692
+ sage: R.<y> = K[]
693
+ sage: L.<y> = K.extension(y^2 - x)
694
+ sage: R.<z> = L[]
695
+ sage: M.<z> = L.extension(z^2 - y)
696
+ sage: y.differential()
697
+ (16/x*y) d(x)
698
+ sage: z.differential()
699
+ (8/x*z) d(x)
700
+ """
701
+ F = self.parent()
702
+ W = F.space_of_differentials()
703
+ return W.element_class(W, F.one(), self)
704
+
705
+ def derivative(self):
706
+ """
707
+ Return the derivative of the element.
708
+
709
+ The derivative is with respect to the generator of the base rational
710
+ function field, over which the function field is a separable extension.
711
+
712
+ EXAMPLES::
713
+
714
+ sage: K.<t> = FunctionField(QQ)
715
+ sage: f = (t + 1) / (t^2 - 1/3)
716
+ sage: f.derivative() # needs sage.modules
717
+ (-t^2 - 2*t - 1/3)/(t^4 - 2/3*t^2 + 1/9)
718
+
719
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[] # needs sage.rings.finite_rings
720
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x) # needs sage.rings.finite_rings sage.rings.function_field
721
+ sage: (y^3 + x).derivative() # needs sage.rings.finite_rings sage.rings.function_field
722
+ ((x^2 + 1)/x^2)*y + (x^4 + x^3 + 1)/x^3
723
+ """
724
+ D = self.parent().derivation()
725
+ return D(self)
726
+
727
+ def higher_derivative(self, i, separating_element=None):
728
+ """
729
+ Return the `i`-th derivative of the element with respect to the
730
+ separating element.
731
+
732
+ INPUT:
733
+
734
+ - ``i`` -- nonnegative integer
735
+
736
+ - ``separating_element`` -- a separating element of the function field;
737
+ the default is the generator of the rational function field
738
+
739
+ EXAMPLES::
740
+
741
+ sage: K.<t> = FunctionField(GF(2))
742
+ sage: f = t^2
743
+ sage: f.higher_derivative(2) # needs sage.rings.function_field
744
+ 1
745
+
746
+ ::
747
+
748
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[] # needs sage.rings.finite_rings
749
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x) # needs sage.rings.finite_rings sage.rings.function_field
750
+ sage: (y^3 + x).higher_derivative(2) # needs sage.rings.finite_rings sage.rings.function_field
751
+ 1/x^3*y + (x^6 + x^4 + x^3 + x^2 + x + 1)/x^5
752
+ """
753
+ D = self.parent().higher_derivation()
754
+ return D(self, i, separating_element)
755
+
756
+ @cached_method
757
+ def divisor(self):
758
+ """
759
+ Return the divisor of the element.
760
+
761
+ EXAMPLES::
762
+
763
+ sage: K.<x> = FunctionField(GF(2))
764
+ sage: f = 1/(x^3 + x^2 + x)
765
+ sage: f.divisor() # needs sage.libs.pari sage.modules
766
+ 3*Place (1/x)
767
+ - Place (x)
768
+ - Place (x^2 + x + 1)
769
+
770
+ ::
771
+
772
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
773
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x) # needs sage.rings.function_field
774
+ sage: y.divisor() # needs sage.rings.function_field
775
+ - Place (1/x, 1/x*y)
776
+ - Place (x, x*y)
777
+ + 2*Place (x + 1, x*y)
778
+ """
779
+ if self.is_zero():
780
+ raise ValueError("divisor not defined for zero")
781
+
782
+ F = self.parent()
783
+ I = F.maximal_order().ideal(self)
784
+ J = F.maximal_order_infinite().ideal(self)
785
+ return I.divisor() + J.divisor()
786
+
787
+ def divisor_of_zeros(self):
788
+ """
789
+ Return the divisor of zeros for the element.
790
+
791
+ EXAMPLES::
792
+
793
+ sage: K.<x> = FunctionField(GF(2))
794
+ sage: f = 1/(x^3 + x^2 + x)
795
+ sage: f.divisor_of_zeros() # needs sage.libs.pari sage.modules
796
+ 3*Place (1/x)
797
+
798
+ ::
799
+
800
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[] # needs sage.rings.finite_rings
801
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x) # needs sage.rings.finite_rings sage.rings.function_field
802
+ sage: (x/y).divisor_of_zeros() # needs sage.rings.finite_rings sage.rings.function_field
803
+ 3*Place (x, x*y)
804
+ """
805
+ if self.is_zero():
806
+ raise ValueError("divisor of zeros not defined for zero")
807
+
808
+ F = self.parent()
809
+ I = F.maximal_order().ideal(self)
810
+ J = F.maximal_order_infinite().ideal(self)
811
+ return I.divisor_of_zeros() + J.divisor_of_zeros()
812
+
813
+ def divisor_of_poles(self):
814
+ """
815
+ Return the divisor of poles for the element.
816
+
817
+ EXAMPLES::
818
+
819
+ sage: K.<x> = FunctionField(GF(2))
820
+ sage: f = 1/(x^3 + x^2 + x)
821
+ sage: f.divisor_of_poles() # needs sage.libs.pari sage.modules
822
+ Place (x)
823
+ + Place (x^2 + x + 1)
824
+
825
+ ::
826
+
827
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[] # needs sage.rings.finite_rings
828
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x) # needs sage.rings.finite_rings sage.rings.function_field
829
+ sage: (x/y).divisor_of_poles() # needs sage.rings.finite_rings sage.rings.function_field
830
+ Place (1/x, 1/x*y) + 2*Place (x + 1, x*y)
831
+ """
832
+ if self.is_zero():
833
+ raise ValueError("divisor of poles not defined for zero")
834
+
835
+ F = self.parent()
836
+ I = F.maximal_order().ideal(self)
837
+ J = F.maximal_order_infinite().ideal(self)
838
+ return I.divisor_of_poles() + J.divisor_of_poles()
839
+
840
+ def zeros(self):
841
+ """
842
+ Return the list of the zeros of the element.
843
+
844
+ EXAMPLES::
845
+
846
+ sage: K.<x> = FunctionField(GF(2))
847
+ sage: f = 1/(x^3 + x^2 + x)
848
+ sage: f.zeros() # needs sage.libs.pari sage.modules
849
+ [Place (1/x)]
850
+
851
+ ::
852
+
853
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[] # needs sage.rings.finite_rings
854
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x) # needs sage.rings.finite_rings sage.rings.function_field
855
+ sage: (x/y).zeros() # needs sage.rings.finite_rings sage.rings.function_field
856
+ [Place (x, x*y)]
857
+ """
858
+ return self.divisor_of_zeros().support()
859
+
860
+ def poles(self):
861
+ """
862
+ Return the list of the poles of the element.
863
+
864
+ EXAMPLES::
865
+
866
+ sage: K.<x> = FunctionField(GF(2))
867
+ sage: f = 1/(x^3 + x^2 + x)
868
+ sage: f.poles() # needs sage.libs.pari sage.modules
869
+ [Place (x), Place (x^2 + x + 1)]
870
+
871
+ ::
872
+
873
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[] # needs sage.rings.finite_rings
874
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x) # needs sage.rings.finite_rings sage.rings.function_field
875
+ sage: (x/y).poles() # needs sage.rings.finite_rings sage.rings.function_field
876
+ [Place (1/x, 1/x*y), Place (x + 1, x*y)]
877
+ """
878
+ return self.divisor_of_poles().support()
879
+
880
+ def valuation(self, place):
881
+ """
882
+ Return the valuation of the element at the place.
883
+
884
+ INPUT:
885
+
886
+ - ``place`` -- a place of the function field
887
+
888
+ EXAMPLES::
889
+
890
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
891
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x) # needs sage.rings.function_field
892
+ sage: p = L.places_infinite()[0] # needs sage.rings.function_field
893
+ sage: y.valuation(p) # needs sage.rings.function_field
894
+ -1
895
+
896
+ ::
897
+
898
+ sage: # needs sage.rings.function_field
899
+ sage: K.<x> = FunctionField(QQ); _.<Y> = K[]
900
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
901
+ sage: O = L.maximal_order()
902
+ sage: p = O.ideal(x - 1).place()
903
+ sage: y.valuation(p)
904
+ 0
905
+ """
906
+ prime = place.prime_ideal()
907
+ ideal = prime.ring().ideal(self)
908
+ return prime.valuation(ideal)
909
+
910
+ def evaluate(self, place):
911
+ """
912
+ Return the value of the element at the place.
913
+
914
+ INPUT:
915
+
916
+ - ``place`` -- a function field place
917
+
918
+ OUTPUT:
919
+
920
+ If the element is in the valuation ring at the place, then an element
921
+ in the residue field at the place is returned. Otherwise, a
922
+ :exc:`ValueError` is raised.
923
+
924
+ EXAMPLES::
925
+
926
+ sage: K.<t> = FunctionField(GF(5))
927
+ sage: p = K.place_infinite()
928
+ sage: f = 1/t^2 + 3
929
+ sage: f.evaluate(p)
930
+ 3
931
+
932
+ ::
933
+
934
+ sage: # needs sage.rings.finite_rings sage.rings.function_field
935
+ sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
936
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
937
+ sage: p, = L.places_infinite()
938
+ sage: p, = L.places_infinite()
939
+ sage: (y + x).evaluate(p)
940
+ Traceback (most recent call last):
941
+ ...
942
+ ValueError: has a pole at the place
943
+ sage: (y/x + 1).evaluate(p)
944
+ 1
945
+ """
946
+ R, _, to_R = place._residue_field()
947
+
948
+ v = self.valuation(place)
949
+ if v > 0:
950
+ return R.zero()
951
+ if v == 0:
952
+ return to_R(self)
953
+ # v < 0
954
+ raise ValueError('has a pole at the place')
955
+
956
+ cpdef bint is_nth_power(self, n) noexcept:
957
+ r"""
958
+ Return whether this element is an ``n``-th power in the rational
959
+ function field.
960
+
961
+ INPUT:
962
+
963
+ - ``n`` -- integer
964
+
965
+ OUTPUT:
966
+
967
+ Returns ``True`` if there is an element `a` in the function field such
968
+ that this element equals `a^n`.
969
+
970
+ .. SEEALSO::
971
+
972
+ :meth:`nth_root`
973
+
974
+ EXAMPLES::
975
+
976
+ sage: K.<x> = FunctionField(GF(3))
977
+ sage: f = (x+1)/(x-1)
978
+ sage: f.is_nth_power(2)
979
+ False
980
+ """
981
+ raise NotImplementedError("is_nth_power() not implemented for generic elements")
982
+
983
+ cpdef FunctionFieldElement nth_root(self, n):
984
+ """
985
+ Return an ``n``-th root of this element in the function field.
986
+
987
+ INPUT:
988
+
989
+ - ``n`` -- integer
990
+
991
+ OUTPUT:
992
+
993
+ Returns an element ``a`` in the function field such that this element
994
+ equals `a^n`. Raises an error if no such element exists.
995
+
996
+ .. SEEALSO::
997
+
998
+ :meth:`is_nth_power`
999
+
1000
+ EXAMPLES::
1001
+
1002
+ sage: K.<x> = FunctionField(GF(3))
1003
+ sage: R.<y> = K[]
1004
+ sage: L.<y> = K.extension(y^2 - x) # needs sage.rings.function_field
1005
+ sage: L(y^27).nth_root(27) # needs sage.rings.function_field
1006
+ y
1007
+ """
1008
+ raise NotImplementedError("nth_root() not implemented for generic elements")