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,1039 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Morphisms of function fields
4
+
5
+ Maps and morphisms useful for computations with function fields.
6
+
7
+ EXAMPLES::
8
+
9
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
10
+ sage: K.hom(1/x)
11
+ Function Field endomorphism of Rational function field in x over Rational Field
12
+ Defn: x |--> 1/x
13
+
14
+ sage: # needs sage.rings.function_field
15
+ sage: L.<y> = K.extension(y^2 - x)
16
+ sage: K.hom(y)
17
+ Function Field morphism:
18
+ From: Rational function field in x over Rational Field
19
+ To: Function field in y defined by y^2 - x
20
+ Defn: x |--> y
21
+ sage: L.hom([y,x])
22
+ Function Field endomorphism of Function field in y defined by y^2 - x
23
+ Defn: y |--> y
24
+ x |--> x
25
+ sage: L.hom([x,y])
26
+ Traceback (most recent call last):
27
+ ...
28
+ ValueError: invalid morphism
29
+
30
+ AUTHORS:
31
+
32
+ - William Stein (2010): initial version
33
+
34
+ - Julian Rüth (2011-09-14, 2014-06-23, 2017-08-21): refactored class hierarchy; added
35
+ derivation classes; morphisms to/from fraction fields
36
+
37
+ - Kwankyu Lee (2017-04-30): added higher derivations and completions
38
+ """
39
+
40
+ # ****************************************************************************
41
+ # Copyright (C) 2010 William Stein <wstein@gmail.com>
42
+ # 2011-2017 Julian Rüth <julian.rueth@gmail.com>
43
+ # 2017 Alyson Deines
44
+ # 2017-2019 Kwankyu Lee
45
+ # 2018-2019 Travis Scrimshaw
46
+ # 2019 Brent Baccala
47
+ # 2022 Xavier Caruso
48
+ # 2022 Frédéric Chapoton
49
+ #
50
+ # Distributed under the terms of the GNU General Public License (GPL)
51
+ # as published by the Free Software Foundation; either version 2 of
52
+ # the License, or (at your option) any later version.
53
+ # https://www.gnu.org/licenses/
54
+ # ****************************************************************************
55
+
56
+ from sage.categories.homset import Hom
57
+ from sage.categories.map import Map
58
+ from sage.categories.morphism import Morphism, SetMorphism
59
+ from sage.misc.lazy_import import lazy_import
60
+ from sage.rings.infinity import infinity
61
+ from sage.rings.morphism import RingHomomorphism
62
+
63
+
64
+ lazy_import("sage.rings.function_field.derivations", (
65
+ "FunctionFieldDerivation",
66
+ "FunctionFieldHigherDerivation",
67
+ ), deprecation=35230)
68
+
69
+
70
+ class FunctionFieldVectorSpaceIsomorphism(Morphism):
71
+ r"""
72
+ Base class for isomorphisms between function fields and vector spaces.
73
+
74
+ EXAMPLES::
75
+
76
+ sage: # needs sage.rings.function_field
77
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
78
+ sage: L.<y> = K.extension(y^2 - x*y + 4*x^3)
79
+ sage: V, f, t = L.vector_space()
80
+ sage: isinstance(f, sage.rings.function_field.maps.FunctionFieldVectorSpaceIsomorphism)
81
+ True
82
+ """
83
+ def _repr_(self) -> str:
84
+ """
85
+ Return the string representation of this isomorphism.
86
+
87
+ EXAMPLES::
88
+
89
+ sage: # needs sage.rings.function_field
90
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
91
+ sage: L.<y> = K.extension(y^2 - x*y + 4*x^3)
92
+ sage: V, f, t = L.vector_space()
93
+ sage: f
94
+ Isomorphism:
95
+ From: Vector space of dimension 2 over Rational function field in x over Rational Field
96
+ To: Function field in y defined by y^2 - x*y + 4*x^3
97
+ sage: t
98
+ Isomorphism:
99
+ From: Function field in y defined by y^2 - x*y + 4*x^3
100
+ To: Vector space of dimension 2 over Rational function field in x over Rational Field
101
+ """
102
+ s = "Isomorphism:"
103
+ s += "\n From: {}".format(self.domain())
104
+ s += "\n To: {}".format(self.codomain())
105
+ return s
106
+
107
+ def is_injective(self) -> bool:
108
+ """
109
+ Return ``True``, since the isomorphism is injective.
110
+
111
+ EXAMPLES::
112
+
113
+ sage: # needs sage.rings.function_field
114
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
115
+ sage: L.<y> = K.extension(y^2 - x*y + 4*x^3)
116
+ sage: V, f, t = L.vector_space()
117
+ sage: f.is_injective()
118
+ True
119
+ """
120
+ return True
121
+
122
+ def is_surjective(self) -> bool:
123
+ """
124
+ Return ``True``, since the isomorphism is surjective.
125
+
126
+ EXAMPLES::
127
+
128
+ sage: # needs sage.rings.function_field
129
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
130
+ sage: L.<y> = K.extension(y^2 - x*y + 4*x^3)
131
+ sage: V, f, t = L.vector_space()
132
+ sage: f.is_surjective()
133
+ True
134
+ """
135
+ return True
136
+
137
+ def _richcmp_(self, other, op):
138
+ r"""
139
+ Compare this map to ``other``.
140
+
141
+ .. NOTE::
142
+
143
+ This implementation assumes that this isomorphism is defined by its
144
+ domain and codomain. Isomorphisms for which this is not true must
145
+ override this implementation.
146
+
147
+ EXAMPLES::
148
+
149
+ sage: K = QQ['x'].fraction_field()
150
+ sage: L = K.function_field()
151
+ sage: f = K.coerce_map_from(L)
152
+ sage: f == f
153
+ True
154
+
155
+ sage: # needs sage.rings.number_field
156
+ sage: K = QQbar['x'].fraction_field()
157
+ sage: L = K.function_field()
158
+ sage: g = K.coerce_map_from(L)
159
+ sage: f == g
160
+ False
161
+ """
162
+ if type(self) is not type(other):
163
+ return NotImplemented
164
+
165
+ from sage.structure.richcmp import richcmp
166
+ return richcmp((self.domain(), self.codomain()),
167
+ (other.domain(), other.codomain()), op)
168
+
169
+ def __hash__(self):
170
+ r"""
171
+ Return a hash value of this map.
172
+
173
+ This implementation assumes that this isomorphism is defined by its
174
+ domain and codomain. Isomorphisms for which this is not true should
175
+ override this implementation.
176
+
177
+ EXAMPLES::
178
+
179
+ sage: K = QQ['x'].fraction_field()
180
+ sage: L = K.function_field()
181
+ sage: f = K.coerce_map_from(L)
182
+ sage: hash(f) == hash(f)
183
+ True
184
+ """
185
+ return hash((self.domain(), self.codomain()))
186
+
187
+
188
+ class MapVectorSpaceToFunctionField(FunctionFieldVectorSpaceIsomorphism):
189
+ """
190
+ Isomorphism from a vector space to a function field.
191
+
192
+ EXAMPLES::
193
+
194
+ sage: # needs sage.rings.function_field
195
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
196
+ sage: L.<y> = K.extension(y^2 - x*y + 4*x^3)
197
+ sage: V, f, t = L.vector_space(); f
198
+ Isomorphism:
199
+ From: Vector space of dimension 2 over Rational function field in x over Rational Field
200
+ To: Function field in y defined by y^2 - x*y + 4*x^3
201
+ """
202
+ def __init__(self, V, K):
203
+ """
204
+ EXAMPLES::
205
+
206
+ sage: # needs sage.rings.function_field
207
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
208
+ sage: L.<y> = K.extension(y^2 - x*y + 4*x^3)
209
+ sage: V, f, t = L.vector_space(); type(f)
210
+ <class 'sage.rings.function_field.maps.MapVectorSpaceToFunctionField'>
211
+ """
212
+ self._V = V
213
+ self._K = K
214
+ self._R = K.polynomial_ring()
215
+ FunctionFieldVectorSpaceIsomorphism.__init__(self, Hom(V, K))
216
+
217
+ def _call_(self, v):
218
+ """
219
+ Map ``v`` to the function field.
220
+
221
+ INPUT:
222
+
223
+ - ``v`` -- element of the vector space
224
+
225
+ EXAMPLES::
226
+
227
+ sage: # needs sage.rings.function_field
228
+ sage: K.<x> = FunctionField(QQ)
229
+ sage: R.<y> = K[]
230
+ sage: L.<y> = K.extension(y^2 - x*y + 4*x^3)
231
+ sage: V, f, t = L.vector_space()
232
+ sage: f(x*V.0 + (1/x^3)*V.1) # indirect doctest
233
+ 1/x^3*y + x
234
+
235
+ TESTS:
236
+
237
+ Test that this map is a bijection for some random inputs::
238
+
239
+ sage: # needs sage.rings.function_field
240
+ sage: R.<z> = L[]
241
+ sage: M.<z> = L.extension(z^3 - y - x)
242
+ sage: for F in [K, L, M]:
243
+ ....: for base in F._intermediate_fields(K):
244
+ ....: V, f, t = F.vector_space(base)
245
+ ....: for i in range(100):
246
+ ....: a = F.random_element()
247
+ ....: assert(f(t(a)) == a)
248
+ """
249
+ fields = self._K._intermediate_fields(self._V.base_field())
250
+ fields.pop()
251
+ degrees = [k.degree() for k in fields]
252
+ gens = [k.gen() for k in fields]
253
+
254
+ # construct the basis composed of powers of the generators of all the
255
+ # intermediate fields, i.e., 1, x, y, x*y, ...
256
+ from sage.misc.misc_c import prod
257
+ from itertools import product
258
+ exponents = product(*[range(d) for d in degrees])
259
+ basis = [prod(g**e for g, e in zip(gens, es)) for es in exponents]
260
+
261
+ # multiply the entries of v with the values in basis
262
+ coefficients = self._V(v).list()
263
+ ret = sum([c * b for (c, b) in zip(coefficients, basis)])
264
+ return self._K(ret)
265
+
266
+ def domain(self):
267
+ """
268
+ Return the vector space which is the domain of the isomorphism.
269
+
270
+ EXAMPLES::
271
+
272
+ sage: # needs sage.rings.function_field
273
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
274
+ sage: L.<y> = K.extension(y^2 - x*y + 4*x^3)
275
+ sage: V, f, t = L.vector_space()
276
+ sage: f.domain()
277
+ Vector space of dimension 2 over Rational function field in x over Rational Field
278
+ """
279
+ return self._V
280
+
281
+ def codomain(self):
282
+ """
283
+ Return the function field which is the codomain of the isomorphism.
284
+
285
+ EXAMPLES::
286
+
287
+ sage: # needs sage.rings.function_field
288
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
289
+ sage: L.<y> = K.extension(y^2 - x*y + 4*x^3)
290
+ sage: V, f, t = L.vector_space()
291
+ sage: f.codomain()
292
+ Function field in y defined by y^2 - x*y + 4*x^3
293
+ """
294
+ return self._K
295
+
296
+
297
+ class MapFunctionFieldToVectorSpace(FunctionFieldVectorSpaceIsomorphism):
298
+ """
299
+ Isomorphism from a function field to a vector space.
300
+
301
+ EXAMPLES::
302
+
303
+ sage: # needs sage.rings.function_field
304
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
305
+ sage: L.<y> = K.extension(y^2 - x*y + 4*x^3)
306
+ sage: V, f, t = L.vector_space(); t
307
+ Isomorphism:
308
+ From: Function field in y defined by y^2 - x*y + 4*x^3
309
+ To: Vector space of dimension 2 over Rational function field in x over Rational Field
310
+ """
311
+ def __init__(self, K, V):
312
+ """
313
+ Initialize.
314
+
315
+ INPUT:
316
+
317
+ - ``K`` -- function field
318
+
319
+ - ``V`` -- vector space isomorphic to the function field
320
+
321
+ EXAMPLES::
322
+
323
+ sage: # needs sage.rings.function_field
324
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
325
+ sage: L.<y> = K.extension(y^2 - x*y + 4*x^3)
326
+ sage: V, f, t = L.vector_space()
327
+ sage: TestSuite(t).run(skip='_test_category')
328
+ """
329
+ self._V = V
330
+ self._K = K
331
+ self._zero = K.base_ring()(0)
332
+ self._n = K.degree()
333
+ FunctionFieldVectorSpaceIsomorphism.__init__(self, Hom(K, V))
334
+
335
+ def _call_(self, x):
336
+ """
337
+ Map ``x`` to the vector space.
338
+
339
+ EXAMPLES::
340
+
341
+ sage: # needs sage.rings.function_field
342
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
343
+ sage: L.<y> = K.extension(y^2 - x*y + 4*x^3)
344
+ sage: V, f, t = L.vector_space()
345
+ sage: t(x + (1/x^3)*y) # indirect doctest
346
+ (x, 1/x^3)
347
+
348
+ TESTS:
349
+
350
+ Test that this map is a bijection for some random inputs::
351
+
352
+ sage: # needs sage.rings.function_field
353
+ sage: R.<z> = L[]
354
+ sage: M.<z> = L.extension(z^3 - y - x)
355
+ sage: for F in [K, L, M]:
356
+ ....: for base in F._intermediate_fields(K):
357
+ ....: V, f, t = F.vector_space(base)
358
+ ....: for i in range(100):
359
+ ....: a = V.random_element()
360
+ ....: assert(t(f(a)) == a)
361
+ """
362
+ ret = [x]
363
+ fields = self._K._intermediate_fields(self._V.base_field())
364
+ fields.pop()
365
+ from itertools import chain
366
+ for k in fields:
367
+ ret = chain.from_iterable([y.list() for y in ret])
368
+ ret = list(ret)
369
+ assert all(t.parent() is self._V.base_field() for t in ret)
370
+ return self._V(ret)
371
+
372
+
373
+ class FunctionFieldMorphism(RingHomomorphism):
374
+ """
375
+ Base class for morphisms between function fields.
376
+
377
+ EXAMPLES::
378
+
379
+ sage: K.<x> = FunctionField(QQ)
380
+ sage: f = K.hom(1/x); f
381
+ Function Field endomorphism of Rational function field in x over Rational Field
382
+ Defn: x |--> 1/x
383
+ """
384
+ def __init__(self, parent, im_gen, base_morphism):
385
+ """
386
+ Initialize.
387
+
388
+ EXAMPLES::
389
+
390
+ sage: K.<x> = FunctionField(QQ)
391
+ sage: f = K.hom(1/x); f
392
+ Function Field endomorphism of Rational function field in x over Rational Field
393
+ Defn: x |--> 1/x
394
+ sage: TestSuite(f).run(skip='_test_category')
395
+ """
396
+ RingHomomorphism.__init__(self, parent)
397
+
398
+ self._im_gen = im_gen
399
+ self._base_morphism = base_morphism
400
+
401
+ def _repr_type(self) -> str:
402
+ r"""
403
+ Return the type of the morphism for the purpose of printing.
404
+
405
+ EXAMPLES::
406
+
407
+ sage: # needs sage.rings.finite_rings sage.rings.function_field
408
+ sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
409
+ sage: L.<y> = K.extension(y^3 + 6*x^3 + x)
410
+ sage: f = L.hom(y*2)
411
+ sage: f._repr_type()
412
+ 'Function Field'
413
+ """
414
+ return "Function Field"
415
+
416
+ def _repr_defn(self) -> str:
417
+ """
418
+ Return the string containing the definition of the morphism.
419
+
420
+ EXAMPLES::
421
+
422
+ sage: # needs sage.rings.finite_rings sage.rings.function_field
423
+ sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
424
+ sage: L.<y> = K.extension(y^3 + 6*x^3 + x)
425
+ sage: f = L.hom(y*2)
426
+ sage: f._repr_defn()
427
+ 'y |--> 2*y'
428
+ """
429
+ a = '%s |--> %s' % (self.domain().variable_name(), self._im_gen)
430
+ if self._base_morphism is not None:
431
+ a += '\n' + self._base_morphism._repr_defn()
432
+ return a
433
+
434
+
435
+ class FunctionFieldMorphism_polymod(FunctionFieldMorphism):
436
+ """
437
+ Morphism from a finite extension of a function field to a function field.
438
+
439
+ EXAMPLES::
440
+
441
+ sage: # needs sage.rings.finite_rings sage.rings.function_field
442
+ sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
443
+ sage: L.<y> = K.extension(y^3 + 6*x^3 + x)
444
+ sage: f = L.hom(y*2); f
445
+ Function Field endomorphism of Function field in y defined by y^3 + 6*x^3 + x
446
+ Defn: y |--> 2*y
447
+ sage: factor(L.polynomial())
448
+ y^3 + 6*x^3 + x
449
+ sage: f(y).charpoly('y')
450
+ y^3 + 6*x^3 + x
451
+ """
452
+ def __init__(self, parent, im_gen, base_morphism):
453
+ """
454
+ Initialize.
455
+
456
+ EXAMPLES::
457
+
458
+ sage: # needs sage.rings.finite_rings sage.rings.function_field
459
+ sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
460
+ sage: L.<y> = K.extension(y^3 + 6*x^3 + x)
461
+ sage: f = L.hom(y*2)
462
+ sage: TestSuite(f).run(skip='_test_category')
463
+ """
464
+ FunctionFieldMorphism.__init__(self, parent, im_gen, base_morphism)
465
+ # Verify that the morphism is valid:
466
+ R = self.codomain()['X']
467
+ v = parent.domain().polynomial().list()
468
+ if base_morphism is not None:
469
+ v = [base_morphism(a) for a in v]
470
+ f = R(v)
471
+ if f(im_gen):
472
+ raise ValueError("invalid morphism")
473
+
474
+ def _call_(self, x):
475
+ """
476
+ EXAMPLES::
477
+
478
+ sage: # needs sage.rings.finite_rings sage.rings.function_field
479
+ sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
480
+ sage: L.<y> = K.extension(y^3 + 6*x^3 + x); f = L.hom(y*2)
481
+ sage: f(y/x + x^2/(x+1)) # indirect doctest
482
+ 2/x*y + x^2/(x + 1)
483
+ sage: f(y)
484
+ 2*y
485
+ """
486
+ v = x.list()
487
+ if self._base_morphism is not None:
488
+ v = [self._base_morphism(a) for a in v]
489
+ f = v[0].parent()['X'](v)
490
+ return f(self._im_gen)
491
+
492
+
493
+ class FunctionFieldMorphism_rational(FunctionFieldMorphism):
494
+ """
495
+ Morphism from a rational function field to a function field.
496
+ """
497
+ def __init__(self, parent, im_gen, base_morphism):
498
+ """
499
+ Initialize.
500
+
501
+ EXAMPLES::
502
+
503
+ sage: K.<x> = FunctionField(GF(7))
504
+ sage: f = K.hom(1/x); f
505
+ Function Field endomorphism of Rational function field in x over Finite Field of size 7
506
+ Defn: x |--> 1/x
507
+ """
508
+ FunctionFieldMorphism.__init__(self, parent, im_gen, base_morphism)
509
+
510
+ def _call_(self, x):
511
+ """
512
+ EXAMPLES::
513
+
514
+ sage: # needs sage.rings.finite_rings
515
+ sage: K.<x> = FunctionField(GF(7))
516
+ sage: f = K.hom(1/x); f
517
+ Function Field endomorphism of Rational function field in x over Finite Field of size 7
518
+ Defn: x |--> 1/x
519
+ sage: f(x + 1) # indirect doctest
520
+ (x + 1)/x
521
+ sage: 1/x + 1
522
+ (x + 1)/x
523
+
524
+ You can specify a morphism on the base ring::
525
+
526
+ sage: # needs sage.rings.number_field
527
+ sage: Qi = GaussianIntegers().fraction_field()
528
+ sage: i = Qi.gen()
529
+ sage: K.<x> = FunctionField(Qi)
530
+ sage: phi1 = Qi.hom([CC.gen()])
531
+ sage: phi2 = Qi.hom([-CC.gen()])
532
+ sage: f = K.hom(CC.pi(), phi1)
533
+ sage: f(1 + i + x)
534
+ 4.14159265358979 + 1.00000000000000*I
535
+ sage: g = K.hom(CC.pi(), phi2)
536
+ sage: g(1 + i + x)
537
+ 4.14159265358979 - 1.00000000000000*I
538
+ """
539
+ a = x.element()
540
+ if self._base_morphism is None:
541
+ return a.subs({a.parent().gen(): self._im_gen})
542
+
543
+ f = self._base_morphism
544
+ num = a.numerator()
545
+ den = a.denominator()
546
+ R = self._im_gen.parent()['X']
547
+ num = R([f(c) for c in num.list()])
548
+ den = R([f(c) for c in den.list()])
549
+ return num.subs(self._im_gen) / den.subs(self._im_gen)
550
+
551
+
552
+ class FunctionFieldConversionToConstantBaseField(Map):
553
+ r"""
554
+ Conversion map from the function field to its constant base field.
555
+
556
+ EXAMPLES::
557
+
558
+ sage: K.<x> = FunctionField(QQ)
559
+ sage: QQ.convert_map_from(K)
560
+ Conversion map:
561
+ From: Rational function field in x over Rational Field
562
+ To: Rational Field
563
+ """
564
+ def __init__(self, parent):
565
+ """
566
+ Initialize.
567
+
568
+ TESTS::
569
+
570
+ sage: K.<x> = FunctionField(QQ)
571
+ sage: f = QQ.convert_map_from(K)
572
+ sage: from sage.rings.function_field.maps import FunctionFieldConversionToConstantBaseField
573
+ sage: isinstance(f, FunctionFieldConversionToConstantBaseField)
574
+ True
575
+ """
576
+ Map.__init__(self, parent)
577
+
578
+ def _repr_type(self) -> str:
579
+ r"""
580
+ Return the type of this map (a conversion), for the purposes of
581
+ printing out ``self``.
582
+
583
+ EXAMPLES::
584
+
585
+ sage: K.<x> = FunctionField(QQ)
586
+ sage: QQ.convert_map_from(K) # indirect doctest
587
+ Conversion map:
588
+ From: Rational function field in x over Rational Field
589
+ To: Rational Field
590
+ """
591
+ return "Conversion"
592
+
593
+ def _call_(self, x):
594
+ """
595
+ EXAMPLES::
596
+
597
+ sage: K.<x> = FunctionField(QQ)
598
+ sage: QQ(K(1)) # indirect doctest
599
+ 1
600
+ """
601
+ return x.parent()._to_constant_base_field(x)
602
+
603
+
604
+ class FunctionFieldToFractionField(FunctionFieldVectorSpaceIsomorphism):
605
+ r"""
606
+ Isomorphism from rational function field to the isomorphic fraction
607
+ field of a polynomial ring.
608
+
609
+ EXAMPLES::
610
+
611
+ sage: K = QQ['x'].fraction_field()
612
+ sage: L = K.function_field()
613
+ sage: f = K.coerce_map_from(L); f
614
+ Isomorphism:
615
+ From: Rational function field in x over Rational Field
616
+ To: Fraction Field of Univariate Polynomial Ring in x over Rational Field
617
+
618
+ .. SEEALSO::
619
+
620
+ :class:`FractionFieldToFunctionField`
621
+
622
+ TESTS::
623
+
624
+ sage: from sage.rings.function_field.maps import FunctionFieldToFractionField
625
+ sage: isinstance(f, FunctionFieldToFractionField)
626
+ True
627
+ sage: TestSuite(f).run()
628
+ """
629
+ def _call_(self, f):
630
+ r"""
631
+ Return the value of this map at ``f``.
632
+
633
+ EXAMPLES::
634
+
635
+ sage: K = QQ['x'].fraction_field()
636
+ sage: L = K.function_field()
637
+ sage: f = K.coerce_map_from(L)
638
+ sage: f(~L.gen())
639
+ 1/x
640
+ """
641
+ return self.codomain()(f.numerator(), f.denominator())
642
+
643
+ def section(self):
644
+ r"""
645
+ Return the inverse map of this isomorphism.
646
+
647
+ EXAMPLES::
648
+
649
+ sage: K = QQ['x'].fraction_field()
650
+ sage: L = K.function_field()
651
+ sage: f = K.coerce_map_from(L)
652
+ sage: f.section()
653
+ Isomorphism:
654
+ From: Fraction Field of Univariate Polynomial Ring in x over Rational Field
655
+ To: Rational function field in x over Rational Field
656
+ """
657
+ parent = Hom(self.codomain(), self.domain())
658
+ return parent.__make_element_class__(FractionFieldToFunctionField)(parent.domain(), parent.codomain())
659
+
660
+
661
+ class FractionFieldToFunctionField(FunctionFieldVectorSpaceIsomorphism):
662
+ r"""
663
+ Isomorphism from a fraction field of a polynomial ring to the isomorphic
664
+ function field.
665
+
666
+ EXAMPLES::
667
+
668
+ sage: K = QQ['x'].fraction_field()
669
+ sage: L = K.function_field()
670
+ sage: f = L.coerce_map_from(K); f
671
+ Isomorphism:
672
+ From: Fraction Field of Univariate Polynomial Ring in x over Rational Field
673
+ To: Rational function field in x over Rational Field
674
+
675
+ .. SEEALSO::
676
+
677
+ :class:`FunctionFieldToFractionField`
678
+
679
+ TESTS::
680
+
681
+ sage: from sage.rings.function_field.maps import FractionFieldToFunctionField
682
+ sage: isinstance(f, FractionFieldToFunctionField)
683
+ True
684
+ sage: TestSuite(f).run()
685
+ """
686
+ def _call_(self, f):
687
+ r"""
688
+ Return the value of this morphism at ``f``.
689
+
690
+ EXAMPLES::
691
+
692
+ sage: K = QQ['x'].fraction_field()
693
+ sage: L = K.function_field()
694
+ sage: f = L.coerce_map_from(K)
695
+ sage: f(~K.gen())
696
+ 1/x
697
+ """
698
+ return self.codomain()._element_constructor_(f)
699
+
700
+ def section(self):
701
+ r"""
702
+ Return the inverse map of this isomorphism.
703
+
704
+ EXAMPLES::
705
+
706
+ sage: K = QQ['x'].fraction_field()
707
+ sage: L = K.function_field()
708
+ sage: f = L.coerce_map_from(K)
709
+ sage: f.section()
710
+ Isomorphism:
711
+ From: Rational function field in x over Rational Field
712
+ To: Fraction Field of Univariate Polynomial Ring in x over Rational Field
713
+ """
714
+ parent = Hom(self.codomain(), self.domain())
715
+ return parent.__make_element_class__(FunctionFieldToFractionField)(parent)
716
+
717
+
718
+ class FunctionFieldCompletion(Map):
719
+ """
720
+ Completions on function fields.
721
+
722
+ INPUT:
723
+
724
+ - ``field`` -- function field
725
+
726
+ - ``place`` -- place of the function field
727
+
728
+ - ``name`` -- string for the name of the series variable
729
+
730
+ - ``prec`` -- positive integer; default precision
731
+
732
+ - ``gen_name`` -- string; name of the generator of the residue
733
+ field; used only when place is non-rational
734
+
735
+ EXAMPLES::
736
+
737
+ sage: # needs sage.rings.finite_rings sage.rings.function_field
738
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
739
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
740
+ sage: p = L.places_finite()[0]
741
+ sage: m = L.completion(p)
742
+ sage: m
743
+ Completion map:
744
+ From: Function field in y defined by y^2 + y + (x^2 + 1)/x
745
+ To: Laurent Series Ring in s over Finite Field of size 2
746
+ sage: m(x)
747
+ s^2 + s^3 + s^4 + s^5 + s^7 + s^8 + s^9 + s^10 + s^12 + s^13
748
+ + s^15 + s^16 + s^17 + s^19 + O(s^22)
749
+ sage: m(y)
750
+ s^-1 + 1 + s^3 + s^5 + s^7 + s^9 + s^13 + s^15 + s^17 + O(s^19)
751
+ sage: m(x*y) == m(x) * m(y)
752
+ True
753
+ sage: m(x+y) == m(x) + m(y)
754
+ True
755
+
756
+ The variable name of the series can be supplied. If the place is not
757
+ rational such that the residue field is a proper extension of the constant
758
+ field, you can also specify the generator name of the extension::
759
+
760
+ sage: # needs sage.rings.finite_rings sage.rings.function_field
761
+ sage: p2 = L.places_finite(2)[0]
762
+ sage: p2
763
+ Place (x^2 + x + 1, x*y + 1)
764
+ sage: m2 = L.completion(p2, 't', gen_name='b')
765
+ sage: m2(x)
766
+ (b + 1) + t + t^2 + t^4 + t^8 + t^16 + O(t^20)
767
+ sage: m2(y)
768
+ b + b*t + b*t^3 + b*t^4 + (b + 1)*t^5 + (b + 1)*t^7 + b*t^9 + b*t^11
769
+ + b*t^12 + b*t^13 + b*t^15 + b*t^16 + (b + 1)*t^17 + (b + 1)*t^19 + O(t^20)
770
+ """
771
+ def __init__(self, field, place, name=None, prec=None, gen_name=None):
772
+ """
773
+ Initialize.
774
+
775
+ EXAMPLES::
776
+
777
+ sage: # needs sage.rings.finite_rings sage.rings.function_field
778
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
779
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
780
+ sage: p = L.places_finite()[0]
781
+ sage: m = L.completion(p)
782
+ sage: m
783
+ Completion map:
784
+ From: Function field in y defined by y^2 + y + (x^2 + 1)/x
785
+ To: Laurent Series Ring in s over Finite Field of size 2
786
+ """
787
+ if name is None:
788
+ name = 's' # default
789
+
790
+ if gen_name is None:
791
+ gen_name = 'a' # default
792
+
793
+ k, from_k, to_k = place.residue_field(name=gen_name)
794
+
795
+ self._place = place
796
+ self._gen_name = gen_name
797
+
798
+ if prec == infinity:
799
+ from sage.rings.lazy_series_ring import LazyLaurentSeriesRing
800
+ codomain = LazyLaurentSeriesRing(k, name)
801
+ self._precision = infinity
802
+ else: # prec < infinity:
803
+ # if prec is None, the Laurent series ring provides default precision
804
+ from sage.rings.laurent_series_ring import LaurentSeriesRing
805
+ codomain = LaurentSeriesRing(k, name=name, default_prec=prec)
806
+ self._precision = codomain.default_prec()
807
+
808
+ Map.__init__(self, field, codomain)
809
+
810
+ def _repr_type(self) -> str:
811
+ """
812
+ Return a string containing the type of the map.
813
+
814
+ EXAMPLES::
815
+
816
+ sage: # needs sage.rings.finite_rings sage.rings.function_field
817
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
818
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
819
+ sage: p = L.places_finite()[0]
820
+ sage: m = L.completion(p)
821
+ sage: m # indirect doctest
822
+ Completion map:
823
+ From: Function field in y defined by y^2 + y + (x^2 + 1)/x
824
+ To: Laurent Series Ring in s over Finite Field of size 2
825
+ """
826
+ return 'Completion'
827
+
828
+ def _call_(self, f):
829
+ """
830
+ Call the completion for f.
831
+
832
+ EXAMPLES::
833
+
834
+ sage: # needs sage.rings.finite_rings sage.rings.function_field
835
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
836
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
837
+ sage: p = L.places_finite()[0]
838
+ sage: m = L.completion(p)
839
+ sage: m(y)
840
+ s^-1 + 1 + s^3 + s^5 + s^7 + s^9 + s^13 + s^15 + s^17 + O(s^19)
841
+ """
842
+ if self._precision == infinity:
843
+ return self._expand_lazy(f)
844
+ else:
845
+ return self._expand(f, prec=None)
846
+
847
+ def _call_with_args(self, f, args, kwds):
848
+ """
849
+ Call the completion with ``args`` and ``kwds``.
850
+
851
+ EXAMPLES::
852
+
853
+ sage: # needs sage.rings.finite_rings sage.rings.function_field
854
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
855
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
856
+ sage: p = L.places_finite()[0]
857
+ sage: m = L.completion(p)
858
+ sage: m(x+y, 10) # indirect doctest
859
+ s^-1 + 1 + s^2 + s^4 + s^8 + O(s^9)
860
+ """
861
+ if self._precision == infinity:
862
+ return self._expand_lazy(f, *args, **kwds)
863
+ else:
864
+ return self._expand(f, *args, **kwds)
865
+
866
+ def _expand(self, f, prec=None):
867
+ """
868
+ Return the Laurent series expansion of f with precision ``prec``.
869
+
870
+ INPUT:
871
+
872
+ - ``f`` -- element of the function field
873
+
874
+ - ``prec`` -- positive integer; relative precision of the series
875
+
876
+ EXAMPLES::
877
+
878
+ sage: # needs sage.rings.finite_rings sage.rings.function_field
879
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
880
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
881
+ sage: p = L.places_finite()[0]
882
+ sage: m = L.completion(p)
883
+ sage: m(x, prec=20) # indirect doctest
884
+ s^2 + s^3 + s^4 + s^5 + s^7 + s^8 + s^9 + s^10 + s^12 + s^13 + s^15
885
+ + s^16 + s^17 + s^19 + O(s^22)
886
+ """
887
+ if prec is None:
888
+ prec = self._precision
889
+
890
+ place = self._place
891
+ F = place.function_field()
892
+ der = F.higher_derivation()
893
+
894
+ k, from_k, to_k = place.residue_field(name=self._gen_name)
895
+ sep = place.local_uniformizer()
896
+
897
+ val = f.valuation(place)
898
+ e = f * sep**(-val)
899
+
900
+ coeffs = [to_k(der._derive(e, i, sep)) for i in range(prec)]
901
+ return self.codomain()(coeffs, val).add_bigoh(prec + val)
902
+
903
+ def _expand_lazy(self, f):
904
+ """
905
+ Return the lazy Laurent series expansion of ``f``.
906
+
907
+ INPUT:
908
+
909
+ - ``f`` -- element of the function field
910
+
911
+ EXAMPLES::
912
+
913
+ sage: # needs sage.combinat sage.rings.finite_rings sage.rings.function_field
914
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
915
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
916
+ sage: p = L.places_finite()[0]
917
+ sage: m = L.completion(p, prec=infinity)
918
+ sage: e = m(x); e
919
+ s^2 + s^3 + s^4 + s^5 + s^7 + s^8 + ...
920
+ sage: e.coefficient(99) # indirect doctest
921
+ 0
922
+ sage: e.coefficient(100)
923
+ 1
924
+ """
925
+ place = self._place
926
+ F = place.function_field()
927
+ der = F.higher_derivation()
928
+
929
+ k, from_k, to_k = place.residue_field(name=self._gen_name)
930
+ sep = place.local_uniformizer()
931
+
932
+ val = f.valuation(place)
933
+ e = f * sep**(-val)
934
+
935
+ def coeff(s, n):
936
+ return to_k(der._derive(e, n - val, sep))
937
+
938
+ return self.codomain().series(coeff, valuation=val)
939
+
940
+ def default_precision(self):
941
+ """
942
+ Return the default precision.
943
+
944
+ EXAMPLES::
945
+
946
+ sage: # needs sage.rings.finite_rings sage.rings.function_field
947
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
948
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
949
+ sage: p = L.places_finite()[0]
950
+ sage: m = L.completion(p)
951
+ sage: m.default_precision()
952
+ 20
953
+ """
954
+ return self._precision
955
+
956
+
957
+ class FunctionFieldRingMorphism(SetMorphism):
958
+ """
959
+ Ring homomorphism.
960
+ """
961
+ def _repr_(self) -> str:
962
+ """
963
+ Return the string representation of the map.
964
+
965
+ EXAMPLES::
966
+
967
+ sage: # needs sage.rings.finite_rings sage.rings.function_field
968
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
969
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
970
+ sage: p = L.places_finite()[0]
971
+ sage: R = p.valuation_ring()
972
+ sage: k, fr_k, to_k = R.residue_field()
973
+ sage: k
974
+ Finite Field of size 2
975
+ sage: fr_k
976
+ Ring morphism:
977
+ From: Finite Field of size 2
978
+ To: Valuation ring at Place (x, x*y)
979
+ """
980
+ s = "Ring morphism:"
981
+ s += "\n From: {}".format(self.domain())
982
+ s += "\n To: {}".format(self.codomain())
983
+ return s
984
+
985
+
986
+ class FunctionFieldLinearMap(SetMorphism):
987
+ """
988
+ Linear map to function fields.
989
+ """
990
+ def _repr_(self) -> str:
991
+ """
992
+ Return the string representation of the map.
993
+
994
+ EXAMPLES::
995
+
996
+ sage: # needs sage.rings.finite_rings sage.rings.function_field
997
+ sage: K.<x> = FunctionField(GF(5)); R.<t> = PolynomialRing(K)
998
+ sage: F.<y> = K.extension(t^2-x^3-1)
999
+ sage: O = F.maximal_order()
1000
+ sage: I = O.ideal(x - 2)
1001
+ sage: D = I.divisor()
1002
+ sage: V, from_V, to_V = D.function_space()
1003
+ sage: from_V
1004
+ Linear map:
1005
+ From: Vector space of dimension 2 over Finite Field of size 5
1006
+ To: Function field in y defined by y^2 + 4*x^3 + 4
1007
+ """
1008
+ s = "Linear map:"
1009
+ s += "\n From: {}".format(self.domain())
1010
+ s += "\n To: {}".format(self.codomain())
1011
+ return s
1012
+
1013
+
1014
+ class FunctionFieldLinearMapSection(SetMorphism):
1015
+ """
1016
+ Section of linear map from function fields.
1017
+ """
1018
+ def _repr_(self) -> str:
1019
+ """
1020
+ Return the string representation of the map.
1021
+
1022
+ EXAMPLES::
1023
+
1024
+ sage: # needs sage.rings.finite_rings sage.rings.function_field
1025
+ sage: K.<x> = FunctionField(GF(5)); R.<t> = PolynomialRing(K)
1026
+ sage: F.<y> = K.extension(t^2 - x^3 - 1)
1027
+ sage: O = F.maximal_order()
1028
+ sage: I = O.ideal(x - 2)
1029
+ sage: D = I.divisor()
1030
+ sage: V, from_V, to_V = D.function_space()
1031
+ sage: to_V
1032
+ Section of linear map:
1033
+ From: Function field in y defined by y^2 + 4*x^3 + 4
1034
+ To: Vector space of dimension 2 over Finite Field of size 5
1035
+ """
1036
+ s = "Section of linear map:"
1037
+ s += "\n From: {}".format(self.domain())
1038
+ s += "\n To: {}".format(self.codomain())
1039
+ return s