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,590 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ # sage.doctest: needs sage.libs.singular sage.modules (because all doctests need laurent_polynomial_mpair, Groebner bases)
3
+ r"""
4
+ Ideals in Laurent polynomial rings.
5
+
6
+ For `R` a commutative ring, ideals in the Laurent polynomial ring
7
+ `R[x_1^{\pm 1}, x_2^{\pm 1}, \ldots, x_n^{\pm 1}]` are implemented as
8
+ ideals in the ordinary polynomial ring `R[x_1, \ldots, x_n]` which are
9
+ saturated with respect to the ideal `(x_1 \cdots x_n)`.
10
+
11
+ AUTHORS:
12
+
13
+ - Kiran S. Kedlaya (2020): initial implementation
14
+ """
15
+ # ****************************************************************************
16
+ # Copyright (C) 2020 Kiran S. Kedlaya <kedlaya@ucsd.edu>
17
+ #
18
+ # This program is free software: you can redistribute it and/or modify
19
+ # it under the terms of the GNU General Public License as published by
20
+ # the Free Software Foundation, either version 2 of the License, or
21
+ # (at your option) any later version.
22
+ # https://www.gnu.org/licenses/
23
+ # ****************************************************************************
24
+
25
+ from sage.rings.ideal import Ideal_generic
26
+ from sage.rings.polynomial.laurent_polynomial_ring import LaurentPolynomialRing_univariate
27
+ from sage.structure.richcmp import op_EQ, op_NE, op_LT, op_LE, op_GT, op_GE
28
+ from sage.arith.misc import GCD
29
+
30
+
31
+ class LaurentPolynomialIdeal( Ideal_generic ):
32
+ def __init__(self, ring, gens, coerce=True, hint=None):
33
+ r"""
34
+ Create an ideal in a Laurent polynomial ring.
35
+
36
+ To compute structural properties of an ideal in the Laurent polynomial ring
37
+ `R[x_1^{\pm},\ldots,x_n^{\pm}]`, we form the corresponding ideal in the
38
+ associated ordinary polynomial ring `R[x_1,\ldots,x_n]` which is saturated
39
+ with respect to the ideal `(x_1 \cdots x_n)`. Since computing the saturation
40
+ can be expensive, we employ some strategies to reduce the need for it.
41
+
42
+ - We only create the polynomial ideal as needed.
43
+
44
+ - For some operations, we try some superficial tests first. E.g., for
45
+ comparisons, we first look directly at generators.
46
+ - The attribute ``hint`` is a lower bound on the associated polynomial ideal.
47
+ Hints are automatically forwarded by certain creation operations (such as
48
+ sums and base extensions), and can be manually forwarded in other cases.
49
+
50
+ INPUT:
51
+
52
+ - ``ring`` -- the ring the ideal is defined in
53
+ - ``gens`` -- list of generators for the ideal
54
+ - ``coerce`` -- whether or not to coerce elements into ``ring``
55
+ - ``hint`` -- an ideal in the associated polynomial ring (optional; see above)
56
+
57
+ EXAMPLES::
58
+
59
+ sage: R.<x,y> = LaurentPolynomialRing(IntegerRing(), 2, order='lex')
60
+ sage: R.ideal([x, y])
61
+ Ideal (x, y) of Multivariate Laurent Polynomial Ring in x, y
62
+ over Integer Ring
63
+ sage: R.<x0,x1> = LaurentPolynomialRing(GF(3), 2)
64
+ sage: R.ideal([x0^2, x1^-3])
65
+ Ideal (x0^2, x1^-3) of Multivariate Laurent Polynomial Ring in x0, x1
66
+ over Finite Field of size 3
67
+
68
+ sage: P.<x,y> = LaurentPolynomialRing(QQ, 2)
69
+ sage: I = P.ideal([~x + ~y - 1])
70
+ sage: print(I)
71
+ Ideal (-1 + y^-1 + x^-1) of
72
+ Multivariate Laurent Polynomial Ring in x, y over Rational Field
73
+ sage: I.is_zero()
74
+ False
75
+ sage: (x^(-2) + x^(-1)*y^(-1) - x^(-1)) in I
76
+ True
77
+
78
+ sage: P.<x,y,z> = LaurentPolynomialRing(QQ, 3)
79
+ sage: I1 = P.ideal([x*y*z + x*y + 2*y^2, x + z])
80
+ sage: I2 = P.ideal([x*y*z + x*y + 2*y^2 + x + z, x + z])
81
+ sage: I1 == I2
82
+ True
83
+ sage: I3 = P.ideal([x*y*z + x*y + 2*y^2 + x + z, x + z, y])
84
+ sage: I1 < I3
85
+ True
86
+ sage: I1.minimal_associated_primes()
87
+ (Ideal (-1/2*z^2 + y - 1/2*z, x + z) of Multivariate
88
+ Laurent Polynomial Ring in x, y, z over Rational Field,)
89
+
90
+ sage: K.<z> = CyclotomicField(4) # needs sage.rings.number_field
91
+ sage: J = I1.base_extend(K) # needs sage.rings.number_field
92
+ sage: J.base_ring() # needs sage.rings.number_field
93
+ Cyclotomic Field of order 4 and degree 2
94
+ """
95
+ Ideal_generic.__init__(self, ring, gens, coerce=coerce)
96
+ self._poly_ring = ring.polynomial_ring()
97
+ self._poly_ideal = None # Create only as needed
98
+ self._saturated = False
99
+ if hint is None:
100
+ self._hint = self._poly_ring.zero_ideal()
101
+ else:
102
+ self._hint = hint.change_ring(self._poly_ring)
103
+
104
+ def set_hint(self, hint):
105
+ """
106
+ Set the hint of this ideal.
107
+
108
+ The hint is an ideal of the associated polynomial ring, which is
109
+ assumed to be contained in the associated ideal. It is used internally
110
+ to speed up computation of the associated ideal in some cases;
111
+ normally the end user will have no need to work with it directly.
112
+
113
+ EXAMPLES::
114
+
115
+ sage: P.<x,y,z> = LaurentPolynomialRing(QQ, 3)
116
+ sage: I = P.ideal([x^2*y + 3*x*y^2])
117
+ sage: I.hint()
118
+ Ideal (0) of Multivariate Polynomial Ring in x, y, z over Rational Field
119
+ sage: I.set_hint(P.polynomial_ring().ideal([x + 3*y]))
120
+ sage: I.hint()
121
+ Ideal (x + 3*y) of Multivariate Polynomial Ring in x, y, z over Rational Field
122
+ """
123
+ self._hint = hint
124
+
125
+ def hint(self):
126
+ """
127
+ Return the hint of this ideal.
128
+
129
+ The hint is an ideal of the associated polynomial ring, which is
130
+ assumed to be contained in the associated ideal. It is used internally
131
+ to speed up computation of the associated ideal in some cases;
132
+ normally the end user will have no need to work with it directly.
133
+
134
+ EXAMPLES::
135
+
136
+ sage: P.<x,y,z> = LaurentPolynomialRing(QQ, 3)
137
+ sage: I = P.ideal([x^2*y + 3*x*y^2])
138
+ sage: I.hint()
139
+ Ideal (0) of Multivariate Polynomial Ring in x, y, z over Rational Field
140
+ """
141
+ return self._hint
142
+
143
+ # Comparisons, using the associated polynomial ideal.
144
+ def _richcmp_(self, right_r, op):
145
+ r"""
146
+ Comparison of ``self`` and ``right_r``.
147
+
148
+ When testing equality, we first check generators to save time.
149
+
150
+ When testing ideal containment, we do not saturate the smaller ideal.
151
+
152
+ EXAMPLES::
153
+
154
+ sage: P.<x,y,z> = LaurentPolynomialRing(QQ, 3)
155
+ sage: I1 = P.ideal([x*y*z+x*y+2*y^2, x+z])
156
+ sage: I2 = P.ideal([x*y*z+x*y+2*y^2+x+z, x+z])
157
+ sage: I1 == I2
158
+ True
159
+ sage: I1 != I2
160
+ False
161
+ sage: I3 = P.ideal([x*y*z+x*y+2*y^2+x+z, x+z, y])
162
+ sage: I1 <= I3
163
+ True
164
+ sage: I3 >= I1
165
+ True
166
+ sage: I1 < I3
167
+ True
168
+ sage: I3 > I1
169
+ True
170
+ """
171
+ if op in (op_EQ, op_NE):
172
+ if set(self.gens()) == set(right_r.gens()): # Early abort
173
+ return (op == op_EQ)
174
+ return ((self.polynomial_ideal() == right_r.polynomial_ideal()) == (op == op_EQ))
175
+ elif op == op_LE:
176
+ if all(f in right_r.gens() for f in self.gens()): # Early abort
177
+ return True
178
+ return self.polynomial_ideal(saturate=False) <= right_r.polynomial_ideal()
179
+ elif op == op_GE:
180
+ return right_r._richcmp_(self, op_LE)
181
+ elif op == op_LT:
182
+ return self._richcmp_(right_r, op_LE) and self._richcmp_(right_r, op_NE)
183
+ elif op == op_GT:
184
+ return right_r._richcmp_(self, op_LE) and right_r._richcmp_(self, op_NE)
185
+ else:
186
+ raise ValueError("invalid comparison")
187
+
188
+ def __contains__(self, f):
189
+ """
190
+ Implement containment testing (in) for Laurent polynomial ideals.
191
+
192
+ EXAMPLES::
193
+
194
+ sage: P.<x,y> = LaurentPolynomialRing(QQ, 2)
195
+ sage: I = P.ideal([x^2*y + 3*x*y^2])
196
+ sage: x + 3*y in I
197
+ True
198
+
199
+ This also works in the univariate case::
200
+
201
+ sage: P.<x> = LaurentPolynomialRing(QQ)
202
+ sage: I = P.ideal([x^2 + 3*x])
203
+ sage: 1 + 3*x^-1 in I
204
+ True
205
+ """
206
+ if not f or f in self.gens():
207
+ return True
208
+ f = self.ring()(f)
209
+ if isinstance(self.ring(), LaurentPolynomialRing_univariate):
210
+ g = f.__reduce__()[1][1]
211
+ else:
212
+ g = f.__reduce__()[1][0]
213
+ return (g in self.polynomial_ideal())
214
+
215
+ def gens_reduced(self) -> tuple:
216
+ """
217
+ Return a reduced system of generators.
218
+
219
+ EXAMPLES::
220
+
221
+ sage: P.<x,y> = LaurentPolynomialRing(QQ)
222
+ sage: J = P.ideal([x^2 - y^-2, x * y^3 + 2 * y^2+ y])
223
+ sage: J.gens_reduced()
224
+ (x + 6*y + 5, 3*y^2 + 4*y + 1)
225
+ """
226
+ R = self.ring()
227
+ J = self.polynomial_ideal()
228
+ return tuple([R(p) for p in J.gens()])
229
+
230
+ # Operations on ideals
231
+
232
+ def change_ring(self, R, hint=None):
233
+ """
234
+ Coerce an ideal into a new ring.
235
+
236
+ This operation does not forward hints, but a new hint can be
237
+ specified manually.
238
+
239
+ EXAMPLES::
240
+
241
+ sage: P.<x,y> = LaurentPolynomialRing(QQ, 2)
242
+ sage: I = P.ideal([x + y])
243
+ sage: Q.<x,y,z> = LaurentPolynomialRing(QQ, 3)
244
+ sage: I.change_ring(Q)
245
+ Ideal (x + y) of Multivariate Laurent Polynomial Ring in x, y, z
246
+ over Rational Field
247
+ """
248
+ return R.ideal(self.gens(), hint=hint)
249
+
250
+ def base_extend(self, F):
251
+ """
252
+ Form the base extension of ``self`` to the base ring ``F``.
253
+
254
+ This operation forwards hints.
255
+
256
+ EXAMPLES::
257
+
258
+ sage: P.<x,y> = LaurentPolynomialRing(QQ, 2)
259
+ sage: I = P.ideal([x + y])
260
+ sage: K.<z> = CyclotomicField(3) # needs sage.rings.number_field
261
+ sage: I.base_extend(K) # needs sage.rings.number_field
262
+ Ideal (x + y) of Multivariate Laurent Polynomial Ring in x, y
263
+ over Cyclotomic Field of order 3 and degree 2
264
+ """
265
+ ring = self.ring()
266
+ return self.change_ring(ring.change_ring(F), hint=self._hint)
267
+
268
+ def apply_map(self, f, new_ring=None, new_base_ring=None, apply_to_hint=None):
269
+ """
270
+ Return the new ideal obtained by applying ``f`` to each generator.
271
+
272
+ By default, this does not forward hints. To do so, set ``apply_to_hint``
273
+ to specify a function to apply to generators of ``hint``.
274
+
275
+ EXAMPLES::
276
+
277
+ sage: P.<x,y> = LaurentPolynomialRing(QQ, 2)
278
+ sage: I = P.ideal([x + 1, y - 1])
279
+ sage: I.apply_map(lambda z: z + 2)
280
+ Ideal (x + 3, y + 1) of Multivariate Laurent Polynomial Ring in x, y
281
+ over Rational Field
282
+ sage: K.<i> = CyclotomicField(4) # needs sage.rings.number_field
283
+ sage: I.apply_map(lambda z: z + 2, new_base_ring=K) # needs sage.rings.number_field
284
+ Ideal (x + 3, y + 1) of Multivariate Laurent Polynomial Ring in x, y
285
+ over Cyclotomic Field of order 4 and degree 2
286
+ """
287
+ ring = self.ring()
288
+ if new_ring is not None:
289
+ R = new_ring
290
+ elif new_base_ring is not None:
291
+ R = ring.change_ring(new_base_ring)
292
+ else:
293
+ R = ring
294
+ if apply_to_hint:
295
+ hint = self._poly_ring.ideal([apply_to_hint(x) for x in self._hint.gens()])
296
+ else:
297
+ hint = None
298
+ return R.ideal(tuple(f(x) for x in self.gens()), hint=hint)
299
+
300
+ def apply_coeff_map(self, f, new_base_ring=None, forward_hint=True):
301
+ """
302
+ Apply a function to coefficients.
303
+
304
+ This operation forwards hints by default.
305
+
306
+ EXAMPLES::
307
+
308
+ sage: # needs sage.rings.number_field
309
+ sage: K.<z> = CyclotomicField(3)
310
+ sage: P.<x,y> = LaurentPolynomialRing(K, 2)
311
+ sage: I = P.ideal([x + z, y - z])
312
+ sage: h = K.hom([z^2])
313
+ sage: I.apply_coeff_map(h)
314
+ Ideal (x - z - 1, y + z + 1) of Multivariate Laurent Polynomial Ring
315
+ in x, y over Cyclotomic Field of order 3 and degree 2
316
+ sage: K1.<z1> = CyclotomicField(12)
317
+ sage: h1 = K.hom([z1^4])
318
+ sage: I.apply_coeff_map(h1, new_base_ring=K1)
319
+ Ideal (x + z1^2 - 1, y - z1^2 + 1) of Multivariate Laurent Polynomial Ring
320
+ in x, y over Cyclotomic Field of order 12 and degree 4
321
+ """
322
+ ring = self.ring()
323
+ if new_base_ring is None:
324
+ R = ring
325
+ else:
326
+ R = ring.change_ring(new_base_ring)
327
+ if forward_hint:
328
+ apply_to_hint = lambda x,f=f: x.map_coefficients(f)
329
+ else:
330
+ apply_to_hint = None
331
+ return self.apply_map(lambda x,f=f:
332
+ x.map_coefficients(f, new_base_ring=new_base_ring),
333
+ new_ring=R, apply_to_hint=apply_to_hint)
334
+
335
+ def toric_coordinate_change(self, M, forward_hint=True):
336
+ """
337
+ Compute the toric change of coordinates defined by the integer matrix ``M``.
338
+
339
+ This operation forwards hints by default.
340
+
341
+ EXAMPLES::
342
+
343
+ sage: # needs sage.rings.number_field
344
+ sage: K.<z> = CyclotomicField(3)
345
+ sage: P.<x,y> = LaurentPolynomialRing(K, 2)
346
+ sage: I = P.ideal([x + 1, y - 1])
347
+ sage: M = Matrix([[2,1], [1,-3]])
348
+ sage: I.toric_coordinate_change(M)
349
+ Ideal (x^2*y + 1, -1 + x*y^-3) of Multivariate Laurent Polynomial Ring
350
+ in x, y over Cyclotomic Field of order 3 and degree 2
351
+ """
352
+ if forward_hint:
353
+ R = self.ring()
354
+ apply_to_hint = lambda x, M=M, R=R: R(x).toric_coordinate_change(M).monomial_reduction()[0]
355
+ else:
356
+ apply_to_hint = None
357
+ return self.apply_map(lambda x, M=M: x.toric_coordinate_change(M),
358
+ apply_to_hint=apply_to_hint)
359
+
360
+ def __add__(self, other):
361
+ """
362
+ Return the sum of two ideals in the same ring.
363
+
364
+ Currently this operation does not support coercion.
365
+
366
+ This operation forwards hints.
367
+
368
+ EXAMPLES::
369
+
370
+ sage: P.<x,y> = LaurentPolynomialRing(QQ, 2)
371
+ sage: I = P.ideal([x+y])
372
+ sage: J = P.ideal([y+1])
373
+ sage: (I+J).groebner_basis()
374
+ (x - 1, y + 1)
375
+ """
376
+ ring = self.ring()
377
+ ring2 = other.ring()
378
+ if ring != ring2:
379
+ return ValueError("ambient rings are not equal")
380
+ hint = self._hint
381
+ if hint.is_zero():
382
+ hint = other._hint
383
+ elif not other._hint.is_zero():
384
+ hint += other._hint
385
+ return ring.ideal(self.gens() + other.gens(), hint=hint)
386
+
387
+ def normalize_gens(self):
388
+ """
389
+ Redefine the ideal with a normalized set of generators.
390
+
391
+ For two ideals returned by this function, equality testing can be done
392
+ by comparing generators.
393
+
394
+ This operation forwards hints.
395
+
396
+ EXAMPLES::
397
+
398
+ sage: P.<x,y> = LaurentPolynomialRing(QQ, 2)
399
+ sage: I = P.ideal([~x+y])
400
+ sage: J = P.ideal([y+1])
401
+ sage: I + J
402
+ Ideal (y + x^-1, y + 1) of Multivariate Laurent Polynomial Ring
403
+ in x, y over Rational Field
404
+ sage: (I + J).normalize_gens()
405
+ Ideal (x - 1, y + 1) of Multivariate Laurent Polynomial Ring
406
+ in x, y over Rational Field
407
+ """
408
+ return self.ring().ideal(self.groebner_basis(), hint=self._hint)
409
+
410
+ # Structural queries and properties
411
+
412
+ def polynomial_ideal(self, saturate=True):
413
+ """
414
+ Return the associated polynomial ideal.
415
+
416
+ By default, the ideal is saturated with respect to the product of the
417
+ polynomial ring generators; this is necessary for testing equality and inclusion.
418
+ As saturation can be quite time-consuming, it can be disabled by setting
419
+ ``saturate=False``; however, the result will then depend not just on the original ideal
420
+ but also on the choice of generators.
421
+
422
+ EXAMPLES::
423
+
424
+ sage: P.<x,y> = LaurentPolynomialRing(QQ, 2)
425
+ sage: I = P.ideal([x^2*y + 3*x*y^2])
426
+ sage: I.polynomial_ideal()
427
+ Ideal (x + 3*y) of Multivariate Polynomial Ring in x, y over Rational Field
428
+ sage: P.<t> = LaurentPolynomialRing(QQ)
429
+ sage: J = P.ideal(t^2 - t^-1)
430
+ sage: J.polynomial_ideal()
431
+ Principal ideal (t^3 - 1) of Univariate Polynomial Ring in t over Rational Field
432
+ sage: J = P.ideal([t^2 - t^-1, t + t^-1])
433
+ sage: J.polynomial_ideal()
434
+ Principal ideal (1) of Univariate Polynomial Ring in t over Rational Field
435
+ sage: J = P.ideal([t^2 - t^-1, t - t^-1])
436
+ sage: J.polynomial_ideal()
437
+ Principal ideal (t - 1) of Univariate Polynomial Ring in t over Rational Field
438
+ """
439
+ P = self.ring()
440
+ Q = self._poly_ring
441
+ if isinstance(self.ring(), LaurentPolynomialRing_univariate):
442
+ a = [Q(p.polynomial_construction()[0]) for p in self.gens()]
443
+ if P.base_ring().is_field():
444
+ a = GCD(a)
445
+ return Q.ideal(a)
446
+ if self._poly_ideal is not None and (self._saturated or not saturate):
447
+ return self._poly_ideal
448
+ gens = self.gens()
449
+ if len(gens) == 0:
450
+ id = Q.ideal([])
451
+ self._poly_ideal = id
452
+ self._hint = id
453
+ self._saturated = True
454
+ return id
455
+ l2 = [f.__reduce__()[1][0] for f in gens]
456
+ hint = self._hint
457
+ l2 += list(hint.groebner_basis())
458
+ I = Q.ideal(l2)
459
+ if not saturate:
460
+ self._poly_ideal = I
461
+ self._hint = I
462
+ return Q.ideal(l2)
463
+ n = P.ngens()
464
+ I = I.saturation(Q.ideal([Q.monomial(*((1,) * n))]))[0]
465
+ self._poly_ideal = I
466
+ self._hint = I
467
+ self._saturated = True
468
+ return I
469
+
470
+ def groebner_basis(self, saturate=True):
471
+ """
472
+ Return the reduced Groebner basis for the specified term order.
473
+
474
+ EXAMPLES::
475
+
476
+ sage: P.<x,y> = LaurentPolynomialRing(QQ, 2)
477
+ sage: I = P.ideal([x + y])
478
+ sage: J = P.ideal([y + 1])
479
+ sage: (I + J).groebner_basis()
480
+ (x - 1, y + 1)
481
+ """
482
+ l = self.polynomial_ideal(saturate=saturate).groebner_basis()
483
+ return tuple(self.ring()(x) for x in l)
484
+
485
+ def is_one(self):
486
+ """
487
+ Determine whether or not ``self`` is the unit ideal.
488
+
489
+ This requires saturation of the polynomial ideal.
490
+
491
+ EXAMPLES::
492
+
493
+ sage: P.<x,y> = LaurentPolynomialRing(QQ, 2)
494
+ sage: I = P.ideal([~x + ~y - 1, x + y])
495
+ sage: I.is_one()
496
+ True
497
+ """
498
+ return self.polynomial_ideal().is_one()
499
+
500
+ def is_binomial(self, groebner_basis=False):
501
+ """
502
+ Determine whether every generator of ``self`` is a binomial.
503
+
504
+ If ``groebner_basis`` is True, this becomes intrinsic (for a choice of
505
+ term order).
506
+
507
+ EXAMPLES::
508
+
509
+ sage: P.<x,y> = LaurentPolynomialRing(QQ, 2)
510
+ sage: I = P.ideal([x + y])
511
+ sage: I.is_binomial()
512
+ True
513
+ """
514
+ if groebner_basis:
515
+ l = self.groebner_basis()
516
+ else:
517
+ l = self.gens()
518
+ return all(not f or f.number_of_terms() == 2 for f in l)
519
+
520
+ def associated_primes(self):
521
+ """
522
+ Return associated primes of this ideal.
523
+
524
+ These are computed from the polynomial ideal, but it is not necessary to
525
+ saturate. Instead, we omit primes containing any polynomial generator.
526
+
527
+ EXAMPLES::
528
+
529
+ sage: P.<x,y,z> = LaurentPolynomialRing(QQ, 3)
530
+ sage: p = z^2 + 1; q = z^3 + 2
531
+ sage: I = P.ideal((p*q^2, y - z^2))
532
+ sage: tuple(sorted(I.associated_primes(), key=str))
533
+ (Ideal (y + 1, z^2 + 1) of
534
+ Multivariate Laurent Polynomial Ring in x, y, z over Rational Field,
535
+ Ideal (z^2 - y, y*z + 2, y^2 + 2*z) of
536
+ Multivariate Laurent Polynomial Ring in x, y, z over Rational Field)
537
+ """
538
+ l = self.polynomial_ideal(saturate=False).associated_primes()
539
+ l2 = [self.ring().ideal(I.gens(), hint=I) for I in l]
540
+ return tuple(I for I in l2 if not I.is_one())
541
+
542
+ def minimal_associated_primes(self, saturate=False):
543
+ """
544
+ Return minimal associated primes of this ideal.
545
+
546
+ These are computed from the polynomial ideal, but it is not necessary to
547
+ saturate. Instead, we omit primes containing any polynomial generator.
548
+
549
+ EXAMPLES::
550
+
551
+ sage: P.<x,y,z> = LaurentPolynomialRing(QQ, 3)
552
+ sage: p = z^2 + 1; q = z^3 + 2
553
+ sage: I = P.ideal((p*q^2, y - z^2))
554
+ sage: tuple(sorted(I.minimal_associated_primes(), key=str))
555
+ (Ideal (z^2 + 1, -z^2 + y) of
556
+ Multivariate Laurent Polynomial Ring in x, y, z over Rational Field,
557
+ Ideal (z^3 + 2, -z^2 + y) of
558
+ Multivariate Laurent Polynomial Ring in x, y, z over Rational Field)
559
+ """
560
+ l = self.polynomial_ideal(saturate=saturate).minimal_associated_primes()
561
+ l2 = [self.ring().ideal(I.gens(), hint=I) for I in l]
562
+ return tuple(I for I in l2 if not I.is_one())
563
+
564
+ def radical(self):
565
+ """
566
+ Return the radical of this ideal.
567
+
568
+ EXAMPLES::
569
+
570
+ sage: P.<x,y,z> = LaurentPolynomialRing(QQ, 3)
571
+ sage: I = P.ideal(((x+1)^2, (y+1)^3, ((x+1)*z)^4 + (y+1)^3 + 10*(x+1)^2))
572
+ sage: I.radical()
573
+ Ideal (y + 1, x + 1) of Multivariate Laurent Polynomial Ring in x, y, z
574
+ over Rational Field
575
+ """
576
+ J = self.polynomial_ideal().radical()
577
+ return self.ring().ideal(J.gens())
578
+
579
+ def dimension(self):
580
+ """
581
+ Return the dimension of this ideal.
582
+
583
+ EXAMPLES::
584
+
585
+ sage: P.<x,y,z> = LaurentPolynomialRing(QQ, 3)
586
+ sage: I = P.ideal(((x+1)^2, (y+1)^3, ((x+1)*z)^4 + (y+1)^3 + 10*(x+1)^2))
587
+ sage: I.dimension()
588
+ 1
589
+ """
590
+ return self.polynomial_ideal().dimension()