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,832 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Ring of Laurent Polynomials
4
+
5
+ If `R` is a commutative ring, then the ring of Laurent polynomials in `n`
6
+ variables over `R` is `R[x_1^{\pm 1}, x_2^{\pm 1}, \ldots, x_n^{\pm 1}]`.
7
+ We implement it as a quotient ring
8
+
9
+ .. MATH::
10
+
11
+ R[x_1, y_1, x_2, y_2, \ldots, x_n, y_n] / (x_1 y_1 - 1, x_2 y_2 - 1, \ldots, x_n y_n - 1).
12
+
13
+ TESTS::
14
+
15
+ sage: P.<q> = LaurentPolynomialRing(QQ)
16
+ sage: qi = q^(-1)
17
+ sage: qi in P
18
+ True
19
+ sage: P(qi)
20
+ q^-1
21
+
22
+ sage: A.<Y> = QQ[]
23
+ sage: R.<X> = LaurentPolynomialRing(A)
24
+ sage: matrix(R,2,2,[X,0,0,1]) # needs sage.modules
25
+ [X 0]
26
+ [0 1]
27
+
28
+ AUTHORS:
29
+
30
+ - David Roe (2008-2-23): created
31
+ - David Loeffler (2009-07-10): cleaned up docstrings
32
+ """
33
+ # ****************************************************************************
34
+ # Copyright (C) 2008 David Roe <roed@math.harvard.edu>,
35
+ # William Stein <wstein@gmail.com>,
36
+ # Mike Hansen <mhansen@gmail.com>
37
+ # Vincent Delecroix <20100.delecroix@gmail.com>
38
+ #
39
+ # This program is free software: you can redistribute it and/or modify
40
+ # it under the terms of the GNU General Public License as published by
41
+ # the Free Software Foundation, either version 2 of the License, or
42
+ # (at your option) any later version.
43
+ # https://www.gnu.org/licenses/
44
+ # ****************************************************************************
45
+
46
+ from sage.misc.lazy_import import LazyImport
47
+ from sage.rings.polynomial.laurent_polynomial import LaurentPolynomial, LaurentPolynomial_univariate
48
+ from sage.rings.polynomial.laurent_polynomial_ring_base import LaurentPolynomialRing_generic
49
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
50
+ from sage.structure.element import parent
51
+
52
+
53
+ def is_LaurentPolynomialRing(R):
54
+ """
55
+ Return ``True`` if and only if R is a Laurent polynomial ring.
56
+
57
+ EXAMPLES::
58
+
59
+ sage: from sage.rings.polynomial.laurent_polynomial_ring import is_LaurentPolynomialRing
60
+ sage: P = PolynomialRing(QQ, 2, 'x')
61
+ sage: is_LaurentPolynomialRing(P)
62
+ doctest:warning...
63
+ DeprecationWarning: is_LaurentPolynomialRing is deprecated; use isinstance(...,
64
+ sage.rings.polynomial.laurent_polynomial_ring_base.LaurentPolynomialRing_generic) instead
65
+ See https://github.com/sagemath/sage/issues/35229 for details.
66
+ False
67
+
68
+ sage: R = LaurentPolynomialRing(QQ,3,'x') # needs sage.modules
69
+ sage: is_LaurentPolynomialRing(R) # needs sage.modules
70
+ True
71
+ """
72
+ from sage.misc.superseded import deprecation
73
+ deprecation(35229,
74
+ "is_LaurentPolynomialRing is deprecated; use "
75
+ "isinstance(..., sage.rings.polynomial.laurent_polynomial_ring_base."
76
+ "LaurentPolynomialRing_generic) instead")
77
+ return isinstance(R, LaurentPolynomialRing_generic)
78
+
79
+
80
+ _cache = {}
81
+
82
+
83
+ def LaurentPolynomialRing(base_ring, *args, **kwds):
84
+ r"""
85
+ Return the globally unique univariate or multivariate Laurent polynomial
86
+ ring with given properties and variable name or names.
87
+
88
+ There are four ways to call the Laurent polynomial ring constructor:
89
+
90
+ 1. ``LaurentPolynomialRing(base_ring, name, sparse=False)``
91
+ 2. ``LaurentPolynomialRing(base_ring, names, order='degrevlex')``
92
+ 3. ``LaurentPolynomialRing(base_ring, name, n, order='degrevlex')``
93
+ 4. ``LaurentPolynomialRing(base_ring, n, name, order='degrevlex')``
94
+
95
+ The optional arguments ``sparse`` and ``order`` *must* be explicitly
96
+ named, and the other arguments must be given positionally.
97
+
98
+ INPUT:
99
+
100
+ - ``base_ring`` -- a commutative ring
101
+ - ``name`` -- string
102
+ - ``names`` -- list or tuple of names, or a comma separated string
103
+ - ``n`` -- positive integer
104
+ - ``sparse`` -- boolean (default: ``False``); whether or not elements are sparse
105
+ - ``order`` -- string or
106
+ :class:`~sage.rings.polynomial.term_order.TermOrder`, e.g.,
107
+
108
+ - ``'degrevlex'`` -- default; degree reverse lexicographic
109
+ - ``'lex'`` -- lexicographic
110
+ - ``'deglex'`` -- degree lexicographic
111
+ - ``TermOrder('deglex',3) + TermOrder('deglex',3)`` -- block ordering
112
+
113
+ OUTPUT:
114
+
115
+ ``LaurentPolynomialRing(base_ring, name, sparse=False)`` returns a
116
+ univariate Laurent polynomial ring; all other input formats return a
117
+ multivariate Laurent polynomial ring.
118
+
119
+ UNIQUENESS and IMMUTABILITY: In Sage there is exactly one
120
+ single-variate Laurent polynomial ring over each base ring in each choice
121
+ of variable and sparseness. There is also exactly one multivariate
122
+ Laurent polynomial ring over each base ring for each choice of names of
123
+ variables and term order.
124
+
125
+ ::
126
+
127
+ sage: R.<x,y> = LaurentPolynomialRing(QQ, 2); R # needs sage.modules
128
+ Multivariate Laurent Polynomial Ring in x, y over Rational Field
129
+ sage: f = x^2 - 2*y^-2 # needs sage.modules
130
+
131
+ You can't just globally change the names of those variables.
132
+ This is because objects all over Sage could have pointers to
133
+ that polynomial ring.
134
+
135
+ ::
136
+
137
+ sage: R._assign_names(['z','w']) # needs sage.modules
138
+ Traceback (most recent call last):
139
+ ...
140
+ ValueError: variable names cannot be changed after object creation.
141
+
142
+ EXAMPLES:
143
+
144
+ 1. ``LaurentPolynomialRing(base_ring, name, sparse=False)``
145
+
146
+ ::
147
+
148
+ sage: LaurentPolynomialRing(QQ, 'w')
149
+ Univariate Laurent Polynomial Ring in w over Rational Field
150
+
151
+ Use the diamond brackets notation to make the variable
152
+ ready for use after you define the ring::
153
+
154
+ sage: R.<w> = LaurentPolynomialRing(QQ)
155
+ sage: (1 + w)^3
156
+ 1 + 3*w + 3*w^2 + w^3
157
+
158
+ You must specify a name::
159
+
160
+ sage: LaurentPolynomialRing(QQ)
161
+ Traceback (most recent call last):
162
+ ...
163
+ TypeError: you must specify the names of the variables
164
+
165
+ sage: R.<abc> = LaurentPolynomialRing(QQ, sparse=True); R
166
+ Univariate Laurent Polynomial Ring in abc over Rational Field
167
+
168
+ sage: R.<w> = LaurentPolynomialRing(PolynomialRing(GF(7),'k')); R
169
+ Univariate Laurent Polynomial Ring in w over
170
+ Univariate Polynomial Ring in k over Finite Field of size 7
171
+
172
+ Rings with different variables are different::
173
+
174
+ sage: LaurentPolynomialRing(QQ, 'x') == LaurentPolynomialRing(QQ, 'y')
175
+ False
176
+
177
+ 2. ``LaurentPolynomialRing(base_ring, names, order='degrevlex')``
178
+
179
+ ::
180
+
181
+ sage: R = LaurentPolynomialRing(QQ, 'a,b,c'); R # needs sage.modules
182
+ Multivariate Laurent Polynomial Ring in a, b, c over Rational Field
183
+
184
+ sage: S = LaurentPolynomialRing(QQ, ['a','b','c']); S # needs sage.modules
185
+ Multivariate Laurent Polynomial Ring in a, b, c over Rational Field
186
+
187
+ sage: T = LaurentPolynomialRing(QQ, ('a','b','c')); T # needs sage.modules
188
+ Multivariate Laurent Polynomial Ring in a, b, c over Rational Field
189
+
190
+ All three rings are identical.
191
+
192
+ ::
193
+
194
+ sage: (R is S) and (S is T) # needs sage.modules
195
+ True
196
+
197
+ There is a unique Laurent polynomial ring with each term order::
198
+
199
+ sage: # needs sage.modules
200
+ sage: R = LaurentPolynomialRing(QQ, 'x,y,z', order='degrevlex'); R
201
+ Multivariate Laurent Polynomial Ring in x, y, z over Rational Field
202
+ sage: S = LaurentPolynomialRing(QQ, 'x,y,z', order='invlex'); S
203
+ Multivariate Laurent Polynomial Ring in x, y, z over Rational Field
204
+ sage: S is LaurentPolynomialRing(QQ, 'x,y,z', order='invlex')
205
+ True
206
+ sage: R == S
207
+ False
208
+
209
+
210
+ 3. ``LaurentPolynomialRing(base_ring, name, n, order='degrevlex')``
211
+
212
+ If you specify a single name as a string and a number of
213
+ variables, then variables labeled with numbers are created.
214
+
215
+ ::
216
+
217
+ sage: LaurentPolynomialRing(QQ, 'x', 10) # needs sage.modules
218
+ Multivariate Laurent Polynomial Ring in x0, x1, x2, x3, x4, x5, x6, x7, x8, x9
219
+ over Rational Field
220
+
221
+ sage: LaurentPolynomialRing(GF(7), 'y', 5) # needs sage.modules
222
+ Multivariate Laurent Polynomial Ring in y0, y1, y2, y3, y4
223
+ over Finite Field of size 7
224
+
225
+ sage: LaurentPolynomialRing(QQ, 'y', 3, sparse=True) # needs sage.modules
226
+ Multivariate Laurent Polynomial Ring in y0, y1, y2 over Rational Field
227
+
228
+ By calling the
229
+ :meth:`~sage.structure.category_object.CategoryObject.inject_variables`
230
+ method, all those variable names are available for interactive use::
231
+
232
+ sage: R = LaurentPolynomialRing(GF(7), 15, 'w'); R # needs sage.modules
233
+ Multivariate Laurent Polynomial Ring in w0, w1, w2, w3, w4, w5, w6, w7,
234
+ w8, w9, w10, w11, w12, w13, w14 over Finite Field of size 7
235
+ sage: R.inject_variables() # needs sage.modules
236
+ Defining w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14
237
+ sage: (w0 + 2*w8 + w13)^2 # needs sage.modules
238
+ w0^2 + 4*w0*w8 + 4*w8^2 + 2*w0*w13 + 4*w8*w13 + w13^2
239
+ """
240
+ from sage.rings.polynomial.polynomial_ring import PolynomialRing_generic
241
+ from sage.rings.polynomial.multi_polynomial_ring_base import MPolynomialRing_base
242
+
243
+ R = PolynomialRing(base_ring, *args, **kwds)
244
+ if R in _cache:
245
+ return _cache[R] # put () here to re-enable weakrefs
246
+
247
+ if isinstance(R, PolynomialRing_generic):
248
+ # univariate case
249
+ P = LaurentPolynomialRing_univariate(R)
250
+ else:
251
+ assert isinstance(R, MPolynomialRing_base)
252
+ P = LaurentPolynomialRing_mpair(R)
253
+
254
+ _cache[R] = P
255
+ return P
256
+
257
+
258
+ def _split_dict_(D, indices, group_by=None):
259
+ r"""
260
+ Split the dictionary ``D`` by ``indices`` and ``group_by``.
261
+
262
+ INPUT:
263
+
264
+ - ``D`` -- dictionary
265
+
266
+ - ``indices`` -- tuple or list of nonnegative integers
267
+
268
+ - ``group_by`` -- tuple or list of nonnegative integers;
269
+ if this is ``None`` (default), then no grouping is done
270
+
271
+ OUTPUT: a dictionary
272
+
273
+ TESTS::
274
+
275
+ sage: from sage.rings.polynomial.laurent_polynomial_ring import _split_dict_
276
+ sage: D = {(0,0,0,0): 'a', (1,0,0,0): 'b',
277
+ ....: (1,0,0,2): 'c', (1,2,0,3): 'd'}
278
+ sage: _split_dict_(D, [1,0,3])
279
+ {(0, 0, 0): 'a', (0, 1, 0): 'b', (0, 1, 2): 'c', (2, 1, 3): 'd'}
280
+ sage: _split_dict_(D, [2,3], [0,1])
281
+ {(0, 0): {(0, 0): 'a'},
282
+ (1, 0): {(0, 0): 'b', (0, 2): 'c'},
283
+ (1, 2): {(0, 3): 'd'}}
284
+ sage: _split_dict_(D, [3,1], [0])
285
+ {(0,): {(0, 0): 'a'}, (1,): {(0, 0): 'b', (2, 0): 'c', (3, 2): 'd'}}
286
+
287
+ sage: _split_dict_(D, [0,None,1,3])
288
+ {(0, 0, 0, 0): 'a', (1, 0, 0, 0): 'b',
289
+ (1, 0, 0, 2): 'c', (1, 0, 2, 3): 'd'}
290
+ sage: _split_dict_(D, [0,1], [None,3,None])
291
+ {(0, 0, 0): {(0, 0): 'a', (1, 0): 'b'},
292
+ (0, 2, 0): {(1, 0): 'c'},
293
+ (0, 3, 0): {(1, 2): 'd'}}
294
+ sage: _split_dict_(D, [None,3,1], [0,None])
295
+ {(0, 0): {(0, 0, 0): 'a'},
296
+ (1, 0): {(0, 0, 0): 'b', (0, 2, 0): 'c',
297
+ (0, 3, 2): 'd'}}
298
+
299
+ sage: _split_dict_(D, [0,1])
300
+ Traceback (most recent call last):
301
+ ...
302
+ SplitDictError: split not possible
303
+ sage: _split_dict_(D, [0], [1])
304
+ Traceback (most recent call last):
305
+ ...
306
+ SplitDictError: split not possible
307
+ sage: _split_dict_({}, [])
308
+ {}
309
+ """
310
+ if not D:
311
+ return {}
312
+ if group_by is None:
313
+ group_by = tuple()
314
+
315
+ class SplitDictError(ValueError):
316
+ pass
317
+
318
+ def get(T, i):
319
+ return T[i] if i is not None else 0
320
+
321
+ def extract(T, indices):
322
+ return tuple(get(T, i) for i in indices)
323
+
324
+ remaining = sorted(set(range(len(next(iter(D)))))
325
+ - set(indices) - set(group_by))
326
+ result = {}
327
+ for K, V in D.items():
328
+ if not all(r == 0 for r in extract(K, remaining)):
329
+ raise SplitDictError('split not possible')
330
+ G = extract(K, group_by)
331
+ I = extract(K, indices)
332
+ result.setdefault(G, dict()).update({I: V})
333
+ if not group_by:
334
+ return result.popitem()[1]
335
+ else:
336
+ return result
337
+
338
+
339
+ def _split_laurent_polynomial_dict_(P, M, d):
340
+ r"""
341
+ Helper function for splitting a multivariate Laurent polynomial
342
+ during conversion.
343
+
344
+ INPUT:
345
+
346
+ - ``P`` -- the parent to which we want to convert
347
+
348
+ - ``M`` -- the parent from which we want to convert
349
+
350
+ - ``d`` -- dictionary mapping tuples (representing the exponents)
351
+ to their coefficients. This is the dictionary corresponding to
352
+ an element of ``M``.
353
+
354
+ OUTPUT: a dictionary corresponding to an element of ``P``
355
+
356
+ TESTS::
357
+
358
+ sage: # needs sage.modules
359
+ sage: L.<a, b, c, d> = LaurentPolynomialRing(ZZ)
360
+ sage: M = LaurentPolynomialRing(ZZ, 'c, d')
361
+ sage: N = LaurentPolynomialRing(M, 'a, b')
362
+ sage: M(c/d + 1/c) # indirect doctest
363
+ c*d^-1 + c^-1
364
+ sage: N(a + b/c/d + 1/b) # indirect doctest
365
+ a + (c^-1*d^-1)*b + b^-1
366
+ """
367
+ vars_P = P.variable_names()
368
+ vars_M = M.variable_names()
369
+ if not set(vars_M) & set(vars_P):
370
+ raise TypeError('no common variables')
371
+
372
+ def index(T, value):
373
+ try:
374
+ return T.index(value)
375
+ except ValueError:
376
+ return None
377
+
378
+ def value(d, R):
379
+ assert d
380
+ if len(d) == 1:
381
+ k, v = next(iter(d.items()))
382
+ if all(i == 0 for i in k):
383
+ return R(v)
384
+ return R(M(d))
385
+
386
+ group_by = tuple(index(vars_M, var) for var in vars_P)
387
+ indices = list(range(len(vars_M)))
388
+ for g in group_by:
389
+ if g is not None:
390
+ indices[g] = None
391
+ D = _split_dict_(d, indices, group_by)
392
+ try:
393
+ return {k: value(v, P.base_ring()) for k, v in D.items()}
394
+ except (ValueError, TypeError):
395
+ pass
396
+ return sum(P({k: 1}) * value(v, P)
397
+ for k, v in D.items()).monomial_coefficients()
398
+
399
+
400
+ def from_fraction_field(L, x):
401
+ r"""
402
+ Helper function to construct a Laurent polynomial from an element of its
403
+ parent's fraction field.
404
+
405
+ INPUT:
406
+
407
+ - ``L`` -- an instance of :class:`LaurentPolynomialRing_generic`
408
+ - ``x`` -- an element of the fraction field of ``L``
409
+
410
+ OUTPUT:
411
+
412
+ An instance of the element class of ``L``. If the denominator fails to be
413
+ a unit in ``L`` an error is raised.
414
+
415
+ EXAMPLES::
416
+
417
+ sage: # needs sage.modules
418
+ sage: from sage.rings.polynomial.laurent_polynomial_ring import from_fraction_field
419
+ sage: L.<x, y> = LaurentPolynomialRing(ZZ)
420
+ sage: F = L.fraction_field()
421
+ sage: xi = F(~x)
422
+ sage: from_fraction_field(L, xi) == ~x
423
+ True
424
+ """
425
+ d = L(x.denominator())
426
+ if d.is_unit():
427
+ n = L(x.numerator())
428
+ return n * d.inverse_of_unit()
429
+ else:
430
+ raise TypeError("fraction must have unit denominator")
431
+
432
+
433
+ class LaurentPolynomialRing_univariate(LaurentPolynomialRing_generic):
434
+ def __init__(self, R):
435
+ """
436
+ EXAMPLES::
437
+
438
+ sage: L = LaurentPolynomialRing(QQ,'x')
439
+ sage: type(L)
440
+ <class 'sage.rings.polynomial.laurent_polynomial_ring.LaurentPolynomialRing_univariate_with_category'>
441
+ sage: TestSuite(L).run()
442
+
443
+ TESTS::
444
+
445
+ sage: TestSuite(LaurentPolynomialRing(Zmod(2), 'y')).run()
446
+ sage: TestSuite(LaurentPolynomialRing(Zmod(4), 'y')).run()
447
+ sage: TestSuite(LaurentPolynomialRing(ZZ, 'u')).run()
448
+ sage: TestSuite(LaurentPolynomialRing(Zmod(2)['T'], 'u')).run()
449
+ sage: TestSuite(LaurentPolynomialRing(Zmod(4)['T'], 'u')).run()
450
+ """
451
+ if R.ngens() != 1:
452
+ raise ValueError("must be 1 generator")
453
+ LaurentPolynomialRing_generic.__init__(self, R)
454
+ from sage.rings.integer_ring import IntegerRing
455
+ self._indices = IntegerRing()
456
+
457
+ Element = LaurentPolynomial_univariate
458
+
459
+ def _repr_(self):
460
+ """
461
+ TESTS::
462
+
463
+ sage: LaurentPolynomialRing(QQ,'x') # indirect doctest
464
+ Univariate Laurent Polynomial Ring in x over Rational Field
465
+ """
466
+ return "Univariate Laurent Polynomial Ring in %s over %s" % (self._R.variable_name(), self._R.base_ring())
467
+
468
+ def _element_constructor_(self, x):
469
+ """
470
+ EXAMPLES::
471
+
472
+ sage: L = LaurentPolynomialRing(QQ, 'x')
473
+ sage: L(1/2)
474
+ 1/2
475
+
476
+ sage: L(x + 3/x) # needs sage.symbolic
477
+ 3*x^-1 + x
478
+
479
+ ::
480
+
481
+ sage: L(exp(x)) # needs sage.symbolic
482
+ Traceback (most recent call last):
483
+ ...
484
+ TypeError: unable to convert e^x to a rational
485
+
486
+ ::
487
+
488
+ sage: # needs sage.modules
489
+ sage: U = LaurentPolynomialRing(QQ, 'a')
490
+ sage: V = LaurentPolynomialRing(QQ, 'c')
491
+ sage: L.<a, b, c, d> = LaurentPolynomialRing(QQ)
492
+ sage: M = LaurentPolynomialRing(QQ, 'c, d')
493
+ sage: Mc, Md = M.gens()
494
+ sage: N = LaurentPolynomialRing(M, 'a, b')
495
+ sage: Na, Nb = N.gens()
496
+ sage: U(Na)
497
+ a
498
+ sage: V(Mc)
499
+ c
500
+
501
+ sage: # needs sage.modules
502
+ sage: M(L(0))
503
+ 0
504
+ sage: N(L(0))
505
+ 0
506
+ sage: L(M(0))
507
+ 0
508
+ sage: L(N(0))
509
+ 0
510
+
511
+ ::
512
+
513
+ sage: A.<a> = LaurentPolynomialRing(QQ)
514
+ sage: B.<b> = LaurentPolynomialRing(A)
515
+ sage: B(a)
516
+ a
517
+ sage: C.<c> = LaurentPolynomialRing(B)
518
+ sage: B(C(b))
519
+ b
520
+ sage: D.<d, e> = LaurentPolynomialRing(B) # needs sage.modules
521
+ sage: B(D(b)) # needs sage.modules
522
+ b
523
+
524
+ TESTS:
525
+
526
+ Check that conversion back from fraction field does work (:issue:`26425`)::
527
+
528
+ sage: R.<t> = LaurentPolynomialRing(ZZ)
529
+ sage: F = FractionField(R)
530
+ sage: R(F(25/(5*t**2)))
531
+ 5*t^-2
532
+ sage: R(F(1/(1+t**2)))
533
+ Traceback (most recent call last):
534
+ ...
535
+ TypeError: fraction must have unit denominator
536
+ """
537
+ from sage.structure.element import Expression
538
+ from sage.rings.fraction_field_element import FractionFieldElement
539
+ from sage.rings.localization import LocalizationElement
540
+ if isinstance(x, Expression):
541
+ return x.laurent_polynomial(ring=self)
542
+
543
+ elif isinstance(x, LaurentPolynomial):
544
+ P = x.parent()
545
+ if set(self.variable_names()) & set(P.variable_names()):
546
+ if isinstance(x, LaurentPolynomial_univariate):
547
+ d = {(k,): v for k, v in x.monomial_coefficients().items()}
548
+ else:
549
+ d = x.monomial_coefficients()
550
+ x = _split_laurent_polynomial_dict_(self, P, d)
551
+ x = {k[0]: v for k, v in x.items()}
552
+ elif P is self.base_ring():
553
+ x = {0: x}
554
+ elif x.is_constant() and self.has_coerce_map_from(x.parent().base_ring()):
555
+ return self(x.constant_coefficient())
556
+ elif len(self.variable_names()) == len(P.variable_names()):
557
+ x = x.monomial_coefficients()
558
+
559
+ elif isinstance(x, FractionFieldElement):
560
+ # since the field of fraction of self is defined corresponding to
561
+ # the polynomial ring of self the conversion of its elements back
562
+ # must be treated separately (:issue:`26425`).
563
+ return from_fraction_field(self, x)
564
+
565
+ elif isinstance(x, LocalizationElement):
566
+ # see :issue:`33477`.
567
+ F = self.fraction_field()
568
+ return from_fraction_field(self, F(x))
569
+
570
+ return self.element_class(self, x)
571
+
572
+ def monomial(self, arg):
573
+ r"""
574
+ Return the monomial with the given exponent.
575
+ """
576
+ return self.element_class(self, {arg: self.base_ring().one()})
577
+
578
+ def __reduce__(self):
579
+ """
580
+ Used in pickling.
581
+
582
+ EXAMPLES::
583
+
584
+ sage: L = LaurentPolynomialRing(QQ, 'x')
585
+ sage: loads(dumps(L)) == L
586
+ True
587
+ """
588
+ return LaurentPolynomialRing_univariate, (self._R,)
589
+
590
+
591
+ class LaurentPolynomialRing_mpair(LaurentPolynomialRing_generic):
592
+ def __init__(self, R):
593
+ """
594
+ EXAMPLES::
595
+
596
+ sage: L = LaurentPolynomialRing(QQ,2,'x') # needs sage.modules
597
+ sage: type(L) # needs sage.modules
598
+ <class
599
+ 'sage.rings.polynomial.laurent_polynomial_ring.LaurentPolynomialRing_mpair_with_category'>
600
+ sage: L == loads(dumps(L)) # needs sage.modules
601
+ True
602
+ """
603
+ if R.ngens() <= 0:
604
+ raise ValueError("n must be positive")
605
+ if not R.base_ring().is_integral_domain():
606
+ raise ValueError("base ring must be an integral domain")
607
+ LaurentPolynomialRing_generic.__init__(self, R)
608
+ from sage.modules.free_module import FreeModule
609
+ from sage.rings.integer_ring import IntegerRing
610
+ self._indices = FreeModule(IntegerRing(), R.ngens())
611
+
612
+ Element = LazyImport('sage.rings.polynomial.laurent_polynomial_mpair', 'LaurentPolynomial_mpair')
613
+
614
+ def _repr_(self):
615
+ """
616
+ TESTS::
617
+
618
+ sage: LaurentPolynomialRing(QQ,2,'x').__repr__() # needs sage.modules
619
+ 'Multivariate Laurent Polynomial Ring in x0, x1 over Rational Field'
620
+ sage: LaurentPolynomialRing(QQ,1,'x').__repr__() # needs sage.modules
621
+ 'Multivariate Laurent Polynomial Ring in x over Rational Field'
622
+ """
623
+ return "Multivariate Laurent Polynomial Ring in %s over %s" % (", ".join(self._R.variable_names()), self._R.base_ring())
624
+
625
+ def monomial(self, *exponents):
626
+ r"""
627
+ Return the monomial whose exponents are given in argument.
628
+
629
+ EXAMPLES::
630
+
631
+ sage: # needs sage.modules
632
+ sage: L = LaurentPolynomialRing(QQ, 'x', 2)
633
+ sage: L.monomial(-3, 5)
634
+ x0^-3*x1^5
635
+ sage: L.monomial(1, 1)
636
+ x0*x1
637
+ sage: L.monomial(0, 0)
638
+ 1
639
+ sage: L.monomial(-2, -3)
640
+ x0^-2*x1^-3
641
+
642
+ sage: x0, x1 = L.gens() # needs sage.modules
643
+ sage: L.monomial(-1, 2) == x0^-1 * x1^2 # needs sage.modules
644
+ True
645
+
646
+ sage: L.monomial(1, 2, 3) # needs sage.modules
647
+ Traceback (most recent call last):
648
+ ...
649
+ TypeError: tuple key (1, 2, 3) must have same length as ngens (= 2)
650
+
651
+ We also allow to specify the exponents in a single tuple::
652
+
653
+ sage: L.monomial((-1, 2)) # needs sage.modules
654
+ x0^-1*x1^2
655
+
656
+ sage: L.monomial((-1, 2, 3)) # needs sage.modules
657
+ Traceback (most recent call last):
658
+ ...
659
+ TypeError: tuple key (-1, 2, 3) must have same length as ngens (= 2)
660
+ """
661
+ from sage.rings.polynomial.polydict import ETuple
662
+ if len(exponents) == 1 and isinstance((e := exponents[0]), (tuple, ETuple)):
663
+ exponents = e
664
+
665
+ if len(exponents) != self.ngens():
666
+ raise TypeError(f"tuple key {exponents} must have same length as ngens (= {self.ngens()})")
667
+
668
+ m = ETuple(exponents, int(self.ngens()))
669
+ return self.element_class(self, self.polynomial_ring().base_ring().one(), m)
670
+
671
+ def _element_constructor_(self, x, mon=None):
672
+ """
673
+ EXAMPLES::
674
+
675
+ sage: L = LaurentPolynomialRing(QQ,2,'x') # needs sage.modules
676
+ sage: L(1/2) # needs sage.modules
677
+ 1/2
678
+
679
+ sage: M = LaurentPolynomialRing(QQ, 'x, y') # needs sage.modules
680
+ sage: var('x, y') # needs sage.modules sage.symbolic
681
+ (x, y)
682
+ sage: M(x/y + 3/x) # needs sage.modules sage.symbolic
683
+ x*y^-1 + 3*x^-1
684
+
685
+ ::
686
+
687
+ sage: M(exp(x)) # needs sage.modules sage.symbolic
688
+ Traceback (most recent call last):
689
+ ...
690
+ TypeError: unable to convert e^x to a rational
691
+
692
+ ::
693
+
694
+ sage: # needs sage.modules
695
+ sage: L.<a, b, c, d> = LaurentPolynomialRing(QQ)
696
+ sage: M = LaurentPolynomialRing(QQ, 'c, d')
697
+ sage: Mc, Md = M.gens()
698
+ sage: N = LaurentPolynomialRing(M, 'a, b')
699
+ sage: Na, Nb = N.gens()
700
+ sage: M(c/d)
701
+ c*d^-1
702
+ sage: N(a*b/c/d)
703
+ (c^-1*d^-1)*a*b
704
+ sage: N(c/d)
705
+ c*d^-1
706
+ sage: L(Mc)
707
+ c
708
+ sage: L(Nb)
709
+ b
710
+
711
+ sage: # needs sage.modules
712
+ sage: M(L(0))
713
+ 0
714
+ sage: N(L(0))
715
+ 0
716
+ sage: L(M(0))
717
+ 0
718
+ sage: L(N(0))
719
+ 0
720
+
721
+ sage: # needs sage.modules
722
+ sage: U = LaurentPolynomialRing(QQ, 'a')
723
+ sage: Ua = U.gen()
724
+ sage: V = LaurentPolynomialRing(QQ, 'c')
725
+ sage: Vc = V.gen()
726
+ sage: L(Ua)
727
+ a
728
+ sage: L(Vc)
729
+ c
730
+ sage: N(Ua)
731
+ a
732
+ sage: M(Vc)
733
+ c
734
+
735
+ sage: # needs sage.modules
736
+ sage: P = LaurentPolynomialRing(QQ, 'a, b')
737
+ sage: Q = LaurentPolynomialRing(P, 'c, d')
738
+ sage: Q(P.0)
739
+ a
740
+
741
+ ::
742
+
743
+ sage: # needs sage.modules
744
+ sage: A.<a> = LaurentPolynomialRing(QQ)
745
+ sage: B.<b> = LaurentPolynomialRing(A)
746
+ sage: C = LaurentPolynomialRing(QQ, 'a, b')
747
+ sage: C(B({1: a}))
748
+ a*b
749
+ sage: D.<d, e> = LaurentPolynomialRing(B)
750
+ sage: F.<f, g> = LaurentPolynomialRing(D)
751
+ sage: D(F(d*e))
752
+ d*e
753
+
754
+ ::
755
+
756
+ sage: # needs sage.modules
757
+ sage: from sage.rings.polynomial.polydict import ETuple
758
+ sage: R.<x,y,z> = LaurentPolynomialRing(QQ)
759
+ sage: mon = ETuple({}, int(3))
760
+ sage: P = R.polynomial_ring()
761
+ sage: R(sum(P.gens()), mon)
762
+ x + y + z
763
+ sage: R(sum(P.gens()), (-1,-1,-1))
764
+ y^-1*z^-1 + x^-1*z^-1 + x^-1*y^-1
765
+
766
+ ::
767
+
768
+ sage: # needs sage.modules
769
+ sage: RL = R.localization(x + 1)
770
+ sage: xi = RL(~x)
771
+ sage: R(xi) == ~x # indirect doctests
772
+ True
773
+ """
774
+ from sage.structure.element import Expression
775
+ from sage.rings.fraction_field_element import FractionFieldElement
776
+ from sage.rings.localization import LocalizationElement
777
+
778
+ if mon is not None:
779
+ return self.element_class(self, x, mon)
780
+
781
+ P = parent(x)
782
+ if P is self.polynomial_ring():
783
+ from sage.rings.polynomial.polydict import ETuple
784
+ return self.element_class( self, x, mon=ETuple({}, int(self.ngens())) )
785
+
786
+ elif isinstance(x, Expression):
787
+ return x.laurent_polynomial(ring=self)
788
+
789
+ elif isinstance(x, LaurentPolynomial):
790
+ if self.variable_names() == P.variable_names():
791
+ # No special processing needed here;
792
+ # handled by LaurentPolynomial_mpair.__init__
793
+ pass
794
+ elif set(self.variable_names()) & set(P.variable_names()):
795
+ if isinstance(x, LaurentPolynomial_univariate):
796
+ d = {(k,): v for k, v in x.monomial_coefficients().items()}
797
+ else:
798
+ d = x.monomial_coefficients()
799
+ x = _split_laurent_polynomial_dict_(self, P, d)
800
+ elif P is self.base_ring():
801
+ from sage.rings.polynomial.polydict import ETuple
802
+ mz = ETuple({}, int(self.ngens()))
803
+ return self.element_class(self, {mz: x}, mz)
804
+ elif x.is_constant() and self.has_coerce_map_from(P.base_ring()):
805
+ return self(x.constant_coefficient())
806
+ elif len(self.variable_names()) == len(P.variable_names()):
807
+ x = x.monomial_coefficients()
808
+
809
+ elif isinstance(x, FractionFieldElement):
810
+ # since the field of fraction of self is defined corresponding to
811
+ # the polynomial ring of self the conversion of its elements back
812
+ # must be treated separately (:issue:`33477`).
813
+ return from_fraction_field(self, x)
814
+
815
+ elif isinstance(x, LocalizationElement):
816
+ # see :issue:`33477`.
817
+ F = self.fraction_field()
818
+ return from_fraction_field(self, F(x))
819
+
820
+ return self.element_class(self, x)
821
+
822
+ def __reduce__(self):
823
+ """
824
+ Used in pickling.
825
+
826
+ EXAMPLES::
827
+
828
+ sage: L = LaurentPolynomialRing(QQ, 2, 'x') # needs sage.modules
829
+ sage: loads(dumps(L)) == L # needs sage.modules
830
+ True
831
+ """
832
+ return LaurentPolynomialRing_mpair, (self._R,)