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,789 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ # sage.doctest: needs sage.rings.finite_rings
3
+ r"""
4
+ Drinfeld modules over a base
5
+
6
+ This module provides the class
7
+ :class:`sage.category.drinfeld_modules.DrinfeldModules`.
8
+
9
+ AUTHORS:
10
+
11
+ - Antoine Leudière (2022-04)
12
+ - Xavier Caruso (2022-06)
13
+ """
14
+
15
+ # *****************************************************************************
16
+ # Copyright (C) 2022 Xavier Caruso <xavier.caruso@normalesup.org>
17
+ # Antoine Leudière <antoine.leudiere@inria.fr>
18
+ #
19
+ # Distributed under the terms of the GNU General Public License (GPL)
20
+ # http://www.gnu.org/licenses/
21
+ # ******************************************************************************
22
+
23
+ from sage.categories.objects import Objects
24
+ from sage.categories.category_types import Category_over_base_ring
25
+ from sage.categories.homsets import Homsets
26
+ from sage.misc.functional import log
27
+ from sage.misc.latex import latex
28
+ from sage.misc.lazy_import import lazy_import
29
+ from sage.rings.integer import Integer
30
+
31
+ lazy_import('sage.rings.polynomial.ore_polynomial_ring', 'OrePolynomialRing')
32
+ lazy_import('sage.rings.polynomial.polynomial_ring', 'PolynomialRing_generic')
33
+ lazy_import('sage.rings.ring_extension', 'RingExtension_generic')
34
+
35
+
36
+ class DrinfeldModules(Category_over_base_ring):
37
+ r"""
38
+ This class implements the category of Drinfeld
39
+ `\mathbb{F}_q[T]`-modules on a given base field.
40
+
41
+ Let `\mathbb{F}_q[T]` be a polynomial ring with coefficients in a
42
+ finite field `\mathbb{F}_q` and let `K` be a field. Fix a ring
43
+ morphism `\gamma: \mathbb{F}_q[T] \to K`; we say that `K` is an
44
+ `\mathbb{F}_q[T]`*-field*. Let `K\{\tau\}` be the ring of Ore
45
+ polynomials with coefficients in `K`, whose multiplication is given
46
+ by the rule `\tau \lambda = \lambda^q \tau` for any `\lambda \in K`.
47
+
48
+ The extension `K`/`\mathbb{F}_q[T]` (represented as an instance of
49
+ the class :class:`sage.rings.ring_extension.RingExtension`) is the
50
+ *base field* of the category; its defining morphism `\gamma` is
51
+ called the *base morphism*.
52
+
53
+ The monic polynomial that generates the kernel of `\gamma` is called
54
+ the `\mathbb{F}_q[T]`-*characteristic*, or *function-field
55
+ characteristic*, of the base field. We say that `\mathbb{F}_q[T]` is
56
+ the *function ring* of the category; `K\{\tau\}` is the *Ore
57
+ polynomial ring*. The constant coefficient of the category is the
58
+ image of `T` under the base morphism.
59
+
60
+ .. RUBRIC:: Construction
61
+
62
+ Generally, Drinfeld modules objects are created before their
63
+ category, and the category is retrieved as an attribute of the
64
+ Drinfeld module::
65
+
66
+ sage: Fq = GF(11)
67
+ sage: A.<T> = Fq[]
68
+ sage: K.<z> = Fq.extension(4)
69
+ sage: p_root = z^3 + 7*z^2 + 6*z + 10
70
+ sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
71
+ sage: C = phi.category()
72
+ sage: C
73
+ Category of Drinfeld modules over Finite Field in z of size 11^4 over its base
74
+
75
+ The output tells the user that the category is only defined by its
76
+ base.
77
+
78
+ .. RUBRIC:: Properties of the category
79
+
80
+ The base field is retrieved using the method :meth:`base`.
81
+
82
+ sage: C.base()
83
+ Finite Field in z of size 11^4 over its base
84
+
85
+ Equivalently, one can use :meth:`base_morphism` to retrieve the base
86
+ morphism::
87
+
88
+ sage: C.base_morphism()
89
+ Ring morphism:
90
+ From: Univariate Polynomial Ring in T over Finite Field of size 11
91
+ To: Finite Field in z of size 11^4 over its base
92
+ Defn: T |--> z^3 + 7*z^2 + 6*z + 10
93
+
94
+ The so-called constant coefficient --- which is the same for all
95
+ Drinfeld modules in the category --- is simply the image of `T` by
96
+ the base morphism::
97
+
98
+ sage: C.constant_coefficient()
99
+ z^3 + 7*z^2 + 6*z + 10
100
+ sage: C.base_morphism()(T) == C.constant_coefficient()
101
+ True
102
+
103
+ Similarly, the function ring-characteristic of the category is
104
+ either `0` or the unique monic polynomial in `\mathbb{F}_q[T]` that
105
+ generates the kernel of the base::
106
+
107
+ sage: C.characteristic()
108
+ T^2 + 7*T + 2
109
+ sage: C.base_morphism()(C.characteristic())
110
+ 0
111
+
112
+ The base field, base morphism, function ring and Ore polynomial ring
113
+ are the same for the category and its objects::
114
+
115
+ sage: C.base() is phi.base()
116
+ True
117
+ sage: C.base_morphism() is phi.base_morphism()
118
+ True
119
+
120
+ sage: C.function_ring()
121
+ Univariate Polynomial Ring in T over Finite Field of size 11
122
+ sage: C.function_ring() is phi.function_ring()
123
+ True
124
+
125
+ sage: C.ore_polring()
126
+ Ore Polynomial Ring in t over Finite Field in z of size 11^4 over its base twisted by Frob
127
+ sage: C.ore_polring() is phi.ore_polring()
128
+ True
129
+
130
+
131
+ .. RUBRIC:: Creating Drinfeld module objects from the category
132
+
133
+ Calling :meth:`object` with an Ore polynomial creates a Drinfeld module
134
+ object in the category whose generator is the input::
135
+
136
+ sage: psi = C.object([p_root, 1])
137
+ sage: psi
138
+ Drinfeld module defined by T |--> t + z^3 + 7*z^2 + 6*z + 10
139
+ sage: psi.category() is C
140
+ True
141
+
142
+ Of course, the constant coefficient of the input must be the same as
143
+ the category::
144
+
145
+ sage: C.object([z, 1])
146
+ Traceback (most recent call last):
147
+ ...
148
+ ValueError: constant coefficient must equal that of the category
149
+
150
+ It is also possible to create a random object in the category. The
151
+ input is the desired rank::
152
+
153
+ sage: rho = C.random_object(2)
154
+ sage: rho # random
155
+ Drinfeld module defined by T |--> (7*z^3 + 7*z^2 + 10*z + 2)*t^2 + (9*z^3 + 5*z^2 + 2*z + 7)*t + z^3 + 7*z^2 + 6*z + 10
156
+ sage: rho.rank() == 2
157
+ True
158
+ sage: rho.category() is C
159
+ True
160
+
161
+ TESTS::
162
+
163
+ sage: Fq = GF(11)
164
+ sage: A.<T> = Fq[]
165
+ sage: K.<z> = Fq.extension(4)
166
+ sage: from sage.categories.drinfeld_modules import DrinfeldModules
167
+ sage: base = Hom(A, K)(0)
168
+ sage: C = DrinfeldModules(base)
169
+ Traceback (most recent call last):
170
+ ...
171
+ TypeError: base field must be a ring extension
172
+
173
+ ::
174
+
175
+ sage: C.base().defining_morphism() == C.base_morphism()
176
+ True
177
+
178
+ ::
179
+
180
+ sage: base = Hom(A, A)(1)
181
+ sage: C = DrinfeldModules(base)
182
+ Traceback (most recent call last):
183
+ ...
184
+ TypeError: base field must be a ring extension
185
+
186
+ ::
187
+
188
+ sage: base = 'I hate Rostropovitch'
189
+ sage: C = DrinfeldModules(base) # known bug (blankline)
190
+ <BLANKLINE>
191
+ Traceback (most recent call last):
192
+ ...
193
+ TypeError: input must be a ring morphism
194
+
195
+ ::
196
+
197
+ sage: ZZT.<T> = ZZ[]
198
+ sage: base = Hom(ZZT, K)(1)
199
+ sage: C = DrinfeldModules(base) # known bug (blankline)
200
+ <BLANKLINE>
201
+ Traceback (most recent call last):
202
+ ...
203
+ TypeError: function ring base must be a finite field
204
+ """
205
+
206
+ def __init__(self, base_field, name='t'):
207
+ r"""
208
+ Initialize ``self``.
209
+
210
+ INPUT:
211
+
212
+ - ``base_field`` -- the base field, which is a ring extension
213
+ over a base
214
+
215
+ - ``name`` -- (default: ``'t'``) the name of the Ore polynomial
216
+ variable
217
+
218
+ TESTS::
219
+
220
+ sage: Fq = GF(11)
221
+ sage: A.<T> = Fq[]
222
+ sage: K.<z> = Fq.extension(4)
223
+ sage: p_root = z^3 + 7*z^2 + 6*z + 10
224
+ sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
225
+ sage: C = phi.category()
226
+ sage: ore_polring.<t> = OrePolynomialRing(phi.base(), phi.base().frobenius_endomorphism())
227
+ sage: C._ore_polring is ore_polring
228
+ True
229
+ sage: i = phi.base().coerce_map_from(K)
230
+ sage: base_morphism = Hom(A, K)(p_root)
231
+ sage: C.base() == K.over(base_morphism)
232
+ True
233
+ sage: C._base_morphism == i * base_morphism
234
+ True
235
+ sage: C._function_ring is A
236
+ True
237
+ sage: C._constant_coefficient == base_morphism(T)
238
+ True
239
+ sage: C._characteristic(C._constant_coefficient)
240
+ 0
241
+ """
242
+ # Check input is a ring extension
243
+ if not isinstance(base_field, RingExtension_generic):
244
+ raise TypeError('base field must be a ring extension')
245
+ base_morphism = base_field.defining_morphism()
246
+ self._base_morphism = base_morphism
247
+ # Check input is a field
248
+ if not base_field.is_field():
249
+ raise TypeError('input must be a field')
250
+ self._base_field = base_field
251
+ self._function_ring = base_morphism.domain()
252
+ # Check domain of base morphism is Fq[T]
253
+ function_ring = self._function_ring
254
+ if not isinstance(function_ring, PolynomialRing_generic):
255
+ raise NotImplementedError('function ring must be a polynomial '
256
+ 'ring')
257
+ function_ring_base = function_ring.base_ring()
258
+ if not function_ring_base.is_field() \
259
+ or not function_ring_base.is_finite():
260
+ raise TypeError('function ring base must be a finite field')
261
+ # Shortcuts
262
+ Fq = function_ring_base
263
+ A = function_ring
264
+ T = A.gen()
265
+ K = base_field # A ring extension
266
+ # Build K{t}
267
+ d = log(Fq.cardinality(), Fq.characteristic())
268
+ tau = K.frobenius_endomorphism(d)
269
+ self._ore_polring = OrePolynomialRing(K, tau, names=name,
270
+ polcast=False)
271
+ # Create constant coefficient
272
+ self._constant_coefficient = base_morphism(T)
273
+ # Create characteristic
274
+ self._characteristic = None
275
+ if K.is_finite():
276
+ self._characteristic = A(K.over(Fq)(base_morphism(T)).minpoly())
277
+ else:
278
+ try:
279
+ if base_morphism.is_injective():
280
+ self._characteristic = Integer(0)
281
+ except NotImplementedError:
282
+ pass
283
+ # Create base over constants field
284
+ i = A.coerce_map_from(Fq)
285
+ Fq_to_K = self._base_morphism * i
286
+ self._base_over_constants_field = base_field.over(Fq_to_K)
287
+ super().__init__(base=base_field)
288
+
289
+ def _latex_(self):
290
+ r"""
291
+ Return a latex representation of the category.
292
+
293
+ OUTPUT: string
294
+
295
+ EXAMPLES::
296
+
297
+ sage: Fq = GF(11)
298
+ sage: A.<T> = Fq[]
299
+ sage: K.<z> = Fq.extension(4)
300
+ sage: p_root = z^3 + 7*z^2 + 6*z + 10
301
+ sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
302
+ sage: C = phi.category()
303
+ sage: latex(C)
304
+ \text{Category{ }of{ }Drinfeld{ }modules{ }over{ }\Bold{F}_{11^{4}}
305
+ """
306
+ return f'\\text{{Category{{ }}of{{ }}Drinfeld{{ }}modules{{ }}' \
307
+ f'over{{ }}{latex(self._base_field)}'
308
+
309
+ def _repr_(self):
310
+ r"""
311
+ Return a string representation of the category.
312
+
313
+ OUTPUT: string
314
+
315
+ EXAMPLES::
316
+
317
+ sage: Fq = GF(11)
318
+ sage: A.<T> = Fq[]
319
+ sage: K.<z> = Fq.extension(4)
320
+ sage: p_root = z^3 + 7*z^2 + 6*z + 10
321
+ sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
322
+ sage: C = phi.category()
323
+ sage: C
324
+ Category of Drinfeld modules over Finite Field in z of size 11^4 over its base
325
+ """
326
+ return f'Category of Drinfeld modules over {self._base_field}'
327
+
328
+ def Homsets(self):
329
+ r"""
330
+ Return the category of homsets.
331
+
332
+ EXAMPLES::
333
+
334
+ sage: Fq = GF(11)
335
+ sage: A.<T> = Fq[]
336
+ sage: K.<z> = Fq.extension(4)
337
+ sage: p_root = z^3 + 7*z^2 + 6*z + 10
338
+ sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
339
+ sage: C = phi.category()
340
+
341
+ sage: from sage.categories.homsets import Homsets
342
+ sage: C.Homsets() is Homsets()
343
+ True
344
+ """
345
+ return Homsets()
346
+
347
+ def Endsets(self):
348
+ r"""
349
+ Return the category of endsets.
350
+
351
+ EXAMPLES::
352
+
353
+ sage: Fq = GF(11)
354
+ sage: A.<T> = Fq[]
355
+ sage: K.<z> = Fq.extension(4)
356
+ sage: p_root = z^3 + 7*z^2 + 6*z + 10
357
+ sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
358
+ sage: C = phi.category()
359
+
360
+ sage: from sage.categories.homsets import Homsets
361
+ sage: C.Endsets() is Homsets().Endsets()
362
+ True
363
+ """
364
+ return Homsets().Endsets()
365
+
366
+ def base_morphism(self):
367
+ r"""
368
+ Return the base morphism of the category.
369
+
370
+ EXAMPLES::
371
+
372
+ sage: Fq = GF(11)
373
+ sage: A.<T> = Fq[]
374
+ sage: K.<z> = Fq.extension(4)
375
+ sage: p_root = z^3 + 7*z^2 + 6*z + 10
376
+ sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
377
+ sage: C = phi.category()
378
+ sage: C.base_morphism()
379
+ Ring morphism:
380
+ From: Univariate Polynomial Ring in T over Finite Field of size 11
381
+ To: Finite Field in z of size 11^4 over its base
382
+ Defn: T |--> z^3 + 7*z^2 + 6*z + 10
383
+
384
+ sage: C.constant_coefficient() == C.base_morphism()(T)
385
+ True
386
+ """
387
+ return self._base_morphism
388
+
389
+ def base_over_constants_field(self):
390
+ r"""
391
+ Return the base field, seen as an extension over the constants
392
+ field `\mathbb{F}_q`.
393
+
394
+ EXAMPLES::
395
+
396
+ sage: Fq = GF(11)
397
+ sage: A.<T> = Fq[]
398
+ sage: K.<z> = Fq.extension(4)
399
+ sage: p_root = z^3 + 7*z^2 + 6*z + 10
400
+ sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
401
+ sage: C = phi.category()
402
+ sage: C.base_over_constants_field()
403
+ Field in z with defining polynomial x^4 + 8*x^2 + 10*x + 2 over its base
404
+ """
405
+ return self._base_over_constants_field
406
+
407
+ def characteristic(self):
408
+ r"""
409
+ Return the function ring-characteristic.
410
+
411
+ EXAMPLES::
412
+
413
+ sage: Fq = GF(11)
414
+ sage: A.<T> = Fq[]
415
+ sage: K.<z> = Fq.extension(4)
416
+ sage: p_root = z^3 + 7*z^2 + 6*z + 10
417
+ sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
418
+ sage: C = phi.category()
419
+ sage: C.characteristic()
420
+ T^2 + 7*T + 2
421
+
422
+ ::
423
+
424
+ sage: psi = DrinfeldModule(A, [Frac(A).gen(), 1])
425
+ sage: C = psi.category()
426
+ sage: C.characteristic()
427
+ 0
428
+ """
429
+ if self._characteristic is None:
430
+ raise NotImplementedError('function ring characteristic not '
431
+ 'implemented in this case')
432
+ return self._characteristic
433
+
434
+ def constant_coefficient(self):
435
+ r"""
436
+ Return the constant coefficient of the category.
437
+
438
+ EXAMPLES::
439
+
440
+ sage: Fq = GF(11)
441
+ sage: A.<T> = Fq[]
442
+ sage: K.<z> = Fq.extension(4)
443
+ sage: p_root = z^3 + 7*z^2 + 6*z + 10
444
+ sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
445
+ sage: C = phi.category()
446
+ sage: C.constant_coefficient()
447
+ z^3 + 7*z^2 + 6*z + 10
448
+ sage: C.constant_coefficient() == C.base()(T)
449
+ True
450
+ """
451
+ return self._constant_coefficient
452
+
453
+ def function_ring(self):
454
+ r"""
455
+ Return the function ring of the category.
456
+
457
+ EXAMPLES::
458
+
459
+ sage: Fq = GF(11)
460
+ sage: A.<T> = Fq[]
461
+ sage: K.<z> = Fq.extension(4)
462
+ sage: p_root = z^3 + 7*z^2 + 6*z + 10
463
+ sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
464
+ sage: C = phi.category()
465
+ sage: C.function_ring()
466
+ Univariate Polynomial Ring in T over Finite Field of size 11
467
+ sage: C.function_ring() is A
468
+ True
469
+ """
470
+ return self._function_ring
471
+
472
+ def object(self, gen):
473
+ r"""
474
+ Return a Drinfeld module object in the category whose generator
475
+ is the input.
476
+
477
+ INPUT:
478
+
479
+ - ``gen`` -- the generator of the Drinfeld module, given as an Ore
480
+ polynomial or a list of coefficients
481
+
482
+ EXAMPLES::
483
+
484
+ sage: Fq = GF(11)
485
+ sage: A.<T> = Fq[]
486
+ sage: K.<z> = Fq.extension(4)
487
+ sage: p_root = z^3 + 7*z^2 + 6*z + 10
488
+ sage: psi = DrinfeldModule(A, [p_root, 1])
489
+ sage: C = psi.category()
490
+
491
+ sage: phi = C.object([p_root, 0, 1])
492
+ sage: phi
493
+ Drinfeld module defined by T |--> t^2 + z^3 + 7*z^2 + 6*z + 10
494
+ sage: t = phi.ore_polring().gen()
495
+ sage: C.object(t^2 + z^3 + 7*z^2 + 6*z + 10) is phi
496
+ True
497
+ """
498
+ from sage.rings.function_field.drinfeld_modules.drinfeld_module import DrinfeldModule
499
+ # If gen is not in the Ore polring, an exception is raised
500
+ gen = self._ore_polring(gen)
501
+ T = self._function_ring.gen()
502
+ if gen[0] != self._base_morphism(T):
503
+ raise ValueError('constant coefficient must equal that of the '
504
+ 'category')
505
+ return DrinfeldModule(self._function_ring, gen)
506
+
507
+ def ore_polring(self):
508
+ r"""
509
+ Return the Ore polynomial ring of the category.
510
+
511
+ EXAMPLES::
512
+
513
+ sage: Fq = GF(11)
514
+ sage: A.<T> = Fq[]
515
+ sage: K.<z> = Fq.extension(4)
516
+ sage: p_root = z^3 + 7*z^2 + 6*z + 10
517
+ sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
518
+ sage: C = phi.category()
519
+ sage: C.ore_polring()
520
+ Ore Polynomial Ring in t over Finite Field in z of size 11^4 over its base twisted by Frob
521
+ """
522
+ return self._ore_polring
523
+
524
+ def random_object(self, rank):
525
+ r"""
526
+ Return a random Drinfeld module in the category with given rank.
527
+
528
+ INPUT:
529
+
530
+ - ``rank`` -- integer; the rank of the Drinfeld module
531
+
532
+ EXAMPLES::
533
+
534
+ sage: Fq = GF(11)
535
+ sage: A.<T> = Fq[]
536
+ sage: K.<z> = Fq.extension(4)
537
+ sage: p_root = z^3 + 7*z^2 + 6*z + 10
538
+ sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
539
+ sage: C = phi.category()
540
+
541
+ sage: psi = C.random_object(3) # random
542
+ Drinfeld module defined by T |--> (6*z^3 + 4*z^2 + 10*z + 9)*t^3 + (4*z^3 + 8*z^2 + 8*z)*t^2 + (10*z^3 + 3*z^2 + 6*z)*t + z^3 + 7*z^2 + 6*z + 10
543
+ sage: psi.rank() == 3
544
+ True
545
+ """
546
+ if not isinstance(rank, Integer):
547
+ raise TypeError('rank must be a positive integer')
548
+ if rank <= 0:
549
+ raise ValueError('rank must be a positive integer')
550
+
551
+ K = self._base_field
552
+ coeffs = [self._constant_coefficient]
553
+ coeffs.extend(K.random_element() for _ in range(rank - 1))
554
+ dom_coeff = 0
555
+ while dom_coeff == 0:
556
+ dom_coeff = K.random_element()
557
+ coeffs.append(dom_coeff)
558
+
559
+ return self.object(coeffs)
560
+
561
+ def super_categories(self):
562
+ """
563
+ EXAMPLES::
564
+
565
+ sage: Fq = GF(11)
566
+ sage: A.<T> = Fq[]
567
+ sage: K.<z> = Fq.extension(4)
568
+ sage: p_root = z^3 + 7*z^2 + 6*z + 10
569
+ sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
570
+ sage: C = phi.category()
571
+ sage: C.super_categories()
572
+ [Category of objects]
573
+ """
574
+ return [Objects()]
575
+
576
+ class ParentMethods:
577
+
578
+ def base(self):
579
+ r"""
580
+ Return the base field of this Drinfeld module, viewed as
581
+ an algebra over the function ring.
582
+
583
+ This is an instance of the class
584
+ :class:`sage.rings.ring_extension.RingExtension`.
585
+
586
+ EXAMPLES::
587
+
588
+ sage: Fq = GF(25)
589
+ sage: A.<T> = Fq[]
590
+ sage: K.<z12> = Fq.extension(6)
591
+ sage: p_root = 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
592
+ sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
593
+ sage: phi.base()
594
+ Finite Field in z12 of size 5^12 over its base
595
+
596
+ The base can be infinite::
597
+
598
+ sage: sigma = DrinfeldModule(A, [Frac(A).gen(), 1])
599
+ sage: sigma.base()
600
+ Fraction Field of Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2 over its base
601
+ """
602
+ return self.category().base()
603
+
604
+ def base_morphism(self):
605
+ r"""
606
+ Return the base morphism of this Drinfeld module.
607
+
608
+ EXAMPLES::
609
+
610
+ sage: Fq = GF(25)
611
+ sage: A.<T> = Fq[]
612
+ sage: K.<z12> = Fq.extension(6)
613
+ sage: p_root = 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
614
+ sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
615
+ sage: phi.base_morphism()
616
+ Ring morphism:
617
+ From: Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2
618
+ To: Finite Field in z12 of size 5^12 over its base
619
+ Defn: T |--> 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
620
+
621
+ The base field can be infinite::
622
+
623
+ sage: sigma = DrinfeldModule(A, [Frac(A).gen(), 1])
624
+ sage: sigma.base_morphism()
625
+ Ring morphism:
626
+ From: Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2
627
+ To: Fraction Field of Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2 over its base
628
+ Defn: T |--> T
629
+ """
630
+ return self.category().base_morphism()
631
+
632
+ def base_over_constants_field(self):
633
+ r"""
634
+ Return the base field, seen as an extension over the constants
635
+ field `\mathbb{F}_q`.
636
+
637
+ This is an instance of the class
638
+ :class:`sage.rings.ring_extension.RingExtension`.
639
+
640
+ EXAMPLES::
641
+
642
+ sage: Fq = GF(25)
643
+ sage: A.<T> = Fq[]
644
+ sage: K.<z12> = Fq.extension(6)
645
+ sage: p_root = 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
646
+ sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
647
+ sage: phi.base_over_constants_field()
648
+ Field in z12 with defining polynomial x^6 + (4*z2 + 3)*x^5 + x^4 + (3*z2 + 1)*x^3 + x^2 + (4*z2 + 1)*x + z2 over its base
649
+ """
650
+ return self.category().base_over_constants_field()
651
+
652
+ def characteristic(self):
653
+ r"""
654
+ Return the function ring-characteristic.
655
+
656
+ EXAMPLES::
657
+
658
+ sage: Fq = GF(25)
659
+ sage: A.<T> = Fq[]
660
+ sage: K.<z12> = Fq.extension(6)
661
+ sage: p_root = 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
662
+ sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
663
+ sage: phi.characteristic()
664
+ T^2 + (4*z2 + 2)*T + 2
665
+ sage: phi.base_morphism()(phi.characteristic())
666
+ 0
667
+
668
+ ::
669
+
670
+ sage: B.<Y> = Fq[]
671
+ sage: L = Frac(B)
672
+ sage: psi = DrinfeldModule(A, [L(1), 0, 0, L(1)])
673
+ sage: psi.characteristic()
674
+ Traceback (most recent call last):
675
+ ...
676
+ NotImplementedError: function ring characteristic not implemented in this case
677
+ """
678
+ return self.category().characteristic()
679
+
680
+ def function_ring(self):
681
+ r"""
682
+ Return the function ring of this Drinfeld module.
683
+
684
+ EXAMPLES::
685
+
686
+ sage: Fq = GF(25)
687
+ sage: A.<T> = Fq[]
688
+ sage: K.<z12> = Fq.extension(6)
689
+ sage: p_root = 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
690
+ sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
691
+ sage: phi.function_ring()
692
+ Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2
693
+ sage: phi.function_ring() is A
694
+ True
695
+ """
696
+ return self.category().function_ring()
697
+
698
+ def constant_coefficient(self):
699
+ r"""
700
+ Return the constant coefficient of the generator
701
+ of this Drinfeld module.
702
+
703
+ OUTPUT: an element in the base field
704
+
705
+ EXAMPLES::
706
+
707
+ sage: Fq = GF(25)
708
+ sage: A.<T> = Fq[]
709
+ sage: K.<z12> = Fq.extension(6)
710
+ sage: p_root = 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
711
+ sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
712
+ sage: phi.constant_coefficient() == p_root
713
+ True
714
+
715
+ Let `\mathbb{F}_q[T]` be the function ring, and let `\gamma` be
716
+ the base of the Drinfeld module. The constant coefficient is
717
+ `\gamma(T)`::
718
+
719
+ sage: C = phi.category()
720
+ sage: base = C.base()
721
+ sage: base(T) == phi.constant_coefficient()
722
+ True
723
+
724
+ Naturally, two Drinfeld modules in the same category have the
725
+ same constant coefficient::
726
+
727
+ sage: t = phi.ore_polring().gen()
728
+ sage: psi = C.object(phi.constant_coefficient() + t^3)
729
+ sage: psi
730
+ Drinfeld module defined by T |--> t^3 + 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
731
+
732
+ Reciprocally, it is impossible to create two Drinfeld modules in
733
+ this category if they do not share the same constant
734
+ coefficient::
735
+
736
+ sage: rho = C.object(phi.constant_coefficient() + 1 + t^3)
737
+ Traceback (most recent call last):
738
+ ...
739
+ ValueError: constant coefficient must equal that of the category
740
+ """
741
+ return self.category().constant_coefficient()
742
+
743
+ def ore_polring(self):
744
+ r"""
745
+ Return the Ore polynomial ring of this Drinfeld module.
746
+
747
+ EXAMPLES::
748
+
749
+ sage: Fq = GF(25)
750
+ sage: A.<T> = Fq[]
751
+ sage: K.<z12> = Fq.extension(6)
752
+ sage: p_root = 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
753
+ sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
754
+ sage: S = phi.ore_polring()
755
+ sage: S
756
+ Ore Polynomial Ring in t over Finite Field in z12 of size 5^12 over its base twisted by Frob^2
757
+
758
+ The Ore polynomial ring can also be retrieved from the category
759
+ of the Drinfeld module::
760
+
761
+ sage: S is phi.category().ore_polring()
762
+ True
763
+
764
+ The generator of the Drinfeld module is in the Ore polynomial
765
+ ring::
766
+
767
+ sage: phi(T) in S
768
+ True
769
+ """
770
+ return self.category().ore_polring()
771
+
772
+ def ore_variable(self):
773
+ r"""
774
+ Return the variable of the Ore polynomial ring of this Drinfeld module.
775
+
776
+ EXAMPLES::
777
+
778
+ sage: Fq = GF(25)
779
+ sage: A.<T> = Fq[]
780
+ sage: K.<z12> = Fq.extension(6)
781
+ sage: p_root = 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
782
+ sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
783
+
784
+ sage: phi.ore_polring()
785
+ Ore Polynomial Ring in t over Finite Field in z12 of size 5^12 over its base twisted by Frob^2
786
+ sage: phi.ore_variable()
787
+ t
788
+ """
789
+ return self.category().ore_polring().gen()