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,991 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Fields
4
+ """
5
+ # ****************************************************************************
6
+ # Copyright (C) 2005 David Kohel <kohel@maths.usyd.edu>
7
+ # William Stein <wstein@math.ucsd.edu>
8
+ # 2008 Teresa Gomez-Diaz (CNRS) <Teresa.Gomez-Diaz@univ-mlv.fr>
9
+ # 2008-2009 Nicolas M. Thiery <nthiery at users.sf.net>
10
+ # 2012-2014 Julian Rueth <julian.rueth@fsfe.org>
11
+ #
12
+ # Distributed under the terms of the GNU General Public License (GPL)
13
+ # https://www.gnu.org/licenses/
14
+ # *****************************************************************************
15
+
16
+ from sage.misc.lazy_attribute import lazy_class_attribute
17
+ from sage.misc.lazy_import import LazyImport
18
+ from sage.categories.category_with_axiom import CategoryWithAxiom
19
+ from sage.categories.category_singleton import Category_contains_method_by_parent_class
20
+ from sage.categories.euclidean_domains import EuclideanDomains
21
+ from sage.categories.division_rings import DivisionRings
22
+ from sage.categories.noetherian_rings import NoetherianRings
23
+
24
+ from sage.structure.element import coerce_binop
25
+
26
+
27
+ class Fields(CategoryWithAxiom):
28
+ """
29
+ The category of (commutative) fields, i.e. commutative rings where
30
+ all nonzero elements have multiplicative inverses
31
+
32
+ EXAMPLES::
33
+
34
+ sage: K = Fields()
35
+ sage: K
36
+ Category of fields
37
+ sage: Fields().super_categories()
38
+ [Category of euclidean domains,
39
+ Category of division rings,
40
+ Category of noetherian rings]
41
+
42
+ sage: K(IntegerRing())
43
+ Rational Field
44
+ sage: K(PolynomialRing(GF(3), 'x'))
45
+ Fraction Field of Univariate Polynomial Ring in x over
46
+ Finite Field of size 3
47
+ sage: K(RealField()) # needs sage.rings.real_mpfr
48
+ Real Field with 53 bits of precision
49
+
50
+ TESTS::
51
+
52
+ sage: TestSuite(Fields()).run()
53
+ """
54
+ _base_category_class_and_axiom = (DivisionRings, "Commutative")
55
+
56
+ def extra_super_categories(self):
57
+ """
58
+ EXAMPLES::
59
+
60
+ sage: Fields().extra_super_categories()
61
+ [Category of euclidean domains, Category of noetherian rings]
62
+ """
63
+ return [EuclideanDomains(), NoetherianRings()]
64
+
65
+ def __contains__(self, x):
66
+ """
67
+ EXAMPLES::
68
+
69
+ sage: GF(4, "a") in Fields() # needs sage.rings.finite_rings
70
+ True
71
+ sage: QQ in Fields()
72
+ True
73
+ sage: ZZ in Fields()
74
+ False
75
+ sage: IntegerModRing(4) in Fields()
76
+ False
77
+ sage: InfinityRing in Fields()
78
+ False
79
+
80
+ This implementation will not be needed anymore once every
81
+ field in Sage will be properly declared in the category
82
+ :class:`Fields() <Fields>`.
83
+
84
+ Caveat: this should eventually be fixed::
85
+
86
+ sage: gap.Rationals in Fields() # needs sage.libs.gap
87
+ False
88
+
89
+ typically by implementing the method :meth:`category`
90
+ appropriately for Gap objects::
91
+
92
+ sage: GR = gap.Rationals # needs sage.libs.gap
93
+ sage: GR.category = lambda: Fields() # needs sage.libs.gap
94
+ sage: GR in Fields() # needs sage.libs.gap
95
+ True
96
+
97
+ The following tests against a memory leak fixed in :issue:`13370`. In order
98
+ to prevent non-deterministic deallocation of fields that have been created
99
+ in other doctests, we introduced a strong reference to all previously created
100
+ uncollected objects in :issue:`19244`. ::
101
+
102
+ sage: # needs sage.libs.pari
103
+ sage: import gc
104
+ sage: _ = gc.collect()
105
+ sage: permstore = [X for X in gc.get_objects()
106
+ ....: if isinstance(X, sage.rings.finite_rings.integer_mod_ring.IntegerModRing_generic)]
107
+ sage: n = len(permstore)
108
+ sage: for i in prime_range(100):
109
+ ....: R = ZZ.quotient(i)
110
+ ....: t = R in Fields()
111
+
112
+ First, we show that there are now more quotient rings in cache than before::
113
+
114
+ sage: # needs sage.libs.pari
115
+ sage: len([X for X in gc.get_objects()
116
+ ....: if isinstance(X, sage.rings.finite_rings.integer_mod_ring.IntegerModRing_generic)]) > n
117
+ True
118
+
119
+ When we delete the last quotient ring created in the loop and then do a garbage
120
+ collection, all newly created rings vanish::
121
+
122
+ sage: # needs sage.libs.pari
123
+ sage: del R
124
+ sage: _ = gc.collect()
125
+ sage: len([X for X in gc.get_objects()
126
+ ....: if isinstance(X, sage.rings.finite_rings.integer_mod_ring.IntegerModRing_generic)]) - n
127
+ 0
128
+ """
129
+ from sage.rings.ring import _is_Field
130
+ try:
131
+ return self._contains_helper(x) or _is_Field(x)
132
+ except Exception:
133
+ return False
134
+
135
+ @lazy_class_attribute
136
+ def _contains_helper(cls):
137
+ """
138
+ Helper for containment tests in the category of fields.
139
+
140
+ This helper just tests whether the given object's category
141
+ is already known to be a sub-category of the category of
142
+ fields. There are, however, rings that are initialised
143
+ as plain commutative rings and found out to be fields
144
+ only afterwards. Hence, this helper alone is not enough
145
+ for a proper containment test.
146
+
147
+ TESTS::
148
+
149
+ sage: # needs sage.libs.pari
150
+ sage: P.<x> = QQ[]
151
+ sage: Q = P.quotient(x^2 + 2)
152
+ sage: Q.category()
153
+ Category of commutative no zero divisors quotients of algebras
154
+ over (number fields and quotient fields and metric spaces)
155
+ sage: F = Fields()
156
+ sage: F._contains_helper(Q)
157
+ False
158
+ sage: Q in F # This changes the category!
159
+ True
160
+ sage: F._contains_helper(Q)
161
+ True
162
+ """
163
+ return Category_contains_method_by_parent_class(cls())
164
+
165
+ def _call_(self, x):
166
+ """
167
+ Construct a field from the data in ``x``.
168
+
169
+ EXAMPLES::
170
+
171
+ sage: K = Fields()
172
+ sage: K
173
+ Category of fields
174
+ sage: Fields().super_categories()
175
+ [Category of euclidean domains,
176
+ Category of division rings,
177
+ Category of noetherian rings]
178
+
179
+ sage: K(IntegerRing()) # indirect doctest
180
+ Rational Field
181
+ sage: K(PolynomialRing(GF(3), 'x')) # indirect doctest
182
+ Fraction Field of Univariate Polynomial Ring in x over
183
+ Finite Field of size 3
184
+ sage: K(RealField()) # needs sage.rings.real_mpfr
185
+ Real Field with 53 bits of precision
186
+ """
187
+ try:
188
+ return x.fraction_field()
189
+ except AttributeError:
190
+ raise TypeError("unable to associate a field to %s" % x)
191
+
192
+ Finite = LazyImport('sage.categories.finite_fields', 'FiniteFields', at_startup=True)
193
+
194
+ class ParentMethods:
195
+ def krull_dimension(self):
196
+ """
197
+ Return the Krull dimension of this field, which is 0.
198
+
199
+ EXAMPLES::
200
+
201
+ sage: QQ.krull_dimension()
202
+ 0
203
+ sage: Frac(QQ['x,y']).krull_dimension()
204
+ 0
205
+ """
206
+ return 0
207
+
208
+ def is_field(self, proof=True):
209
+ r"""
210
+ Return ``True`` as ``self`` is a field.
211
+
212
+ EXAMPLES::
213
+
214
+ sage: QQ.is_field()
215
+ True
216
+ sage: Parent(QQ,category=Fields()).is_field()
217
+ True
218
+
219
+ sage: Frac(ZZ['x,y']).is_field()
220
+ True
221
+ """
222
+ return True
223
+
224
+ def is_integrally_closed(self) -> bool:
225
+ r"""
226
+ Return whether ``self`` is integrally closed.
227
+
228
+ For every field `F`, `F` is its own field of fractions.
229
+ Therefore every element of `F` is integral over `F`.
230
+
231
+ EXAMPLES::
232
+
233
+ sage: QQ.is_integrally_closed()
234
+ True
235
+ sage: QQbar.is_integrally_closed() # needs sage.rings.number_field
236
+ True
237
+ sage: Z5 = GF(5); Z5
238
+ Finite Field of size 5
239
+ sage: Z5.is_integrally_closed()
240
+ True
241
+ sage: Frac(ZZ['x,y']).is_integrally_closed()
242
+ True
243
+ """
244
+ return True
245
+
246
+ def integral_closure(self):
247
+ """
248
+ Return this field, since fields are integrally closed in their
249
+ fraction field.
250
+
251
+ EXAMPLES::
252
+
253
+ sage: QQ.integral_closure()
254
+ Rational Field
255
+ sage: Frac(ZZ['x,y']).integral_closure()
256
+ Fraction Field of Multivariate Polynomial Ring in x, y
257
+ over Integer Ring
258
+ """
259
+ return self
260
+
261
+ def algebraic_closure(self):
262
+ """
263
+ Return the algebraic closure of ``self``.
264
+
265
+ .. NOTE::
266
+
267
+ This is only implemented for certain classes of field.
268
+
269
+ EXAMPLES::
270
+
271
+ sage: K = PolynomialRing(QQ,'x').fraction_field(); K
272
+ Fraction Field of Univariate Polynomial Ring in x over Rational Field
273
+ sage: K.algebraic_closure()
274
+ Traceback (most recent call last):
275
+ ...
276
+ NotImplementedError: algebraic closures of general fields not implemented
277
+ """
278
+ raise NotImplementedError("algebraic closures of general fields not implemented")
279
+
280
+ def prime_subfield(self):
281
+ """
282
+ Return the prime subfield of ``self``.
283
+
284
+ EXAMPLES::
285
+
286
+ sage: k = GF(9, 'a') # needs sage.rings.finite_rings
287
+ sage: k.prime_subfield() # needs sage.rings.finite_rings
288
+ Finite Field of size 3
289
+ """
290
+ if self.characteristic() == 0:
291
+ import sage.rings.rational_field
292
+ return sage.rings.rational_field.RationalField()
293
+
294
+ from sage.rings.finite_rings.finite_field_constructor import GF
295
+ return GF(self.characteristic())
296
+
297
+ def divides(self, x, y, coerce=True):
298
+ """
299
+ Return ``True`` if ``x`` divides ``y`` in this field.
300
+
301
+ This is usually ``True`` in a field!.
302
+
303
+ If ``coerce`` is ``True`` (the default), first coerce
304
+ ``x`` and ``y`` into ``self``.
305
+
306
+ EXAMPLES::
307
+
308
+ sage: QQ.divides(2, 3/4)
309
+ True
310
+ sage: QQ.divides(0, 5)
311
+ False
312
+ """
313
+ if coerce:
314
+ x = self(x)
315
+ y = self(y)
316
+ if x.is_zero():
317
+ return y.is_zero()
318
+ return True
319
+
320
+ def _gcd_univariate_polynomial(self, a, b):
321
+ """
322
+ Return the gcd of ``a`` and ``b`` as a monic polynomial.
323
+
324
+ INPUT:
325
+
326
+ - ``a``, ``b`` -- two univariate polynomials defined over ``self``
327
+
328
+ .. WARNING::
329
+
330
+ If the base ring is inexact, the results may not be
331
+ entirely stable.
332
+
333
+ EXAMPLES::
334
+
335
+ sage: R.<x> = QQbar[] # needs sage.rings.number_field
336
+ sage: QQbar._gcd_univariate_polynomial(2*x, 2*x^2) # needs sage.rings.number_field
337
+ x
338
+
339
+ TESTS::
340
+
341
+ sage: fields = []
342
+ sage: fields += [RR, CC] # needs sage.rings.real_mpfr
343
+ sage: fields.append(QQbar) # needs sage.rings.number_field
344
+ sage: for A in fields:
345
+ ....: g = A._gcd_univariate_polynomial
346
+ ....: R.<x> = A[]
347
+ ....: z = R.zero()
348
+ ....: assert(g(2*x, 2*x^2) == x and
349
+ ....: g(z, 2*x) == x and
350
+ ....: g(2*x, z) == x and
351
+ ....: g(z, z) == z)
352
+
353
+ sage: # needs sage.rings.real_mpfr
354
+ sage: R.<x> = RR[]
355
+ sage: (x^3).gcd(x^5 + 1)
356
+ 1.00000000000000
357
+ sage: (x^3).gcd(x^5 + x^2)
358
+ x^2
359
+ sage: f = (x+3)^2 * (x-1)
360
+ sage: g = (x+3)^5
361
+ sage: f.gcd(g)
362
+ x^2 + 6.00000000000000*x + 9.00000000000000
363
+
364
+ The following example illustrates the fact that for inexact
365
+ base rings, the returned gcd is often 1 due to rounding::
366
+
367
+ sage: # needs sage.rings.real_mpfr
368
+ sage: f = (x+RR.pi())^2 * (x-1)
369
+ sage: g = (x+RR.pi())^5
370
+ sage: f.gcd(g)
371
+ 1.00000000000000
372
+
373
+ Check :issue:`23012`::
374
+
375
+ sage: # needs sage.libs.pari
376
+ sage: R.<x> = QQ[]
377
+ sage: Q = R.quotient(x^2 - 1) # Not a field
378
+ sage: P.<x> = Q[]
379
+ sage: def always_True(*args, **kwds): return True
380
+ sage: Q.is_field = always_True
381
+ sage: Q in Fields()
382
+ True
383
+ sage: Q._gcd_univariate_polynomial(x, x)
384
+ x
385
+ """
386
+ while b:
387
+ q, r = a.quo_rem(b)
388
+ a, b = b, r
389
+ if a:
390
+ a = a.monic()
391
+ return a
392
+
393
+ def _xgcd_univariate_polynomial(self, a, b):
394
+ r"""
395
+ Return an extended gcd of ``a`` and ``b``.
396
+
397
+ INPUT:
398
+
399
+ - ``a``, ``b`` -- two univariate polynomials defined over ``self``
400
+
401
+ OUTPUT:
402
+
403
+ A tuple ``(d, u, v)`` of polynomials such that ``d`` is the
404
+ greatest common divisor (monic or zero) of ``a`` and ``b``,
405
+ and ``u``, ``v`` satisfy ``d = u*a + v*b``.
406
+
407
+ .. WARNING::
408
+
409
+ If the base ring is inexact, the results may not be
410
+ entirely stable.
411
+
412
+ ALGORITHM:
413
+
414
+ This uses the extended Euclidean algorithm; see for example
415
+ [Coh1993]_, Algorithm 3.2.2.
416
+
417
+ EXAMPLES::
418
+
419
+ sage: P.<x> = QQ[]
420
+ sage: F = (x^2 + 2)*x^3; G = (x^2+2)*(x-3)
421
+ sage: g, u, v = QQ._xgcd_univariate_polynomial(F,G)
422
+ sage: g, u, v
423
+ (x^2 + 2, 1/27, -1/27*x^2 - 1/9*x - 1/3)
424
+ sage: u*F + v*G
425
+ x^2 + 2
426
+
427
+ ::
428
+
429
+ sage: g, u, v = QQ._xgcd_univariate_polynomial(x,P(0)); g, u, v
430
+ (x, 1, 0)
431
+ sage: g == u*x + v*P(0)
432
+ True
433
+ sage: g, u, v = QQ._xgcd_univariate_polynomial(P(0),x); g, u, v
434
+ (x, 0, 1)
435
+ sage: g == u*P(0) + v*x
436
+ True
437
+
438
+ TESTS::
439
+
440
+ sage: fields = []
441
+ sage: fields += [RR, CC] # needs sage.rings.real_mpfr
442
+ sage: fields.append(QQbar) # needs sage.rings.number_field
443
+ sage: for A in fields:
444
+ ....: g = A._xgcd_univariate_polynomial
445
+ ....: R.<x> = A[]
446
+ ....: z, h = R(0), R(1/2)
447
+ ....: assert(g(2*x, 2*x^2) == (x, h, z) and
448
+ ....: g(z, 2*x) == (x, z, h) and
449
+ ....: g(2*x, z) == (x, h, z) and
450
+ ....: g(z, z) == (z, z, z))
451
+
452
+ sage: P.<x> = QQ[]
453
+ sage: F = (x^2 + 2)*x^3; G = (x^2+2)*(x-3)
454
+ sage: g, u, v = QQ._xgcd_univariate_polynomial(F,G)
455
+ sage: g, u, v
456
+ (x^2 + 2, 1/27, -1/27*x^2 - 1/9*x - 1/3)
457
+ sage: u*F + v*G
458
+ x^2 + 2
459
+
460
+ We check that the behavior of xgcd with zero elements is
461
+ compatible with gcd (:issue:`17671`)::
462
+
463
+ sage: # needs sage.rings.number_field
464
+ sage: R.<x> = QQbar[]
465
+ sage: zero = R.zero()
466
+ sage: zero.xgcd(2*x)
467
+ (x, 0, 1/2)
468
+ sage: (2*x).xgcd(zero)
469
+ (x, 1/2, 0)
470
+ sage: zero.xgcd(zero)
471
+ (0, 0, 0)
472
+ """
473
+ R = a.parent()
474
+ zero = R.zero()
475
+ if not b:
476
+ if not a:
477
+ return (zero, zero, zero)
478
+ c = ~a.leading_coefficient()
479
+ return (c * a, R(c), zero)
480
+ elif not a:
481
+ c = ~b.leading_coefficient()
482
+ return (c * b, zero, R(c))
483
+ u, d, v1, v3 = (R.one(), a, zero, b)
484
+ while v3:
485
+ q, r = d.quo_rem(v3)
486
+ u, d, v1, v3 = (v1, v3, u - v1 * q, r)
487
+ v = (d - a * u) // b
488
+ if d:
489
+ c = ~d.leading_coefficient()
490
+ d, u, v = c * d, c * u, c * v
491
+ return d, u, v
492
+
493
+ def is_perfect(self):
494
+ r"""
495
+ Return whether this field is perfect, i.e., its characteristic is
496
+ `p=0` or every element has a `p`-th root.
497
+
498
+ EXAMPLES::
499
+
500
+ sage: QQ.is_perfect()
501
+ True
502
+ sage: GF(2).is_perfect()
503
+ True
504
+ sage: FunctionField(GF(2), 'x').is_perfect()
505
+ False
506
+ """
507
+ if self.characteristic() == 0:
508
+ return True
509
+ else:
510
+ raise NotImplementedError
511
+
512
+ def _test_characteristic_fields(self, **options):
513
+ """
514
+ Run generic tests on the method :meth:`.characteristic`.
515
+
516
+ EXAMPLES::
517
+
518
+ sage: QQ._test_characteristic_fields()
519
+
520
+ .. NOTE::
521
+
522
+ We cannot call this method ``_test_characteristic`` since that
523
+ would overwrite the method in the super category, and for
524
+ cython classes just calling
525
+ ``super(sage.categories.fields.Fields().parent_class,
526
+ self)._test_characteristic`` doesn't have the desired effect.
527
+
528
+ .. SEEALSO::
529
+
530
+ :meth:`sage.categories.rings.Rings.ParentMethods._test_characteristic`
531
+ """
532
+ tester = self._tester(**options)
533
+ try:
534
+ char = self.characteristic()
535
+ tester.assertTrue(char.is_zero() or char.is_prime())
536
+ except AttributeError:
537
+ return
538
+ # raised when self.one() does not have a additive_order() [or when char is an int and not an Integer which is already checked by _test_characteristic for rings]
539
+ except NotImplementedError:
540
+ return
541
+
542
+ def fraction_field(self):
543
+ """
544
+ Return the *fraction field* of ``self``, which is ``self``.
545
+
546
+ EXAMPLES:
547
+
548
+ Since fields are their own field of fractions, we simply get the
549
+ original field in return::
550
+
551
+ sage: QQ.fraction_field()
552
+ Rational Field
553
+ sage: RR.fraction_field() # needs sage.rings.real_mpfr
554
+ Real Field with 53 bits of precision
555
+ sage: CC.fraction_field() # needs sage.rings.real_mpfr
556
+ Complex Field with 53 bits of precision
557
+
558
+ sage: x = polygen(ZZ, 'x')
559
+ sage: F = NumberField(x^2 + 1, 'i') # needs sage.rings.number_field
560
+ sage: F.fraction_field() # needs sage.rings.number_field
561
+ Number Field in i with defining polynomial x^2 + 1
562
+ """
563
+ return self
564
+
565
+ def ideal(self, *gens, **kwds):
566
+ """
567
+ Return the ideal generated by ``gens``.
568
+
569
+ INPUT:
570
+
571
+ - an element or a list/tuple/sequence of elements, the generators
572
+
573
+ Any named arguments are ignored.
574
+
575
+ EXAMPLES::
576
+
577
+ sage: QQ.ideal(2)
578
+ Principal ideal (1) of Rational Field
579
+ sage: QQ.ideal(0)
580
+ Principal ideal (0) of Rational Field
581
+
582
+ TESTS::
583
+
584
+ sage: QQ.ideal(2, 4)
585
+ Principal ideal (1) of Rational Field
586
+
587
+ sage: QQ.ideal([2, 4])
588
+ Principal ideal (1) of Rational Field
589
+ """
590
+ if len(gens) == 1 and isinstance(gens[0], (list, tuple)):
591
+ gens = gens[0]
592
+ for x in gens:
593
+ if not self(x).is_zero():
594
+ return self.unit_ideal()
595
+ return self.zero_ideal()
596
+
597
+ def _squarefree_decomposition_univariate_polynomial(self, f):
598
+ r"""
599
+ Return the square-free decomposition of ``f`` over this field.
600
+
601
+ This is a helper method for
602
+ :meth:`sage.rings.polynomial.squarefree_decomposition`.
603
+
604
+ INPUT:
605
+
606
+ - ``f`` -- a univariate nonzero polynomial over this field
607
+
608
+ ALGORITHM: For rings of characteristic zero, we use the algorithm
609
+ described in [Yun1976]_. Other fields may provide their own
610
+ implementation by overriding this method.
611
+
612
+ EXAMPLES::
613
+
614
+ sage: x = polygen(QQ)
615
+ sage: p = 37 * (x-1)^3 * (x-2)^3 * (x-1/3)^7 * (x-3/7)
616
+ sage: p.squarefree_decomposition()
617
+ (37*x - 111/7) * (x^2 - 3*x + 2)^3 * (x - 1/3)^7
618
+ sage: p = 37 * (x-2/3)^2
619
+ sage: p.squarefree_decomposition()
620
+ (37) * (x - 2/3)^2
621
+ sage: x = polygen(GF(3))
622
+ sage: x.squarefree_decomposition()
623
+ x
624
+ sage: f = QQbar['x'](1) # needs sage.rings.number_field
625
+ sage: f.squarefree_decomposition() # needs sage.rings.number_field
626
+ 1
627
+ """
628
+ from sage.structure.factorization import Factorization
629
+ if f.degree() == 0:
630
+ return Factorization([], unit=f[0])
631
+ if self.characteristic() != 0:
632
+ raise NotImplementedError("square-free decomposition not implemented for this polynomial")
633
+
634
+ factors = []
635
+ cur = f
636
+ f = [f]
637
+ while cur.degree() > 0:
638
+ cur = cur.gcd(cur.derivative())
639
+ f.append(cur)
640
+
641
+ g = [f[i] // f[i + 1] for i in range(len(f) - 1)]
642
+ a = [g[i] // g[i + 1] for i in range(len(g) - 1)]
643
+ a.append(g[-1])
644
+
645
+ unit = f[-1]
646
+ for i in range(len(a)):
647
+ if a[i].degree() > 0:
648
+ factors.append((a[i], i + 1))
649
+ else:
650
+ unit = unit * a[i].constant_coefficient() ** (i + 1)
651
+
652
+ return Factorization(factors, unit=unit, sort=False)
653
+
654
+ def vector_space(self, *args, **kwds):
655
+ r"""
656
+ Give an isomorphism of this field with a vector space over a subfield.
657
+
658
+ This method is an alias for ``free_module``, which may have more documentation.
659
+
660
+ INPUT:
661
+
662
+ - ``base`` -- a subfield or morphism into this field (defaults to the base field)
663
+
664
+ - ``basis`` -- a basis of the field as a vector space
665
+ over the subfield; if not given, one is chosen automatically
666
+
667
+ - ``map`` -- whether to return maps from and to the vector space
668
+
669
+ OUTPUT:
670
+
671
+ - ``V`` -- a vector space over ``base``
672
+ - ``from_V`` -- an isomorphism from ``V`` to this field
673
+ - ``to_V`` -- the inverse isomorphism from this field to ``V``
674
+
675
+ EXAMPLES::
676
+
677
+ sage: # needs sage.rings.padics
678
+ sage: K.<a> = Qq(125)
679
+ sage: V, fr, to = K.vector_space()
680
+ sage: v = V([1, 2, 3])
681
+ sage: fr(v, 7)
682
+ (3*a^2 + 2*a + 1) + O(5^7)
683
+ """
684
+ return self.free_module(*args, **kwds)
685
+
686
+ def _pseudo_fraction_field(self):
687
+ """
688
+ The fraction field of ``self`` is always available as ``self``.
689
+
690
+ EXAMPLES::
691
+
692
+ sage: QQ._pseudo_fraction_field()
693
+ Rational Field
694
+ sage: K = GF(5)
695
+ sage: K._pseudo_fraction_field()
696
+ Finite Field of size 5
697
+ sage: K._pseudo_fraction_field() is K
698
+ True
699
+ """
700
+ return self
701
+
702
+ class ElementMethods:
703
+ def euclidean_degree(self):
704
+ r"""
705
+ Return the degree of this element as an element of a Euclidean
706
+ domain.
707
+
708
+ In a field, this returns 0 for all but the zero element (for
709
+ which it is undefined).
710
+
711
+ EXAMPLES::
712
+
713
+ sage: QQ.one().euclidean_degree()
714
+ 0
715
+ """
716
+ if self.is_zero():
717
+ raise ValueError("euclidean degree not defined for the zero element")
718
+ from sage.rings.integer_ring import ZZ
719
+ return ZZ.zero()
720
+
721
+ def quo_rem(self, other):
722
+ r"""
723
+ Return the quotient with remainder of the division of this element
724
+ by ``other``.
725
+
726
+ INPUT:
727
+
728
+ - ``other`` -- an element of the field
729
+
730
+ EXAMPLES::
731
+
732
+ sage: f,g = QQ(1), QQ(2)
733
+ sage: f.quo_rem(g)
734
+ (1/2, 0)
735
+ """
736
+ if other.is_zero():
737
+ raise ZeroDivisionError
738
+ return (self / other, self.parent().zero())
739
+
740
+ def is_unit(self):
741
+ r"""
742
+ Return ``True`` if ``self`` has a multiplicative inverse.
743
+
744
+ EXAMPLES::
745
+
746
+ sage: QQ(2).is_unit()
747
+ True
748
+ sage: QQ(0).is_unit()
749
+ False
750
+ """
751
+ return not self.is_zero()
752
+
753
+ # Fields are unique factorization domains, so, there is gcd and lcm
754
+ # Of course, in general gcd and lcm in a field are not very interesting.
755
+ # However, they should be implemented!
756
+ @coerce_binop
757
+ def gcd(self, other):
758
+ """
759
+ Greatest common divisor.
760
+
761
+ .. NOTE::
762
+
763
+ Since we are in a field and the greatest common divisor is only
764
+ determined up to a unit, it is correct to either return zero or
765
+ one. Note that fraction fields of unique factorization domains
766
+ provide a more sophisticated gcd.
767
+
768
+ EXAMPLES::
769
+
770
+ sage: K = GF(5)
771
+ sage: K(2).gcd(K(1))
772
+ 1
773
+ sage: K(0).gcd(K(0))
774
+ 0
775
+ sage: all(x.gcd(y) == (0 if x == 0 and y == 0 else 1)
776
+ ....: for x in K for y in K)
777
+ True
778
+
779
+ For field of characteristic zero, the gcd of integers is considered
780
+ as if they were elements of the integer ring::
781
+
782
+ sage: gcd(15.0,12.0) # needs sage.rings.real_mpfr
783
+ 3.00000000000000
784
+
785
+ But for other floating point numbers, the gcd is just `0.0` or `1.0`::
786
+
787
+ sage: gcd(3.2, 2.18) # needs sage.rings.real_mpfr
788
+ 1.00000000000000
789
+
790
+ sage: gcd(0.0, 0.0) # needs sage.rings.real_mpfr
791
+ 0.000000000000000
792
+
793
+ TESTS::
794
+
795
+ sage: QQbar(0).gcd(QQbar.zeta(3)) # needs sage.rings.number_field
796
+ 1
797
+
798
+ AUTHOR:
799
+
800
+ - Simon King (2011-02) -- :issue:`10771`
801
+ - Vincent Delecroix (2015) -- :issue:`17671`
802
+ """
803
+ P = self.parent()
804
+ try:
805
+ has_zero_char = P.characteristic() == 0
806
+ except (AttributeError, NotImplementedError):
807
+ has_zero_char = False
808
+ if has_zero_char:
809
+ from sage.rings.integer_ring import ZZ
810
+ try:
811
+ return P(ZZ(self).gcd(ZZ(other)))
812
+ except (TypeError, ValueError):
813
+ pass
814
+
815
+ if self == P.zero() and other == P.zero():
816
+ return P.zero()
817
+ return P.one()
818
+
819
+ @coerce_binop
820
+ def lcm(self, other):
821
+ """
822
+ Least common multiple.
823
+
824
+ .. NOTE::
825
+
826
+ Since we are in a field and the least common multiple is only
827
+ determined up to a unit, it is correct to either return zero or
828
+ one. Note that fraction fields of unique factorization domains
829
+ provide a more sophisticated lcm.
830
+
831
+ EXAMPLES::
832
+
833
+ sage: GF(2)(1).lcm(GF(2)(0))
834
+ 0
835
+ sage: GF(2)(1).lcm(GF(2)(1))
836
+ 1
837
+
838
+ For field of characteristic zero, the lcm of integers is considered
839
+ as if they were elements of the integer ring::
840
+
841
+ sage: lcm(15.0, 12.0) # needs sage.rings.real_mpfr
842
+ 60.0000000000000
843
+
844
+ But for others floating point numbers, it is just `0.0` or `1.0`::
845
+
846
+ sage: lcm(3.2, 2.18) # needs sage.rings.real_mpfr
847
+ 1.00000000000000
848
+
849
+ sage: lcm(0.0, 0.0) # needs sage.rings.real_mpfr
850
+ 0.000000000000000
851
+
852
+ AUTHOR:
853
+
854
+ - Simon King (2011-02) -- :issue:`10771`
855
+ - Vincent Delecroix (2015) -- :issue:`17671`
856
+ """
857
+ P = self.parent()
858
+ try:
859
+ has_zero_char = P.characteristic() == 0
860
+ except (AttributeError, NotImplementedError):
861
+ has_zero_char = False
862
+ if has_zero_char:
863
+ from sage.rings.integer_ring import ZZ
864
+ try:
865
+ return P(ZZ(self).lcm(ZZ(other)))
866
+ except TypeError:
867
+ pass
868
+
869
+ if self.is_zero() or other.is_zero():
870
+ return P.zero()
871
+ return P.one()
872
+
873
+ @coerce_binop
874
+ def xgcd(self, other):
875
+ r"""
876
+ Compute the extended gcd of ``self`` and ``other``.
877
+
878
+ INPUT:
879
+
880
+ - ``other`` -- an element with the same parent as ``self``
881
+
882
+ OUTPUT:
883
+
884
+ A tuple ``(r, s, t)`` of elements in the parent of ``self`` such
885
+ that ``r = s * self + t * other``. Since the computations are done
886
+ over a field, ``r`` is zero if ``self`` and ``other`` are zero,
887
+ and one otherwise.
888
+
889
+ AUTHORS:
890
+
891
+ - Julian Rueth (2012-10-19): moved here from
892
+ :class:`sage.structure.element.FieldElement`
893
+
894
+ EXAMPLES::
895
+
896
+ sage: K = GF(5)
897
+ sage: K(2).xgcd(K(1))
898
+ (1, 3, 0)
899
+ sage: K(0).xgcd(K(4))
900
+ (1, 0, 4)
901
+ sage: K(1).xgcd(K(1))
902
+ (1, 1, 0)
903
+ sage: GF(5)(0).xgcd(GF(5)(0))
904
+ (0, 0, 0)
905
+
906
+ The xgcd of nonzero floating point numbers will be a triple of
907
+ floating points. But if the input are two integral floating points
908
+ the result is a floating point version of the standard gcd on
909
+ `\ZZ`::
910
+
911
+ sage: xgcd(12.0, 8.0) # needs sage.rings.real_mpfr
912
+ (4.00000000000000, 1.00000000000000, -1.00000000000000)
913
+
914
+ sage: xgcd(3.1, 2.98714) # needs sage.rings.real_mpfr
915
+ (1.00000000000000, 0.322580645161290, 0.000000000000000)
916
+
917
+ sage: xgcd(0.0, 1.1) # needs sage.rings.real_mpfr
918
+ (1.00000000000000, 0.000000000000000, 0.909090909090909)
919
+ """
920
+ P = self.parent()
921
+ try:
922
+ has_zero_char = P.characteristic() == 0
923
+ except (AttributeError, NotImplementedError):
924
+ has_zero_char = False
925
+ if has_zero_char:
926
+ from sage.rings.integer_ring import ZZ
927
+ try:
928
+ return tuple(P(x) for x in ZZ(self).xgcd(ZZ(other)))
929
+ except TypeError:
930
+ pass
931
+
932
+ if not self.is_zero():
933
+ return (P.one(), ~self, P.zero())
934
+ if not other.is_zero():
935
+ return (P.one(), P.zero(), ~other)
936
+ # else both are 0
937
+ return (P.zero(), P.zero(), P.zero())
938
+
939
+ def factor(self):
940
+ """
941
+ Return a factorization of ``self``.
942
+
943
+ Since ``self`` is either a unit or zero, this function is trivial.
944
+
945
+ EXAMPLES::
946
+
947
+ sage: x = GF(7)(5)
948
+ sage: x.factor()
949
+ 5
950
+ sage: RR(0).factor() # needs sage.rings.real_mpfr
951
+ Traceback (most recent call last):
952
+ ...
953
+ ArithmeticError: factorization of 0.000000000000000 is not defined
954
+ """
955
+ if not self:
956
+ raise ArithmeticError("factorization of {!r} is not defined".format(self))
957
+ from sage.structure.factorization import Factorization
958
+ return Factorization([], self) # No factor; "self" as unit
959
+
960
+ def inverse_of_unit(self):
961
+ r"""
962
+ Return the inverse of this element.
963
+
964
+ EXAMPLES::
965
+
966
+ sage: x = polygen(ZZ, 'x')
967
+ sage: NumberField(x^7 + 2, 'a')(2).inverse_of_unit() # needs sage.rings.number_field
968
+ 1/2
969
+
970
+ Trying to invert the zero element typically raises a
971
+ :exc:`ZeroDivisionError`::
972
+
973
+ sage: QQ(0).inverse_of_unit()
974
+ Traceback (most recent call last):
975
+ ...
976
+ ZeroDivisionError: rational division by zero
977
+
978
+ To catch that exception in a way that also works for non-units
979
+ in more general rings, use something like::
980
+
981
+ sage: try:
982
+ ....: QQ(0).inverse_of_unit()
983
+ ....: except ArithmeticError:
984
+ ....: pass
985
+
986
+ Also note that some “fields” allow one to invert the zero element::
987
+
988
+ sage: RR(0).inverse_of_unit()
989
+ +infinity
990
+ """
991
+ return ~self