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,1155 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Ideals of function fields
4
+
5
+ Ideals of an order of a function field include all fractional ideals of the order.
6
+ Sage provides basic arithmetic with fractional ideals.
7
+
8
+ The fractional ideals of the maximal order of a global function field forms a multiplicative
9
+ monoid. Sage allows advanced arithmetic with the fractional ideals. For example, an ideal
10
+ of the maximal order can be factored into a product of prime ideals.
11
+
12
+ EXAMPLES:
13
+
14
+ Ideals in the maximal order of a rational function field::
15
+
16
+ sage: K.<x> = FunctionField(QQ)
17
+ sage: O = K.maximal_order()
18
+ sage: I = O.ideal(x^3 + 1); I
19
+ Ideal (x^3 + 1) of Maximal order of Rational function field in x over Rational Field
20
+ sage: I^2
21
+ Ideal (x^6 + 2*x^3 + 1) of Maximal order of Rational function field in x over Rational Field
22
+ sage: ~I
23
+ Ideal (1/(x^3 + 1)) of Maximal order of Rational function field in x over Rational Field
24
+ sage: ~I * I
25
+ Ideal (1) of Maximal order of Rational function field in x over Rational Field
26
+
27
+ Ideals in the equation order of an extension of a rational function field::
28
+
29
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
30
+ sage: L.<y> = K.extension(y^2 - x^3 - 1) # needs sage.rings.function_field
31
+ sage: O = L.equation_order() # needs sage.rings.function_field
32
+ sage: I = O.ideal(y); I # needs sage.rings.function_field
33
+ Ideal (x^3 + 1, -y) of Order in Function field in y defined by y^2 - x^3 - 1
34
+ sage: I^2 # needs sage.rings.function_field
35
+ Ideal (x^3 + 1, (-x^3 - 1)*y) of Order in Function field in y defined by y^2 - x^3 - 1
36
+
37
+ Ideals in the maximal order of a global function field::
38
+
39
+ sage: # needs sage.rings.finite_rings
40
+ sage: K.<x> = FunctionField(GF(2)); R.<y> = K[]
41
+ sage: L.<y> = K.extension(y^2 - x^3*y - x) # needs sage.rings.function_field
42
+ sage: O = L.maximal_order() # needs sage.rings.function_field
43
+ sage: I = O.ideal(y) # needs sage.rings.function_field
44
+ sage: I^2 # needs sage.rings.function_field
45
+ Ideal (x) of Maximal order of Function field in y defined by y^2 + x^3*y + x
46
+ sage: ~I # needs sage.rings.function_field
47
+ Ideal (1/x*y) of Maximal order of Function field in y defined by y^2 + x^3*y + x
48
+ sage: ~I * I # needs sage.rings.function_field
49
+ Ideal (1) of Maximal order of Function field in y defined by y^2 + x^3*y + x
50
+
51
+ sage: J = O.ideal(x + y) * I # needs sage.rings.finite_rings sage.rings.function_field
52
+ sage: J.factor() # needs sage.rings.finite_rings sage.rings.function_field
53
+ (Ideal (y) of Maximal order of Function field in y defined by y^2 + x^3*y + x)^2 *
54
+ (Ideal (x^3 + x + 1, y + x) of Maximal order of Function field in y defined by y^2 + x^3*y + x)
55
+
56
+ Ideals in the maximal infinite order of a global function field::
57
+
58
+ sage: # needs sage.rings.finite_rings
59
+ sage: K.<x> = FunctionField(GF(3^2)); R.<t> = K[]
60
+ sage: F.<y> = K.extension(t^3 + t^2 - x^4) # needs sage.rings.function_field
61
+ sage: Oinf = F.maximal_order_infinite() # needs sage.rings.function_field
62
+ sage: I = Oinf.ideal(1/y) # needs sage.rings.function_field
63
+ sage: I + I == I
64
+ True
65
+ sage: I^2 # needs sage.rings.function_field
66
+ Ideal (1/x^4*y) of Maximal infinite order of Function field in y defined by y^3 + y^2 + 2*x^4
67
+ sage: ~I # needs sage.rings.function_field
68
+ Ideal (y) of Maximal infinite order of Function field in y defined by y^3 + y^2 + 2*x^4
69
+ sage: ~I * I # needs sage.rings.function_field
70
+ Ideal (1) of Maximal infinite order of Function field in y defined by y^3 + y^2 + 2*x^4
71
+ sage: I.factor() # needs sage.rings.function_field
72
+ (Ideal (1/x^3*y^2) of Maximal infinite order of Function field in y defined by y^3 + y^2 + 2*x^4)^4
73
+
74
+ AUTHORS:
75
+
76
+ - William Stein (2010): initial version
77
+
78
+ - Maarten Derickx (2011-09-14): fixed ideal_with_gens_over_base()
79
+
80
+ - Kwankyu Lee (2017-04-30): added ideals for global function fields
81
+ """
82
+
83
+ # ****************************************************************************
84
+ # Copyright (C) 2010 William Stein <wstein@gmail.com>
85
+ # 2011 Maarten Derickx <m.derickx.student@gmail.com>
86
+ # 2017-2021 Kwankyu Lee
87
+ # 2018 Frédéric Chapoton
88
+ # 2019 Brent Baccala
89
+ # 2021 Jonathan Kliem
90
+ #
91
+ # Distributed under the terms of the GNU General Public License (GPL)
92
+ # as published by the Free Software Foundation; either version 2 of
93
+ # the License, or (at your option) any later version.
94
+ # https://www.gnu.org/licenses/
95
+ # ****************************************************************************
96
+
97
+ from sage.misc.latex import latex
98
+ from sage.combinat.subset import powerset
99
+ from sage.structure.parent import Parent
100
+ from sage.structure.element import Element
101
+ from sage.structure.richcmp import richcmp
102
+ from sage.structure.factorization import Factorization
103
+ from sage.structure.unique_representation import UniqueRepresentation
104
+ from sage.categories.monoids import Monoids
105
+ from sage.rings.ideal import Ideal_generic
106
+
107
+
108
+ class FunctionFieldIdeal(Element):
109
+ """
110
+ Base class of fractional ideals of function fields.
111
+
112
+ INPUT:
113
+
114
+ - ``ring`` -- ring of the ideal
115
+
116
+ EXAMPLES::
117
+
118
+ sage: K.<x> = FunctionField(GF(7))
119
+ sage: O = K.equation_order()
120
+ sage: O.ideal(x^3 + 1)
121
+ Ideal (x^3 + 1) of Maximal order of Rational function field in x over Finite Field of size 7
122
+ """
123
+ def __init__(self, ring):
124
+ """
125
+ Initialize.
126
+
127
+ TESTS::
128
+
129
+ sage: # needs sage.rings.finite_rings
130
+ sage: K.<x> = FunctionField(GF(7))
131
+ sage: O = K.equation_order()
132
+ sage: I = O.ideal(x^3 + 1)
133
+ sage: TestSuite(I).run()
134
+ """
135
+ Element.__init__(self, ring.ideal_monoid())
136
+ self._ring = ring
137
+
138
+ def _repr_short(self):
139
+ """
140
+ Return a string representation of this ideal that doesn't
141
+ include the name of the ambient ring.
142
+
143
+ EXAMPLES::
144
+
145
+ sage: # needs sage.rings.finite_rings
146
+ sage: K.<x> = FunctionField(GF(3^2)); R.<t> = K[]
147
+ sage: F.<y> = K.extension(t^3 + t^2 - x^4) # needs sage.rings.function_field
148
+ sage: Oinf = F.maximal_order_infinite() # needs sage.rings.function_field
149
+ sage: I = Oinf.ideal(1/y) # needs sage.rings.function_field
150
+ sage: I._repr_short() # needs sage.rings.function_field
151
+ '(1/x^4*y^2)'
152
+ """
153
+ if self.is_zero():
154
+ return "(0)"
155
+
156
+ return "(%s)" % (', '.join([repr(g) for g in self.gens_reduced()]), )
157
+
158
+ def _repr_(self):
159
+ """
160
+ Return a string representation of this ideal.
161
+
162
+ EXAMPLES::
163
+
164
+ sage: K.<x> = FunctionField(QQ)
165
+ sage: O = K.maximal_order()
166
+ sage: I = O.ideal(x, 1/(x+1)); I
167
+ Ideal (1/(x + 1)) of Maximal order of Rational function field in x over Rational Field
168
+
169
+ sage: # needs sage.rings.function_field
170
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
171
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
172
+ sage: O = L.equation_order()
173
+ sage: O.ideal(x^2 + 1)
174
+ Ideal (x^2 + 1) of Order in Function field in y defined by y^2 - x^3 - 1
175
+
176
+ sage: # needs sage.rings.function_field
177
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
178
+ sage: L.<y> = K.extension(Y^2 - x^3*Y - x)
179
+ sage: O = L.maximal_order()
180
+ sage: I = O.ideal(y); I
181
+ Ideal (y) of Maximal order of Function field in y defined by y^2 + x^3*y + x
182
+
183
+ sage: # needs sage.rings.function_field
184
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
185
+ sage: O = L.maximal_order()
186
+ sage: I = O.ideal(y); I
187
+ Ideal (y) of Maximal order of Function field in y
188
+ defined by y^2 + y + (x^2 + 1)/x
189
+
190
+ sage: K.<x> = FunctionField(GF(2))
191
+ sage: Oinf = K.maximal_order_infinite()
192
+ sage: I = Oinf.ideal(x/(x^2+1))
193
+ sage: I
194
+ Ideal (1/x) of Maximal infinite order of Rational function field
195
+ in x over Finite Field of size 2
196
+
197
+ sage: # needs sage.rings.finite_rings sage.rings.function_field
198
+ sage: K.<x> = FunctionField(GF(3^2)); _.<t> = PolynomialRing(K)
199
+ sage: F.<y> = K.extension(t^3 + t^2 - x^4)
200
+ sage: Oinf = F.maximal_order_infinite()
201
+ sage: Oinf.ideal(1/y)
202
+ Ideal (1/x^4*y^2) of Maximal infinite order of Function field
203
+ in y defined by y^3 + y^2 + 2*x^4
204
+
205
+ sage: # needs sage.rings.function_field
206
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
207
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
208
+ sage: Oinf = L.maximal_order_infinite()
209
+ sage: Oinf.ideal(1/y)
210
+ Ideal (1/x*y) of Maximal infinite order of Function field in y
211
+ defined by y^2 + y + (x^2 + 1)/x
212
+ """
213
+ if self.is_zero():
214
+ return "Zero ideal of %s" % (self._ring,)
215
+
216
+ return "Ideal %s of %s" % (self._repr_short(), self.ring())
217
+
218
+ def _latex_(self):
219
+ r"""
220
+ Return the LaTeX representation of the ideal.
221
+
222
+ EXAMPLES::
223
+
224
+ sage: # needs sage.rings.function_field
225
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
226
+ sage: L.<y> = K.extension(Y^2 - x^3*Y - x)
227
+ sage: O = L.maximal_order()
228
+ sage: I = O.ideal(y)
229
+ sage: latex(I)
230
+ \left(y\right)
231
+ """
232
+ return '\\left(' + ', '.join(latex(g) for g in self.gens_reduced()) + '\\right)'
233
+
234
+ def _div_(self, other):
235
+ """
236
+ Return the ideal divided by the ``other`` ideal.
237
+
238
+ INPUT:
239
+
240
+ - ``other`` -- ideal
241
+
242
+ EXAMPLES::
243
+
244
+ sage: K.<x> = FunctionField(GF(7))
245
+ sage: O = K.equation_order()
246
+ sage: I = O.ideal(x^3 + 1)
247
+ sage: I / I
248
+ Ideal (1) of Maximal order of Rational function field in x
249
+ over Finite Field of size 7
250
+ """
251
+ return self * ~other
252
+
253
+ def gens_reduced(self):
254
+ r"""
255
+ Return reduced generators.
256
+
257
+ For now, this method just looks at the generators and sees if any
258
+ can be removed without changing the ideal. It prefers principal
259
+ representations (a single generator) over all others, and otherwise
260
+ picks the generator set with the shortest print representation.
261
+
262
+ This method is provided so that ideals in function fields have
263
+ the method :meth:`gens_reduced()`, just like ideals of number
264
+ fields. Sage linear algebra machinery sometimes requires this.
265
+
266
+ EXAMPLES::
267
+
268
+ sage: K.<x> = FunctionField(GF(7))
269
+ sage: O = K.equation_order()
270
+ sage: I = O.ideal(x, x^2, x^2 + x)
271
+ sage: I.gens_reduced()
272
+ (x,)
273
+ """
274
+ gens = self.gens()
275
+ if len(gens) == 1:
276
+ return gens
277
+ candidate_gensets = []
278
+ for genset in powerset(gens):
279
+ if self.parent()(genset) == self:
280
+ candidate_gensets.append(genset)
281
+ candidate_gensets.sort(key=lambda item: (len(item), len(repr(item)), item))
282
+ return candidate_gensets[0]
283
+
284
+ def ring(self):
285
+ """
286
+ Return the ring to which this ideal belongs.
287
+
288
+ EXAMPLES::
289
+
290
+ sage: K.<x> = FunctionField(GF(7))
291
+ sage: O = K.equation_order()
292
+ sage: I = O.ideal(x, x^2, x^2 + x)
293
+ sage: I.ring()
294
+ Maximal order of Rational function field in x over Finite Field of size 7
295
+ """
296
+ return self._ring
297
+
298
+ def base_ring(self):
299
+ r"""
300
+ Return the base ring of this ideal.
301
+
302
+ EXAMPLES::
303
+
304
+ sage: # needs sage.rings.function_field
305
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
306
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
307
+ sage: O = L.equation_order()
308
+ sage: I = O.ideal(x^2 + 1)
309
+ sage: I.base_ring()
310
+ Order in Function field in y defined by y^2 - x^3 - 1
311
+ """
312
+ return self.ring()
313
+
314
+ def place(self):
315
+ """
316
+ Return the place associated with this prime ideal.
317
+
318
+ EXAMPLES::
319
+
320
+ sage: # needs sage.rings.finite_rings
321
+ sage: K.<x> = FunctionField(GF(4))
322
+ sage: O = K.maximal_order()
323
+ sage: I = O.ideal(x^2 + x + 1)
324
+ sage: I.place()
325
+ Traceback (most recent call last):
326
+ ...
327
+ TypeError: not a prime ideal
328
+ sage: I = O.ideal(x^3 + x + 1)
329
+ sage: I.place()
330
+ Place (x^3 + x + 1)
331
+
332
+ sage: K.<x> = FunctionField(GF(2))
333
+ sage: Oinf = K.maximal_order_infinite()
334
+ sage: I = Oinf.ideal((x + 1)/(x^3 + 1))
335
+ sage: p = I.factor()[0][0]
336
+ sage: p.place()
337
+ Place (1/x)
338
+
339
+ sage: # needs sage.rings.function_field
340
+ sage: K.<x> = FunctionField(GF(2)); _.<t> = PolynomialRing(K)
341
+ sage: F.<y> = K.extension(t^3 - x^2*(x^2+x+1)^2)
342
+ sage: O = F.maximal_order()
343
+ sage: I = O.ideal(y)
344
+ sage: [f.place() for f,_ in I.factor()]
345
+ [Place (x, (1/(x^3 + x^2 + x))*y^2),
346
+ Place (x^2 + x + 1, (1/(x^3 + x^2 + x))*y^2)]
347
+
348
+ sage: # needs sage.rings.function_field
349
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
350
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
351
+ sage: O = L.maximal_order()
352
+ sage: I = O.ideal(y)
353
+ sage: [f.place() for f,_ in I.factor()]
354
+ [Place (x, x*y), Place (x + 1, x*y)]
355
+
356
+ sage: # needs sage.rings.finite_rings sage.rings.function_field
357
+ sage: K.<x> = FunctionField(GF(3^2)); R.<t> = PolynomialRing(K)
358
+ sage: F.<y> = K.extension(t^3 + t^2 - x^4)
359
+ sage: Oinf = F.maximal_order_infinite()
360
+ sage: I = Oinf.ideal(1/x)
361
+ sage: I.factor()
362
+ (Ideal (1/x^3*y^2) of Maximal infinite order of Function field
363
+ in y defined by y^3 + y^2 + 2*x^4)^3
364
+ sage: J = I.factor()[0][0]
365
+ sage: J.is_prime()
366
+ True
367
+ sage: J.place()
368
+ Place (1/x, 1/x^3*y^2)
369
+
370
+ sage: # needs sage.rings.function_field
371
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
372
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
373
+ sage: Oinf = L.maximal_order_infinite()
374
+ sage: I = Oinf.ideal(1/x)
375
+ sage: I.factor()
376
+ (Ideal (1/x*y) of Maximal infinite order of Function field in y
377
+ defined by y^2 + y + (x^2 + 1)/x)^2
378
+ sage: J = I.factor()[0][0]
379
+ sage: J.is_prime()
380
+ True
381
+ sage: J.place()
382
+ Place (1/x, 1/x*y)
383
+ """
384
+ if not self.is_prime():
385
+ raise TypeError("not a prime ideal")
386
+
387
+ place_set = self.ring().fraction_field().place_set()
388
+ return place_set.element_class(place_set, self)
389
+
390
+ def factor(self):
391
+ """
392
+ Return the factorization of this ideal.
393
+
394
+ Subclass of this class should define :meth:`_factor` method that
395
+ returns a list of prime ideal and multiplicity pairs.
396
+
397
+ EXAMPLES::
398
+
399
+ sage: # needs sage.rings.finite_rings
400
+ sage: K.<x> = FunctionField(GF(4))
401
+ sage: O = K.maximal_order()
402
+ sage: I = O.ideal(x^3*(x + 1)^2)
403
+ sage: I.factor()
404
+ (Ideal (x) of Maximal order of Rational function field in x
405
+ over Finite Field in z2 of size 2^2)^3 *
406
+ (Ideal (x + 1) of Maximal order of Rational function field in x
407
+ over Finite Field in z2 of size 2^2)^2
408
+
409
+ sage: # needs sage.rings.finite_rings
410
+ sage: Oinf = K.maximal_order_infinite()
411
+ sage: I = Oinf.ideal((x + 1)/(x^3 + 1))
412
+ sage: I.factor()
413
+ (Ideal (1/x) of Maximal infinite order of Rational function field in x
414
+ over Finite Field in z2 of size 2^2)^2
415
+
416
+ sage: # needs sage.rings.function_field
417
+ sage: K.<x> = FunctionField(GF(2)); _.<T> = PolynomialRing(K)
418
+ sage: F.<y> = K.extension(T^3 - x^2*(x^2 + x + 1)^2)
419
+ sage: O = F.maximal_order()
420
+ sage: I = O.ideal(y)
421
+ sage: I == I.factor().prod()
422
+ True
423
+
424
+ sage: # needs sage.rings.function_field
425
+ sage: Oinf = F.maximal_order_infinite()
426
+ sage: f= 1/x
427
+ sage: I = Oinf.ideal(f)
428
+ sage: I.factor()
429
+ (Ideal ((1/(x^4 + x^3 + x^2))*y^2 + 1/x^2*y + 1) of Maximal infinite order
430
+ of Function field in y defined by y^3 + x^6 + x^4 + x^2) *
431
+ (Ideal ((1/(x^4 + x^3 + x^2))*y^2 + 1) of Maximal infinite order
432
+ of Function field in y defined by y^3 + x^6 + x^4 + x^2)
433
+
434
+ sage: # needs sage.rings.function_field
435
+ sage: K.<x> = FunctionField(QQ); _.<Y> = K[]
436
+ sage: F.<y> = K.extension(Y^3 - x^2*(x^2 + x + 1)^2)
437
+ sage: O = F.maximal_order()
438
+ sage: I = O.ideal(y)
439
+ sage: I == I.factor().prod()
440
+ True
441
+
442
+ sage: # needs sage.rings.function_field
443
+ sage: K.<x> = FunctionField(QQ); _.<Y> = K[]
444
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
445
+ sage: O = L.maximal_order()
446
+ sage: I = O.ideal(y)
447
+ sage: I == I.factor().prod()
448
+ True
449
+ """
450
+ return Factorization(self._factor(), cr=True)
451
+
452
+ def divisor(self):
453
+ """
454
+ Return the divisor corresponding to the ideal.
455
+
456
+ EXAMPLES::
457
+
458
+ sage: # needs sage.modules sage.rings.finite_rings
459
+ sage: K.<x> = FunctionField(GF(4))
460
+ sage: O = K.maximal_order()
461
+ sage: I = O.ideal(x*(x + 1)^2/(x^2 + x + 1))
462
+ sage: I.divisor()
463
+ Place (x) + 2*Place (x + 1) - Place (x + z2) - Place (x + z2 + 1)
464
+
465
+ sage: # needs sage.modules sage.rings.finite_rings
466
+ sage: Oinf = K.maximal_order_infinite()
467
+ sage: I = Oinf.ideal((x + 1)/(x^3 + 1))
468
+ sage: I.divisor()
469
+ 2*Place (1/x)
470
+
471
+ sage: # needs sage.rings.function_field
472
+ sage: K.<x> = FunctionField(GF(2)); _.<T> = PolynomialRing(K)
473
+ sage: F.<y> = K.extension(T^3 - x^2*(x^2 + x + 1)^2)
474
+ sage: O = F.maximal_order()
475
+ sage: I = O.ideal(y)
476
+ sage: I.divisor()
477
+ 2*Place (x, (1/(x^3 + x^2 + x))*y^2)
478
+ + 2*Place (x^2 + x + 1, (1/(x^3 + x^2 + x))*y^2)
479
+
480
+ sage: # needs sage.rings.function_field
481
+ sage: Oinf = F.maximal_order_infinite()
482
+ sage: I = Oinf.ideal(y)
483
+ sage: I.divisor()
484
+ -2*Place (1/x, 1/x^4*y^2 + 1/x^2*y + 1)
485
+ - 2*Place (1/x, 1/x^2*y + 1)
486
+
487
+ sage: # needs sage.rings.function_field
488
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
489
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
490
+ sage: O = L.maximal_order()
491
+ sage: I = O.ideal(y)
492
+ sage: I.divisor()
493
+ - Place (x, x*y)
494
+ + 2*Place (x + 1, x*y)
495
+
496
+ sage: # needs sage.rings.function_field
497
+ sage: Oinf = L.maximal_order_infinite()
498
+ sage: I = Oinf.ideal(y)
499
+ sage: I.divisor()
500
+ - Place (1/x, 1/x*y)
501
+ """
502
+ from .divisor import divisor
503
+
504
+ if self.is_zero():
505
+ raise ValueError("not defined for zero ideal")
506
+
507
+ F = self.ring().fraction_field()
508
+ data = {prime.place(): multiplicity for prime, multiplicity in self._factor()}
509
+ return divisor(F, data)
510
+
511
+ def divisor_of_zeros(self):
512
+ """
513
+ Return the divisor of zeros corresponding to the ideal.
514
+
515
+ EXAMPLES::
516
+
517
+ sage: # needs sage.modules sage.rings.finite_rings
518
+ sage: K.<x> = FunctionField(GF(4))
519
+ sage: O = K.maximal_order()
520
+ sage: I = O.ideal(x*(x + 1)^2/(x^2 + x + 1))
521
+ sage: I.divisor_of_zeros()
522
+ Place (x) + 2*Place (x + 1)
523
+
524
+ sage: # needs sage.modules
525
+ sage: K.<x> = FunctionField(GF(2))
526
+ sage: Oinf = K.maximal_order_infinite()
527
+ sage: I = Oinf.ideal((x + 1)/(x^3 + 1))
528
+ sage: I.divisor_of_zeros()
529
+ 2*Place (1/x)
530
+
531
+ sage: # needs sage.rings.function_field
532
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
533
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
534
+ sage: O = L.maximal_order()
535
+ sage: I = O.ideal(y)
536
+ sage: I.divisor_of_zeros()
537
+ 2*Place (x + 1, x*y)
538
+ """
539
+ from .divisor import divisor
540
+
541
+ if self.is_zero():
542
+ raise ValueError("not defined for zero ideal")
543
+
544
+ F = self.ring().fraction_field()
545
+ data = {prime.place(): multiplicity for prime, multiplicity in self._factor() if multiplicity > 0}
546
+ return divisor(F, data)
547
+
548
+ def divisor_of_poles(self):
549
+ """
550
+ Return the divisor of poles corresponding to the ideal.
551
+
552
+ EXAMPLES::
553
+
554
+ sage: # needs sage.modules sage.rings.finite_rings
555
+ sage: K.<x> = FunctionField(GF(4))
556
+ sage: O = K.maximal_order()
557
+ sage: I = O.ideal(x*(x + 1)^2/(x^2 + x + 1))
558
+ sage: I.divisor_of_poles()
559
+ Place (x + z2) + Place (x + z2 + 1)
560
+
561
+ sage: # needs sage.modules
562
+ sage: K.<x> = FunctionField(GF(2))
563
+ sage: Oinf = K.maximal_order_infinite()
564
+ sage: I = Oinf.ideal((x + 1)/(x^3 + 1))
565
+ sage: I.divisor_of_poles()
566
+ 0
567
+
568
+ sage: # needs sage.rings.function_field
569
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
570
+ sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
571
+ sage: O = L.maximal_order()
572
+ sage: I = O.ideal(y)
573
+ sage: I.divisor_of_poles()
574
+ Place (x, x*y)
575
+ """
576
+ from .divisor import divisor
577
+
578
+ if self.is_zero():
579
+ raise ValueError("not defined for zero ideal")
580
+
581
+ F = self.ring().fraction_field()
582
+ data = {prime.place(): - multiplicity for prime, multiplicity in self._factor() if multiplicity < 0}
583
+ return divisor(F, data)
584
+
585
+
586
+ class FunctionFieldIdeal_module(FunctionFieldIdeal, Ideal_generic):
587
+ """
588
+ A fractional ideal specified by a finitely generated module over
589
+ the integers of the base field.
590
+
591
+ INPUT:
592
+
593
+ - ``ring`` -- an order in a function field
594
+
595
+ - ``module`` -- a module of the order
596
+
597
+ EXAMPLES:
598
+
599
+ An ideal in an extension of a rational function field::
600
+
601
+ sage: # needs sage.rings.function_field
602
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
603
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
604
+ sage: O = L.equation_order()
605
+ sage: I = O.ideal(y)
606
+ sage: I
607
+ Ideal (x^3 + 1, -y) of Order in Function field in y defined by y^2 - x^3 - 1
608
+ sage: I^2
609
+ Ideal (x^3 + 1, (-x^3 - 1)*y) of Order in Function field in y defined by y^2 - x^3 - 1
610
+ """
611
+ def __init__(self, ring, module):
612
+ """
613
+ Initialize.
614
+
615
+ EXAMPLES::
616
+
617
+ sage: # needs sage.rings.function_field
618
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
619
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
620
+ sage: O = L.equation_order()
621
+ sage: I = O.ideal(y)
622
+ sage: TestSuite(I).run()
623
+ """
624
+ FunctionFieldIdeal.__init__(self, ring)
625
+
626
+ self._module = module
627
+ self._structure = ring.fraction_field().vector_space()
628
+
629
+ V, from_V, to_V = self._structure
630
+ self._gens = tuple([from_V(a) for a in module.basis()])
631
+
632
+ # module generators are still ideal generators
633
+ Ideal_generic.__init__(self, ring, self._gens, coerce=False)
634
+
635
+ def __contains__(self, x):
636
+ """
637
+ Return ``True`` if ``x`` is in this ideal.
638
+
639
+ EXAMPLES::
640
+
641
+ sage: # needs sage.rings.function_field
642
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
643
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
644
+ sage: O = L.equation_order()
645
+ sage: I = O.ideal(y); I
646
+ Ideal (x^3 + 1, -y) of Order in Function field in y defined by y^2 - x^3 - 1
647
+ sage: y in I
648
+ True
649
+ sage: y/x in I
650
+ False
651
+ sage: y^2 - 2 in I
652
+ False
653
+ """
654
+ return self._structure[2](x) in self._module
655
+
656
+ def __hash__(self):
657
+ """
658
+ Return the hash of this ideal.
659
+
660
+ EXAMPLES::
661
+
662
+ sage: # needs sage.rings.function_field
663
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
664
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
665
+ sage: O = L.equation_order()
666
+ sage: I = O.ideal(y)
667
+ sage: d = {I: 1} # indirect doctest
668
+ """
669
+ return hash((self._ring,self._module))
670
+
671
+ def _richcmp_(self, other, op):
672
+ """
673
+ Compare this ideal with the ``other`` ideal with respect to ``op``.
674
+
675
+ EXAMPLES::
676
+
677
+ sage: # needs sage.rings.function_field
678
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
679
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
680
+ sage: O = L.equation_order()
681
+ sage: I = O.ideal(x, y); J = O.ideal(y^2 - 2)
682
+ sage: I + J == J + I # indirect test
683
+ True
684
+ sage: I + I == I # indirect doctest
685
+ True
686
+ sage: I == J
687
+ False
688
+ sage: I < J
689
+ True
690
+ sage: J < I
691
+ False
692
+ """
693
+ return richcmp(self.module().basis(), other.module().basis(), op)
694
+
695
+ def module(self):
696
+ """
697
+ Return the module over the maximal order of the base field that
698
+ underlies this ideal.
699
+
700
+ The formation of the module is compatible with the vector
701
+ space corresponding to the function field.
702
+
703
+ OUTPUT: a module over the maximal order of the base field of the ideal
704
+
705
+ EXAMPLES::
706
+
707
+ sage: # needs sage.rings.function_field
708
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
709
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
710
+ sage: O = L.equation_order(); O
711
+ Order in Function field in y defined by y^2 - x^3 - 1
712
+ sage: I = O.ideal(x^2 + 1)
713
+ sage: I.gens()
714
+ (x^2 + 1, (x^2 + 1)*y)
715
+ sage: I.module()
716
+ Free module of degree 2 and rank 2 over Maximal order of Rational function field in x over Rational Field
717
+ Echelon basis matrix:
718
+ [x^2 + 1 0]
719
+ [ 0 x^2 + 1]
720
+ sage: V, from_V, to_V = L.vector_space(); V
721
+ Vector space of dimension 2 over Rational function field in x over Rational Field
722
+ sage: I.module().is_submodule(V)
723
+ True
724
+ """
725
+ return self._module
726
+
727
+ def gens(self) -> tuple:
728
+ """
729
+ Return a set of generators of this ideal.
730
+
731
+ EXAMPLES::
732
+
733
+ sage: # needs sage.rings.function_field
734
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
735
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
736
+ sage: O = L.equation_order()
737
+ sage: I = O.ideal(x^2 + 1)
738
+ sage: I.gens()
739
+ (x^2 + 1, (x^2 + 1)*y)
740
+ """
741
+ return self._gens
742
+
743
+ def gen(self, i):
744
+ """
745
+ Return the ``i``-th generator in the current basis of this ideal.
746
+
747
+ EXAMPLES::
748
+
749
+ sage: # needs sage.rings.function_field
750
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
751
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
752
+ sage: O = L.equation_order()
753
+ sage: I = O.ideal(x^2 + 1)
754
+ sage: I.gen(1)
755
+ (x^2 + 1)*y
756
+ """
757
+ return self._gens[i]
758
+
759
+ def ngens(self):
760
+ """
761
+ Return the number of generators in the basis.
762
+
763
+ EXAMPLES::
764
+
765
+ sage: # needs sage.rings.function_field
766
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
767
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
768
+ sage: O = L.equation_order()
769
+ sage: I = O.ideal(x^2 + 1)
770
+ sage: I.ngens()
771
+ 2
772
+ """
773
+ return len(self._gens)
774
+
775
+ def _add_(self, other):
776
+ """
777
+ Add this ideal with the ``other`` ideal.
778
+
779
+ EXAMPLES::
780
+
781
+ sage: # needs sage.rings.function_field
782
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
783
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
784
+ sage: O = L.equation_order()
785
+ sage: I = O.ideal(y)
786
+ sage: J = O.ideal(x+y)
787
+ sage: I + J
788
+ Ideal ((-x^2 + x)*y + 1, -y) of Order in Function field in y defined by y^2 - x^3 - 1
789
+ """
790
+ return self.ring().ideal(self.gens() + other.gens())
791
+
792
+ def _mul_(self, other):
793
+ """
794
+ Multiply this ideal with the ``other`` ideal.
795
+
796
+ EXAMPLES::
797
+
798
+ sage: # needs sage.rings.function_field
799
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
800
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
801
+ sage: O = L.equation_order()
802
+ sage: I = O.ideal(y)
803
+ sage: J = O.ideal(x+y)
804
+ sage: I * J
805
+ Ideal ((-x^5 + x^4 - x^2 + x)*y + x^3 + 1, (x^3 - x^2 + 1)*y) of Order in Function field in y defined by y^2 - x^3 - 1
806
+ """
807
+ return self.ring().ideal([x*y for x in self.gens() for y in other.gens()])
808
+
809
+ def _acted_upon_(self, other, on_left):
810
+ """
811
+ Multiply this ideal on the right with ``other``.
812
+
813
+ EXAMPLES::
814
+
815
+ sage: # needs sage.rings.function_field
816
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
817
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
818
+ sage: O = L.equation_order()
819
+ sage: I = O.ideal(y)
820
+ sage: x * I
821
+ Ideal (x^4 + x, -x*y) of Order in Function field in y defined by y^2 - x^3 - 1
822
+ """
823
+ return self.ring().ideal([other * x for x in self.gens()])
824
+
825
+ def intersection(self, other):
826
+ """
827
+ Return the intersection of this ideal and ``other``.
828
+
829
+ EXAMPLES::
830
+
831
+ sage: # needs sage.rings.function_field
832
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
833
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
834
+ sage: O = L.equation_order()
835
+ sage: I = O.ideal(y^3); J = O.ideal(y^2)
836
+ sage: Z = I.intersection(J); Z
837
+ Ideal (x^6 + 2*x^3 + 1, (-x^3 - 1)*y) of Order in Function field in y defined by y^2 - x^3 - 1
838
+ sage: y^2 in Z
839
+ False
840
+ sage: y^3 in Z
841
+ True
842
+ """
843
+ if not isinstance(other, FunctionFieldIdeal):
844
+ try:
845
+ if self.ring().has_coerce_map_from(other):
846
+ return self
847
+ except (TypeError,ArithmeticError,ValueError):
848
+ pass
849
+ other = self.ring().ideal(other)
850
+
851
+ basis = self.module().intersection(other.module()).basis()
852
+
853
+ V, from_V, to_V = self._structure
854
+ return self.ring().ideal_with_gens_over_base([from_V(a) for a in basis])
855
+
856
+ def __invert__(self):
857
+ """
858
+ Return the inverse of this ideal.
859
+
860
+ EXAMPLES::
861
+
862
+ sage: # needs sage.rings.function_field
863
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
864
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
865
+ sage: O = L.equation_order()
866
+ sage: I = O.ideal(y)
867
+ sage: ~I
868
+ Ideal (-1, (1/(x^3 + 1))*y) of Order in Function field in y defined by y^2 - x^3 - 1
869
+ sage: I^-1
870
+ Ideal (-1, (1/(x^3 + 1))*y) of Order in Function field in y defined by y^2 - x^3 - 1
871
+ sage: ~I * I
872
+ Ideal (1) of Order in Function field in y defined by y^2 - x^3 - 1
873
+ """
874
+ if len(self.gens()) == 0:
875
+ raise ZeroDivisionError
876
+
877
+ # NOTE: If I = (g0, ..., gn), then {x : x*I is in R}
878
+ # is the intersection over i of {x : x*gi is in R}
879
+ # Thus (I + J)^(-1) = I^(-1) intersect J^(-1).
880
+
881
+ G = self.gens()
882
+ R = self.ring()
883
+ inv = R.ideal(~G[0])
884
+ for g in G[1:]:
885
+ inv = inv.intersection(R.ideal(~g))
886
+ return inv
887
+
888
+
889
+ class FunctionFieldIdealInfinite(FunctionFieldIdeal):
890
+ """
891
+ Base class of ideals of maximal infinite orders
892
+ """
893
+ pass
894
+
895
+
896
+ class FunctionFieldIdealInfinite_module(FunctionFieldIdealInfinite, Ideal_generic):
897
+ """
898
+ A fractional ideal specified by a finitely generated module over
899
+ the integers of the base field.
900
+
901
+ INPUT:
902
+
903
+ - ``ring`` -- order in a function field
904
+
905
+ - ``module`` -- module
906
+
907
+ EXAMPLES::
908
+
909
+ sage: # needs sage.rings.function_field
910
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
911
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
912
+ sage: O = L.equation_order()
913
+ sage: O.ideal(y)
914
+ Ideal (x^3 + 1, -y) of Order in Function field in y defined by y^2 - x^3 - 1
915
+ """
916
+ def __init__(self, ring, module):
917
+ """
918
+ Initialize.
919
+
920
+ TESTS::
921
+
922
+ sage: # needs sage.rings.function_field
923
+ sage: K.<x> = FunctionField(QQ); R.<y> = K[]
924
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
925
+ sage: O = L.equation_order()
926
+ sage: I = O.ideal(y)
927
+ sage: TestSuite(I).run()
928
+ """
929
+ FunctionFieldIdealInfinite.__init__(self, ring)
930
+
931
+ self._module = module
932
+ self._structure = ring.fraction_field().vector_space()
933
+
934
+ V, from_V, to_V = self._structure
935
+ gens = tuple([from_V(a) for a in module.basis()])
936
+ self._gens = gens
937
+
938
+ # module generators are still ideal generators
939
+ Ideal_generic.__init__(self, ring, self._gens, coerce=False)
940
+
941
+ def __contains__(self, x):
942
+ """
943
+ Return ``True`` if ``x`` is in this ideal.
944
+
945
+ INPUT:
946
+
947
+ - ``x`` -- element of the function field
948
+
949
+ EXAMPLES::
950
+
951
+ sage: # needs sage.rings.function_field
952
+ sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
953
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
954
+ sage: O = L.equation_order()
955
+ sage: I = O.ideal_with_gens_over_base([1, y]); I
956
+ Ideal (1) of Order in Function field in y defined by y^2 + 6*x^3 + 6
957
+ sage: y in I
958
+ True
959
+ sage: y/x in I
960
+ False
961
+ sage: y^2 - 2 in I
962
+ True
963
+ """
964
+ return self._structure[2](x) in self._module
965
+
966
+ def __hash__(self):
967
+ """
968
+ Return the hash of this ideal.
969
+
970
+ EXAMPLES::
971
+
972
+ sage: # needs sage.rings.function_field
973
+ sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
974
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
975
+ sage: O = L.equation_order()
976
+ sage: I = O.ideal_with_gens_over_base([1, y])
977
+ sage: d = {I: 2} # indirect doctest
978
+ """
979
+ return hash((self._ring,self._module))
980
+
981
+ def __eq__(self, other):
982
+ """
983
+ Test equality of this ideal with the ``other`` ideal.
984
+
985
+ INPUT:
986
+
987
+ - ``other`` -- ideal
988
+
989
+ EXAMPLES::
990
+
991
+ sage: # needs sage.rings.function_field
992
+ sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
993
+ sage: L.<y> = K.extension(y^2 - x^3 - 1)
994
+ sage: O = L.equation_order()
995
+ sage: I = O.ideal_with_gens_over_base([1, y])
996
+ sage: I == I + I # indirect doctest
997
+ True
998
+ """
999
+ if not isinstance(other, FunctionFieldIdeal_module):
1000
+ other = self.ring().ideal(other)
1001
+ if self.ring() != other.ring():
1002
+ raise ValueError("rings must be the same")
1003
+
1004
+ if (self.module().is_submodule(other.module()) and
1005
+ other.module().is_submodule(self.module())):
1006
+ return True
1007
+ else:
1008
+ return False
1009
+
1010
+ def module(self):
1011
+ """
1012
+ Return the module over the maximal order of the base field that
1013
+ underlies this ideal.
1014
+
1015
+ The formation of the module is compatible with the vector
1016
+ space corresponding to the function field.
1017
+
1018
+ EXAMPLES::
1019
+
1020
+ sage: K.<x> = FunctionField(GF(7))
1021
+ sage: O = K.maximal_order(); O
1022
+ Maximal order of Rational function field in x over Finite Field of size 7
1023
+ sage: K.polynomial_ring()
1024
+ Univariate Polynomial Ring in x over
1025
+ Rational function field in x over Finite Field of size 7
1026
+ sage: I = O.ideal([x^2 + 1, x*(x^2+1)])
1027
+ sage: I.gens()
1028
+ (x^2 + 1,)
1029
+ sage: I.module() # needs sage.modules
1030
+ Free module of degree 1 and rank 1 over
1031
+ Maximal order of Rational function field in x over Finite Field of size 7
1032
+ Echelon basis matrix:
1033
+ [x^2 + 1]
1034
+ sage: V, from_V, to_V = K.vector_space(); V # needs sage.modules
1035
+ Vector space of dimension 1 over
1036
+ Rational function field in x over Finite Field of size 7
1037
+ sage: I.module().is_submodule(V) # needs sage.modules
1038
+ True
1039
+ """
1040
+ return self._module
1041
+
1042
+
1043
+ class IdealMonoid(UniqueRepresentation, Parent):
1044
+ r"""
1045
+ The monoid of ideals in orders of function fields.
1046
+
1047
+ INPUT:
1048
+
1049
+ - ``R`` -- order
1050
+
1051
+ EXAMPLES::
1052
+
1053
+ sage: K.<x> = FunctionField(GF(2))
1054
+ sage: O = K.maximal_order()
1055
+ sage: M = O.ideal_monoid(); M
1056
+ Monoid of ideals of Maximal order of Rational function field in x over Finite Field of size 2
1057
+ """
1058
+
1059
+ def __init__(self, R):
1060
+ """
1061
+ Initialize the ideal monoid.
1062
+
1063
+ TESTS::
1064
+
1065
+ sage: K.<x> = FunctionField(GF(2))
1066
+ sage: O = K.maximal_order()
1067
+ sage: M = O.ideal_monoid()
1068
+ sage: TestSuite(M).run()
1069
+ """
1070
+ self.Element = R._ideal_class_
1071
+ Parent.__init__(self, category=Monoids())
1072
+
1073
+ self.__R = R
1074
+ self._populate_coercion_lists_()
1075
+
1076
+ def _repr_(self):
1077
+ """
1078
+ Return the string representation of the ideal monoid.
1079
+
1080
+ TESTS::
1081
+
1082
+ sage: K.<x> = FunctionField(GF(2))
1083
+ sage: O = K.maximal_order()
1084
+ sage: M = O.ideal_monoid(); M._repr_()
1085
+ 'Monoid of ideals of Maximal order of Rational function field in x over Finite Field of size 2'
1086
+ """
1087
+ return "Monoid of ideals of %s" % self.__R
1088
+
1089
+ def ring(self):
1090
+ """
1091
+ Return the ring of which this is the ideal monoid.
1092
+
1093
+ EXAMPLES::
1094
+
1095
+ sage: K.<x> = FunctionField(GF(2))
1096
+ sage: O = K.maximal_order()
1097
+ sage: M = O.ideal_monoid(); M.ring() is O
1098
+ True
1099
+ """
1100
+ return self.__R
1101
+
1102
+ def _element_constructor_(self, x):
1103
+ """
1104
+ Create an ideal in the monoid from ``x``.
1105
+
1106
+ EXAMPLES::
1107
+
1108
+ sage: K.<x> = FunctionField(GF(2))
1109
+ sage: O = K.maximal_order()
1110
+ sage: M = O.ideal_monoid()
1111
+ sage: M(x)
1112
+ Ideal (x) of Maximal order of Rational function field in x over Finite Field of size 2
1113
+ sage: M([x-4, 1/x])
1114
+ Ideal (1/x) of Maximal order of Rational function field in x over Finite Field of size 2
1115
+ """
1116
+ try: # x is an ideal
1117
+ x = x.gens()
1118
+ except AttributeError:
1119
+ pass
1120
+ return self.__R.ideal(x)
1121
+
1122
+ def _coerce_map_from_(self, x):
1123
+ """
1124
+ Used by coercion framework.
1125
+
1126
+ EXAMPLES::
1127
+
1128
+ sage: K.<x> = FunctionField(GF(2))
1129
+ sage: O = K.maximal_order()
1130
+ sage: M = O.ideal_monoid()
1131
+ sage: M.has_coerce_map_from(O) # indirect doctest
1132
+ True
1133
+ sage: M.has_coerce_map_from(O.ideal_monoid())
1134
+ True
1135
+ """
1136
+ if isinstance(x, IdealMonoid):
1137
+ return self.ring().has_coerce_map_from(x.ring())
1138
+ else:
1139
+ return self.ring().has_coerce_map_from(x)
1140
+
1141
+ def _an_element_(self):
1142
+ """
1143
+ Return an element of the ideal monoid.
1144
+
1145
+ EXAMPLES::
1146
+
1147
+ sage: K.<x> = FunctionField(GF(2))
1148
+ sage: O = K.maximal_order()
1149
+ sage: M = O.ideal_monoid()
1150
+ sage: M.an_element() # indirect doctest; random
1151
+ Ideal (x) of Maximal order of Rational function field in x
1152
+ over Finite Field of size 2
1153
+ """
1154
+ x = self.__R.an_element()
1155
+ return self.__R.ideal([x])