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,779 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ # sage.doctest: needs sage.libs.pari
3
+ r"""
4
+ Elements of Quotients of Univariate Polynomial Rings
5
+
6
+ EXAMPLES: We create a quotient of a univariate polynomial ring over
7
+ `\ZZ`.
8
+
9
+ ::
10
+
11
+ sage: R.<x> = ZZ[]
12
+ sage: S.<a> = R.quotient(x^3 + 3*x - 1)
13
+ sage: 2 * a^3
14
+ -6*a + 2
15
+
16
+ Next we make a univariate polynomial ring over
17
+ `\ZZ[x]/(x^3+3x-1)`.
18
+
19
+ ::
20
+
21
+ sage: S1.<y> = S[]
22
+
23
+ And, we quotient out that by `y^2 + a`.
24
+
25
+ ::
26
+
27
+ sage: T.<z> = S1.quotient(y^2 + a)
28
+
29
+ In the quotient `z^2` is `-a`.
30
+
31
+ ::
32
+
33
+ sage: z^2
34
+ -a
35
+
36
+ And since `a^3 = -3x + 1`, we have::
37
+
38
+ sage: z^6
39
+ 3*a - 1
40
+
41
+ ::
42
+
43
+ sage: R.<x> = PolynomialRing(Integers(9))
44
+ sage: S.<a> = R.quotient(x^4 + 2*x^3 + x + 2)
45
+ sage: a^100
46
+ 7*a^3 + 8*a + 7
47
+
48
+ ::
49
+
50
+ sage: R.<x> = PolynomialRing(QQ)
51
+ sage: S.<a> = R.quotient(x^3 - 2)
52
+ sage: a
53
+ a
54
+ sage: a^3
55
+ 2
56
+
57
+ For the purposes of comparison in Sage the quotient element
58
+ `a^3` is equal to `x^3`. This is because when the
59
+ comparison is performed, the right element is coerced into the
60
+ parent of the left element, and `x^3` coerces to
61
+ `a^3`.
62
+
63
+ ::
64
+
65
+ sage: a == x
66
+ True
67
+ sage: a^3 == x^3
68
+ True
69
+ sage: x^3
70
+ x^3
71
+ sage: S(x^3)
72
+ 2
73
+
74
+ AUTHORS:
75
+
76
+ - William Stein
77
+ """
78
+
79
+ #*****************************************************************************
80
+ # Copyright (C) 2005, 2007 William Stein <wstein@gmail.com>
81
+ #
82
+ # This program is free software: you can redistribute it and/or modify
83
+ # it under the terms of the GNU General Public License as published by
84
+ # the Free Software Foundation, either version 2 of the License, or
85
+ # (at your option) any later version.
86
+ # http://www.gnu.org/licenses/
87
+ #*****************************************************************************
88
+
89
+ from sage.structure.element import CommutativeRingElement
90
+ from sage.structure.richcmp import richcmp
91
+ import sage.rings.polynomial.polynomial_singular_interface as polynomial_singular_interface
92
+
93
+
94
+ class PolynomialQuotientRingElement(polynomial_singular_interface.Polynomial_singular_repr, CommutativeRingElement):
95
+ """
96
+ Element of a quotient of a polynomial ring.
97
+
98
+ EXAMPLES::
99
+
100
+ sage: P.<x> = QQ[]
101
+ sage: Q.<xi> = P.quo([(x^2 + 1)])
102
+ sage: xi^2
103
+ -1
104
+ sage: singular(xi) # needs sage.libs.singular
105
+ xi
106
+ sage: (singular(xi)*singular(xi)).NF('std(0)') # needs sage.libs.singular
107
+ -1
108
+ """
109
+ def __init__(self, parent, polynomial, check=True):
110
+ """
111
+ Create an element of the quotient of a polynomial ring.
112
+
113
+ INPUT:
114
+
115
+ - ``parent`` -- a quotient of a polynomial ring
116
+
117
+ - ``polynomial`` -- a polynomial
118
+
119
+ - ``check`` -- boolean (default: ``True``); whether or not to
120
+ verify that x is a valid element of the polynomial ring and reduced
121
+ (mod the modulus).
122
+ """
123
+ from sage.rings.polynomial.polynomial_quotient_ring import PolynomialQuotientRing_generic
124
+ from sage.rings.polynomial.polynomial_element import Polynomial
125
+
126
+ CommutativeRingElement.__init__(self, parent)
127
+ if check:
128
+ if not isinstance(parent, PolynomialQuotientRing_generic):
129
+ raise TypeError("parent must be a polynomial quotient ring")
130
+
131
+ if not isinstance(polynomial, Polynomial):
132
+ raise TypeError("polynomial must be a polynomial")
133
+
134
+ if polynomial not in parent.polynomial_ring():
135
+ raise TypeError("polynomial must be in the polynomial ring of the parent")
136
+
137
+ f = parent.modulus()
138
+ if polynomial.degree() >= f.degree() and polynomial.degree() >= 0:
139
+ try:
140
+ polynomial %= f
141
+ except AttributeError:
142
+ A = polynomial
143
+ B = f
144
+ R = A
145
+ P = B.parent()
146
+ Q = P(0)
147
+ X = P.gen()
148
+ while R.degree() >= B.degree():
149
+ S = P(R.leading_coefficient()/B.leading_coefficient()) * X**(R.degree()-B.degree())
150
+ Q = Q + S
151
+ R = R - S*B
152
+ polynomial = R
153
+ self._polynomial = polynomial
154
+
155
+ def _im_gens_(self, codomain, im_gens, base_map=None):
156
+ """
157
+ Return the image of this element under the morphism defined by
158
+ ``im_gens`` in ``codomain``, where elements of the
159
+ base ring are mapped by ``base_map``.
160
+
161
+ EXAMPLES::
162
+
163
+ sage: # needs sage.rings.number_field
164
+ sage: Zx.<x> = ZZ[]
165
+ sage: K.<i> = NumberField(x^2 + 1)
166
+ sage: cc = K.hom([-i])
167
+ sage: S.<y> = K[]
168
+ sage: Q.<q> = S.quotient(y^2*(y-1)*(y-i))
169
+ sage: T.<t> = S.quotient(y*(y+1))
170
+ sage: phi = Q.hom([t+1], base_map=cc)
171
+ sage: phi(q)
172
+ t + 1
173
+ sage: phi(i*q)
174
+ -i*t - i
175
+ """
176
+ return self._polynomial._im_gens_(codomain, im_gens, base_map=base_map)
177
+
178
+ def __hash__(self):
179
+ return hash(self._polynomial)
180
+
181
+ def __reduce__(self):
182
+ """
183
+ EXAMPLES::
184
+
185
+ sage: R.<x> = QQ[]
186
+ sage: S.<a> = R.quotient(2*x^3 + 3/2*x -1/3)
187
+ sage: 2 * a^3
188
+ -3/2*a + 1/3
189
+ sage: loads(dumps(2*a^3)) == 2*a^3
190
+ True
191
+ """
192
+ return self.__class__, (self.parent(), self._polynomial, False)
193
+
194
+ def _repr_(self):
195
+ r"""
196
+ EXAMPLES::
197
+
198
+ sage: R.<x> = QQ[]
199
+ sage: S.<a> = R.quotient(3*x^3 + 3/2*x -1/3)
200
+ sage: 3 * a^3 + S.modulus()
201
+ -3/2*a + 1/3
202
+ """
203
+ # We call _repr since _repr_ does not have a name variable.
204
+ # This is very fragile!
205
+ return self._polynomial._repr(self.parent().variable_name())
206
+
207
+ def _latex_(self):
208
+ r"""
209
+ EXAMPLES::
210
+
211
+ sage: R.<x> = QQ[]
212
+ sage: S.<a> = R.quotient(3*x^3 + 3/2*x -1/3)
213
+ sage: latex(a*(3 * a^3) + S.modulus())
214
+ -\frac{3}{2} a^{2} + \frac{1}{3} a
215
+ """
216
+ return self._polynomial._latex_(self.parent().variable_name())
217
+
218
+ def __pari__(self):
219
+ """
220
+ Pari representation of this quotient element.
221
+
222
+ EXAMPLES::
223
+
224
+ sage: R.<x> = QQ[]
225
+ sage: I = R.ideal(x^10)
226
+ sage: S.<xb> = R.quo(I)
227
+ sage: pari(xb)^10
228
+ Mod(0, x^10)
229
+ """
230
+ return self._polynomial.__pari__().Mod(self.parent().modulus())
231
+
232
+ ##################################################
233
+ # Arithmetic
234
+ ##################################################
235
+
236
+ def _mul_(self, right):
237
+ """
238
+ Return the product of two polynomial ring quotient elements.
239
+
240
+ EXAMPLES::
241
+
242
+ sage: R.<x> = PolynomialRing(QQ)
243
+ sage: S.<a> = R.quotient(x^3-2)
244
+ sage: (a^2 - 4) * (a+2)
245
+ 2*a^2 - 4*a - 6
246
+ """
247
+ R = self.parent()
248
+ prod = self._polynomial * right._polynomial
249
+ return self.__class__(R, prod, check=False)
250
+
251
+ def _sub_(self, right):
252
+ """
253
+ Return the difference of two polynomial ring quotient elements.
254
+
255
+ EXAMPLES::
256
+
257
+ sage: R.<x> = PolynomialRing(QQ)
258
+ sage: S.<a> = R.quotient(x^3 - 2)
259
+ sage: (a^2 - 4) - (a+2)
260
+ a^2 - a - 6
261
+ sage: int(1) - a
262
+ -a + 1
263
+ """
264
+ return self.__class__(self.parent(),
265
+ self._polynomial - right._polynomial, check=False)
266
+
267
+ def _add_(self, right):
268
+ """
269
+ Return the sum of two polynomial ring quotient elements.
270
+
271
+ EXAMPLES::
272
+
273
+ sage: R.<x> = PolynomialRing(QQ)
274
+ sage: S.<a> = R.quotient(x^3 - 2)
275
+ sage: (a^2 - 4) + (a+2)
276
+ a^2 + a - 2
277
+ sage: int(1) + a
278
+ a + 1
279
+ """
280
+ return self.__class__(self.parent(),
281
+ self._polynomial + right._polynomial, check=False)
282
+
283
+ def _div_(self, right):
284
+ """
285
+ Return the quotient of two polynomial ring quotient elements.
286
+
287
+ EXAMPLES::
288
+
289
+ sage: R.<x> = PolynomialRing(QQ)
290
+ sage: S.<a> = R.quotient(x^3 - 2)
291
+ sage: (a^2 - 4) / (a+2)
292
+ a - 2
293
+ """
294
+ return self * ~right
295
+
296
+ def __neg__(self):
297
+ return self.__class__(self.parent(), -self._polynomial)
298
+
299
+ def _richcmp_(self, other, op):
300
+ """
301
+ Compare this element with something else, where equality testing
302
+ coerces the object on the right, if possible (and necessary).
303
+
304
+ EXAMPLES::
305
+
306
+ sage: R.<x> = PolynomialRing(QQ)
307
+ sage: S.<a> = R.quotient(x^3 - 2)
308
+ sage: (a^2 - 4) / (a+2) == a - 2
309
+ True
310
+ sage: a^2 - 4 == a
311
+ False
312
+ """
313
+ return richcmp(self._polynomial, other._polynomial, op)
314
+
315
+ def __getitem__(self, n):
316
+ return self._polynomial[n]
317
+
318
+ def __int__(self):
319
+ """
320
+ Coerce this element to an int if possible.
321
+
322
+ EXAMPLES::
323
+
324
+ sage: R.<x> = PolynomialRing(QQ)
325
+ sage: S.<a> = R.quotient(x^3 - 2)
326
+ sage: int(S(10))
327
+ 10
328
+ sage: int(a)
329
+ Traceback (most recent call last):
330
+ ...
331
+ TypeError: cannot convert nonconstant polynomial
332
+ """
333
+ return int(self._polynomial)
334
+
335
+ def is_unit(self):
336
+ """
337
+ Return ``True`` if ``self`` is invertible.
338
+
339
+ .. WARNING::
340
+
341
+ Only implemented when the base ring is a field.
342
+
343
+ EXAMPLES::
344
+
345
+ sage: R.<x> = QQ[]
346
+ sage: S.<y> = R.quotient(x^2 + 2*x + 1)
347
+ sage: (2*y).is_unit()
348
+ True
349
+ sage: (y + 1).is_unit()
350
+ False
351
+
352
+ TESTS:
353
+
354
+ Raise an exception if the base ring is not a field
355
+ (see :issue:`13303`)::
356
+
357
+ sage: Z16x.<x> = Integers(16)[]
358
+ sage: S.<y> = Z16x.quotient(x^2 + x + 1)
359
+ sage: (2*y).is_unit()
360
+ Traceback (most recent call last):
361
+ ...
362
+ NotImplementedError: The base ring (=Ring of integers modulo 16) is not a field
363
+
364
+ Check that :issue:`29469` is fixed::
365
+
366
+ sage: S(3).is_unit()
367
+ True
368
+ """
369
+ if self._polynomial.is_zero():
370
+ return False
371
+ if self._polynomial.is_one():
372
+ return True
373
+ try:
374
+ if self._polynomial.is_unit():
375
+ return True
376
+ except NotImplementedError:
377
+ pass
378
+
379
+ parent = self.parent()
380
+ base = parent.base_ring()
381
+ if not base.is_field():
382
+ raise NotImplementedError("The base ring (=%s) is not a field" % base)
383
+ g = parent.modulus().gcd(self._polynomial)
384
+ return g.degree() == 0
385
+
386
+ def __invert__(self):
387
+ """
388
+ Return the inverse of this element.
389
+
390
+ EXAMPLES::
391
+
392
+ sage: R.<x> = QQ[]
393
+ sage: S.<y> = R.quotient(x^2 + 2*x + 1)
394
+ sage: (2*y)^(-1)
395
+ -1/2*y - 1
396
+
397
+ Raises a :exc:`ZeroDivisionError` if this element is not a unit::
398
+
399
+ sage: (y+1)^(-1)
400
+ Traceback (most recent call last):
401
+ ...
402
+ ArithmeticError: element is non-invertible
403
+
404
+ TESTS:
405
+
406
+ An element is not invertible if the base ring is not a field
407
+ (see :issue:`13303`) (the test no longer makes sense when inversion is
408
+ implemented for this particular base ring, need better test)::
409
+
410
+ sage: Z16x.<x> = Integers(16)[]
411
+ sage: S.<y> = Z16x.quotient(x^2 + x + 1)
412
+ sage: (2*y)^(-1)
413
+ Traceback (most recent call last):
414
+ ...
415
+ ArithmeticError: element is non-invertible
416
+ sage: (2*y+1)^(-1) # this cannot raise ValueError because...
417
+ 10*y + 5
418
+ sage: (2*y+1) * (10*y+5) # the element is in fact invertible
419
+ 1
420
+
421
+ Check that :issue:`29469` is fixed::
422
+
423
+ sage: ~S(3)
424
+ 11
425
+ """
426
+ P = self.parent()
427
+ try:
428
+ return type(self)(P, self._polynomial.inverse_mod(P.modulus()), check=False)
429
+ except ValueError as e:
430
+ if e.args[0] == "Impossible inverse modulo":
431
+ raise ZeroDivisionError(f"element {self} of quotient polynomial ring not invertible")
432
+ else:
433
+ raise NotImplementedError
434
+
435
+ def field_extension(self, names):
436
+ r"""
437
+ Given a polynomial with base ring a quotient ring, return a
438
+ 3-tuple: a number field defined by the same polynomial, a
439
+ homomorphism from its parent to the number field sending the
440
+ generators to one another, and the inverse isomorphism.
441
+
442
+ INPUT:
443
+
444
+ - ``names`` -- name of generator of output field
445
+
446
+ OUTPUT:
447
+
448
+ - field
449
+
450
+ - homomorphism from ``self`` to field
451
+
452
+ - homomorphism from field to ``self``
453
+
454
+ EXAMPLES::
455
+
456
+ sage: # needs sage.rings.number_field
457
+ sage: R.<x> = PolynomialRing(QQ)
458
+ sage: S.<alpha> = R.quotient(x^3 - 2)
459
+ sage: F.<a>, f, g = alpha.field_extension()
460
+ sage: F
461
+ Number Field in a with defining polynomial x^3 - 2
462
+ sage: a = F.gen()
463
+ sage: f(alpha)
464
+ a
465
+ sage: g(a)
466
+ alpha
467
+
468
+ Over a finite field, the corresponding field extension is not a
469
+ number field::
470
+
471
+ sage: # needs sage.rings.finite_rings sage.rings.number_field
472
+ sage: R.<x> = GF(25,'b')['x']
473
+ sage: S.<a> = R.quo(x^3 + 2*x + 1)
474
+ sage: F.<b>, g, h = a.field_extension()
475
+ sage: h(b^2 + 3)
476
+ a^2 + 3
477
+ sage: g(x^2 + 2)
478
+ b^2 + 2
479
+
480
+ We do an example involving a relative number field::
481
+
482
+ sage: # needs sage.rings.number_field
483
+ sage: R.<x> = QQ['x']
484
+ sage: K.<a> = NumberField(x^3 - 2)
485
+ sage: S.<X> = K['X']
486
+ sage: Q.<b> = S.quo(X^3 + 2*X + 1)
487
+ sage: F, g, h = b.field_extension('c')
488
+
489
+ Another more awkward example::
490
+
491
+ sage: # needs sage.rings.number_field
492
+ sage: R.<x> = QQ['x']
493
+ sage: K.<a> = NumberField(x^3 - 2)
494
+ sage: S.<X> = K['X']
495
+ sage: f = (X+a)^3 + 2*(X+a) + 1
496
+ sage: f
497
+ X^3 + 3*a*X^2 + (3*a^2 + 2)*X + 2*a + 3
498
+ sage: Q.<z> = S.quo(f)
499
+ sage: F.<w>, g, h = z.field_extension()
500
+ sage: c = g(z)
501
+ sage: f(c)
502
+ 0
503
+ sage: h(g(z))
504
+ z
505
+ sage: g(h(w))
506
+ w
507
+
508
+ AUTHORS:
509
+
510
+ - Craig Citro (2006-08-06)
511
+
512
+ - William Stein (2006-08-06)
513
+ """
514
+ #TODO: is the return order backwards from the magma convention?
515
+
516
+ ## We do another example over $\ZZ$::
517
+ ##
518
+ ## sage: R.<x> = ZZ['x']
519
+ ## sage: S.<a> = R.quo(x^3 - 2)
520
+ ## sage: F.<b>, g, h = a.field_extension()
521
+ ## sage: h(b^2 + 3)
522
+ ## a^2 + 3
523
+ ## sage: g(x^2 + 2)
524
+ ## a^2 + 2
525
+ ##
526
+ ## Note that the homomorphism is not defined on the entire
527
+ ## ''domain''. (Allowing creation of such functions may be
528
+ ## disallowed in a future version of Sage.):: <----- INDEED!
529
+ ##
530
+ ## sage: h(1/3)
531
+ ## Traceback (most recent call last):
532
+ ## ...
533
+ ## TypeError: Unable to coerce rational (=1/3) to an Integer.
534
+ ##
535
+ ## Note that the parent ring must be an integral domain::
536
+ ##
537
+ ## sage: R.<x> = GF(25,'b')['x']
538
+ ## sage: S.<a> = R.quo(x^3 - 2)
539
+ ## sage: F, g, h = a.field_extension()
540
+ ## Traceback (most recent call last):
541
+ ## ...
542
+ ## ValueError: polynomial must be irreducible
543
+
544
+ R = self.parent()
545
+ x = R.gen()
546
+
547
+ F = R.modulus().root_field(names)
548
+ alpha = F.gen()
549
+
550
+ f = R.hom([alpha], F, check=False)
551
+
552
+ from sage.rings.number_field.number_field_rel import NumberField_relative
553
+ if isinstance(F, NumberField_relative):
554
+
555
+ base_map = F.base_field().hom([R.base_ring().gen()])
556
+ g = F.Hom(R)(x, base_map)
557
+
558
+ else:
559
+ g = F.hom([x], R, check=False)
560
+
561
+ return F, f, g
562
+
563
+ def charpoly(self, var):
564
+ """
565
+ The characteristic polynomial of this element, which is by
566
+ definition the characteristic polynomial of right multiplication by
567
+ this element.
568
+
569
+ INPUT:
570
+
571
+ - ``var`` -- string; the variable name
572
+
573
+ EXAMPLES::
574
+
575
+ sage: R.<x> = PolynomialRing(QQ)
576
+ sage: S.<a> = R.quo(x^3 -389*x^2 + 2*x - 5)
577
+ sage: a.charpoly('X') # needs sage.modules
578
+ X^3 - 389*X^2 + 2*X - 5
579
+ """
580
+ return self.matrix().charpoly(var)
581
+
582
+ def fcp(self, var='x'):
583
+ """
584
+ Return the factorization of the characteristic polynomial of this
585
+ element.
586
+
587
+ EXAMPLES::
588
+
589
+ sage: R.<x> = PolynomialRing(QQ)
590
+ sage: S.<a> = R.quotient(x^3 -389*x^2 + 2*x - 5)
591
+ sage: a.fcp('x') # needs sage.modules
592
+ x^3 - 389*x^2 + 2*x - 5
593
+ sage: S(1).fcp('y') # needs sage.modules
594
+ (y - 1)^3
595
+ """
596
+ return self.charpoly(var).factor()
597
+
598
+ def lift(self):
599
+ """
600
+ Return lift of this polynomial quotient ring element to the unique
601
+ equivalent polynomial of degree less than the modulus.
602
+
603
+ EXAMPLES::
604
+
605
+ sage: R.<x> = PolynomialRing(QQ)
606
+ sage: S.<a> = R.quotient(x^3 - 2)
607
+ sage: b = a^2 - 3
608
+ sage: b
609
+ a^2 - 3
610
+ sage: b.lift()
611
+ x^2 - 3
612
+ """
613
+ return self._polynomial
614
+
615
+ def __iter__(self):
616
+ return iter(self.list())
617
+
618
+ def list(self, copy=True):
619
+ """
620
+ Return list of the elements of ``self``, of length the same as the
621
+ degree of the quotient polynomial ring.
622
+
623
+ EXAMPLES::
624
+
625
+ sage: R.<x> = PolynomialRing(QQ)
626
+ sage: S.<a> = R.quotient(x^3 + 2*x - 5)
627
+ sage: a^10
628
+ -134*a^2 - 35*a + 300
629
+ sage: (a^10).list()
630
+ [300, -35, -134]
631
+ """
632
+ v = self._polynomial.list(copy=False)
633
+ R = self.parent()
634
+ n = R.degree()
635
+ return v + [R.base_ring()(0)]*(n - len(v))
636
+
637
+ def matrix(self):
638
+ """
639
+ The matrix of right multiplication by this element on the power
640
+ basis for the quotient ring.
641
+
642
+ EXAMPLES::
643
+
644
+ sage: R.<x> = PolynomialRing(QQ)
645
+ sage: S.<a> = R.quotient(x^3 + 2*x - 5)
646
+ sage: a.matrix() # needs sage.modules
647
+ [ 0 1 0]
648
+ [ 0 0 1]
649
+ [ 5 -2 0]
650
+ """
651
+ # Multiply each power of field generator on the right by this
652
+ # element, then return the matrix whose rows are the
653
+ # coefficients of the result.
654
+ try:
655
+ return self.__matrix
656
+ except AttributeError:
657
+ R = self.parent()
658
+ v = []
659
+ x = R.gen()
660
+ a = R(1)
661
+ d = R.degree()
662
+ for _ in range(d):
663
+ v += (a*self).list()
664
+ a *= x
665
+ S = R.base_ring()
666
+ import sage.matrix.matrix_space
667
+ M = sage.matrix.matrix_space.MatrixSpace(S, d)
668
+ self.__matrix = M(v)
669
+ return self.__matrix
670
+
671
+ def minpoly(self):
672
+ """
673
+ The minimal polynomial of this element, which is by definition the
674
+ minimal polynomial of the :meth:`matrix` of this element.
675
+
676
+ ALGORITHM: Use
677
+ :meth:`~sage.rings.polynomial.polynomial_zz_pex.Polynomial_ZZ_pEX.minpoly_mod`
678
+ if possible, otherwise compute the minimal polynomial of the :meth:`matrix`.
679
+
680
+ EXAMPLES::
681
+
682
+ sage: R.<x> = PolynomialRing(QQ)
683
+ sage: S.<a> = R.quotient(x^3 + 2*x - 5)
684
+ sage: (a + 123).minpoly() # needs sage.modules
685
+ x^3 - 369*x^2 + 45389*x - 1861118
686
+ sage: (a + 123).matrix().minpoly() # needs sage.modules
687
+ x^3 - 369*x^2 + 45389*x - 1861118
688
+
689
+ One useful application of this function is to compute a minimal
690
+ polynomial of a finite-field element over an intermediate extension,
691
+ rather than the absolute minimal polynomial over the prime field::
692
+
693
+ sage: # needs sage.rings.finite_rings
694
+ sage: F2.<i> = GF((431,2), modulus=[1,0,1])
695
+ sage: F6.<u> = F2.extension(3)
696
+ sage: (u + 1).minpoly() # needs sage.modules
697
+ x^6 + 425*x^5 + 19*x^4 + 125*x^3 + 189*x^2 + 239*x + 302
698
+ sage: ext = F6.over(F2) # needs sage.modules
699
+ sage: ext(u + 1).minpoly() # indirect doctest # needs sage.modules # random
700
+ x^3 + (396*i + 428)*x^2 + (80*i + 39)*x + 9*i + 178
701
+
702
+ TESTS:
703
+
704
+ We make sure that the previous example works on random examples::
705
+
706
+ sage: # long time, needs sage.rings.finite_rings
707
+ sage: p = random_prime(50)
708
+ sage: K.<u> = GF((p, randrange(1,20)))
709
+ sage: L.<v> = K.extension(randrange(2,20))
710
+ sage: LK = L.over(K)
711
+ sage: a = L.random_element()
712
+ sage: poly = LK(a).minpoly() # indirect doctest
713
+ sage: poly(a)
714
+ 0
715
+ sage: abs_deg = a.minpoly().degree()
716
+ sage: poly.degree() == abs_deg // gcd(abs_deg, K.degree())
717
+ True
718
+ """
719
+ poly = self.lift()
720
+ try:
721
+ return poly.minpoly_mod(self.parent().modulus())
722
+ except AttributeError:
723
+ pass
724
+ return self.matrix().minpoly()
725
+
726
+ def norm(self):
727
+ """
728
+ The norm of this element, which is the determinant of the matrix of right
729
+ multiplication by this element.
730
+
731
+ EXAMPLES::
732
+
733
+ sage: R.<x> = PolynomialRing(QQ)
734
+ sage: S.<a> = R.quotient(x^3 - 389*x^2 + 2*x - 5)
735
+ sage: a.norm() # needs sage.modules
736
+ 5
737
+ """
738
+ return self.matrix().determinant()
739
+
740
+ def trace(self):
741
+ """
742
+ The trace of this element, which is the trace of the matrix of
743
+ right multiplication by this element.
744
+
745
+ EXAMPLES::
746
+
747
+ sage: R.<x> = PolynomialRing(QQ)
748
+ sage: S.<a> = R.quotient(x^3 - 389*x^2 + 2*x - 5)
749
+ sage: a.trace() # needs sage.modules
750
+ 389
751
+ """
752
+ return self.matrix().trace()
753
+
754
+ def rational_reconstruction(self, *args, **kwargs):
755
+ r"""
756
+ Compute a rational reconstruction of this polynomial quotient
757
+ ring element to its cover ring.
758
+
759
+ This method is a thin convenience wrapper around
760
+ :meth:`Polynomial.rational_reconstruction`.
761
+
762
+ EXAMPLES::
763
+
764
+ sage: # needs sage.rings.finite_rings
765
+ sage: R.<x> = GF(65537)[]
766
+ sage: m = (x^11 + 25345*x^10 + 10956*x^9 + 13873*x^8 + 23962*x^7
767
+ ....: + 17496*x^6 + 30348*x^5 + 7440*x^4 + 65438*x^3 + 7676*x^2
768
+ ....: + 54266*x + 47805)
769
+ sage: f = (20437*x^10 + 62630*x^9 + 63241*x^8 + 12820*x^7 + 42171*x^6
770
+ ....: + 63091*x^5 + 15288*x^4 + 32516*x^3 + 2181*x^2 + 45236*x + 2447)
771
+ sage: f_mod_m = R.quotient(m)(f)
772
+ sage: f_mod_m.rational_reconstruction()
773
+ (51388*x^5 + 29141*x^4 + 59341*x^3 + 7034*x^2 + 14152*x + 23746,
774
+ x^5 + 15208*x^4 + 19504*x^3 + 20457*x^2 + 11180*x + 28352)
775
+ """
776
+ m = self.parent().modulus()
777
+ R = m.parent()
778
+ f = R(self._polynomial)
779
+ return f.rational_reconstruction(m, *args, **kwargs)