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
sage/rings/ring.pyx ADDED
@@ -0,0 +1,850 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ """
3
+ Rings
4
+
5
+ This module provides the abstract base class :class:`Ring` from which
6
+ all rings in Sage (used to) derive, as well as a selection of more
7
+ specific base classes.
8
+
9
+ .. WARNING::
10
+
11
+ Those classes, except maybe for the lowest ones like
12
+ :class:`CommutativeRing` and :class:`Field`,
13
+ are being progressively deprecated in favor of the corresponding
14
+ categories. which are more flexible, in particular with respect to multiple
15
+ inheritance.
16
+
17
+ The class inheritance hierarchy is:
18
+
19
+ - :class:`Ring` (to be deprecated)
20
+
21
+ - :class:`Algebra` (deprecated and essentially removed)
22
+ - :class:`CommutativeRing`
23
+
24
+ - :class:`NoetherianRing` (deprecated and essentially removed)
25
+ - :class:`CommutativeAlgebra` (deprecated and essentially removed)
26
+ - :class:`IntegralDomain` (deprecated and essentially removed)
27
+
28
+ - :class:`DedekindDomain` (deprecated and essentially removed)
29
+ - :class:`PrincipalIdealDomain` (deprecated and essentially removed)
30
+
31
+ Subclasses of :class:`CommutativeRing` are
32
+
33
+ - :class:`Field`
34
+
35
+ - :class:`~sage.rings.finite_rings.finite_field_base.FiniteField`
36
+
37
+ Some aspects of this structure may seem strange, but this is an unfortunate
38
+ consequence of the fact that Cython classes do not support multiple
39
+ inheritance.
40
+
41
+ (A distinct but equally awkward issue is that sometimes we may not know *in
42
+ advance* whether or not a ring belongs in one of these classes; e.g. some
43
+ orders in number fields are Dedekind domains, but others are not, and we still
44
+ want to offer a unified interface, so orders are never instances of the
45
+ deprecated :class:`DedekindDomain` class.)
46
+
47
+ AUTHORS:
48
+
49
+ - David Harvey (2006-10-16): changed :class:`CommutativeAlgebra` to derive from
50
+ :class:`CommutativeRing` instead of from :class:`Algebra`.
51
+ - David Loeffler (2009-07-09): documentation fixes, added to reference manual.
52
+ - Simon King (2011-03-29): Proper use of the category framework for rings.
53
+ - Simon King (2011-05-20): Modify multiplication and _ideal_class_ to support
54
+ ideals of non-commutative rings.
55
+
56
+ TESTS:
57
+
58
+ This is to test a deprecation::
59
+
60
+ sage: from sage.rings.ring import DedekindDomain
61
+ sage: class No(DedekindDomain):
62
+ ....: pass
63
+ sage: F = No(QQ)
64
+ ...:
65
+ DeprecationWarning: use the category DedekindDomains
66
+ See https://github.com/sagemath/sage/issues/37234 for details.
67
+ sage: F.category()
68
+ Category of Dedekind domains
69
+
70
+ sage: from sage.rings.ring import CommutativeAlgebra
71
+ sage: class Nein(CommutativeAlgebra):
72
+ ....: pass
73
+ sage: F = Nein(QQ)
74
+ ...:
75
+ DeprecationWarning: use the category CommutativeAlgebras
76
+ See https://github.com/sagemath/sage/issues/37999 for details.
77
+ sage: F.category()
78
+ Category of commutative algebras over Rational Field
79
+
80
+ sage: from sage.rings.ring import PrincipalIdealDomain
81
+ sage: class Non(PrincipalIdealDomain):
82
+ ....: pass
83
+ sage: F = Non(QQ)
84
+ ...:
85
+ DeprecationWarning: use the category PrincipalIdealDomains
86
+ See https://github.com/sagemath/sage/issues/37719 for details.
87
+ sage: F.category()
88
+ Category of principal ideal domains
89
+
90
+ sage: from sage.rings.ring import Algebra
91
+ sage: class Nichts(Algebra):
92
+ ....: pass
93
+ sage: F = Nichts(QQ)
94
+ ...:
95
+ DeprecationWarning: use the category Algebras
96
+ See https://github.com/sagemath/sage/issues/38502 for details.
97
+ sage: F.category()
98
+ Category of algebras over Rational Field
99
+
100
+ """
101
+
102
+ # ****************************************************************************
103
+ # Copyright (C) 2005, 2007 William Stein <wstein@gmail.com>
104
+ #
105
+ # Distributed under the terms of the GNU General Public License (GPL)
106
+ # as published by the Free Software Foundation; either version 2 of
107
+ # the License, or (at your option) any later version.
108
+ # https://www.gnu.org/licenses/
109
+ # ****************************************************************************
110
+
111
+ from sage.misc.cachefunc import cached_method
112
+ from sage.misc.superseded import deprecation
113
+
114
+ from sage.structure.coerce cimport coercion_model
115
+ from sage.structure.parent cimport Parent
116
+ from sage.structure.category_object cimport check_default_category
117
+ from sage.categories.rings import Rings
118
+ from sage.categories.algebras import Algebras
119
+ from sage.categories.commutative_algebras import CommutativeAlgebras
120
+ from sage.categories.commutative_rings import CommutativeRings
121
+ from sage.categories.integral_domains import IntegralDomains
122
+ from sage.categories.dedekind_domains import DedekindDomains
123
+ from sage.categories.principal_ideal_domains import PrincipalIdealDomains
124
+ from sage.categories.noetherian_rings import NoetherianRings
125
+
126
+ _Rings = Rings()
127
+ _CommutativeRings = CommutativeRings()
128
+
129
+ cdef class Ring(ParentWithGens):
130
+ """
131
+ Generic ring class.
132
+
133
+ TESTS:
134
+
135
+ This is to test against the bug fixed in :issue:`9138`::
136
+
137
+ sage: R.<x> = QQ[]
138
+ sage: R.sum([x,x])
139
+ 2*x
140
+ sage: R.<x,y> = ZZ[]
141
+ sage: R.sum([x,y])
142
+ x + y
143
+ sage: TestSuite(QQ['x']).run(verbose=True)
144
+ running ._test_additive_associativity() . . . pass
145
+ running ._test_an_element() . . . pass
146
+ running ._test_associativity() . . . pass
147
+ running ._test_cardinality() . . . pass
148
+ running ._test_category() . . . pass
149
+ running ._test_characteristic() . . . pass
150
+ running ._test_construction() . . . pass
151
+ running ._test_distributivity() . . . pass
152
+ running ._test_divides() . . . pass
153
+ running ._test_elements() . . .
154
+ Running the test suite of self.an_element()
155
+ running ._test_category() . . . pass
156
+ running ._test_eq() . . . pass
157
+ running ._test_monomial_coefficients() . . . pass
158
+ running ._test_new() . . . pass
159
+ running ._test_nonzero_equal() . . . pass
160
+ running ._test_not_implemented_methods() . . . pass
161
+ running ._test_pickling() . . . pass
162
+ pass
163
+ running ._test_elements_eq_reflexive() . . . pass
164
+ running ._test_elements_eq_symmetric() . . . pass
165
+ running ._test_elements_eq_transitive() . . . pass
166
+ running ._test_elements_neq() . . . pass
167
+ running ._test_eq() . . . pass
168
+ running ._test_euclidean_degree() . . . pass
169
+ running ._test_fraction_field() . . . pass
170
+ running ._test_gcd_vs_xgcd() . . . pass
171
+ running ._test_new() . . . pass
172
+ running ._test_not_implemented_methods() . . . pass
173
+ running ._test_one() . . . pass
174
+ running ._test_pickling() . . . pass
175
+ running ._test_prod() . . . pass
176
+ running ._test_quo_rem() . . . pass
177
+ running ._test_some_elements() . . . pass
178
+ running ._test_zero() . . . pass
179
+ running ._test_zero_divisors() . . . pass
180
+ sage: TestSuite(QQ['x','y']).run(skip='_test_elements') # needs sage.libs.singular
181
+ sage: TestSuite(ZZ['x','y']).run(skip='_test_elements') # needs sage.libs.singular
182
+ sage: TestSuite(ZZ['x','y']['t']).run()
183
+
184
+ Test against another bug fixed in :issue:`9944`::
185
+
186
+ sage: QQ['x'].category()
187
+ Join of Category of euclidean domains
188
+ and Category of algebras with basis
189
+ over (number fields and quotient fields and metric spaces)
190
+ and Category of commutative algebras
191
+ over (number fields and quotient fields and metric spaces)
192
+ and Category of infinite sets
193
+ sage: QQ['x','y'].category()
194
+ Join of Category of unique factorization domains
195
+ and Category of algebras with basis
196
+ over (number fields and quotient fields and metric spaces)
197
+ and Category of commutative algebras
198
+ over (number fields and quotient fields and metric spaces)
199
+ and Category of infinite sets
200
+ sage: PolynomialRing(MatrixSpace(QQ, 2),'x').category() # needs sage.modules
201
+ Category of infinite algebras with basis
202
+ over (finite dimensional algebras with basis
203
+ over (number fields and quotient fields and metric spaces)
204
+ and infinite sets)
205
+ sage: PolynomialRing(SteenrodAlgebra(2),'x').category() # needs sage.combinat sage.modules
206
+ Category of infinite algebras with basis
207
+ over (super Hopf algebras with basis over Finite Field of size 2
208
+ and supercocommutative super coalgebras
209
+ over Finite Field of size 2)
210
+
211
+ TESTS::
212
+
213
+ sage: Zp(7)._repr_option('element_is_atomic') # needs sage.rings.padics
214
+ False
215
+ sage: QQ._repr_option('element_is_atomic')
216
+ True
217
+ sage: CDF._repr_option('element_is_atomic') # needs sage.rings.complex_double
218
+ False
219
+
220
+ Check that categories correctly implement ``is_finite`` and ``cardinality``::
221
+
222
+ sage: QQ.is_finite()
223
+ False
224
+ sage: GF(2^10, 'a').is_finite() # needs sage.rings.finite_rings
225
+ True
226
+ sage: R.<x> = GF(7)[]
227
+ sage: R.is_finite()
228
+ False
229
+ sage: S.<y> = R.quo(x^2 + 1) # needs sage.rings.finite_rings
230
+ sage: S.is_finite() # needs sage.rings.finite_rings
231
+ True
232
+
233
+ sage: Integers(7).cardinality()
234
+ 7
235
+ sage: QQ.cardinality()
236
+ +Infinity
237
+ """
238
+ def __init__(self, base, names=None, normalize=True, category=None):
239
+ """
240
+ Initialize ``self``.
241
+
242
+ EXAMPLES::
243
+
244
+ sage: ZZ
245
+ Integer Ring
246
+ sage: R.<x,y> = QQ[]
247
+ sage: R
248
+ Multivariate Polynomial Ring in x, y over Rational Field
249
+ """
250
+ # Unfortunately, ParentWithGens inherits from sage.structure.parent_old.Parent.
251
+ # Its __init__ method does *not* call Parent.__init__, since this would somehow
252
+ # yield an infinite recursion. But when we call it from here, it works.
253
+ # This is done in order to ensure that __init_extra__ is called.
254
+ #
255
+ # This is a low-level class. For performance, we trust that the category
256
+ # is fine, if it is provided. If it isn't, we use the category of rings.
257
+ if category is None:
258
+ category = check_default_category(_Rings, category)
259
+ Parent.__init__(self, base=base, names=names, normalize=normalize,
260
+ category=category)
261
+
262
+ def __iter__(self):
263
+ r"""
264
+ Return an iterator through the elements of ``self``.
265
+ Not implemented in general.
266
+
267
+ EXAMPLES::
268
+
269
+ sage: sage.rings.ring.Ring.__iter__(ZZ)
270
+ Traceback (most recent call last):
271
+ ...
272
+ NotImplementedError: object does not support iteration
273
+ """
274
+ raise NotImplementedError("object does not support iteration")
275
+
276
+ def __len__(self):
277
+ r"""
278
+ Return the cardinality of this ring if it is finite, else raise
279
+ a :exc:`NotImplementedError`.
280
+
281
+ EXAMPLES::
282
+
283
+ sage: len(Integers(24))
284
+ 24
285
+ sage: len(RR)
286
+ Traceback (most recent call last):
287
+ ...
288
+ NotImplementedError: len() of an infinite set
289
+ """
290
+ if self.is_finite():
291
+ return self.cardinality()
292
+ raise NotImplementedError('len() of an infinite set')
293
+
294
+ def __xor__(self, n):
295
+ r"""
296
+ Trap the operation ``^``.
297
+
298
+ EXAMPLES::
299
+
300
+ sage: eval('RR^3')
301
+ Traceback (most recent call last):
302
+ ...
303
+ RuntimeError: use ** for exponentiation, not '^', which means xor in Python, and has the wrong precedence
304
+ """
305
+ raise RuntimeError("use ** for exponentiation, not '^', which means xor "
306
+ "in Python, and has the wrong precedence")
307
+
308
+ def base_extend(self, R):
309
+ """
310
+ EXAMPLES::
311
+
312
+ sage: QQ.base_extend(GF(7))
313
+ Traceback (most recent call last):
314
+ ...
315
+ TypeError: no base extension defined
316
+ sage: ZZ.base_extend(GF(7))
317
+ Finite Field of size 7
318
+ """
319
+ if R.has_coerce_map_from(self):
320
+ return R
321
+ raise TypeError('no base extension defined')
322
+
323
+ def category(self):
324
+ """
325
+ Return the category to which this ring belongs.
326
+
327
+ .. NOTE::
328
+
329
+ This method exists because sometimes a ring is its own base ring.
330
+ During initialisation of a ring `R`, it may be checked whether the
331
+ base ring (hence, the ring itself) is a ring. Hence, it is
332
+ necessary that ``R.category()`` tells that ``R`` is a ring, even
333
+ *before* its category is properly initialised.
334
+
335
+ EXAMPLES::
336
+
337
+ sage: FreeAlgebra(QQ, 3, 'x').category() # todo: use a ring which is not an algebra! # needs sage.combinat sage.modules
338
+ Category of algebras with basis over Rational Field
339
+
340
+ Since a quotient of the integers is its own base ring, and during
341
+ initialisation of a ring it is tested whether the base ring belongs
342
+ to the category of rings, the following is an indirect test that the
343
+ ``category()`` method of rings returns the category of rings
344
+ even before the initialisation was successful::
345
+
346
+ sage: I = Integers(15)
347
+ sage: I.base_ring() is I
348
+ True
349
+ sage: I.category()
350
+ Join of Category of finite commutative rings
351
+ and Category of subquotients of monoids
352
+ and Category of quotients of semigroups
353
+ and Category of finite enumerated sets
354
+ """
355
+ # Defining a category method is deprecated for parents.
356
+ # For rings, however, it is strictly needed that self.category()
357
+ # returns (a sub-category of) the category of rings before
358
+ # initialisation has finished.
359
+ return self._category or _Rings
360
+
361
+ def __mul__(self, x):
362
+ """
363
+ Return the ideal ``x*R`` generated by ``x``, where ``x`` is either an
364
+ element or tuple or list of elements.
365
+
366
+ EXAMPLES::
367
+
368
+ sage: R.<x,y,z> = GF(7)[]
369
+ sage: (x + y) * R
370
+ Ideal (x + y) of Multivariate Polynomial Ring in x, y, z
371
+ over Finite Field of size 7
372
+ sage: (x + y, z + y^3) * R
373
+ Ideal (x + y, y^3 + z) of Multivariate Polynomial Ring in x, y, z
374
+ over Finite Field of size 7
375
+
376
+ The following was implemented in :issue:`7797`::
377
+
378
+ sage: # needs sage.combinat sage.modules
379
+ sage: A = SteenrodAlgebra(2)
380
+ sage: A * [A.1 + A.2, A.1^2]
381
+ Left Ideal (Sq(2) + Sq(4), Sq(1,1)) of mod 2 Steenrod algebra, milnor basis
382
+ sage: [A.1 + A.2, A.1^2] * A
383
+ Right Ideal (Sq(2) + Sq(4), Sq(1,1)) of mod 2 Steenrod algebra, milnor basis
384
+ sage: A * [A.1 + A.2, A.1^2] * A
385
+ Twosided Ideal (Sq(2) + Sq(4), Sq(1,1)) of mod 2 Steenrod algebra, milnor basis
386
+ """
387
+ if isinstance(self, Ring):
388
+ if self.is_commutative():
389
+ return self.ideal(x)
390
+ try:
391
+ side = x.side()
392
+ except AttributeError:
393
+ return self.ideal(x, side='left')
394
+ # presumably x is an ideal...
395
+ try:
396
+ x = x.gens()
397
+ except (AttributeError, NotImplementedError):
398
+ pass # ... not an ideal
399
+ if side in ['left','twosided']:
400
+ return self.ideal(x,side=side)
401
+ elif side=='right':
402
+ return self.ideal(x,side='twosided')
403
+ else: # duck typing failed
404
+ raise TypeError("Don't know how to transform %s into an ideal of %s" % (x, self))
405
+ else: # the sides are switched because this is a Cython / extension class
406
+ if x.is_commutative():
407
+ return x.ideal(self)
408
+ try:
409
+ side = self.side()
410
+ except AttributeError:
411
+ return x.ideal(self, side='right')
412
+ # presumably self is an ideal...
413
+ try:
414
+ self = self.gens()
415
+ except (AttributeError, NotImplementedError):
416
+ pass # ... not an ideal
417
+ if side in ['right','twosided']:
418
+ return x.ideal(self,side='twosided')
419
+ elif side=='left':
420
+ return x.ideal(self,side='twosided')
421
+ else:
422
+ raise TypeError("Don't know how to transform %s into an ideal of %s" % (self, x))
423
+
424
+ def zero(self):
425
+ """
426
+ Return the zero element of this ring (cached).
427
+
428
+ EXAMPLES::
429
+
430
+ sage: ZZ.zero()
431
+ 0
432
+ sage: QQ.zero()
433
+ 0
434
+ sage: QQ['x'].zero()
435
+ 0
436
+
437
+ The result is cached::
438
+
439
+ sage: ZZ.zero() is ZZ.zero()
440
+ True
441
+ """
442
+ if self._zero_element is None:
443
+ x = self(0)
444
+ self._zero_element = x
445
+ return x
446
+ return self._zero_element
447
+
448
+ def one(self):
449
+ """
450
+ Return the one element of this ring (cached), if it exists.
451
+
452
+ EXAMPLES::
453
+
454
+ sage: ZZ.one()
455
+ 1
456
+ sage: QQ.one()
457
+ 1
458
+ sage: QQ['x'].one()
459
+ 1
460
+
461
+ The result is cached::
462
+
463
+ sage: ZZ.one() is ZZ.one()
464
+ True
465
+ """
466
+ if self._one_element is None:
467
+ x = self(1)
468
+ self._one_element = x
469
+ return x
470
+ return self._one_element
471
+
472
+ def order(self):
473
+ """
474
+ The number of elements of ``self``.
475
+
476
+ EXAMPLES::
477
+
478
+ sage: GF(19).order()
479
+ 19
480
+ sage: QQ.order()
481
+ +Infinity
482
+ """
483
+ if self.is_zero():
484
+ return 1
485
+ raise NotImplementedError
486
+
487
+ @cached_method
488
+ def epsilon(self):
489
+ """
490
+ Return the precision error of elements in this ring.
491
+
492
+ EXAMPLES::
493
+
494
+ sage: RDF.epsilon()
495
+ 2.220446049250313e-16
496
+ sage: ComplexField(53).epsilon() # needs sage.rings.real_mpfr
497
+ 2.22044604925031e-16
498
+ sage: RealField(10).epsilon() # needs sage.rings.real_mpfr
499
+ 0.0020
500
+
501
+ For exact rings, zero is returned::
502
+
503
+ sage: ZZ.epsilon()
504
+ 0
505
+
506
+ This also works over derived rings::
507
+
508
+ sage: RR['x'].epsilon() # needs sage.rings.real_mpfr
509
+ 2.22044604925031e-16
510
+ sage: QQ['x'].epsilon()
511
+ 0
512
+
513
+ For the symbolic ring, there is no reasonable answer::
514
+
515
+ sage: SR.epsilon() # needs sage.symbolic
516
+ Traceback (most recent call last):
517
+ ...
518
+ NotImplementedError
519
+ """
520
+ one = self.one()
521
+ try:
522
+ return one.ulp()
523
+ except AttributeError:
524
+ pass
525
+
526
+ try:
527
+ eps = one.real().ulp()
528
+ except AttributeError:
529
+ pass
530
+ else:
531
+ return self(eps)
532
+
533
+ B = self._base
534
+ if B is not None and B is not self:
535
+ eps = self.base_ring().epsilon()
536
+ return self(eps)
537
+ if self.is_exact():
538
+ return self.zero()
539
+ raise NotImplementedError
540
+
541
+ cdef class CommutativeRing(Ring):
542
+ """
543
+ Generic commutative ring.
544
+ """
545
+ _default_category = _CommutativeRings
546
+
547
+ def __init__(self, base_ring, names=None, normalize=True, category=None):
548
+ """
549
+ Initialize ``self``.
550
+
551
+ EXAMPLES::
552
+
553
+ sage: Integers(389)['x,y']
554
+ Multivariate Polynomial Ring in x, y over Ring of integers modulo 389
555
+ """
556
+ if base_ring is not self and base_ring not in _CommutativeRings:
557
+ raise TypeError("base ring %s is no commutative ring" % base_ring)
558
+
559
+ # This is a low-level class. For performance, we trust that
560
+ # the category is fine, if it is provided. If it isn't, we use
561
+ # the category of commutative rings.
562
+ category = check_default_category(self._default_category, category)
563
+ Ring.__init__(self, base_ring, names=names, normalize=normalize,
564
+ category=category)
565
+
566
+ def fraction_field(self):
567
+ """
568
+ Return the fraction field of ``self``.
569
+
570
+ EXAMPLES::
571
+
572
+ sage: R = Integers(389)['x,y']
573
+ sage: Frac(R)
574
+ Fraction Field of Multivariate Polynomial Ring in x, y over Ring of integers modulo 389
575
+ sage: R.fraction_field()
576
+ Fraction Field of Multivariate Polynomial Ring in x, y over Ring of integers modulo 389
577
+ """
578
+ try:
579
+ if self.is_field():
580
+ return self
581
+ except NotImplementedError:
582
+ pass
583
+
584
+ if not self.is_integral_domain():
585
+ raise TypeError("self must be an integral domain.")
586
+
587
+ if self.__fraction_field is not None:
588
+ return self.__fraction_field
589
+ else:
590
+ import sage.rings.fraction_field
591
+ K = sage.rings.fraction_field.FractionField_generic(self)
592
+ self.__fraction_field = K
593
+ return self.__fraction_field
594
+
595
+ def _pseudo_fraction_field(self):
596
+ r"""
597
+ This method is used by the coercion model to determine if `a / b`
598
+ should be treated as `a * (1/b)`, for example when dividing an element
599
+ of `\ZZ[x]` by an element of `\ZZ`.
600
+
601
+ The default is to return the same value as ``self.fraction_field()``,
602
+ but it may return some other domain in which division is usually
603
+ defined (for example, ``\ZZ/n\ZZ`` for possibly composite `n`).
604
+
605
+ EXAMPLES::
606
+
607
+ sage: ZZ._pseudo_fraction_field()
608
+ Rational Field
609
+ sage: ZZ['x']._pseudo_fraction_field()
610
+ Fraction Field of Univariate Polynomial Ring in x over Integer Ring
611
+ sage: Integers(15)._pseudo_fraction_field()
612
+ Ring of integers modulo 15
613
+ sage: Integers(15).fraction_field()
614
+ Traceback (most recent call last):
615
+ ...
616
+ TypeError: self must be an integral domain.
617
+ """
618
+ try:
619
+ return self.fraction_field()
620
+ except (NotImplementedError,TypeError):
621
+ return coercion_model.division_parent(self)
622
+
623
+ def extension(self, poly, name=None, names=None, **kwds):
624
+ """
625
+ Algebraically extend ``self`` by taking the quotient
626
+ ``self[x] / (f(x))``.
627
+
628
+ INPUT:
629
+
630
+ - ``poly`` -- a polynomial whose coefficients are coercible into
631
+ ``self``
632
+
633
+ - ``name`` -- (optional) name for the root of `f`
634
+
635
+ .. NOTE::
636
+
637
+ Using this method on an algebraically complete field does *not*
638
+ return this field; the construction ``self[x] / (f(x))`` is done
639
+ anyway.
640
+
641
+ EXAMPLES::
642
+
643
+ sage: R = QQ['x']
644
+ sage: y = polygen(R)
645
+ sage: R.extension(y^2 - 5, 'a') # needs sage.libs.pari
646
+ Univariate Quotient Polynomial Ring in a over
647
+ Univariate Polynomial Ring in x over Rational Field with modulus a^2 - 5
648
+
649
+ ::
650
+
651
+ sage: # needs sage.rings.finite_rings
652
+ sage: P.<x> = PolynomialRing(GF(5))
653
+ sage: F.<a> = GF(5).extension(x^2 - 2)
654
+ sage: P.<t> = F[]
655
+ sage: R.<b> = F.extension(t^2 - a); R
656
+ Univariate Quotient Polynomial Ring in b over
657
+ Finite Field in a of size 5^2 with modulus b^2 + 4*a
658
+ """
659
+ from sage.rings.polynomial.polynomial_element import Polynomial
660
+ if not isinstance(poly, Polynomial):
661
+ try:
662
+ poly = poly.polynomial(self)
663
+ except (AttributeError, TypeError):
664
+ raise TypeError("polynomial (=%s) must be a polynomial." % repr(poly))
665
+ if names is not None:
666
+ name = names
667
+ if isinstance(name, tuple):
668
+ name = name[0]
669
+ if name is None:
670
+ name = str(poly.parent().gen(0))
671
+ for key, val in kwds.items():
672
+ if key not in ['structure', 'implementation', 'prec', 'embedding', 'latex_name', 'latex_names']:
673
+ raise TypeError("extension() got an unexpected keyword argument '%s'" % key)
674
+ if not (val is None or isinstance(val, list) and all(c is None for c in val)):
675
+ raise NotImplementedError("ring extension with prescribed %s is not implemented" % key)
676
+ R = self[name]
677
+ I = R.ideal(R(poly.list()))
678
+ return R.quotient(I, name)
679
+
680
+
681
+ cdef class IntegralDomain(CommutativeRing):
682
+ _default_category = IntegralDomains()
683
+
684
+ def __init__(self, *args, **kwds):
685
+ deprecation(39227, "use the category IntegralDomains")
686
+ super().__init__(*args, **kwds)
687
+
688
+
689
+ cdef class NoetherianRing(CommutativeRing):
690
+ _default_category = NoetherianRings()
691
+
692
+ def __init__(self, *args, **kwds):
693
+ deprecation(37234, "use the category NoetherianRings")
694
+ super().__init__(*args, **kwds)
695
+
696
+
697
+ cdef class DedekindDomain(CommutativeRing):
698
+ _default_category = DedekindDomains()
699
+
700
+ def __init__(self, *args, **kwds):
701
+ deprecation(37234, "use the category DedekindDomains")
702
+ super().__init__(*args, **kwds)
703
+
704
+
705
+ cdef class PrincipalIdealDomain(CommutativeRing):
706
+ _default_category = PrincipalIdealDomains()
707
+
708
+ def __init__(self, *args, **kwds):
709
+ deprecation(37719, "use the category PrincipalIdealDomains")
710
+ super().__init__(*args, **kwds)
711
+
712
+
713
+ cpdef bint _is_Field(x) except -2:
714
+ """
715
+ Return ``True`` if ``x`` is a field.
716
+
717
+ EXAMPLES::
718
+
719
+ sage: from sage.rings.ring import _is_Field
720
+ sage: _is_Field(QQ)
721
+ True
722
+ sage: _is_Field(ZZ)
723
+ False
724
+ sage: _is_Field(pAdicField(2)) # needs sage.rings.padics
725
+ True
726
+ sage: _is_Field(5)
727
+ False
728
+
729
+ NOTE:
730
+
731
+ ``_is_Field(R)`` is of internal use. It is better (and faster) to
732
+ use ``R in Fields()`` instead.
733
+ """
734
+ # The result is not immediately returned, since we want to refine
735
+ # x's category, so that calling x in Fields() will be faster next time.
736
+ try:
737
+ result = isinstance(x, Field) or x.is_field()
738
+ except AttributeError:
739
+ result = False
740
+ if result:
741
+ x._refine_category_(_Fields)
742
+ return result
743
+
744
+ from sage.categories.algebras import Algebras
745
+ from sage.categories.commutative_algebras import CommutativeAlgebras
746
+ from sage.categories.fields import Fields
747
+ _Fields = Fields()
748
+
749
+ cdef class Field(CommutativeRing):
750
+ """
751
+ Generic field
752
+
753
+ TESTS::
754
+
755
+ sage: QQ.is_noetherian()
756
+ True
757
+ """
758
+ _default_category = _Fields
759
+
760
+ def an_embedding(self, K):
761
+ r"""
762
+ Return some embedding of this field into another field `K`,
763
+ and raise a :class:`ValueError` if none exists.
764
+
765
+ EXAMPLES::
766
+
767
+ sage: # needs sage.rings.finite_rings
768
+ sage: GF(2).an_embedding(GF(4))
769
+ Ring morphism:
770
+ From: Finite Field of size 2
771
+ To: Finite Field in z2 of size 2^2
772
+ Defn: 1 |--> 1
773
+ sage: GF(4).an_embedding(GF(8))
774
+ Traceback (most recent call last):
775
+ ...
776
+ ValueError: no embedding from Finite Field in z2 of size 2^2 to Finite Field in z3 of size 2^3
777
+ sage: GF(4).an_embedding(GF(16))
778
+ Ring morphism:
779
+ From: Finite Field in z2 of size 2^2
780
+ To: Finite Field in z4 of size 2^4
781
+ Defn: z2 |--> z4^2 + z4
782
+
783
+ ::
784
+
785
+ sage: # needs sage.rings.nunmber_field
786
+ sage: CyclotomicField(5).an_embedding(QQbar)
787
+ Coercion map:
788
+ From: Cyclotomic Field of order 5 and degree 4
789
+ To: Algebraic Field
790
+ sage: CyclotomicField(3).an_embedding(CyclotomicField(7))
791
+ Traceback (most recent call last):
792
+ ...
793
+ ValueError: no embedding from Cyclotomic Field of order 3 and degree 2 to Cyclotomic Field of order 7 and degree 6
794
+ sage: CyclotomicField(3).an_embedding(CyclotomicField(6))
795
+ Generic morphism:
796
+ From: Cyclotomic Field of order 3 and degree 2
797
+ To: Cyclotomic Field of order 6 and degree 2
798
+ Defn: zeta3 -> zeta6 - 1
799
+ """
800
+ if self.characteristic() != K.characteristic():
801
+ raise ValueError(f'no embedding from {self} to {K}: incompatible characteristics')
802
+
803
+ H = self.Hom(K)
804
+ try:
805
+ return H.natural_map()
806
+ except TypeError:
807
+ pass
808
+ from sage.categories.sets_cat import EmptySetError
809
+ try:
810
+ return H.an_element()
811
+ except EmptySetError:
812
+ raise ValueError(f'no embedding from {self} to {K}')
813
+
814
+
815
+ cdef class Algebra(Ring):
816
+ def __init__(self, base_ring, *args, **kwds):
817
+ if 'category' not in kwds:
818
+ kwds['category'] = Algebras(base_ring)
819
+ deprecation(38502, "use the category Algebras")
820
+ super().__init__(base_ring, *args, **kwds)
821
+
822
+
823
+ cdef class CommutativeAlgebra(CommutativeRing):
824
+ def __init__(self, base_ring, *args, **kwds):
825
+ self._default_category = CommutativeAlgebras(base_ring)
826
+ deprecation(37999, "use the category CommutativeAlgebras")
827
+ super().__init__(base_ring, *args, **kwds)
828
+
829
+
830
+ def is_Ring(x):
831
+ """
832
+ Return ``True`` if ``x`` is a ring.
833
+
834
+ EXAMPLES::
835
+
836
+ sage: from sage.rings.ring import is_Ring
837
+ sage: is_Ring(ZZ)
838
+ doctest:warning...
839
+ DeprecationWarning: The function is_Ring is deprecated; use '... in Rings()' instead
840
+ See https://github.com/sagemath/sage/issues/38288 for details.
841
+ True
842
+ sage: MS = MatrixSpace(QQ, 2) # needs sage.modules
843
+ sage: is_Ring(MS) # needs sage.modules
844
+ True
845
+ """
846
+ from sage.misc.superseded import deprecation_cython
847
+ deprecation_cython(38288,
848
+ "The function is_Ring is deprecated; "
849
+ "use '... in Rings()' instead")
850
+ return x in _Rings