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,708 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ # sage.doctest: needs sage.modules
3
+ r"""
4
+ Ring of Laurent Polynomials (base class)
5
+
6
+ If `R` is a commutative ring, then the ring of Laurent polynomials in `n`
7
+ variables over `R` is `R[x_1^{\pm 1}, x_2^{\pm 1}, \ldots, x_n^{\pm 1}]`.
8
+
9
+ AUTHORS:
10
+
11
+ - David Roe (2008-2-23): created
12
+ - David Loeffler (2009-07-10): cleaned up docstrings
13
+ """
14
+ # ****************************************************************************
15
+ # Copyright (C) 2008 David Roe <roed@math.harvard.edu>,
16
+ # William Stein <wstein@gmail.com>,
17
+ # Mike Hansen <mhansen@gmail.com>
18
+ # Vincent Delecroix <20100.delecroix@gmail.com>
19
+ #
20
+ # This program is free software: you can redistribute it and/or modify
21
+ # it under the terms of the GNU General Public License as published by
22
+ # the Free Software Foundation, either version 2 of the License, or
23
+ # (at your option) any later version.
24
+ # https://www.gnu.org/licenses/
25
+ # ****************************************************************************
26
+
27
+
28
+ from sage.rings.infinity import infinity
29
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
30
+ from sage.rings.ring import CommutativeRing
31
+ from sage.structure.parent import Parent
32
+ from sage.combinat.integer_vector import IntegerVectors
33
+
34
+
35
+ class LaurentPolynomialRing_generic(CommutativeRing, Parent):
36
+ """
37
+ Laurent polynomial ring (base class).
38
+
39
+ EXAMPLES:
40
+
41
+ This base class inherits from :class:`~sage.rings.ring.CommutativeRing`.
42
+ Since :issue:`11900`, it is also initialised as such::
43
+
44
+ sage: R.<x1,x2> = LaurentPolynomialRing(QQ)
45
+ sage: R.category()
46
+ Join of Category of unique factorization domains
47
+ and Category of algebras with basis
48
+ over (number fields and quotient fields and metric spaces)
49
+ and Category of commutative algebras
50
+ over (number fields and quotient fields and metric spaces)
51
+ and Category of infinite sets
52
+ sage: TestSuite(R).run()
53
+ """
54
+ def __init__(self, R):
55
+ """
56
+ EXAMPLES::
57
+
58
+ sage: R = LaurentPolynomialRing(QQ, 2, 'x')
59
+ sage: R == loads(dumps(R))
60
+ True
61
+ """
62
+ self._n = R.ngens()
63
+ self._R = R
64
+ names = R.variable_names()
65
+ self._one_element = self.element_class(self, R.one())
66
+ CommutativeRing.__init__(self, R.base_ring(), names=names,
67
+ category=R.category())
68
+ ernames = []
69
+ for n in names:
70
+ ernames.append(n)
71
+ ernames.append(n + "inv")
72
+ ER = PolynomialRing(R.base_ring(), ernames)
73
+ self._extended_ring = ER
74
+ self._extended_ring_ideal = ER.ideal([ER.gen(2*i)*ER.gen(2*i+1)-1 for i in range(self._n)])
75
+
76
+ def ngens(self):
77
+ """
78
+ Return the number of generators of ``self``.
79
+
80
+ EXAMPLES::
81
+
82
+ sage: LaurentPolynomialRing(QQ, 2, 'x').ngens()
83
+ 2
84
+ sage: LaurentPolynomialRing(QQ, 1, 'x').ngens()
85
+ 1
86
+ """
87
+ return self._n
88
+
89
+ def gen(self, i=0):
90
+ r"""
91
+ Return the `i`-th generator of ``self``. If `i` is not specified, then
92
+ the first generator will be returned.
93
+
94
+ EXAMPLES::
95
+
96
+ sage: LaurentPolynomialRing(QQ, 2, 'x').gen()
97
+ x0
98
+ sage: LaurentPolynomialRing(QQ, 2, 'x').gen(0)
99
+ x0
100
+ sage: LaurentPolynomialRing(QQ, 2, 'x').gen(1)
101
+ x1
102
+
103
+ TESTS::
104
+
105
+ sage: LaurentPolynomialRing(QQ, 2, 'x').gen(3)
106
+ Traceback (most recent call last):
107
+ ...
108
+ ValueError: generator not defined
109
+ """
110
+ if i < 0 or i >= self._n:
111
+ raise ValueError("generator not defined")
112
+ try:
113
+ return self.__generators[i]
114
+ except AttributeError:
115
+ self.__generators = tuple(self(x) for x in self._R.gens())
116
+ return self.__generators[i]
117
+
118
+ def variable_names_recursive(self, depth=infinity):
119
+ r"""
120
+ Return the list of variable names of this ring and its base rings,
121
+ as if it were a single multi-variate Laurent polynomial.
122
+
123
+ INPUT:
124
+
125
+ - ``depth`` -- integer or :mod:`Infinity <sage.rings.infinity>`
126
+
127
+ OUTPUT: a tuple of strings
128
+
129
+ EXAMPLES::
130
+
131
+ sage: T = LaurentPolynomialRing(QQ, 'x')
132
+ sage: S = LaurentPolynomialRing(T, 'y')
133
+ sage: R = LaurentPolynomialRing(S, 'z')
134
+ sage: R.variable_names_recursive()
135
+ ('x', 'y', 'z')
136
+ sage: R.variable_names_recursive(2)
137
+ ('y', 'z')
138
+ """
139
+ if depth <= 0:
140
+ return ()
141
+ if depth == 1:
142
+ return self.variable_names()
143
+ my_vars = self.variable_names()
144
+ try:
145
+ return self.base_ring().variable_names_recursive(depth - len(my_vars)) + my_vars
146
+ except AttributeError:
147
+ return my_vars
148
+
149
+ def is_integral_domain(self, proof=True):
150
+ """
151
+ Return ``True`` if ``self`` is an integral domain.
152
+
153
+ EXAMPLES::
154
+
155
+ sage: LaurentPolynomialRing(QQ, 2, 'x').is_integral_domain()
156
+ True
157
+
158
+ The following used to fail; see :issue:`7530`::
159
+
160
+ sage: L = LaurentPolynomialRing(ZZ, 'X')
161
+ sage: L['Y']
162
+ Univariate Polynomial Ring in Y over
163
+ Univariate Laurent Polynomial Ring in X over Integer Ring
164
+ """
165
+ return self.base_ring().is_integral_domain(proof)
166
+
167
+ def is_noetherian(self):
168
+ """
169
+ Return ``True`` if ``self`` is Noetherian.
170
+
171
+ EXAMPLES::
172
+
173
+ sage: LaurentPolynomialRing(QQ, 2, 'x').is_noetherian()
174
+ True
175
+ """
176
+ return self.base_ring().is_noetherian()
177
+
178
+ def construction(self):
179
+ """
180
+ Return the construction of ``self``.
181
+
182
+ EXAMPLES::
183
+
184
+ sage: LaurentPolynomialRing(QQ, 2, 'x,y').construction()
185
+ (LaurentPolynomialFunctor,
186
+ Univariate Laurent Polynomial Ring in x over Rational Field)
187
+ """
188
+ from sage.categories.pushout import LaurentPolynomialFunctor
189
+ from .laurent_polynomial_ring import LaurentPolynomialRing
190
+
191
+ vars = self.variable_names()
192
+ if len(vars) == 1:
193
+ return LaurentPolynomialFunctor(vars[0], False), self.base_ring()
194
+ else:
195
+ return LaurentPolynomialFunctor(vars[-1], True), LaurentPolynomialRing(self.base_ring(), vars[:-1])
196
+
197
+ def completion(self, p=None, prec=20, extras=None):
198
+ r"""
199
+ Return the completion of ``self``.
200
+
201
+ Currently only implemented for the ring of formal Laurent series.
202
+ The ``prec`` variable controls the precision used in the
203
+ Laurent series ring. If ``prec`` is `\infty`, then this
204
+ returns a :class:`LazyLaurentSeriesRing`.
205
+
206
+ EXAMPLES::
207
+
208
+ sage: P.<x> = LaurentPolynomialRing(QQ); P
209
+ Univariate Laurent Polynomial Ring in x over Rational Field
210
+ sage: PP = P.completion(x); PP
211
+ Laurent Series Ring in x over Rational Field
212
+ sage: f = 1 - 1/x
213
+ sage: PP(f)
214
+ -x^-1 + 1
215
+ sage: g = 1 / PP(f); g
216
+ -x - x^2 - x^3 - x^4 - x^5 - x^6 - x^7 - x^8 - x^9 - x^10 - x^11
217
+ - x^12 - x^13 - x^14 - x^15 - x^16 - x^17 - x^18 - x^19 - x^20 + O(x^21)
218
+ sage: 1 / g
219
+ -x^-1 + 1 + O(x^19)
220
+
221
+ sage: # needs sage.combinat
222
+ sage: PP = P.completion(x, prec=oo); PP
223
+ Lazy Laurent Series Ring in x over Rational Field
224
+ sage: g = 1 / PP(f); g
225
+ -x - x^2 - x^3 + O(x^4)
226
+ sage: 1 / g == f
227
+ True
228
+
229
+ TESTS:
230
+
231
+ Check that the precision is taken into account (:issue:`24431`)::
232
+
233
+ sage: L = LaurentPolynomialRing(QQ, 'x')
234
+ sage: L.completion('x', 100).default_prec()
235
+ 100
236
+ sage: L.completion('x', 20).default_prec()
237
+ 20
238
+ """
239
+ if p is None or str(p) == self._names[0] and self._n == 1:
240
+ if prec == float('inf'):
241
+ from sage.rings.lazy_series_ring import LazyLaurentSeriesRing
242
+ sparse = self.polynomial_ring().is_sparse()
243
+ return LazyLaurentSeriesRing(self.base_ring(), names=(self._names[0],), sparse=sparse)
244
+ from sage.rings.laurent_series_ring import LaurentSeriesRing
245
+ R = self.polynomial_ring().completion(self._names[0], prec)
246
+ return LaurentSeriesRing(R)
247
+
248
+ raise TypeError("cannot complete %s with respect to %s" % (self, p))
249
+
250
+ def remove_var(self, var):
251
+ """
252
+ EXAMPLES::
253
+
254
+ sage: R = LaurentPolynomialRing(QQ,'x,y,z')
255
+ sage: R.remove_var('x')
256
+ Multivariate Laurent Polynomial Ring in y, z over Rational Field
257
+ sage: R.remove_var('x').remove_var('y')
258
+ Univariate Laurent Polynomial Ring in z over Rational Field
259
+ """
260
+ from .laurent_polynomial_ring import LaurentPolynomialRing
261
+
262
+ vars = list(self.variable_names())
263
+ vars.remove(str(var))
264
+ return LaurentPolynomialRing(self.base_ring(), vars)
265
+
266
+ def _coerce_map_from_(self, R):
267
+ """
268
+ EXAMPLES::
269
+
270
+ sage: L.<x,y> = LaurentPolynomialRing(QQ)
271
+ sage: L.coerce_map_from(QQ)
272
+ Generic morphism:
273
+ From: Rational Field
274
+ To: Multivariate Laurent Polynomial Ring in x, y over Rational Field
275
+
276
+ Let us check that coercion between Laurent Polynomials over
277
+ different base rings works (:issue:`15345`)::
278
+
279
+ sage: R = LaurentPolynomialRing(ZZ, 'x')
280
+ sage: T = LaurentPolynomialRing(QQ, 'x')
281
+ sage: R.gen() + 3*T.gen()
282
+ 4*x
283
+ """
284
+ if R is self._R:
285
+ return self._generic_coerce_map(R)
286
+ f = self._coerce_map_via([self._R], R)
287
+ if f is not None:
288
+ return f
289
+ if (isinstance(R, LaurentPolynomialRing_generic)
290
+ and self._R.has_coerce_map_from(R._R)):
291
+ return self._generic_coerce_map(R)
292
+
293
+ def __eq__(self, right):
294
+ """
295
+ Check whether ``self`` is equal to ``right``.
296
+
297
+ EXAMPLES::
298
+
299
+ sage: R = LaurentPolynomialRing(QQ,'x,y,z')
300
+ sage: P = LaurentPolynomialRing(ZZ,'x,y,z')
301
+ sage: Q = LaurentPolynomialRing(QQ,'x,y')
302
+
303
+ sage: R == R
304
+ True
305
+ sage: R == Q
306
+ False
307
+ sage: Q == P
308
+ False
309
+ sage: P == R
310
+ False
311
+ """
312
+ if type(self) is not type(right):
313
+ return False
314
+ return self._R == right._R
315
+
316
+ def __ne__(self, other):
317
+ """
318
+ Check whether ``self`` is not equal to ``other``.
319
+
320
+ EXAMPLES::
321
+
322
+ sage: R = LaurentPolynomialRing(QQ,'x,y,z')
323
+ sage: P = LaurentPolynomialRing(ZZ,'x,y,z')
324
+ sage: Q = LaurentPolynomialRing(QQ,'x,y')
325
+
326
+ sage: R != R
327
+ False
328
+ sage: R != Q
329
+ True
330
+ sage: Q != P
331
+ True
332
+ sage: P != R
333
+ True
334
+ """
335
+ return not (self == other)
336
+
337
+ def __hash__(self):
338
+ """
339
+ Return the hash of ``self``.
340
+
341
+ EXAMPLES::
342
+
343
+ sage: h1 = hash(LaurentPolynomialRing(ZZ,'x,y,z'))
344
+ sage: h2 = hash(LaurentPolynomialRing(ZZ,'x,y,z'))
345
+ sage: h3 = hash(LaurentPolynomialRing(QQ,'x,y,z'))
346
+ sage: h4 = hash(LaurentPolynomialRing(ZZ,'x,y'))
347
+ sage: h1 == h2 and h1 != h3 and h1 != h4
348
+ True
349
+ """
350
+ return hash(self._R) ^ 12059065606945654693
351
+
352
+ def _latex_(self):
353
+ r"""
354
+ EXAMPLES::
355
+
356
+ sage: latex(LaurentPolynomialRing(QQ, 2, 'x'))
357
+ \Bold{Q}[x_{0}^{\pm 1}, x_{1}^{\pm 1}]
358
+ """
359
+ from sage.misc.latex import latex
360
+
361
+ vars = ', '.join(a + r'^{\pm 1}' for a in self.latex_variable_names())
362
+ return "%s[%s]" % (latex(self.base_ring()), vars)
363
+
364
+ def _ideal_class_(self, n=0):
365
+ """
366
+ EXAMPLES::
367
+
368
+ sage: LaurentPolynomialRing(QQ, 2, 'x')._ideal_class_()
369
+ Traceback (most recent call last):
370
+ ...
371
+ NotImplementedError
372
+ """
373
+ # One may eventually want ideal classes in these guys.
374
+ raise NotImplementedError
375
+
376
+ def ideal(self, *args, **kwds):
377
+ """
378
+ EXAMPLES::
379
+
380
+ sage: LaurentPolynomialRing(QQ, 2, 'x').ideal([1])
381
+ Ideal (1) of Multivariate Laurent Polynomial Ring in x0, x1 over Rational Field
382
+
383
+ TESTS:
384
+
385
+ check that :issue:`26421` is fixed::
386
+
387
+ sage: R.<t> = LaurentPolynomialRing(ZZ)
388
+ sage: P.<x> = PolynomialRing(R)
389
+ sage: p = x-t
390
+ sage: p.content_ideal() # indirect doctest
391
+ Ideal (-t, 1) of Univariate Laurent Polynomial Ring in t over Integer Ring
392
+ """
393
+ from sage.rings.polynomial.laurent_polynomial_ideal import LaurentPolynomialIdeal
394
+ return LaurentPolynomialIdeal(self, *args, **kwds)
395
+
396
+ def _is_valid_homomorphism_(self, codomain, im_gens, base_map=None):
397
+ """
398
+ EXAMPLES::
399
+
400
+ sage: # needs sage.rings.number_field
401
+ sage: T.<t> = ZZ[]
402
+ sage: K.<i> = NumberField(t^2 + 1)
403
+ sage: L.<x,y> = LaurentPolynomialRing(K)
404
+ sage: L._is_valid_homomorphism_(K, (K(1/2), K(3/2)))
405
+ True
406
+ sage: Q5 = Qp(5); i5 = Q5(-1).sqrt() # needs sage.rings.padics
407
+ sage: L._is_valid_homomorphism_(Q5, (Q5(1/2), Q5(3/2))) # no coercion # needs sage.rings.padics
408
+ False
409
+ sage: L._is_valid_homomorphism_(Q5, (Q5(1/2), Q5(3/2)), base_map=K.hom([i5])) # needs sage.rings.padics
410
+ True
411
+ """
412
+ if base_map is None and not codomain.has_coerce_map_from(self.base_ring()):
413
+ # we need that elements of the base ring
414
+ # canonically coerce into codomain.
415
+ return False
416
+ for a in im_gens:
417
+ # in addition, the image of each generator must be invertible.
418
+ if not a.is_unit():
419
+ return False
420
+ return True
421
+
422
+ def term_order(self):
423
+ """
424
+ Return the term order of ``self``.
425
+
426
+ EXAMPLES::
427
+
428
+ sage: LaurentPolynomialRing(QQ, 2, 'x').term_order()
429
+ Degree reverse lexicographic term order
430
+ """
431
+ return self._R.term_order()
432
+
433
+ def is_finite(self):
434
+ """
435
+ EXAMPLES::
436
+
437
+ sage: LaurentPolynomialRing(QQ, 2, 'x').is_finite()
438
+ False
439
+ """
440
+ return False
441
+
442
+ def is_field(self, proof=True):
443
+ """
444
+ EXAMPLES::
445
+
446
+ sage: LaurentPolynomialRing(QQ, 2, 'x').is_field()
447
+ False
448
+ """
449
+ return False
450
+
451
+ def polynomial_ring(self):
452
+ """
453
+ Return the polynomial ring associated with ``self``.
454
+
455
+ EXAMPLES::
456
+
457
+ sage: LaurentPolynomialRing(QQ, 2, 'x').polynomial_ring()
458
+ Multivariate Polynomial Ring in x0, x1 over Rational Field
459
+ sage: LaurentPolynomialRing(QQ, 1, 'x').polynomial_ring()
460
+ Multivariate Polynomial Ring in x over Rational Field
461
+ """
462
+ return self._R
463
+
464
+ def characteristic(self):
465
+ """
466
+ Return the characteristic of the base ring.
467
+
468
+ EXAMPLES::
469
+
470
+ sage: LaurentPolynomialRing(QQ, 2, 'x').characteristic()
471
+ 0
472
+ sage: LaurentPolynomialRing(GF(3), 2, 'x').characteristic()
473
+ 3
474
+ """
475
+ return self.base_ring().characteristic()
476
+
477
+ def krull_dimension(self):
478
+ """
479
+ EXAMPLES::
480
+
481
+ sage: LaurentPolynomialRing(QQ, 2, 'x').krull_dimension()
482
+ Traceback (most recent call last):
483
+ ...
484
+ NotImplementedError
485
+ """
486
+ raise NotImplementedError
487
+
488
+ def random_element(self, min_valuation=-2, max_degree=2, *args, **kwds):
489
+ """
490
+ Return a random polynomial with degree at most ``max_degree`` and
491
+ lowest valuation at least ``min_valuation``.
492
+
493
+ Uses the random sampling from the base polynomial ring then divides out
494
+ by a monomial to ensure correct ``max_degree`` and ``min_valuation``.
495
+
496
+ INPUT:
497
+
498
+ - ``min_valuation`` -- integer (default: `-2`); the
499
+ minimal allowed valuation of the polynomial
500
+
501
+ - ``max_degree`` -- integer (default: `2`); the
502
+ maximal allowed degree of the polynomial
503
+
504
+ - ``*args``, ``**kwds`` -- passed to the random element generator of the
505
+ base polynomial ring and base ring itself
506
+
507
+ EXAMPLES::
508
+
509
+ sage: L.<x> = LaurentPolynomialRing(QQ)
510
+ sage: f = L.random_element()
511
+ sage: f.degree() <= 2
512
+ True
513
+ sage: f.valuation() >= -2
514
+ True
515
+ sage: f.parent() is L
516
+ True
517
+
518
+ ::
519
+
520
+ sage: L = LaurentPolynomialRing(ZZ, 2, 'x')
521
+ sage: f = L.random_element(10, 20)
522
+ sage: f.degree() <= 20
523
+ True
524
+ sage: f.valuation() >= 10
525
+ True
526
+ sage: f.parent() is L
527
+ True
528
+
529
+ ::
530
+
531
+ sage: L = LaurentPolynomialRing(GF(13), 3, 'x')
532
+ sage: f = L.random_element(-10, -1)
533
+ sage: f.degree() <= -1
534
+ True
535
+ sage: f.valuation() >= -10
536
+ True
537
+ sage: f.parent() is L
538
+ True
539
+
540
+ ::
541
+
542
+ sage: L.<x, y> = LaurentPolynomialRing(RR)
543
+ sage: f = L.random_element()
544
+ sage: f.degree() <= 2
545
+ True
546
+ sage: f.valuation() >= -2
547
+ True
548
+ sage: f.parent() is L
549
+ True
550
+
551
+ ::
552
+
553
+ sage: # needs sage.rings.number_field
554
+ sage: L = LaurentPolynomialRing(QQbar, 5, 'x')
555
+ sage: f = L.random_element(-1, 1)
556
+ sage: f = L.random_element(-1, 1)
557
+ sage: f.degree() <= 1
558
+ True
559
+ sage: f.valuation() >= -1
560
+ True
561
+ sage: f.parent() is L
562
+ True
563
+
564
+ TESTS:
565
+
566
+ Ensure everything works for the multivariate case with only
567
+ one generator::
568
+
569
+ sage: L = LaurentPolynomialRing(ZZ, 1, 'x')
570
+ sage: f = L.random_element(10, 20)
571
+ sage: f.degree() <= 20
572
+ True
573
+ sage: f.valuation() >= 10
574
+ True
575
+ sage: f.parent() is L
576
+ True
577
+
578
+ Test for constructions which use multivariate polynomial rings::
579
+
580
+ sage: rings = [RR, QQ, ZZ, GF(13)]
581
+ sage: rings += [GF(7^3)] # needs sage.rings.finite_rings
582
+ sage: for ring in rings:
583
+ ....: d = randint(1, 6)
584
+ ....: t = randint(5, 20)
585
+ ....: L = LaurentPolynomialRing(ring, d, 'x')
586
+ ....: for _ in range(100):
587
+ ....: n, m = randint(-10, 10), randint(-10, 10)
588
+ ....: if n > m:
589
+ ....: n, m = m, n
590
+ ....: f = L.random_element(n, m, terms=t)
591
+ ....: if f.is_zero(): continue # the zero polynomial is defined to have degree -1
592
+ ....: assert len(list(f)) <= t
593
+ ....: assert f.degree() <= m
594
+ ....: assert f.valuation() >= n
595
+
596
+ Test for constructions which use univariate polynomial rings::
597
+
598
+ sage: rings = [RR, QQ, ZZ, GF(13)]
599
+ sage: rings += [GF(7^3)] # needs sage.rings.finite_rings
600
+ sage: for ring in rings:
601
+ ....: L.<x> = LaurentPolynomialRing(ring)
602
+ ....: for _ in range(100):
603
+ ....: n, m = randint(-10, 10), randint(-10, 10)
604
+ ....: if n > m:
605
+ ....: n, m = m, n
606
+ ....: f = L.random_element(n, m)
607
+ ....: if f.is_zero(): continue # the zero polynomial is defined to have degree -1
608
+ ....: for x in L.gens():
609
+ ....: assert f.degree() <= m
610
+ ....: assert f.valuation() >= n
611
+
612
+ The ``max_degree`` must be greater than or equal to ``min_valuation``::
613
+
614
+ sage: L.<x> = LaurentPolynomialRing(QQ)
615
+ sage: f = L.random_element(1, -1)
616
+ Traceback (most recent call last):
617
+ ...
618
+ ValueError: `max_degree` must be greater than or equal to `min_valuation`
619
+ """
620
+ # Ensure the degree parameters are sensible
621
+ if max_degree < min_valuation:
622
+ raise ValueError("`max_degree` must be greater than or equal to `min_valuation`")
623
+
624
+ # Sample a polynomial in the base ring of degree `max_degree - min_valuation`
625
+ abs_deg = (max_degree - min_valuation)
626
+ f_rand = self._R.random_element(degree=abs_deg, *args, **kwds)
627
+
628
+ # Cast this polynomial back the ``self``
629
+ f = self(f_rand)
630
+
631
+ # For the univariate case we simply shift by x**min_valuation
632
+ if self._n == 1:
633
+ # When there is one generator we either have a univariate class
634
+ # and can shift by min_valuation
635
+ try:
636
+ return f.shift(min_valuation)
637
+ # Or we have a multivariate class with one variable, which does not
638
+ # have the shift method
639
+ except AttributeError:
640
+ return f * self.gen() ** min_valuation
641
+
642
+ # For the multivariate case, we sample a single monomial of degree
643
+ # exactly min_valuation and then use this to shift the polynomial
644
+ # into the correct bounds
645
+ s = self.monomial(*IntegerVectors(abs(min_valuation), self._n).random_element())
646
+ if min_valuation < 0:
647
+ s = ~s
648
+ return f * s
649
+
650
+ def is_exact(self):
651
+ """
652
+ Return ``True`` if the base ring is exact.
653
+
654
+ EXAMPLES::
655
+
656
+ sage: LaurentPolynomialRing(QQ, 2, 'x').is_exact()
657
+ True
658
+ sage: LaurentPolynomialRing(RDF, 2, 'x').is_exact()
659
+ False
660
+ """
661
+ return self.base_ring().is_exact()
662
+
663
+ def change_ring(self, base_ring=None, names=None, sparse=False, order=None):
664
+ """
665
+ EXAMPLES::
666
+
667
+ sage: R = LaurentPolynomialRing(QQ, 2, 'x')
668
+ sage: R.change_ring(ZZ)
669
+ Multivariate Laurent Polynomial Ring in x0, x1 over Integer Ring
670
+
671
+ Check that the distinction between a univariate ring and a multivariate ring with one
672
+ generator is preserved::
673
+
674
+ sage: P.<x> = LaurentPolynomialRing(QQ, 1)
675
+ sage: P
676
+ Multivariate Laurent Polynomial Ring in x over Rational Field
677
+ sage: K.<i> = CyclotomicField(4) # needs sage.rings.number_field
678
+ sage: P.change_ring(K) # needs sage.rings.number_field
679
+ Multivariate Laurent Polynomial Ring in x over
680
+ Cyclotomic Field of order 4 and degree 2
681
+ """
682
+ from .laurent_polynomial_ring import LaurentPolynomialRing, LaurentPolynomialRing_univariate
683
+
684
+ if base_ring is None:
685
+ base_ring = self.base_ring()
686
+ if names is None:
687
+ names = self.variable_names()
688
+ if isinstance(self, LaurentPolynomialRing_univariate):
689
+ return LaurentPolynomialRing(base_ring, names[0], sparse=sparse)
690
+
691
+ if order is None:
692
+ order = self.polynomial_ring().term_order()
693
+ return LaurentPolynomialRing(base_ring, self._n, names, order=order)
694
+
695
+ def fraction_field(self):
696
+ """
697
+ The fraction field is the same as the fraction field of the
698
+ polynomial ring.
699
+
700
+ EXAMPLES::
701
+
702
+ sage: L.<x> = LaurentPolynomialRing(QQ)
703
+ sage: L.fraction_field()
704
+ Fraction Field of Univariate Polynomial Ring in x over Rational Field
705
+ sage: (x^-1 + 2) / (x - 1)
706
+ (2*x + 1)/(x^2 - x)
707
+ """
708
+ return self.polynomial_ring().fraction_field()