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,1005 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Function Fields: rational
4
+ """
5
+
6
+ # *****************************************************************************
7
+ # Copyright (C) 2010 William Stein <wstein@gmail.com>
8
+ # 2010 Robert Bradshaw <robertwb@math.washington.edu>
9
+ # 2011-2018 Julian Rüth <julian.rueth@gmail.com>
10
+ # 2011 Maarten Derickx <m.derickx.student@gmail.com>
11
+ # 2011 Syed Ahmad Lavasani
12
+ # 2013-2014 Simon King
13
+ # 2017 Dean Bisogno
14
+ # 2017 Alyson Deines
15
+ # 2017-2019 David Roe
16
+ # 2017-2022 Kwankyu Lee
17
+ # 2018 Marc Mezzarobba
18
+ # 2018 Wilfried Luebbe
19
+ # 2019 Brent Baccala
20
+ # 2022 Frédéric Chapoton
21
+ # 2022 Gonzalo Tornaría
22
+ #
23
+ # Distributed under the terms of the GNU General Public License (GPL)
24
+ # as published by the Free Software Foundation; either version 2 of
25
+ # the License, or (at your option) any later version.
26
+ # http://www.gnu.org/licenses/
27
+ # *****************************************************************************
28
+
29
+ from sage.arith.functions import lcm
30
+ from sage.misc.cachefunc import cached_method
31
+ from sage.misc.lazy_import import LazyImport
32
+ from sage.structure.category_object import CategoryObject
33
+ from sage.rings.integer import Integer
34
+ from sage.categories.homset import Hom
35
+ from sage.categories.function_fields import FunctionFields
36
+
37
+ from .element import FunctionFieldElement
38
+ from .element_rational import FunctionFieldElement_rational
39
+ from .function_field import FunctionField
40
+
41
+
42
+ class RationalFunctionField(FunctionField):
43
+ """
44
+ Rational function field in one variable, over an arbitrary base field.
45
+
46
+ INPUT:
47
+
48
+ - ``constant_field`` -- arbitrary field
49
+
50
+ - ``names`` -- string or tuple of length 1
51
+
52
+ EXAMPLES::
53
+
54
+ sage: K.<t> = FunctionField(GF(3)); K
55
+ Rational function field in t over Finite Field of size 3
56
+ sage: K.gen()
57
+ t
58
+ sage: 1/t + t^3 + 5
59
+ (t^4 + 2*t + 1)/t
60
+
61
+ sage: K.<t> = FunctionField(QQ); K
62
+ Rational function field in t over Rational Field
63
+ sage: K.gen()
64
+ t
65
+ sage: 1/t + t^3 + 5
66
+ (t^4 + 5*t + 1)/t
67
+
68
+ There are various ways to get at the underlying fields and rings
69
+ associated to a rational function field::
70
+
71
+ sage: K.<t> = FunctionField(GF(7))
72
+ sage: K.base_field()
73
+ Rational function field in t over Finite Field of size 7
74
+ sage: K.field()
75
+ Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 7
76
+ sage: K.constant_field()
77
+ Finite Field of size 7
78
+ sage: K.maximal_order()
79
+ Maximal order of Rational function field in t over Finite Field of size 7
80
+
81
+ sage: K.<t> = FunctionField(QQ)
82
+ sage: K.base_field()
83
+ Rational function field in t over Rational Field
84
+ sage: K.field()
85
+ Fraction Field of Univariate Polynomial Ring in t over Rational Field
86
+ sage: K.constant_field()
87
+ Rational Field
88
+ sage: K.maximal_order()
89
+ Maximal order of Rational function field in t over Rational Field
90
+
91
+ We define a morphism::
92
+
93
+ sage: K.<t> = FunctionField(QQ)
94
+ sage: L = FunctionField(QQ, 'tbar') # give variable name as second input
95
+ sage: K.hom(L.gen())
96
+ Function Field morphism:
97
+ From: Rational function field in t over Rational Field
98
+ To: Rational function field in tbar over Rational Field
99
+ Defn: t |--> tbar
100
+
101
+ Here are some calculations over a number field::
102
+
103
+ sage: R.<x> = FunctionField(QQ)
104
+ sage: L.<y> = R[]
105
+ sage: F.<y> = R.extension(y^2 - (x^2+1)) # needs sage.rings.function_field
106
+ sage: (y/x).divisor() # needs sage.rings.function_field
107
+ - Place (x, y - 1)
108
+ - Place (x, y + 1)
109
+ + Place (x^2 + 1, y)
110
+
111
+ sage: # needs sage.rings.number_field
112
+ sage: A.<z> = QQ[]
113
+ sage: NF.<i> = NumberField(z^2 + 1)
114
+ sage: R.<x> = FunctionField(NF)
115
+ sage: L.<y> = R[]
116
+ sage: F.<y> = R.extension(y^2 - (x^2+1)) # needs sage.rings.function_field
117
+ sage: (x/y*x.differential()).divisor() # needs sage.rings.function_field
118
+ -2*Place (1/x, 1/x*y - 1)
119
+ - 2*Place (1/x, 1/x*y + 1)
120
+ + Place (x, y - 1)
121
+ + Place (x, y + 1)
122
+ sage: (x/y).divisor() # needs sage.rings.function_field
123
+ - Place (x - i, y)
124
+ + Place (x, y - 1)
125
+ + Place (x, y + 1)
126
+ - Place (x + i, y)
127
+ """
128
+ Element = FunctionFieldElement_rational
129
+
130
+ def __init__(self, constant_field, names, category=None):
131
+ """
132
+ Initialize.
133
+
134
+ EXAMPLES::
135
+
136
+ sage: K.<t> = FunctionField(CC); K # needs sage.rings.real_mpfr
137
+ Rational function field in t over Complex Field with 53 bits of precision
138
+ sage: TestSuite(K).run() # long time (5s) # needs sage.rings.real_mpfr
139
+
140
+ sage: FunctionField(QQ[I], 'alpha') # needs sage.rings.number_field
141
+ Rational function field in alpha over
142
+ Number Field in I with defining polynomial x^2 + 1 with I = 1*I
143
+
144
+ Must be over a field::
145
+
146
+ sage: FunctionField(ZZ, 't')
147
+ Traceback (most recent call last):
148
+ ...
149
+ TypeError: constant_field must be a field
150
+ """
151
+ if names is None:
152
+ raise ValueError("variable name must be specified")
153
+ elif not isinstance(names, tuple):
154
+ names = (names, )
155
+ if not constant_field.is_field():
156
+ raise TypeError("constant_field must be a field")
157
+
158
+ self._constant_field = constant_field
159
+
160
+ FunctionField.__init__(self, self, names=names, category=FunctionFields().or_subcategory(category))
161
+
162
+ from .place_rational import FunctionFieldPlace_rational
163
+ self._place_class = FunctionFieldPlace_rational
164
+
165
+ R = constant_field[names[0]]
166
+ self._hash = hash((constant_field, names))
167
+ self._ring = R
168
+ self._field = R.fraction_field()
169
+
170
+ hom = Hom(self._field, self)
171
+ from .maps import FractionFieldToFunctionField
172
+ self.register_coercion(hom.__make_element_class__(FractionFieldToFunctionField)(hom.domain(), hom.codomain()))
173
+
174
+ from sage.categories.sets_with_partial_maps import SetsWithPartialMaps
175
+ from sage.categories.morphism import SetMorphism
176
+ R.register_conversion(SetMorphism(self.Hom(R, SetsWithPartialMaps()), self._to_polynomial))
177
+
178
+ self._gen = self(R.gen())
179
+
180
+ def __reduce__(self):
181
+ """
182
+ Return the arguments which were used to create this instance. The
183
+ rationale for this is explained in the documentation of
184
+ :class:`UniqueRepresentation`.
185
+
186
+ EXAMPLES::
187
+
188
+ sage: K.<x> = FunctionField(QQ)
189
+ sage: clazz,args = K.__reduce__()
190
+ sage: clazz(*args)
191
+ Rational function field in x over Rational Field
192
+ """
193
+ from .constructor import FunctionField
194
+ return FunctionField, (self._constant_field, self._names)
195
+
196
+ def __hash__(self):
197
+ """
198
+ Return hash of the function field.
199
+
200
+ The hash is formed from the constant field and the variable names.
201
+
202
+ EXAMPLES::
203
+
204
+ sage: K.<t> = FunctionField(QQ)
205
+ sage: hash(K) == hash((K.constant_base_field(), K.variable_names()))
206
+ True
207
+ """
208
+ return self._hash
209
+
210
+ def _repr_(self):
211
+ """
212
+ Return string representation of the function field.
213
+
214
+ EXAMPLES::
215
+
216
+ sage: K.<t> = FunctionField(QQ)
217
+ sage: K._repr_()
218
+ 'Rational function field in t over Rational Field'
219
+ """
220
+ return "Rational function field in %s over %s" % (
221
+ self.variable_name(), self._constant_field)
222
+
223
+ def _element_constructor_(self, x):
224
+ r"""
225
+ Coerce ``x`` into an element of the function field, possibly not canonically.
226
+
227
+ EXAMPLES::
228
+
229
+ sage: K.<t> = FunctionField(QQ)
230
+ sage: a = K._element_constructor_(K.maximal_order().gen()); a
231
+ t
232
+ sage: a.parent()
233
+ Rational function field in t over Rational Field
234
+
235
+ TESTS:
236
+
237
+ Conversion of a string::
238
+
239
+ sage: K('t')
240
+ t
241
+ sage: K('1/t')
242
+ 1/t
243
+
244
+ Conversion of a constant polynomial over the function field::
245
+
246
+ sage: K(K.polynomial_ring().one())
247
+ 1
248
+
249
+ Some indirect test of conversion::
250
+
251
+ sage: S.<x, y> = K[]
252
+ sage: I = S * [x^2 - y^2, y - t]
253
+ sage: I.groebner_basis() # needs sage.rings.function_field
254
+ [x^2 - t^2, y - t]
255
+ """
256
+ if isinstance(x, FunctionFieldElement):
257
+ return self.element_class(self, self._field(x._x))
258
+ try:
259
+ x = self._field(x)
260
+ except TypeError as Err:
261
+ try:
262
+ if x.parent() is self.polynomial_ring():
263
+ return x[0]
264
+ except AttributeError:
265
+ pass
266
+ raise Err
267
+ return self.element_class(self, x)
268
+
269
+ def _to_constant_base_field(self, f):
270
+ r"""
271
+ Return ``f`` as an element of the constant base field.
272
+
273
+ INPUT:
274
+
275
+ - ``f`` -- element of the rational function field which is a
276
+ constant of the underlying rational function field
277
+
278
+ EXAMPLES::
279
+
280
+ sage: K.<x> = FunctionField(QQ)
281
+ sage: K._to_constant_base_field(K(1))
282
+ 1
283
+ sage: K._to_constant_base_field(K(x))
284
+ Traceback (most recent call last):
285
+ ...
286
+ ValueError: only constants can be converted into the constant base field but x is not a constant
287
+
288
+ TESTS:
289
+
290
+ Verify that :issue:`21872` has been resolved::
291
+
292
+ sage: K(1) in QQ
293
+ True
294
+ sage: x in QQ
295
+ False
296
+ """
297
+ K = self.constant_base_field()
298
+ if f.denominator() in K and f.numerator() in K:
299
+ # When K is not exact, f.denominator() might not be an exact 1, so
300
+ # we need to divide explicitly to get the correct precision
301
+ return K(f.numerator()) / K(f.denominator())
302
+ raise ValueError("only constants can be converted into the constant base field but %r is not a constant" % (f,))
303
+
304
+ def _to_polynomial(self, f):
305
+ """
306
+ If ``f`` is integral, return it as a polynomial.
307
+
308
+ INPUT:
309
+
310
+ - ``f`` -- an element of this rational function field whose denominator
311
+ is a constant
312
+
313
+ EXAMPLES::
314
+
315
+ sage: K.<x> = FunctionField(QQ)
316
+ sage: K._ring(x) # indirect doctest
317
+ x
318
+ """
319
+ K = f.parent().constant_base_field()
320
+ if f.denominator() in K:
321
+ return f.numerator() / K(f.denominator())
322
+ raise ValueError("only polynomials can be converted to the underlying polynomial ring")
323
+
324
+ def _to_bivariate_polynomial(self, f):
325
+ """
326
+ Convert ``f`` from a univariate polynomial over the rational function
327
+ field into a bivariate polynomial and a denominator.
328
+
329
+ INPUT:
330
+
331
+ - ``f`` -- univariate polynomial over the function field
332
+
333
+ OUTPUT: bivariate polynomial, denominator
334
+
335
+ EXAMPLES::
336
+
337
+ sage: R.<t> = FunctionField(GF(7))
338
+ sage: S.<X> = R[]
339
+ sage: f = (1/t)*(X^4 - 1/t^2)*(X^3 - t^3)
340
+ sage: R._to_bivariate_polynomial(f)
341
+ (X^7*t^2 - X^4*t^5 - X^3 + t^3, t^3)
342
+ """
343
+ v = f.list()
344
+ denom = lcm([a.denominator() for a in v])
345
+ S = denom.parent()
346
+ x, t = S.base_ring()['%s,%s' % (f.parent().variable_name(),
347
+ self.variable_name())].gens()
348
+ phi = S.hom([t])
349
+ return sum([phi((denom * v[i]).numerator()) * x**i for i in range(len(v))]), denom
350
+
351
+ def _factor_univariate_polynomial(self, f, proof=None):
352
+ """
353
+ Factor the univariate polynomial f over the function field.
354
+
355
+ INPUT:
356
+
357
+ - ``f`` -- univariate polynomial over the function field
358
+
359
+ EXAMPLES:
360
+
361
+ We do a factorization over the function field over the rationals::
362
+
363
+ sage: R.<t> = FunctionField(QQ)
364
+ sage: S.<X> = R[]
365
+ sage: f = (1/t)*(X^4 - 1/t^2)*(X^3 - t^3)
366
+ sage: f.factor() # indirect doctest # needs sage.libs.singular
367
+ (1/t) * (X - t) * (X^2 - 1/t) * (X^2 + 1/t) * (X^2 + t*X + t^2)
368
+ sage: f.factor().prod() == f # needs sage.libs.singular
369
+ True
370
+
371
+ We do a factorization over a finite prime field::
372
+
373
+ sage: R.<t> = FunctionField(GF(7))
374
+ sage: S.<X> = R[]
375
+ sage: f = (1/t)*(X^4 - 1/t^2)*(X^3 - t^3)
376
+ sage: f.factor() # needs sage.libs.pari
377
+ (1/t) * (X + 3*t) * (X + 5*t) * (X + 6*t) * (X^2 + 1/t) * (X^2 + 6/t)
378
+ sage: f.factor().prod() == f # needs sage.libs.pari
379
+ True
380
+
381
+ Factoring over a function field over a non-prime finite field::
382
+
383
+ sage: # needs sage.rings.finite_rings
384
+ sage: k.<a> = GF(9)
385
+ sage: R.<t> = FunctionField(k)
386
+ sage: S.<X> = R[]
387
+ sage: f = (1/t)*(X^3 - a*t^3)
388
+ sage: f.factor()
389
+ (1/t) * (X + (a + 2)*t)^3
390
+ sage: f.factor().prod() == f
391
+ True
392
+
393
+ Factoring over a function field over a tower of finite fields::
394
+
395
+ sage: # needs sage.rings.finite_rings
396
+ sage: k.<a> = GF(4)
397
+ sage: R.<b> = k[]
398
+ sage: l.<b> = k.extension(b^2 + b + a)
399
+ sage: K.<x> = FunctionField(l)
400
+ sage: R.<t> = K[]
401
+ sage: F = t*x
402
+ sage: F.factor(proof=False)
403
+ (x) * t
404
+ """
405
+ old_variable_name = f.variable_name()
406
+ # the variables of the bivariate polynomial must be distinct
407
+ if self.variable_name() == f.variable_name():
408
+ # replace x with xx to make the variable names distinct
409
+ f = f.change_variable_name(old_variable_name + old_variable_name)
410
+
411
+ F, d = self._to_bivariate_polynomial(f)
412
+ fac = F.factor(proof=proof)
413
+ x = f.parent().gen()
414
+ t = f.parent().base_ring().gen()
415
+ phi = F.parent().hom([x, t])
416
+ v = [(phi(P), e) for P, e in fac]
417
+ unit = phi(fac.unit()) / d
418
+ w = []
419
+ for a, e in v:
420
+ c = a.leading_coefficient()
421
+ a = a / c
422
+ # undo any variable substitution that we introduced for the bivariate polynomial
423
+ if old_variable_name != a.variable_name():
424
+ a = a.change_variable_name(old_variable_name)
425
+ unit *= (c**e)
426
+ if a.is_unit():
427
+ unit *= a**e
428
+ else:
429
+ w.append((a, e))
430
+ from sage.structure.factorization import Factorization
431
+ return Factorization(w, unit=unit)
432
+
433
+ def extension(self, f, names=None):
434
+ """
435
+ Create an extension `L = K[y]/(f(y))` of the rational function field.
436
+
437
+ INPUT:
438
+
439
+ - ``f`` -- univariate polynomial over self
440
+
441
+ - ``names`` -- string or length-1 tuple
442
+
443
+ OUTPUT: a function field
444
+
445
+ EXAMPLES::
446
+
447
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
448
+ sage: K.extension(y^5 - x^3 - 3*x + x*y) # needs sage.rings.function_field
449
+ Function field in y defined by y^5 + x*y - x^3 - 3*x
450
+
451
+ A nonintegral defining polynomial::
452
+
453
+ sage: K.<t> = FunctionField(QQ); R.<y> = K[]
454
+ sage: K.extension(y^3 + (1/t)*y + t^3/(t+1)) # needs sage.rings.function_field
455
+ Function field in y defined by y^3 + 1/t*y + t^3/(t + 1)
456
+
457
+ The defining polynomial need not be monic or integral::
458
+
459
+ sage: K.extension(t*y^3 + (1/t)*y + t^3/(t+1)) # needs sage.rings.function_field
460
+ Function field in y defined by t*y^3 + 1/t*y + t^3/(t + 1)
461
+ """
462
+ from . import constructor
463
+ return constructor.FunctionFieldExtension(f, names)
464
+
465
+ @cached_method
466
+ def polynomial_ring(self, var='x'):
467
+ """
468
+ Return a polynomial ring in one variable over the rational function field.
469
+
470
+ INPUT:
471
+
472
+ - ``var`` -- string; name of the variable
473
+
474
+ EXAMPLES::
475
+
476
+ sage: K.<x> = FunctionField(QQ)
477
+ sage: K.polynomial_ring()
478
+ Univariate Polynomial Ring in x over Rational function field in x over Rational Field
479
+ sage: K.polynomial_ring('T')
480
+ Univariate Polynomial Ring in T over Rational function field in x over Rational Field
481
+ """
482
+ return self[var]
483
+
484
+ @cached_method(key=lambda self, base, basis, map: map)
485
+ def free_module(self, base=None, basis=None, map=True):
486
+ """
487
+ Return a vector space `V` and isomorphisms from the field to `V` and
488
+ from `V` to the field.
489
+
490
+ This function allows us to identify the elements of this field with
491
+ elements of a one-dimensional vector space over the field itself. This
492
+ method exists so that all function fields (rational or not) have the
493
+ same interface.
494
+
495
+ INPUT:
496
+
497
+ - ``base`` -- the base field of the vector space; must be the function
498
+ field itself (the default)
499
+
500
+ - ``basis`` -- (ignored) a basis for the vector space
501
+
502
+ - ``map`` -- (default: ``True``) whether to return maps to and from the
503
+ vector space
504
+
505
+ OUTPUT:
506
+
507
+ - a vector space `V` over base field
508
+
509
+ - an isomorphism from `V` to the field
510
+
511
+ - the inverse isomorphism from the field to `V`
512
+
513
+ EXAMPLES::
514
+
515
+ sage: K.<x> = FunctionField(QQ)
516
+ sage: K.free_module() # needs sage.modules
517
+ (Vector space of dimension 1 over Rational function field in x over Rational Field,
518
+ Isomorphism:
519
+ From: Vector space of dimension 1 over Rational function field in x over Rational Field
520
+ To: Rational function field in x over Rational Field,
521
+ Isomorphism:
522
+ From: Rational function field in x over Rational Field
523
+ To: Vector space of dimension 1 over Rational function field in x over Rational Field)
524
+
525
+ TESTS::
526
+
527
+ sage: K.free_module() # needs sage.modules
528
+ (Vector space of dimension 1 over Rational function field in x over Rational Field,
529
+ Isomorphism:
530
+ From: Vector space of dimension 1 over Rational function field in x over Rational Field
531
+ To: Rational function field in x over Rational Field,
532
+ Isomorphism:
533
+ From: Rational function field in x over Rational Field
534
+ To: Vector space of dimension 1 over Rational function field in x over Rational Field)
535
+ """
536
+ if basis is not None:
537
+ raise NotImplementedError
538
+ from .maps import MapVectorSpaceToFunctionField, MapFunctionFieldToVectorSpace
539
+ if base is None:
540
+ base = self
541
+ elif base is not self:
542
+ raise ValueError("base must be the rational function field itself")
543
+ V = base**1
544
+ if not map:
545
+ return V
546
+ from_V = MapVectorSpaceToFunctionField(V, self)
547
+ to_V = MapFunctionFieldToVectorSpace(self, V)
548
+ return (V, from_V, to_V)
549
+
550
+ def random_element(self, *args, **kwds):
551
+ """
552
+ Create a random element of the rational function field.
553
+
554
+ Parameters are passed to the random_element method of the
555
+ underlying fraction field.
556
+
557
+ EXAMPLES::
558
+
559
+ sage: FunctionField(QQ,'alpha').random_element() # random
560
+ (-1/2*alpha^2 - 4)/(-12*alpha^2 + 1/2*alpha - 1/95)
561
+ """
562
+ return self(self._field.random_element(*args, **kwds))
563
+
564
+ def degree(self, base=None):
565
+ """
566
+ Return the degree over the base field of the rational function
567
+ field. Since the base field is the rational function field itself, the
568
+ degree is 1.
569
+
570
+ INPUT:
571
+
572
+ - ``base`` -- the base field of the vector space; must be the function
573
+ field itself (the default)
574
+
575
+ EXAMPLES::
576
+
577
+ sage: K.<t> = FunctionField(QQ)
578
+ sage: K.degree()
579
+ 1
580
+ """
581
+ if base is None:
582
+ base = self
583
+ elif base is not self:
584
+ raise ValueError("base must be the rational function field itself")
585
+ from sage.rings.integer_ring import ZZ
586
+ return ZZ(1)
587
+
588
+ def gen(self, n=0):
589
+ """
590
+ Return the ``n``-th generator of the function field. If ``n`` is not
591
+ 0, then an :class:` IndexError` is raised.
592
+
593
+ EXAMPLES::
594
+
595
+ sage: K.<t> = FunctionField(QQ); K.gen()
596
+ t
597
+ sage: K.gen().parent()
598
+ Rational function field in t over Rational Field
599
+ sage: K.gen(1)
600
+ Traceback (most recent call last):
601
+ ...
602
+ IndexError: Only one generator.
603
+ """
604
+ if n != 0:
605
+ raise IndexError("Only one generator.")
606
+ return self._gen
607
+
608
+ def ngens(self):
609
+ """
610
+ Return the number of generators, which is 1.
611
+
612
+ EXAMPLES::
613
+
614
+ sage: K.<t> = FunctionField(QQ)
615
+ sage: K.ngens()
616
+ 1
617
+ """
618
+ return 1
619
+
620
+ def base_field(self):
621
+ """
622
+ Return the base field of the rational function field, which is just
623
+ the function field itself.
624
+
625
+ EXAMPLES::
626
+
627
+ sage: K.<t> = FunctionField(GF(7))
628
+ sage: K.base_field()
629
+ Rational function field in t over Finite Field of size 7
630
+ """
631
+ return self
632
+
633
+ def hom(self, im_gens, base_morphism=None):
634
+ """
635
+ Create a homomorphism from ``self`` to another ring.
636
+
637
+ INPUT:
638
+
639
+ - ``im_gens`` -- exactly one element of some ring. It must be
640
+ invertible and transcendental over the image of
641
+ ``base_morphism``; this is not checked.
642
+
643
+ - ``base_morphism`` -- a homomorphism from the base field into the
644
+ other ring; if ``None``, try to use a coercion map
645
+
646
+ OUTPUT: a map between function fields
647
+
648
+ EXAMPLES:
649
+
650
+ We make a map from a rational function field to itself::
651
+
652
+ sage: K.<x> = FunctionField(GF(7))
653
+ sage: K.hom((x^4 + 2)/x)
654
+ Function Field endomorphism of Rational function field in x over Finite Field of size 7
655
+ Defn: x |--> (x^4 + 2)/x
656
+
657
+ We construct a map from a rational function field into a
658
+ non-rational extension field::
659
+
660
+ sage: # needs sage.rings.function_field
661
+ sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
662
+ sage: L.<y> = K.extension(y^3 + 6*x^3 + x)
663
+ sage: f = K.hom(y^2 + y + 2); f
664
+ Function Field morphism:
665
+ From: Rational function field in x over Finite Field of size 7
666
+ To: Function field in y defined by y^3 + 6*x^3 + x
667
+ Defn: x |--> y^2 + y + 2
668
+ sage: f(x)
669
+ y^2 + y + 2
670
+ sage: f(x^2)
671
+ 5*y^2 + (x^3 + 6*x + 4)*y + 2*x^3 + 5*x + 4
672
+ """
673
+ if isinstance(im_gens, CategoryObject):
674
+ return self.Hom(im_gens).natural_map()
675
+ if not isinstance(im_gens, (list, tuple)):
676
+ im_gens = [im_gens]
677
+ if len(im_gens) != 1:
678
+ raise ValueError("there must be exactly one generator")
679
+ x = im_gens[0]
680
+ R = x.parent()
681
+ if base_morphism is None and not R.has_coerce_map_from(self.constant_field()):
682
+ raise ValueError("you must specify a morphism on the base field")
683
+ from .maps import FunctionFieldMorphism_rational
684
+ return FunctionFieldMorphism_rational(self.Hom(R), x, base_morphism)
685
+
686
+ def field(self):
687
+ """
688
+ Return the underlying field, forgetting the function field
689
+ structure.
690
+
691
+ EXAMPLES::
692
+
693
+ sage: K.<t> = FunctionField(GF(7))
694
+ sage: K.field()
695
+ Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 7
696
+
697
+ .. SEEALSO::
698
+
699
+ :meth:`sage.rings.fraction_field.FractionField_1poly_field.function_field`
700
+ """
701
+ return self._field
702
+
703
+ @cached_method
704
+ def maximal_order(self):
705
+ """
706
+ Return the maximal order of the function field.
707
+
708
+ Since this is a rational function field it is of the form `K(t)`, and the
709
+ maximal order is by definition `K[t]`, where `K` is the constant field.
710
+
711
+ EXAMPLES::
712
+
713
+ sage: K.<t> = FunctionField(QQ)
714
+ sage: K.maximal_order()
715
+ Maximal order of Rational function field in t over Rational Field
716
+ sage: K.equation_order()
717
+ Maximal order of Rational function field in t over Rational Field
718
+ """
719
+ from .order_rational import FunctionFieldMaximalOrder_rational
720
+ return FunctionFieldMaximalOrder_rational(self)
721
+
722
+ equation_order = maximal_order
723
+
724
+ @cached_method
725
+ def maximal_order_infinite(self):
726
+ """
727
+ Return the maximal infinite order of the function field.
728
+
729
+ By definition, this is the valuation ring of the degree valuation of
730
+ the rational function field.
731
+
732
+ EXAMPLES::
733
+
734
+ sage: K.<t> = FunctionField(QQ)
735
+ sage: K.maximal_order_infinite()
736
+ Maximal infinite order of Rational function field in t over Rational Field
737
+ sage: K.equation_order_infinite()
738
+ Maximal infinite order of Rational function field in t over Rational Field
739
+ """
740
+ from .order_rational import FunctionFieldMaximalOrderInfinite_rational
741
+ return FunctionFieldMaximalOrderInfinite_rational(self)
742
+
743
+ equation_order_infinite = maximal_order_infinite
744
+
745
+ def constant_base_field(self):
746
+ """
747
+ Return the field of which the rational function field is a
748
+ transcendental extension.
749
+
750
+ EXAMPLES::
751
+
752
+ sage: K.<t> = FunctionField(QQ)
753
+ sage: K.constant_base_field()
754
+ Rational Field
755
+ """
756
+ return self._constant_field
757
+
758
+ constant_field = constant_base_field
759
+
760
+ def different(self):
761
+ """
762
+ Return the different of the rational function field.
763
+
764
+ For a rational function field, the different is simply the zero
765
+ divisor.
766
+
767
+ EXAMPLES::
768
+
769
+ sage: K.<t> = FunctionField(QQ)
770
+ sage: K.different() # needs sage.modules
771
+ 0
772
+ """
773
+ return self.divisor_group().zero()
774
+
775
+ def genus(self):
776
+ """
777
+ Return the genus of the function field, namely 0.
778
+
779
+ EXAMPLES::
780
+
781
+ sage: K.<x> = FunctionField(QQ)
782
+ sage: K.genus()
783
+ 0
784
+ """
785
+ return Integer(0)
786
+
787
+ def change_variable_name(self, name):
788
+ r"""
789
+ Return a field isomorphic to this field with variable ``name``.
790
+
791
+ INPUT:
792
+
793
+ - ``name`` -- string or tuple consisting of a single string; the
794
+ name of the new variable
795
+
796
+ OUTPUT:
797
+
798
+ A triple ``F,f,t`` where ``F`` is a rational function field, ``f`` is
799
+ an isomorphism from ``F`` to this field, and ``t`` is the inverse of
800
+ ``f``.
801
+
802
+ EXAMPLES::
803
+
804
+ sage: K.<x> = FunctionField(QQ)
805
+ sage: L,f,t = K.change_variable_name('y')
806
+ sage: L,f,t
807
+ (Rational function field in y over Rational Field,
808
+ Function Field morphism:
809
+ From: Rational function field in y over Rational Field
810
+ To: Rational function field in x over Rational Field
811
+ Defn: y |--> x,
812
+ Function Field morphism:
813
+ From: Rational function field in x over Rational Field
814
+ To: Rational function field in y over Rational Field
815
+ Defn: x |--> y)
816
+ sage: L.change_variable_name('x')[0] is K
817
+ True
818
+ """
819
+ if isinstance(name, tuple):
820
+ if len(name) != 1:
821
+ raise ValueError("names must be a tuple with a single string")
822
+ name = name[0]
823
+ if name == self.variable_name():
824
+ id = Hom(self, self).identity()
825
+ return self, id, id
826
+ else:
827
+ from .constructor import FunctionField
828
+ ret = FunctionField(self.constant_base_field(), name)
829
+ return ret, ret.hom(self.gen()), self.hom(ret.gen())
830
+
831
+ def residue_field(self, place, name=None):
832
+ """
833
+ Return the residue field of the place along with the maps from
834
+ and to it.
835
+
836
+ INPUT:
837
+
838
+ - ``place`` -- place of the function field
839
+
840
+ - ``name`` -- string; name of the generator of the residue field
841
+
842
+ EXAMPLES::
843
+
844
+ sage: F.<x> = FunctionField(GF(5))
845
+ sage: p = F.places_finite(2)[0] # needs sage.libs.pari
846
+ sage: R, fr_R, to_R = F.residue_field(p) # needs sage.libs.pari sage.rings.function_field
847
+ sage: R # needs sage.libs.pari sage.rings.function_field
848
+ Finite Field in z2 of size 5^2
849
+ sage: to_R(x) in R # needs sage.libs.pari sage.rings.function_field
850
+ True
851
+ """
852
+ return place.residue_field(name=name)
853
+
854
+
855
+ class RationalFunctionField_char_zero(RationalFunctionField):
856
+ """
857
+ Rational function fields of characteristic zero.
858
+ """
859
+ @cached_method
860
+ def higher_derivation(self):
861
+ """
862
+ Return the higher derivation for the function field.
863
+
864
+ This is also called the Hasse-Schmidt derivation.
865
+
866
+ EXAMPLES::
867
+
868
+ sage: F.<x> = FunctionField(QQ)
869
+ sage: d = F.higher_derivation() # needs sage.libs.singular sage.modules
870
+ sage: [d(x^5,i) for i in range(10)] # needs sage.libs.singular sage.modules
871
+ [x^5, 5*x^4, 10*x^3, 10*x^2, 5*x, 1, 0, 0, 0, 0]
872
+ sage: [d(x^9,i) for i in range(10)] # needs sage.libs.singular sage.modules
873
+ [x^9, 9*x^8, 36*x^7, 84*x^6, 126*x^5, 126*x^4, 84*x^3, 36*x^2, 9*x, 1]
874
+ """
875
+ from .derivations_polymod import FunctionFieldHigherDerivation_char_zero
876
+ return FunctionFieldHigherDerivation_char_zero(self)
877
+
878
+
879
+ class RationalFunctionField_global(RationalFunctionField):
880
+ """
881
+ Rational function field over finite fields.
882
+ """
883
+ _differentials_space = LazyImport('sage.rings.function_field.differential', 'DifferentialsSpace_global')
884
+
885
+ def places(self, degree=1):
886
+ """
887
+ Return all places of the degree.
888
+
889
+ INPUT:
890
+
891
+ - ``degree`` -- (default: 1) a positive integer
892
+
893
+ EXAMPLES::
894
+
895
+ sage: F.<x> = FunctionField(GF(5))
896
+ sage: F.places() # needs sage.libs.pari
897
+ [Place (1/x),
898
+ Place (x),
899
+ Place (x + 1),
900
+ Place (x + 2),
901
+ Place (x + 3),
902
+ Place (x + 4)]
903
+ """
904
+ if degree == 1:
905
+ return [self.place_infinite()] + self.places_finite(degree)
906
+ else:
907
+ return self.places_finite(degree)
908
+
909
+ def places_finite(self, degree=1):
910
+ """
911
+ Return the finite places of the degree.
912
+
913
+ INPUT:
914
+
915
+ - ``degree`` -- (default: 1) a positive integer
916
+
917
+ EXAMPLES::
918
+
919
+ sage: F.<x> = FunctionField(GF(5))
920
+ sage: F.places_finite() # needs sage.libs.pari
921
+ [Place (x), Place (x + 1), Place (x + 2), Place (x + 3), Place (x + 4)]
922
+ """
923
+ return list(self._places_finite(degree))
924
+
925
+ def _places_finite(self, degree=1):
926
+ """
927
+ Return a generator for all monic irreducible polynomials of the degree.
928
+
929
+ INPUT:
930
+
931
+ - ``degree`` -- (default: 1) a positive integer
932
+
933
+ EXAMPLES::
934
+
935
+ sage: F.<x> = FunctionField(GF(5))
936
+ sage: F._places_finite()
937
+ <generator object ...>
938
+ """
939
+ O = self.maximal_order()
940
+ R = O._ring
941
+ G = R.polynomials(max_degree=degree - 1)
942
+ lm = R.monomial(degree)
943
+ for g in G:
944
+ h = lm + g
945
+ if h.is_irreducible():
946
+ yield O.ideal(h).place()
947
+
948
+ def place_infinite(self):
949
+ """
950
+ Return the unique place at infinity.
951
+
952
+ EXAMPLES::
953
+
954
+ sage: F.<x> = FunctionField(GF(5))
955
+ sage: F.place_infinite()
956
+ Place (1/x)
957
+ """
958
+ return self.maximal_order_infinite().prime_ideal().place()
959
+
960
+ def get_place(self, degree):
961
+ """
962
+ Return a place of ``degree``.
963
+
964
+ INPUT:
965
+
966
+ - ``degree`` -- positive integer
967
+
968
+ EXAMPLES::
969
+
970
+ sage: F.<a> = GF(2)
971
+ sage: K.<x> = FunctionField(F)
972
+ sage: K.get_place(1) # needs sage.libs.pari
973
+ Place (x)
974
+ sage: K.get_place(2) # needs sage.libs.pari
975
+ Place (x^2 + x + 1)
976
+ sage: K.get_place(3) # needs sage.libs.pari
977
+ Place (x^3 + x + 1)
978
+ sage: K.get_place(4) # needs sage.libs.pari
979
+ Place (x^4 + x + 1)
980
+ sage: K.get_place(5) # needs sage.libs.pari
981
+ Place (x^5 + x^2 + 1)
982
+ """
983
+ for p in self._places_finite(degree):
984
+ return p
985
+
986
+ assert False, "there is a bug around"
987
+
988
+ @cached_method
989
+ def higher_derivation(self):
990
+ """
991
+ Return the higher derivation for the function field.
992
+
993
+ This is also called the Hasse-Schmidt derivation.
994
+
995
+ EXAMPLES::
996
+
997
+ sage: F.<x> = FunctionField(GF(5))
998
+ sage: d = F.higher_derivation() # needs sage.rings.function_field
999
+ sage: [d(x^5,i) for i in range(10)] # needs sage.rings.function_field
1000
+ [x^5, 0, 0, 0, 0, 1, 0, 0, 0, 0]
1001
+ sage: [d(x^7,i) for i in range(10)] # needs sage.rings.function_field
1002
+ [x^7, 2*x^6, x^5, 0, 0, x^2, 2*x, 1, 0, 0]
1003
+ """
1004
+ from .derivations_polymod import RationalFunctionFieldHigherDerivation_global
1005
+ return RationalFunctionFieldHigherDerivation_global(self)