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,736 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Commutative rings
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-2013 Nicolas M. Thiery <nthiery at users.sf.net>
10
+ #
11
+ # Distributed under the terms of the GNU General Public License (GPL)
12
+ # https://www.gnu.org/licenses/
13
+ # *****************************************************************************
14
+
15
+ from sage.categories.category_with_axiom import CategoryWithAxiom
16
+ from sage.categories.cartesian_product import CartesianProductsCategory
17
+ from sage.structure.sequence import Sequence
18
+
19
+
20
+ class CommutativeRings(CategoryWithAxiom):
21
+ """
22
+ The category of commutative rings.
23
+
24
+ commutative rings with unity, i.e. rings with commutative * and
25
+ a multiplicative identity
26
+
27
+ EXAMPLES::
28
+
29
+ sage: C = CommutativeRings(); C
30
+ Category of commutative rings
31
+ sage: C.super_categories()
32
+ [Category of rings, Category of commutative monoids]
33
+
34
+ TESTS::
35
+
36
+ sage: TestSuite(C).run()
37
+
38
+ sage: QQ['x,y,z'] in CommutativeRings()
39
+ True
40
+ sage: GroupAlgebra(DihedralGroup(3), QQ) in CommutativeRings() # needs sage.groups sage.modules
41
+ False
42
+ sage: MatrixSpace(QQ, 2, 2) in CommutativeRings() # needs sage.modules
43
+ False
44
+
45
+ GroupAlgebra should be fixed::
46
+
47
+ sage: GroupAlgebra(CyclicPermutationGroup(3), QQ) in CommutativeRings() # not implemented, needs sage.groups sage.modules
48
+ True
49
+
50
+ Some tests for the method ``is_commutative``::
51
+
52
+ sage: QQ.is_commutative()
53
+ True
54
+ sage: ZpCA(7).is_commutative() # needs sage.rings.padics
55
+ True
56
+ sage: A = QuaternionAlgebra(QQ, -1, -3, names=('i','j','k')); A # needs sage.combinat sage.libs.singular sage.modules
57
+ Quaternion Algebra (-1, -3) with base ring Rational Field
58
+ sage: A.is_commutative() # needs sage.combinat sage.libs.singular sage.modules
59
+ False
60
+ """
61
+ def __lean_init__(self):
62
+ r"""
63
+ Return the category as Lean mathlib input for a typeclass.
64
+
65
+ EXAMPLES::
66
+
67
+ sage: C = CommutativeRings(); C
68
+ Category of commutative rings
69
+ sage: C._lean_init_() # indirect doctest
70
+ 'comm_ring'
71
+ """
72
+ # defined in algebra.ring.basic
73
+ return 'comm_ring'
74
+
75
+ class ParentMethods:
76
+ def krull_dimension(self):
77
+ """
78
+ Return the Krull dimension of this commutative ring.
79
+
80
+ The Krull dimension is the length of the longest ascending chain
81
+ of prime ideals.
82
+
83
+ This raises :exc:`NotImplementedError` by default
84
+ for generic commutative rings.
85
+
86
+ Fields and PIDs, with Krull dimension equal to 0 and 1,
87
+ respectively, have naive implementations of ``krull_dimension``.
88
+ Orders in number fields also have Krull dimension 1.
89
+
90
+ EXAMPLES:
91
+
92
+ Some polynomial rings::
93
+
94
+ sage: T.<x,y> = PolynomialRing(QQ,2); T
95
+ Multivariate Polynomial Ring in x, y over Rational Field
96
+ sage: T.krull_dimension()
97
+ 2
98
+ sage: U.<x,y,z> = PolynomialRing(ZZ,3); U
99
+ Multivariate Polynomial Ring in x, y, z over Integer Ring
100
+ sage: U.krull_dimension()
101
+ 4
102
+
103
+ All orders in number fields have Krull dimension 1, including
104
+ non-maximal orders::
105
+
106
+ sage: # needs sage.rings.number_field
107
+ sage: K.<i> = QuadraticField(-1)
108
+ sage: R = K.order(2*i); R
109
+ Order of conductor 2 generated by 2*i
110
+ in Number Field in i with defining polynomial x^2 + 1 with i = 1*I
111
+ sage: R.is_maximal()
112
+ False
113
+ sage: R.krull_dimension()
114
+ 1
115
+ sage: R = K.maximal_order(); R
116
+ Gaussian Integers generated by i in Number Field in i
117
+ with defining polynomial x^2 + 1 with i = 1*I
118
+ sage: R.krull_dimension()
119
+ 1
120
+
121
+ TESTS::
122
+
123
+ sage: R = CommutativeRing(ZZ)
124
+ sage: R.krull_dimension()
125
+ Traceback (most recent call last):
126
+ ...
127
+ NotImplementedError
128
+
129
+ sage: # needs sage.groups sage.rings.finite_rings
130
+ sage: R = GF(9).galois_group().algebra(QQ)
131
+ sage: R.krull_dimension()
132
+ Traceback (most recent call last):
133
+ ...
134
+ NotImplementedError
135
+ """
136
+ raise NotImplementedError
137
+
138
+ def is_commutative(self) -> bool:
139
+ """
140
+ Return whether the ring is commutative.
141
+
142
+ The answer is ``True`` only if the category is a sub-category of
143
+ ``CommutativeRings``.
144
+
145
+ It is recommended to use instead ``R in Rings().Commutative()``.
146
+
147
+ EXAMPLES::
148
+
149
+ sage: QQ.is_commutative()
150
+ True
151
+ sage: QQ['x,y,z'].is_commutative()
152
+ True
153
+ """
154
+ return True
155
+
156
+ def _ideal_class_(self, n=0):
157
+ r"""
158
+ Return a callable object that can be used to create ideals
159
+ in this commutative ring.
160
+
161
+ This class can depend on `n`, the number of generators of
162
+ the ideal. The default input of `n=0` indicates an
163
+ unspecified number of generators, in which case a class
164
+ that works for any number of generators is returned.
165
+
166
+ EXAMPLES::
167
+
168
+ sage: ZZ._ideal_class_()
169
+ <class 'sage.rings.ideal.Ideal_pid'>
170
+ sage: RR._ideal_class_()
171
+ <class 'sage.rings.ideal.Ideal_pid'>
172
+ sage: R.<x,y> = GF(5)[]
173
+ sage: R._ideal_class_(1)
174
+ <class 'sage.rings.polynomial.multi_polynomial_ideal.MPolynomialIdeal'>
175
+ sage: S = R.quo(x^3 - y^2)
176
+ sage: S._ideal_class_(1)
177
+ <class 'sage.rings.quotient_ring.QuotientRingIdeal_principal'>
178
+ sage: S._ideal_class_(2)
179
+ <class 'sage.rings.quotient_ring.QuotientRingIdeal_generic'>
180
+ sage: T.<z> = S[] # needs sage.libs.singular
181
+ sage: T._ideal_class_(5) # needs sage.libs.singular
182
+ <class 'sage.rings.ideal.Ideal_generic'>
183
+ sage: T._ideal_class_(1) # needs sage.libs.singular
184
+ <class 'sage.rings.ideal.Ideal_principal'>
185
+ """
186
+ # One might need more than just n
187
+ from sage.rings.ideal import Ideal_generic, Ideal_principal
188
+ return Ideal_principal if n == 1 else Ideal_generic
189
+
190
+ def _test_divides(self, **options):
191
+ r"""
192
+ Run generic tests on the method :meth:`divides`.
193
+
194
+ EXAMPLES::
195
+
196
+ sage: ZZ._test_divides()
197
+ """
198
+ tester = self._tester(**options)
199
+
200
+ # 1. is there a divides method ?
201
+ a = self.an_element()
202
+ try:
203
+ a.divides
204
+ except AttributeError:
205
+ return
206
+
207
+ # 2. divisibility of 0 and 1
208
+ z = self.zero()
209
+ o = self.one()
210
+
211
+ tester.assertTrue(z.divides(z))
212
+ tester.assertTrue(o.divides(o))
213
+ tester.assertTrue(o.divides(z))
214
+ tester.assertIs(z.divides(o), self.is_zero())
215
+
216
+ if not self.is_exact():
217
+ return
218
+
219
+ # 3. divisibility of some elements
220
+ for a, b in tester.some_elements(repeat=2):
221
+ try:
222
+ test = a.divides(a * b)
223
+ except NotImplementedError:
224
+ pass
225
+ else:
226
+ tester.assertTrue(test)
227
+
228
+ def over(self, base=None, gen=None, gens=None, name=None, names=None):
229
+ r"""
230
+ Return this ring, considered as an extension of ``base``.
231
+
232
+ INPUT:
233
+
234
+ - ``base`` -- a commutative ring or a morphism or ``None``
235
+ (default: ``None``); the base of this extension or its defining
236
+ morphism
237
+
238
+ - ``gen`` -- a generator of this extension (over its base) or ``None``
239
+ (default: ``None``)
240
+
241
+ - ``gens`` -- list of generators of this extension (over its base)
242
+ or ``None`` (default: ``None``)
243
+
244
+ - ``name`` -- a variable name or ``None`` (default: ``None``)
245
+
246
+ - ``names`` -- list or a tuple of variable names or ``None``
247
+ (default: ``None``)
248
+
249
+ EXAMPLES:
250
+
251
+ We construct an extension of finite fields::
252
+
253
+ sage: # needs sage.rings.finite_rings
254
+ sage: F = GF(5^2)
255
+ sage: k = GF(5^4)
256
+ sage: z4 = k.gen()
257
+ sage: K = k.over(F); K # needs sage.modules
258
+ Field in z4 with defining polynomial
259
+ x^2 + (4*z2 + 3)*x + z2 over its base
260
+
261
+ If not explicitly given, the default generator of the top ring
262
+ (here k) is used and the same name is kept::
263
+
264
+ sage: K.gen() # needs sage.modules sage.rings.finite_rings
265
+ z4
266
+ sage: K(z4) # needs sage.modules sage.rings.finite_rings
267
+ z4
268
+
269
+ However, it is possible to specify another generator and/or
270
+ another name. For example::
271
+
272
+ sage: # needs sage.modules sage.rings.finite_rings
273
+ sage: Ka = k.over(F, name='a'); Ka
274
+ Field in a with defining polynomial
275
+ x^2 + (4*z2 + 3)*x + z2 over its base
276
+ sage: Ka.gen()
277
+ a
278
+ sage: Ka(z4)
279
+ a
280
+
281
+ sage: # needs sage.modules sage.rings.finite_rings
282
+ sage: Kb = k.over(F, gen=-z4+1, name='b')
283
+ sage: Kb
284
+ Field in b with defining polynomial x^2 + z2*x + 4 over its base
285
+ sage: Kb.gen()
286
+ b
287
+ sage: Kb(-z4+1)
288
+ b
289
+
290
+ Note that the shortcut ``K.<a>`` is also available::
291
+
292
+ sage: KKa.<a> = k.over(F) # needs sage.modules sage.rings.finite_rings
293
+ sage: KKa is Ka # needs sage.modules sage.rings.finite_rings
294
+ True
295
+
296
+ Building an extension on top of another extension is allowed::
297
+
298
+ sage: L = GF(5^12).over(K); L # needs sage.modules sage.rings.finite_rings
299
+ Field in z12 with defining polynomial
300
+ x^3 + (1 + (4*z2 + 2)*z4)*x^2 + (2 + 2*z4)*x - z4 over its base
301
+ sage: L.base_ring() # needs sage.modules sage.rings.finite_rings
302
+ Field in z4 with defining polynomial
303
+ x^2 + (4*z2 + 3)*x + z2 over its base
304
+
305
+ The successive bases of an extension are accessible via the
306
+ method :meth:`sage.rings.ring_extension.RingExtension_generic.bases`::
307
+
308
+ sage: L.bases() # needs sage.modules sage.rings.finite_rings
309
+ [Field in z12 with defining polynomial
310
+ x^3 + (1 + (4*z2 + 2)*z4)*x^2 + (2 + 2*z4)*x - z4 over its base,
311
+ Field in z4 with defining polynomial
312
+ x^2 + (4*z2 + 3)*x + z2 over its base,
313
+ Finite Field in z2 of size 5^2]
314
+
315
+ When ``base`` is omitted, the canonical base of the ring is used::
316
+
317
+ sage: S.<x> = QQ[]
318
+ sage: E = S.over(); E # needs sage.modules
319
+ Univariate Polynomial Ring in x over Rational Field over its base
320
+ sage: E.base_ring() # needs sage.modules
321
+ Rational Field
322
+
323
+ Here is an example where ``base`` is a defining morphism::
324
+
325
+ sage: # needs sage.modules sage.rings.number_field
326
+ sage: k.<a> = QQ.extension(x^2 - 2)
327
+ sage: l.<b> = QQ.extension(x^4 - 2)
328
+ sage: f = k.hom([b^2])
329
+ sage: L = l.over(f)
330
+ sage: L
331
+ Field in b with defining polynomial x^2 - a over its base
332
+ sage: L.base_ring()
333
+ Number Field in a with defining polynomial x^2 - 2
334
+
335
+ Similarly, one can create a tower of extensions::
336
+
337
+ sage: # needs sage.modules sage.rings.number_field
338
+ sage: K = k.over()
339
+ sage: L = l.over(Hom(K, l)(f)); L
340
+ Field in b with defining polynomial x^2 - a over its base
341
+ sage: L.base_ring()
342
+ Field in a with defining polynomial x^2 - 2 over its base
343
+ sage: L.bases()
344
+ [Field in b with defining polynomial x^2 - a over its base,
345
+ Field in a with defining polynomial x^2 - 2 over its base,
346
+ Rational Field]
347
+ """
348
+ from sage.rings.ring_extension import RingExtension
349
+ if name is not None:
350
+ if names is not None:
351
+ raise ValueError("keyword argument 'name' cannot be combined with 'names'")
352
+ names = (name,)
353
+ if gen is not None:
354
+ if gens is not None:
355
+ raise ValueError("keyword argument 'gen' cannot be combined with 'gens'")
356
+ gens = (gen,)
357
+ return RingExtension(self, base, gens, names)
358
+
359
+ def frobenius_endomorphism(self, n=1):
360
+ """
361
+ Return the Frobenius endomorphism.
362
+
363
+ INPUT:
364
+
365
+ - ``n`` -- nonnegative integer (default: 1)
366
+
367
+ OUTPUT:
368
+
369
+ The `n`-th power of the absolute arithmetic Frobenius
370
+ endomorphism on this commutative ring.
371
+
372
+ EXAMPLES::
373
+
374
+ sage: K.<u> = PowerSeriesRing(GF(5))
375
+ sage: Frob = K.frobenius_endomorphism(); Frob
376
+ Frobenius endomorphism x |--> x^5 of Power Series Ring in u
377
+ over Finite Field of size 5
378
+ sage: Frob(u)
379
+ u^5
380
+
381
+ We can specify a power::
382
+
383
+ sage: f = K.frobenius_endomorphism(2); f
384
+ Frobenius endomorphism x |--> x^(5^2) of Power Series Ring in u
385
+ over Finite Field of size 5
386
+ sage: f(1+u)
387
+ 1 + u^25
388
+ """
389
+ from sage.rings.morphism import FrobeniusEndomorphism_generic
390
+ return FrobeniusEndomorphism_generic(self, n)
391
+
392
+ def derivation_module(self, codomain=None, twist=None):
393
+ r"""
394
+ Return the module of derivations over this ring.
395
+
396
+ INPUT:
397
+
398
+ - ``codomain`` -- an algebra over this ring or a ring homomorphism
399
+ whose domain is this ring or ``None`` (default: ``None``); if it
400
+ is a morphism, the codomain of derivations will be the codomain
401
+ of the morphism viewed as an algebra over ``self`` through the
402
+ given morphism; if ``None``, the codomain will be this ring
403
+
404
+ - ``twist`` -- a morphism from this ring to ``codomain``
405
+ or ``None`` (default: ``None``); if ``None``, the coercion
406
+ map from this ring to ``codomain`` will be used
407
+
408
+ .. NOTE::
409
+
410
+ A twisted derivation with respect to `\theta` (or a
411
+ `\theta`-derivation for short) is an additive map `d`
412
+ satisfying the following axiom for all `x, y` in the domain:
413
+
414
+ .. MATH::
415
+
416
+ d(xy) = \theta(x) d(y) + d(x) y.
417
+
418
+ EXAMPLES::
419
+
420
+ sage: R.<x,y,z> = QQ[]
421
+ sage: M = R.derivation_module(); M # needs sage.modules
422
+ Module of derivations over
423
+ Multivariate Polynomial Ring in x, y, z over Rational Field
424
+ sage: M.gens() # needs sage.modules
425
+ (d/dx, d/dy, d/dz)
426
+
427
+ We can specify a different codomain::
428
+
429
+ sage: K = R.fraction_field()
430
+ sage: M = R.derivation_module(K); M # needs sage.libs.singular sage.modules
431
+ Module of derivations
432
+ from Multivariate Polynomial Ring in x, y, z over Rational Field
433
+ to Fraction Field of
434
+ Multivariate Polynomial Ring in x, y, z over Rational Field
435
+ sage: M.gen() / x # needs sage.libs.singular sage.modules
436
+ 1/x*d/dx
437
+
438
+ Here is an example with a non-canonical defining morphism::
439
+
440
+ sage: ev = R.hom([QQ(0), QQ(1), QQ(2)])
441
+ sage: ev
442
+ Ring morphism:
443
+ From: Multivariate Polynomial Ring in x, y, z over Rational Field
444
+ To: Rational Field
445
+ Defn: x |--> 0
446
+ y |--> 1
447
+ z |--> 2
448
+ sage: M = R.derivation_module(ev) # needs sage.modules
449
+ sage: M # needs sage.modules
450
+ Module of derivations
451
+ from Multivariate Polynomial Ring in x, y, z over Rational Field
452
+ to Rational Field
453
+
454
+ Elements in `M` acts as derivations at `(0,1,2)`::
455
+
456
+ sage: # needs sage.modules
457
+ sage: Dx = M.gen(0); Dx
458
+ d/dx
459
+ sage: Dy = M.gen(1); Dy
460
+ d/dy
461
+ sage: Dz = M.gen(2); Dz
462
+ d/dz
463
+ sage: f = x^2 + y^2 + z^2
464
+ sage: Dx(f) # = 2*x evaluated at (0,1,2)
465
+ 0
466
+ sage: Dy(f) # = 2*y evaluated at (0,1,2)
467
+ 2
468
+ sage: Dz(f) # = 2*z evaluated at (0,1,2)
469
+ 4
470
+
471
+ An example with a twisting homomorphism::
472
+
473
+ sage: theta = R.hom([x^2, y^2, z^2])
474
+ sage: M = R.derivation_module(twist=theta); M # needs sage.modules
475
+ Module of twisted derivations over Multivariate Polynomial Ring in x, y, z
476
+ over Rational Field (twisting morphism: x |--> x^2, y |--> y^2, z |--> z^2)
477
+
478
+ .. SEEALSO::
479
+
480
+ :meth:`derivation`
481
+ """
482
+ from sage.rings.derivation import RingDerivationModule
483
+ if codomain is None:
484
+ codomain = self
485
+ return RingDerivationModule(self, codomain, twist)
486
+
487
+ def derivation(self, arg=None, twist=None):
488
+ r"""
489
+ Return the twisted or untwisted derivation over this ring
490
+ specified by ``arg``.
491
+
492
+ .. NOTE::
493
+
494
+ A twisted derivation with respect to `\theta` (or a
495
+ `\theta`-derivation for short) is an additive map `d`
496
+ satisfying the following axiom for all `x, y` in the domain:
497
+
498
+ .. MATH::
499
+
500
+ d(xy) = \theta(x) d(y) + d(x) y.
501
+
502
+ INPUT:
503
+
504
+ - ``arg`` -- (optional) a generator or a list of coefficients
505
+ that defines the derivation
506
+
507
+ - ``twist`` -- (optional) the twisting homomorphism
508
+
509
+ EXAMPLES::
510
+
511
+ sage: R.<x,y,z> = QQ[]
512
+ sage: R.derivation() # needs sage.modules
513
+ d/dx
514
+
515
+ In that case, ``arg`` could be a generator::
516
+
517
+ sage: R.derivation(y) # needs sage.modules
518
+ d/dy
519
+
520
+ or a list of coefficients::
521
+
522
+ sage: R.derivation([1,2,3]) # needs sage.modules
523
+ d/dx + 2*d/dy + 3*d/dz
524
+
525
+ It is not possible to define derivations with respect to a
526
+ polynomial which is not a variable::
527
+
528
+ sage: R.derivation(x^2) # needs sage.modules
529
+ Traceback (most recent call last):
530
+ ...
531
+ ValueError: unable to create the derivation
532
+
533
+ Here is an example with twisted derivations::
534
+
535
+ sage: R.<x,y,z> = QQ[]
536
+ sage: theta = R.hom([x^2, y^2, z^2])
537
+ sage: f = R.derivation(twist=theta); f # needs sage.modules
538
+ 0
539
+ sage: f.parent() # needs sage.modules
540
+ Module of twisted derivations over Multivariate Polynomial Ring in x, y, z
541
+ over Rational Field (twisting morphism: x |--> x^2, y |--> y^2, z |--> z^2)
542
+
543
+ Specifying a scalar, the returned twisted derivation is the
544
+ corresponding multiple of `\theta - id`::
545
+
546
+ sage: R.derivation(1, twist=theta) # needs sage.modules
547
+ [x |--> x^2, y |--> y^2, z |--> z^2] - id
548
+ sage: R.derivation(x, twist=theta) # needs sage.modules
549
+ x*([x |--> x^2, y |--> y^2, z |--> z^2] - id)
550
+ """
551
+ if isinstance(arg, (list, tuple)):
552
+ codomain = Sequence([self(0)] + list(arg)).universe()
553
+ else:
554
+ codomain = self
555
+ return self.derivation_module(codomain, twist=twist)(arg)
556
+
557
+ class ElementMethods:
558
+ pass
559
+
560
+ class Finite(CategoryWithAxiom):
561
+ r"""
562
+ Check that Sage knows that Cartesian products of finite commutative
563
+ rings is a finite commutative ring.
564
+
565
+ EXAMPLES::
566
+
567
+ sage: cartesian_product([Zmod(34),
568
+ ....: GF(5)]) in Rings().Commutative().Finite()
569
+ True
570
+ """
571
+ def extra_super_categories(self):
572
+ r"""
573
+ Let Sage know that finite commutative rings are Noetherian.
574
+
575
+ EXAMPLES::
576
+
577
+ sage: CommutativeRings().Finite().extra_super_categories()
578
+ [Category of noetherian rings]
579
+ """
580
+ from sage.categories.noetherian_rings import NoetherianRings
581
+ return [NoetherianRings()]
582
+
583
+ class ParentMethods:
584
+ def cyclotomic_cosets(self, q, cosets=None):
585
+ r"""
586
+ Return the (multiplicative) orbits of ``q`` in the ring.
587
+
588
+ Let `R` be a finite commutative ring. The group of invertible
589
+ elements `R^*` in `R` gives rise to a group action on `R` by
590
+ multiplication. An orbit of the subgroup generated by an
591
+ invertible element `q` is called a `q`-*cyclotomic coset* (since
592
+ in a finite ring, each invertible element is a root of unity).
593
+
594
+ These cosets arise in the theory of minimal polynomials of
595
+ finite fields, duadic codes and combinatorial designs. Fix a
596
+ primitive element `z` of `GF(q^k)`. The minimal polynomial of
597
+ `z^s` over `GF(q)` is given by
598
+
599
+ .. MATH::
600
+
601
+ M_s(x) = \prod_{i \in C_s} (x - z^i),
602
+
603
+
604
+ where `C_s` is the `q`-cyclotomic coset mod `n` containing `s`,
605
+ `n = q^k - 1`.
606
+
607
+ .. NOTE::
608
+
609
+ When `R = \ZZ / n \ZZ` the smallest element of each coset is
610
+ sometimes called a *coset leader*. This function returns
611
+ sorted lists so that the coset leader will always be the
612
+ first element of the coset.
613
+
614
+ INPUT:
615
+
616
+ - ``q`` -- an invertible element of the ring
617
+
618
+ - ``cosets`` -- an optional lists of elements of ``self``. If
619
+ provided, the function only return the list of cosets that
620
+ contain some element from ``cosets``.
621
+
622
+ OUTPUT: list of lists
623
+
624
+ EXAMPLES::
625
+
626
+ sage: Zmod(11).cyclotomic_cosets(2)
627
+ [[0], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
628
+ sage: Zmod(15).cyclotomic_cosets(2)
629
+ [[0], [1, 2, 4, 8], [3, 6, 9, 12], [5, 10], [7, 11, 13, 14]]
630
+
631
+ Since the group of invertible elements of a finite field is
632
+ cyclic, the set of squares is a particular case of cyclotomic
633
+ coset::
634
+
635
+ sage: # needs sage.rings.finite_rings
636
+ sage: K = GF(25, 'z')
637
+ sage: a = K.multiplicative_generator()
638
+ sage: K.cyclotomic_cosets(a**2, cosets=[1])
639
+ [[1, 2, 3, 4, z + 1, z + 3,
640
+ 2*z + 1, 2*z + 2, 3*z + 3,
641
+ 3*z + 4, 4*z + 2, 4*z + 4]]
642
+ sage: sorted(b for b in K if not b.is_zero() and b.is_square())
643
+ [1, 2, 3, 4, z + 1, z + 3,
644
+ 2*z + 1, 2*z + 2, 3*z + 3,
645
+ 3*z + 4, 4*z + 2, 4*z + 4]
646
+
647
+ We compute some examples of minimal polynomials::
648
+
649
+ sage: # needs sage.rings.finite_rings
650
+ sage: K = GF(27, 'z')
651
+ sage: a = K.multiplicative_generator()
652
+ sage: R.<X> = PolynomialRing(K, 'X')
653
+ sage: a.minimal_polynomial('X')
654
+ X^3 + 2*X + 1
655
+
656
+ sage: cyc3 = Zmod(26).cyclotomic_cosets(3, cosets=[1]); cyc3
657
+ [[1, 3, 9]]
658
+ sage: prod(X - a**i for i in cyc3[0]) # needs sage.rings.finite_rings
659
+ X^3 + 2*X + 1
660
+ sage: (a**7).minimal_polynomial('X') # needs sage.rings.finite_rings
661
+ X^3 + X^2 + 2*X + 1
662
+ sage: cyc7 = Zmod(26).cyclotomic_cosets(3, cosets=[7]); cyc7
663
+ [[7, 11, 21]]
664
+ sage: prod(X - a**i for i in cyc7[0]) # needs sage.rings.finite_rings
665
+ X^3 + X^2 + 2*X + 1
666
+
667
+ Cyclotomic cosets of fields are useful in combinatorial design
668
+ theory to provide so called difference families (see
669
+ :wikipedia:`Difference_set` and
670
+ :mod:`~sage.combinat.designs.difference_family`). This is
671
+ illustrated on the following examples::
672
+
673
+ sage: K = GF(5)
674
+ sage: a = K.multiplicative_generator() # needs sage.libs.pari
675
+ sage: H = K.cyclotomic_cosets(a**2, cosets=[1, 2]); H # needs sage.rings.finite_rings
676
+ [[1, 4], [2, 3]]
677
+ sage: sorted(x - y for D in H for x in D for y in D if x != y) # needs sage.rings.finite_rings
678
+ [1, 2, 3, 4]
679
+
680
+ sage: K = GF(37)
681
+ sage: a = K.multiplicative_generator() # needs sage.libs.pari
682
+ sage: H = K.cyclotomic_cosets(a**4, cosets=[1]); H # needs sage.rings.finite_rings
683
+ [[1, 7, 9, 10, 12, 16, 26, 33, 34]]
684
+ sage: sorted(x - y for D in H for x in D for y in D if x != y) # needs sage.rings.finite_rings
685
+ [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, ..., 33, 34, 34, 35, 35, 36, 36]
686
+
687
+ The method ``cyclotomic_cosets`` works on any finite commutative
688
+ ring::
689
+
690
+ sage: R = cartesian_product([GF(7), Zmod(14)])
691
+ sage: a = R((3,5))
692
+ sage: R.cyclotomic_cosets((3,5), [(1,1)])
693
+ [[(1, 1), (2, 11), (3, 5), (4, 9), (5, 3), (6, 13)]]
694
+ """
695
+ q = self(q)
696
+
697
+ try:
698
+ ~q
699
+ except ZeroDivisionError:
700
+ raise ValueError("%s is not invertible in %s" % (q, self))
701
+
702
+ if cosets is None:
703
+ rest = set(self)
704
+ else:
705
+ rest = {self(x) for x in cosets}
706
+
707
+ orbits = []
708
+ while rest:
709
+ x0 = rest.pop()
710
+ o = [x0]
711
+ x = q * x0
712
+ while x != x0:
713
+ o.append(x)
714
+ rest.discard(x)
715
+ x *= q
716
+ o.sort()
717
+ orbits.append(o)
718
+
719
+ orbits.sort()
720
+ return orbits
721
+
722
+ class CartesianProducts(CartesianProductsCategory):
723
+ def extra_super_categories(self):
724
+ r"""
725
+ Let Sage knows that Cartesian products of commutative rings is a
726
+ commutative ring.
727
+
728
+ EXAMPLES::
729
+
730
+ sage: CommutativeRings().Commutative().CartesianProducts().extra_super_categories()
731
+ [Category of commutative rings]
732
+ sage: cartesian_product([ZZ, Zmod(34),
733
+ ....: QQ, GF(5)]) in CommutativeRings()
734
+ True
735
+ """
736
+ return [CommutativeRings()]