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,931 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ """
3
+ Laurent Series Rings
4
+
5
+ EXAMPLES::
6
+
7
+ sage: R = LaurentSeriesRing(QQ, "x")
8
+ sage: R.base_ring()
9
+ Rational Field
10
+ sage: S = LaurentSeriesRing(GF(17)['x'], 'y')
11
+ sage: S
12
+ Laurent Series Ring in y over
13
+ Univariate Polynomial Ring in x over Finite Field of size 17
14
+ sage: S.base_ring()
15
+ Univariate Polynomial Ring in x over Finite Field of size 17
16
+
17
+ .. SEEALSO::
18
+
19
+ * :func:`sage.misc.defaults.set_series_precision`
20
+ """
21
+ # ****************************************************************************
22
+ # Copyright (C) 2006 William Stein <wstein@gmail.com>
23
+ # 2007 Robert Bradshaw <robertwb@math.washington.edu>
24
+ # 2012 David Roe <roed.math@gmail.com>
25
+ # 2014 Peter Bruin <P.J.Bruin@math.leidenuniv.nl>
26
+ # 2017 Vincent Delecroix <20100.delecroix@gmail.com>
27
+ #
28
+ # This program is free software: you can redistribute it and/or modify
29
+ # it under the terms of the GNU General Public License as published by
30
+ # the Free Software Foundation, either version 2 of the License, or
31
+ # (at your option) any later version.
32
+ # https://www.gnu.org/licenses/
33
+ # ****************************************************************************
34
+
35
+
36
+ from sage.categories.algebras import Algebras
37
+ from sage.categories.complete_discrete_valuation import CompleteDiscreteValuationFields
38
+ from sage.categories.fields import Fields
39
+ from sage.categories.integral_domains import IntegralDomains
40
+ from sage.categories.rings import Rings
41
+ from sage.misc.cachefunc import cached_method
42
+ from sage.misc.lazy_import import lazy_import
43
+ from sage.rings.infinity import infinity
44
+ from sage.rings.integer_ring import ZZ
45
+ from sage.rings.laurent_series_ring_element import LaurentSeries
46
+ from sage.structure.parent import Parent
47
+ from sage.structure.unique_representation import UniqueRepresentation
48
+
49
+ try:
50
+ from cypari2.gen import Gen as pari_gen
51
+ except ImportError:
52
+ pari_gen = ()
53
+
54
+ lazy_import('sage.rings.polynomial.laurent_polynomial_ring_base', 'LaurentPolynomialRing_generic')
55
+ lazy_import('sage.rings.lazy_series', ['LazyPowerSeries', 'LazyLaurentSeries'])
56
+ lazy_import('sage.rings.lazy_series_ring', ('LazyPowerSeriesRing', 'LazyLaurentSeriesRing'))
57
+ lazy_import('sage.rings.polynomial.polynomial_ring', 'PolynomialRing_generic')
58
+ lazy_import('sage.rings.power_series_ring', 'PowerSeriesRing_generic')
59
+
60
+
61
+ def is_LaurentSeriesRing(x):
62
+ """
63
+ Return ``True`` if this is a *univariate* Laurent series ring.
64
+
65
+ This is in keeping with the behavior of ``is_PolynomialRing``
66
+ versus ``is_MPolynomialRing``.
67
+
68
+ TESTS::
69
+
70
+ sage: from sage.rings.laurent_series_ring import is_LaurentSeriesRing
71
+ sage: K.<q> = LaurentSeriesRing(QQ)
72
+ sage: is_LaurentSeriesRing(K)
73
+ doctest:warning...
74
+ DeprecationWarning: The function is_LaurentSeriesRing is deprecated;
75
+ use 'isinstance(..., (LaurentSeriesRing, LazyLaurentSeriesRing))' instead.
76
+ See https://github.com/sagemath/sage/issues/38290 for details.
77
+ True
78
+ sage: L.<z> = LazyLaurentSeriesRing(QQ) # needs sage.combinat
79
+ sage: is_LaurentSeriesRing(L) # needs sage.combinat
80
+ True
81
+ """
82
+ from sage.misc.superseded import deprecation
83
+ deprecation(38290,
84
+ "The function is_LaurentSeriesRing is deprecated; "
85
+ "use 'isinstance(..., (LaurentSeriesRing, LazyLaurentSeriesRing))' instead.")
86
+ return isinstance(x, (LaurentSeriesRing, LazyLaurentSeriesRing))
87
+
88
+
89
+ class LaurentSeriesRing(UniqueRepresentation, Parent):
90
+ r"""
91
+ Univariate Laurent Series Ring.
92
+
93
+ EXAMPLES::
94
+
95
+ sage: R = LaurentSeriesRing(QQ, 'x'); R
96
+ Laurent Series Ring in x over Rational Field
97
+ sage: x = R.0
98
+ sage: g = 1 - x + x^2 - x^4 + O(x^8); g
99
+ 1 - x + x^2 - x^4 + O(x^8)
100
+ sage: g = 10*x^(-3) + 2006 - 19*x + x^2 - x^4 +O(x^8); g
101
+ 10*x^-3 + 2006 - 19*x + x^2 - x^4 + O(x^8)
102
+
103
+ You can also use more mathematical notation when the base is a
104
+ field::
105
+
106
+ sage: Frac(QQ[['x']])
107
+ Laurent Series Ring in x over Rational Field
108
+ sage: Frac(GF(5)['y'])
109
+ Fraction Field of Univariate Polynomial Ring in y over Finite Field of size 5
110
+
111
+ When the base ring is a domain, the fraction field is the
112
+ Laurent series ring over the fraction field of the base ring::
113
+
114
+ sage: Frac(ZZ[['t']])
115
+ Laurent Series Ring in t over Rational Field
116
+
117
+ Laurent series rings are determined by their variable and the base
118
+ ring, and are globally unique::
119
+
120
+ sage: # needs sage.rings.padics
121
+ sage: K = Qp(5, prec=5)
122
+ sage: L = Qp(5, prec=200)
123
+ sage: R.<x> = LaurentSeriesRing(K)
124
+ sage: S.<y> = LaurentSeriesRing(L)
125
+ sage: R is S
126
+ False
127
+ sage: T.<y> = LaurentSeriesRing(Qp(5, prec=200))
128
+ sage: S is T
129
+ True
130
+ sage: W.<y> = LaurentSeriesRing(Qp(5, prec=199))
131
+ sage: W is T
132
+ False
133
+
134
+ sage: K = LaurentSeriesRing(CC, 'q'); K # needs sage.rings.real_mpfr
135
+ Laurent Series Ring in q over Complex Field with 53 bits of precision
136
+ sage: loads(K.dumps()) == K # needs sage.rings.real_mpfr
137
+ True
138
+ sage: P = QQ[['x']]
139
+ sage: F = Frac(P)
140
+ sage: TestSuite(F).run()
141
+
142
+ When the base ring `k` is a field, the ring `k((x))` is a CDVF, that is
143
+ a field equipped with a discrete valuation for which it is complete.
144
+ The appropriate (sub)category is automatically set in this case::
145
+
146
+ sage: k = GF(11)
147
+ sage: R.<x> = k[[]]
148
+ sage: F = Frac(R)
149
+ sage: F.category()
150
+ Join of
151
+ Category of complete discrete valuation fields and
152
+ Category of commutative algebras over (finite enumerated fields and
153
+ subquotients of monoids and quotients of semigroups) and
154
+ Category of infinite sets
155
+ sage: TestSuite(F).run()
156
+
157
+ TESTS:
158
+
159
+ Check if changing global series precision does it right (and
160
+ that :issue:`17955` is fixed)::
161
+
162
+ sage: set_series_precision(3)
163
+ sage: R.<x> = LaurentSeriesRing(ZZ)
164
+ sage: 1/(1 - 2*x)
165
+ 1 + 2*x + 4*x^2 + O(x^3)
166
+ sage: set_series_precision(5)
167
+ sage: R.<x> = LaurentSeriesRing(ZZ)
168
+ sage: 1/(1 - 2*x)
169
+ 1 + 2*x + 4*x^2 + 8*x^3 + 16*x^4 + O(x^5)
170
+ sage: set_series_precision(20)
171
+
172
+ Check categories (:issue:`24420`)::
173
+
174
+ sage: LaurentSeriesRing(ZZ, 'x').category()
175
+ Category of infinite commutative no zero divisors algebras
176
+ over (Dedekind domains and euclidean domains
177
+ and noetherian rings and infinite enumerated sets and metric spaces)
178
+ sage: LaurentSeriesRing(QQ, 'x').category()
179
+ Join of Category of complete discrete valuation fields and Category of commutative algebras
180
+ over (number fields and quotient fields and metric spaces) and Category of infinite sets
181
+ sage: LaurentSeriesRing(Zmod(4), 'x').category()
182
+ Category of infinite commutative algebras
183
+ over (finite commutative rings and subquotients of monoids and quotients of semigroups and finite enumerated sets)
184
+
185
+ Check coercions (:issue:`24431`)::
186
+
187
+ sage: pts = [LaurentSeriesRing,
188
+ ....: PolynomialRing,
189
+ ....: PowerSeriesRing,
190
+ ....: LaurentPolynomialRing]
191
+ sage: LS = LaurentSeriesRing(QQ, 'x')
192
+ sage: LSx = LS.gen()
193
+
194
+ sage: for P in pts:
195
+ ....: x = P(QQ, 'x').gen()
196
+ ....: assert parent(LSx * x) is LS, "wrong parent for {}".format(P)
197
+
198
+ sage: for P in pts:
199
+ ....: y = P(QQ, 'y').gen()
200
+ ....: try:
201
+ ....: LSx * y
202
+ ....: except TypeError:
203
+ ....: pass
204
+ ....: else:
205
+ ....: print("wrong coercion {}".format(P))
206
+ """
207
+ Element = LaurentSeries
208
+
209
+ @staticmethod
210
+ def __classcall__(cls, *args, **kwds):
211
+ r"""
212
+ TESTS::
213
+
214
+ sage: L = LaurentSeriesRing(QQ, 'q')
215
+ sage: L is LaurentSeriesRing(QQ, name='q')
216
+ True
217
+ sage: loads(dumps(L)) is L
218
+ True
219
+
220
+ sage: L.variable_names()
221
+ ('q',)
222
+ sage: L.variable_name()
223
+ 'q'
224
+ """
225
+ from .power_series_ring import PowerSeriesRing
226
+
227
+ if not kwds and len(args) == 1 and isinstance(args[0], (PowerSeriesRing_generic, LazyPowerSeriesRing)):
228
+ power_series = args[0]
229
+ else:
230
+ power_series = PowerSeriesRing(*args, **kwds)
231
+
232
+ return UniqueRepresentation.__classcall__(cls, power_series)
233
+
234
+ def __init__(self, power_series):
235
+ """
236
+ Initialization.
237
+
238
+ EXAMPLES::
239
+
240
+ sage: K.<q> = LaurentSeriesRing(QQ, default_prec=4); K
241
+ Laurent Series Ring in q over Rational Field
242
+ sage: 1 / (q-q^2)
243
+ q^-1 + 1 + q + q^2 + O(q^3)
244
+
245
+ sage: RZZ = LaurentSeriesRing(ZZ, 't')
246
+ sage: RZZ.category()
247
+ Category of infinite commutative no zero divisors algebras
248
+ over (Dedekind domains and euclidean domains
249
+ and noetherian rings and infinite enumerated sets
250
+ and metric spaces)
251
+ sage: TestSuite(RZZ).run()
252
+
253
+ sage: R1 = LaurentSeriesRing(Zmod(1), 't')
254
+ sage: R1.category()
255
+ Category of finite commutative algebras
256
+ over (finite commutative rings and subquotients of monoids and quotients of semigroups and finite enumerated sets)
257
+ sage: TestSuite(R1).run()
258
+
259
+ sage: R2 = LaurentSeriesRing(Zmod(2), 't')
260
+ sage: R2.category()
261
+ Join of Category of complete discrete valuation fields
262
+ and Category of commutative algebras over (finite enumerated fields and subquotients of monoids and quotients of semigroups)
263
+ and Category of infinite sets
264
+ sage: TestSuite(R2).run()
265
+
266
+ sage: R4 = LaurentSeriesRing(Zmod(4), 't')
267
+ sage: R4.category()
268
+ Category of infinite commutative algebras
269
+ over (finite commutative rings and subquotients of monoids and quotients of semigroups and finite enumerated sets)
270
+ sage: TestSuite(R4).run()
271
+
272
+ sage: RQQ = LaurentSeriesRing(QQ, 't')
273
+ sage: RQQ.category()
274
+ Join of Category of complete discrete valuation fields
275
+ and Category of commutative algebras over (number fields and quotient fields and metric spaces)
276
+ and Category of infinite sets
277
+ sage: TestSuite(RQQ).run()
278
+ """
279
+ base_ring = power_series.base_ring()
280
+ category = Algebras(base_ring.category())
281
+ if base_ring in Fields():
282
+ category &= CompleteDiscreteValuationFields()
283
+ elif base_ring in IntegralDomains():
284
+ category &= IntegralDomains()
285
+ elif base_ring in Rings().Commutative():
286
+ category = category.Commutative()
287
+
288
+ if base_ring.is_zero():
289
+ category = category.Finite()
290
+ else:
291
+ category = category.Infinite()
292
+
293
+ self._power_series_ring = power_series
294
+ self._one_element = self.element_class(self, power_series.one())
295
+ Parent.__init__(self, base_ring,
296
+ names=power_series.variable_names(),
297
+ category=category)
298
+
299
+ def base_extend(self, R):
300
+ """
301
+ Return the Laurent series ring over R in the same variable as
302
+ ``self``, assuming there is a canonical coerce map from the base ring
303
+ of ``self`` to R.
304
+
305
+ EXAMPLES::
306
+
307
+ sage: K.<x> = LaurentSeriesRing(QQ, default_prec=4)
308
+ sage: K.base_extend(QQ['t'])
309
+ Laurent Series Ring in x over Univariate Polynomial Ring in t over Rational Field
310
+ """
311
+ if R.has_coerce_map_from(self.base_ring()):
312
+ return self.change_ring(R)
313
+ else:
314
+ raise TypeError("no valid base extension defined")
315
+
316
+ def fraction_field(self):
317
+ r"""
318
+ Return the fraction field of this ring of Laurent series.
319
+
320
+ If the base ring is a field, then Laurent series are already a field.
321
+ If the base ring is a domain, then the Laurent series over its fraction
322
+ field is returned. Otherwise, raise a :exc:`ValueError`.
323
+
324
+ EXAMPLES::
325
+
326
+ sage: R = LaurentSeriesRing(ZZ, 't', 30).fraction_field()
327
+ sage: R
328
+ Laurent Series Ring in t over Rational Field
329
+ sage: R.default_prec()
330
+ 30
331
+
332
+ sage: LaurentSeriesRing(Zmod(4), 't').fraction_field()
333
+ Traceback (most recent call last):
334
+ ...
335
+ ValueError: must be an integral domain
336
+ """
337
+ from sage.categories.fields import Fields
338
+ from sage.categories.integral_domains import IntegralDomains
339
+ if self in Fields():
340
+ return self
341
+ elif self in IntegralDomains():
342
+ return LaurentSeriesRing(self.base_ring().fraction_field(),
343
+ self.variable_names(),
344
+ self.default_prec())
345
+ else:
346
+ raise ValueError('must be an integral domain')
347
+
348
+ def change_ring(self, R):
349
+ """
350
+ EXAMPLES::
351
+
352
+ sage: K.<x> = LaurentSeriesRing(QQ, default_prec=4)
353
+ sage: R = K.change_ring(ZZ); R
354
+ Laurent Series Ring in x over Integer Ring
355
+ sage: R.default_prec()
356
+ 4
357
+ """
358
+ return LaurentSeriesRing(R, self.variable_names(),
359
+ default_prec=self.default_prec(),
360
+ sparse=self.is_sparse())
361
+
362
+ def is_sparse(self):
363
+ """
364
+ Return if ``self`` is a sparse implementation.
365
+
366
+ EXAMPLES::
367
+
368
+ sage: K.<x> = LaurentSeriesRing(QQ, sparse=True)
369
+ sage: K.is_sparse()
370
+ True
371
+ """
372
+ return self.power_series_ring().is_sparse()
373
+
374
+ def is_field(self, proof=True):
375
+ """
376
+ A Laurent series ring is a field if and only if the base ring
377
+ is a field.
378
+
379
+ TESTS::
380
+
381
+ sage: LaurentSeriesRing(QQ,'t').is_field()
382
+ True
383
+ sage: LaurentSeriesRing(ZZ,'t').is_field()
384
+ False
385
+ """
386
+ return self.base_ring().is_field()
387
+
388
+ def is_dense(self):
389
+ """
390
+ EXAMPLES::
391
+
392
+ sage: K.<x> = LaurentSeriesRing(QQ, sparse=True)
393
+ sage: K.is_dense()
394
+ False
395
+ """
396
+ return self.power_series_ring().is_dense()
397
+
398
+ def _repr_(self):
399
+ """
400
+ EXAMPLES::
401
+
402
+ sage: LaurentSeriesRing(QQ, 'q') # indirect doctest
403
+ Laurent Series Ring in q over Rational Field
404
+ sage: LaurentSeriesRing(ZZ, 't', sparse=True)
405
+ Sparse Laurent Series Ring in t over Integer Ring
406
+ """
407
+ s = "Laurent Series Ring in %s over %s" % (self.variable_name(), self.base_ring())
408
+ if self.is_sparse():
409
+ s = 'Sparse ' + s
410
+ return s
411
+
412
+ def _magma_init_(self, magma):
413
+ """
414
+ Used in converting this ring to the corresponding ring in MAGMA.
415
+
416
+ EXAMPLES::
417
+
418
+ sage: # optional - magma
419
+ sage: R = LaurentSeriesRing(QQ, 'y')
420
+ sage: R._magma_init_(magma)
421
+ 'SageCreateWithNames(LaurentSeriesRing(_sage_ref...),["y"])'
422
+ sage: S = magma(R)
423
+ sage: S
424
+ Laurent series field in y over Rational Field
425
+ sage: S.1
426
+ y
427
+ sage: S.sage() == R
428
+ True
429
+
430
+ sage: # optional - magma
431
+ sage: magma(LaurentSeriesRing(GF(7), 'x')) # needs sage.rings.finite_rings
432
+ Laurent series field in x over GF(7)
433
+ """
434
+ B = magma(self.base_ring())
435
+ Bref = B._ref()
436
+ s = 'LaurentSeriesRing(%s)' % (Bref)
437
+ return magma._with_names(s, self.variable_names())
438
+
439
+ def _element_constructor_(self, x, n=0, prec=infinity):
440
+ r"""
441
+ Construct a Laurent series from `x`.
442
+
443
+ INPUT:
444
+
445
+ - ``x`` -- object that can be converted into a Laurent series
446
+
447
+ - ``n`` -- (default: 0) multiply the result by `t^n`
448
+
449
+ - ``prec`` -- (default: ``infinity``) the precision of the series
450
+ as an integer
451
+
452
+ EXAMPLES::
453
+
454
+ sage: # needs sage.rings.padics
455
+ sage: R.<u> = LaurentSeriesRing(Qp(5, 10))
456
+ sage: S.<t> = LaurentSeriesRing(RationalField())
457
+ sage: R(t + t^2 + O(t^3))
458
+ (1 + O(5^10))*u + (1 + O(5^10))*u^2 + O(u^3)
459
+ sage: R(t + t^2 + O(t^3), prec=2)
460
+ (1 + O(5^10))*u + O(u^2)
461
+
462
+ Coercing an element into its own parent produces that element
463
+ again, unless a different ``n`` or ``prec`` is given::
464
+
465
+ sage: u is R(u) # needs sage.rings.padics
466
+ True
467
+ sage: R(u, n=3, prec=7) # needs sage.rings.padics
468
+ (1 + O(5^10))*u^4 + O(u^7)
469
+
470
+ Rational functions are accepted::
471
+
472
+ sage: # needs sage.rings.number_field sage.symbolic
473
+ sage: I = sqrt(-1)
474
+ sage: K.<I> = QQ[I]
475
+ sage: P.<t> = PolynomialRing(K)
476
+ sage: L.<u> = LaurentSeriesRing(QQ[I])
477
+ sage: L((t*I)/(t^3+I*2*t))
478
+ 1/2 + 1/4*I*u^2 - 1/8*u^4 - 1/16*I*u^6 + 1/32*u^8 +
479
+ 1/64*I*u^10 - 1/128*u^12 - 1/256*I*u^14 + 1/512*u^16 +
480
+ 1/1024*I*u^18 + O(u^20)
481
+
482
+ ::
483
+
484
+ sage: L(t*I) / L(t^3+I*2*t) # needs sage.rings.number_field sage.symbolic
485
+ 1/2 + 1/4*I*u^2 - 1/8*u^4 - 1/16*I*u^6 + 1/32*u^8 +
486
+ 1/64*I*u^10 - 1/128*u^12 - 1/256*I*u^14 + 1/512*u^16 +
487
+ 1/1024*I*u^18 + O(u^20)
488
+
489
+ Lazy series::
490
+
491
+ sage: # needs sage.combinat
492
+ sage: L.<z> = LazyLaurentSeriesRing(ZZ)
493
+ sage: R = LaurentSeriesRing(QQ, names='z')
494
+ sage: R(z^-5 + 1/(1-z))
495
+ z^-5 + 1 + z + z^2 + z^3 + z^4 + z^5 + z^6 + z^7 + z^8 + z^9 + z^10
496
+ + z^11 + z^12 + z^13 + z^14 + z^15 + z^16 + z^17 + z^18 + z^19 + O(z^20)
497
+ sage: L.<z> = LazyPowerSeriesRing(QQ)
498
+ sage: R(5 + z - 5*z^7)
499
+ 5 + z - 5*z^7
500
+
501
+ TESTS:
502
+
503
+ Check that :issue:`28993` is fixed::
504
+
505
+ sage: from sage.modular.etaproducts import qexp_eta # needs sage.modular
506
+ sage: S.<t> = LaurentSeriesRing(RationalField())
507
+ sage: qexp_eta(S, prec=30) # needs sage.modular
508
+ 1 - t - t^2 + t^5 + t^7 - t^12 - t^15 + t^22 + t^26 + O(t^30)
509
+
510
+ When converting from `R((z))` to `R((z))((w))`, the variable
511
+ `z` is sent to `z` rather than to `w` (see :issue:`7085`)::
512
+
513
+ sage: A.<z> = LaurentSeriesRing(QQ)
514
+ sage: B.<w> = LaurentSeriesRing(A)
515
+ sage: B(z)
516
+ z
517
+ sage: z/w
518
+ z*w^-1
519
+
520
+ Various conversions from PARI (see also :issue:`2508`)::
521
+
522
+ sage: # needs sage.libs.pari
523
+ sage: L.<q> = LaurentSeriesRing(QQ, default_prec=10)
524
+ sage: L(pari('1/x'))
525
+ q^-1
526
+ sage: L(pari('polchebyshev(5)'))
527
+ 5*q - 20*q^3 + 16*q^5
528
+ sage: L(pari('polchebyshev(5) - 1/x^4'))
529
+ -q^-4 + 5*q - 20*q^3 + 16*q^5
530
+ sage: L(pari('1/polchebyshev(5)'))
531
+ 1/5*q^-1 + 4/5*q + 64/25*q^3 + 192/25*q^5 + 2816/125*q^7 + O(q^9)
532
+ sage: L(pari('polchebyshev(5) + O(x^40)'))
533
+ 5*q - 20*q^3 + 16*q^5 + O(q^40)
534
+ sage: L(pari('polchebyshev(5) - 1/x^4 + O(x^40)'))
535
+ -q^-4 + 5*q - 20*q^3 + 16*q^5 + O(q^40)
536
+ sage: L(pari('1/polchebyshev(5) + O(x^10)'))
537
+ 1/5*q^-1 + 4/5*q + 64/25*q^3 + 192/25*q^5 + 2816/125*q^7 + 8192/125*q^9 + O(q^10)
538
+ sage: L(pari('1/polchebyshev(5) + O(x^10)'), -10) # Multiply by q^-10
539
+ 1/5*q^-11 + 4/5*q^-9 + 64/25*q^-7 + 192/25*q^-5 + 2816/125*q^-3 + 8192/125*q^-1 + O(1)
540
+ sage: L(pari('O(x^-10)'))
541
+ O(q^-10)
542
+
543
+ Check that :issue:`30073` is fixed::
544
+
545
+ sage: P.<x> = LaurentSeriesRing(QQ)
546
+ sage: P({-3: 1})
547
+ x^-3
548
+ """
549
+ from sage.rings.fraction_field_element import FractionFieldElement
550
+ from sage.rings.polynomial.multi_polynomial import MPolynomial
551
+ from sage.rings.polynomial.polynomial_element import Polynomial
552
+ from sage.structure.element import parent
553
+
554
+ P = parent(x)
555
+ if isinstance(x, self.element_class) and n == 0 and P is self:
556
+ return x.add_bigoh(prec) # ok, since Laurent series are immutable (no need to make a copy)
557
+ elif P is self.base_ring():
558
+ # Convert x into a power series; if P is itself a Laurent
559
+ # series ring A((t)), this prevents the implementation of
560
+ # LaurentSeries.__init__() from effectively applying the
561
+ # ring homomorphism A((t)) -> A((t))((u)) sending t to u
562
+ # instead of the one sending t to t. We cannot easily
563
+ # tell LaurentSeries.__init__() to be more strict, because
564
+ # A((t)) -> B((u)) is expected to send t to u if A admits
565
+ # a coercion to B but A((t)) does not, and this condition
566
+ # would be inefficient to check there.
567
+ x = self.power_series_ring()(x)
568
+ elif isinstance(x, pari_gen):
569
+ t = x.type()
570
+ if t == "t_RFRAC": # Rational function
571
+ x = self(self.polynomial_ring()(x.numerator())) / \
572
+ self(self.polynomial_ring()(x.denominator()))
573
+ return (x << n).add_bigoh(prec)
574
+ elif t == "t_SER": # Laurent series
575
+ n += x._valp()
576
+ bigoh = n + x.length()
577
+ x = self(self.polynomial_ring()(x.Vec()))
578
+ return (x << n).add_bigoh(bigoh)
579
+ else: # General case, pretend to be a polynomial
580
+ return (self(self.polynomial_ring()(x)) << n).add_bigoh(prec)
581
+ elif (isinstance(x, FractionFieldElement)
582
+ and (x.base_ring() is self.base_ring() or x.base_ring() == self.base_ring())
583
+ and isinstance(x.numerator(), (Polynomial, MPolynomial))):
584
+ x = self(x.numerator()) / self(x.denominator())
585
+ return (x << n).add_bigoh(prec)
586
+ elif isinstance(x, (LazyPowerSeries, LazyLaurentSeries)):
587
+ if prec is infinity:
588
+ try:
589
+ x = self.power_series_ring()(x.polynomial())
590
+ except ValueError:
591
+ x = x.add_bigoh(self.default_prec())
592
+ else:
593
+ x = x.add_bigoh(prec)
594
+ return self.element_class(self, x, n).add_bigoh(prec)
595
+
596
+ def random_element(self, algorithm='default'):
597
+ r"""
598
+ Return a random element of this Laurent series ring.
599
+
600
+ The optional ``algorithm`` parameter decides how elements are generated.
601
+ Algorithms currently implemented:
602
+
603
+ - ``'default'``: Choose an integer ``shift`` using the standard
604
+ distribution on the integers. Then choose a list of coefficients
605
+ using the ``random_element`` function of the base ring, and construct
606
+ a new element based on those coefficients, so that the i-th
607
+ coefficient corresponds to the (i+shift)-th power of the uniformizer.
608
+ The amount of coefficients is determined by the ``default_prec``
609
+ of the ring. Note that this method only creates non-exact elements.
610
+
611
+ EXAMPLES::
612
+
613
+ sage: S.<s> = LaurentSeriesRing(GF(3))
614
+ sage: S.random_element() # random
615
+ s^-8 + s^-7 + s^-6 + s^-5 + s^-1 + s + s^3 + s^4
616
+ + s^5 + 2*s^6 + s^7 + s^11 + O(s^12)
617
+ """
618
+ if algorithm == 'default':
619
+ shift = ZZ.random_element()
620
+ return self([self.base_ring().random_element()
621
+ for k in range(self.default_prec())],
622
+ shift).O(shift + self.default_prec())
623
+ else:
624
+ raise ValueError("algorithm cannot be %s" % algorithm)
625
+
626
+ def construction(self):
627
+ r"""
628
+ Return the functorial construction of this Laurent power series ring.
629
+
630
+ The construction is given as the completion of the Laurent polynomials.
631
+
632
+ EXAMPLES::
633
+
634
+ sage: L.<t> = LaurentSeriesRing(ZZ, default_prec=42)
635
+ sage: phi, arg = L.construction()
636
+ sage: phi
637
+ Completion[t, prec=42]
638
+ sage: arg
639
+ Univariate Laurent Polynomial Ring in t over Integer Ring
640
+ sage: phi(arg) is L
641
+ True
642
+
643
+ Because of this construction, pushout is automatically available::
644
+
645
+ sage: 1/2 * t
646
+ 1/2*t
647
+ sage: parent(1/2 * t)
648
+ Laurent Series Ring in t over Rational Field
649
+
650
+ sage: QQbar.gen() * t # needs sage.rings.number_field
651
+ I*t
652
+ sage: parent(QQbar.gen() * t) # needs sage.rings.number_field
653
+ Laurent Series Ring in t over Algebraic Field
654
+ """
655
+ from sage.categories.pushout import CompletionFunctor
656
+ from sage.rings.polynomial.laurent_polynomial_ring import LaurentPolynomialRing
657
+ L = LaurentPolynomialRing(self.base_ring(), self._names[0])
658
+ return CompletionFunctor(self._names[0], self.default_prec()), L
659
+
660
+ def _coerce_map_from_(self, P):
661
+ """
662
+ Return a coercion map from `P` to ``self``, or True, or None.
663
+
664
+ The following rings admit a coercion map to the Laurent series
665
+ ring `A((t))`:
666
+
667
+ - any ring that admits a coercion map to `A` (including `A`
668
+ itself);
669
+
670
+ - any Laurent series ring, power series ring or polynomial
671
+ ring in the variable `t` over a ring admitting a coercion
672
+ map to `A`.
673
+
674
+ EXAMPLES::
675
+
676
+ sage: S.<t> = LaurentSeriesRing(ZZ)
677
+ sage: S.has_coerce_map_from(ZZ)
678
+ True
679
+ sage: S.has_coerce_map_from(PolynomialRing(ZZ, 't'))
680
+ True
681
+ sage: S.has_coerce_map_from(Frac(PolynomialRing(ZZ, 't')))
682
+ False
683
+ sage: S.has_coerce_map_from(LaurentPolynomialRing(ZZ, 't'))
684
+ True
685
+ sage: S.has_coerce_map_from(PowerSeriesRing(ZZ, 't'))
686
+ True
687
+ sage: S.has_coerce_map_from(S)
688
+ True
689
+ sage: S.has_coerce_map_from(LazyLaurentSeriesRing(ZZ, 't')) # needs sage.combinat
690
+ True
691
+ sage: S.has_coerce_map_from(LazyPowerSeriesRing(ZZ, 't')) # needs sage.combinat
692
+ True
693
+
694
+ sage: S.has_coerce_map_from(QQ)
695
+ False
696
+ sage: S.has_coerce_map_from(PolynomialRing(QQ, 't'))
697
+ False
698
+ sage: S.has_coerce_map_from(LaurentPolynomialRing(QQ, 't'))
699
+ False
700
+ sage: S.has_coerce_map_from(PowerSeriesRing(QQ, 't'))
701
+ False
702
+ sage: S.has_coerce_map_from(LaurentSeriesRing(QQ, 't'))
703
+ False
704
+
705
+ sage: T.<t> = LaurentSeriesRing(QQ)
706
+ sage: T.has_coerce_map_from(QQ['t'])
707
+ True
708
+ sage: T.has_coerce_map_from(Frac(QQ['t']))
709
+ True
710
+
711
+ sage: R.<t> = LaurentSeriesRing(QQ['x'])
712
+ sage: R.has_coerce_map_from(QQ[['t']])
713
+ True
714
+ sage: R.has_coerce_map_from(QQ['t'])
715
+ True
716
+ sage: R.has_coerce_map_from(ZZ['x']['t'])
717
+ True
718
+ sage: R.has_coerce_map_from(ZZ['t']['x'])
719
+ False
720
+ sage: R.has_coerce_map_from(ZZ['x'])
721
+ True
722
+ sage: R.has_coerce_map_from(LazyLaurentSeriesRing(ZZ, 't')) # needs sage.combinat
723
+ True
724
+ sage: R.has_coerce_map_from(LazyLaurentSeriesRing(ZZ['x'], 't')) # needs sage.combinat
725
+ True
726
+ """
727
+ from sage.rings.fraction_field import FractionField_generic
728
+ A = self.base_ring()
729
+ if isinstance(P, FractionField_generic) and A.is_field():
730
+ return self.has_coerce_map_from(P.base())
731
+ if (isinstance(P, (LaurentSeriesRing, LazyLaurentSeriesRing,
732
+ LaurentPolynomialRing_generic,
733
+ PowerSeriesRing_generic, LazyPowerSeriesRing,
734
+ PolynomialRing_generic))
735
+ and P.variable_name() == self.variable_name()
736
+ and A.has_coerce_map_from(P.base_ring())):
737
+ return True
738
+
739
+ def _is_valid_homomorphism_(self, codomain, im_gens, base_map=None):
740
+ """
741
+ EXAMPLES::
742
+
743
+ sage: # needs sage.rings.finite_rings
744
+ sage: R.<x> = LaurentSeriesRing(GF(17))
745
+ sage: S.<y> = LaurentSeriesRing(GF(19))
746
+ sage: R.hom([y], S) # indirect doctest
747
+ Traceback (most recent call last):
748
+ ...
749
+ ValueError: relations do not all (canonically) map to 0
750
+ under map determined by images of generators
751
+ sage: f = R.hom(x + x^3, R)
752
+ sage: f(x^2)
753
+ x^2 + 2*x^4 + x^6
754
+
755
+ The image of the generator needs to be a unit::
756
+
757
+ sage: R.<x> = LaurentSeriesRing(ZZ)
758
+ sage: R._is_valid_homomorphism_(R, [2*x])
759
+ False
760
+ """
761
+ # NOTE: There are no ring homomorphisms from the ring of
762
+ # all formal power series to most rings, e.g, the `p`-adic
763
+ # field, since you can always (mathematically!) construct
764
+ # some power series that does not converge.
765
+ # NOTE: The above claim is wrong when the base ring is Z.
766
+ # See trac 28486.
767
+
768
+ if base_map is None and not codomain.has_coerce_map_from(self.base_ring()):
769
+ return False
770
+ # Note that 0 is not a *ring* homomorphism, and you cannot map to a power series ring
771
+ if isinstance(codomain, (LaurentSeriesRing, LazyLaurentSeriesRing)):
772
+ return im_gens[0].valuation() > 0 and im_gens[0].is_unit()
773
+ return False
774
+
775
+ def characteristic(self):
776
+ """
777
+ EXAMPLES::
778
+
779
+ sage: R.<x> = LaurentSeriesRing(GF(17))
780
+ sage: R.characteristic()
781
+ 17
782
+ """
783
+ return self.base_ring().characteristic()
784
+
785
+ def residue_field(self):
786
+ """
787
+ Return the residue field of this Laurent series field
788
+ if it is a complete discrete valuation field (i.e. if
789
+ the base ring is a field, in which base it is also the
790
+ residue field).
791
+
792
+ EXAMPLES::
793
+
794
+ sage: R.<x> = LaurentSeriesRing(GF(17))
795
+ sage: R.residue_field()
796
+ Finite Field of size 17
797
+
798
+ sage: R.<x> = LaurentSeriesRing(ZZ)
799
+ sage: R.residue_field()
800
+ Traceback (most recent call last):
801
+ ...
802
+ TypeError: the base ring is not a field
803
+ """
804
+ if not self.base_ring().is_field():
805
+ raise TypeError("the base ring is not a field")
806
+ return self.base_ring()
807
+
808
+ def default_prec(self):
809
+ """
810
+ Get the precision to which exact elements are truncated when
811
+ necessary (most frequently when inverting).
812
+
813
+ EXAMPLES::
814
+
815
+ sage: R.<x> = LaurentSeriesRing(QQ, default_prec=5)
816
+ sage: R.default_prec()
817
+ 5
818
+ """
819
+ return self._power_series_ring.default_prec()
820
+
821
+ def is_exact(self):
822
+ """
823
+ Laurent series rings are inexact.
824
+
825
+ EXAMPLES::
826
+
827
+ sage: R = LaurentSeriesRing(QQ, "x")
828
+ sage: R.is_exact()
829
+ False
830
+ """
831
+ return False
832
+
833
+ @cached_method
834
+ def gen(self, n=0):
835
+ """
836
+ EXAMPLES::
837
+
838
+ sage: R = LaurentSeriesRing(QQ, "x")
839
+ sage: R.gen()
840
+ x
841
+ """
842
+ if n != 0:
843
+ raise IndexError("generator {} not defined".format(n))
844
+ return self.element_class(self, [0, 1])
845
+
846
+ def gens(self) -> tuple:
847
+ """
848
+ EXAMPLES::
849
+
850
+ sage: R = LaurentSeriesRing(QQ, "x")
851
+ sage: R.gens()
852
+ (x,)
853
+ """
854
+ return (self.gen(),)
855
+
856
+ def uniformizer(self):
857
+ """
858
+ Return a uniformizer of this Laurent series field if it is
859
+ a discrete valuation field (i.e. if the base ring is actually
860
+ a field). Otherwise, an error is raised.
861
+
862
+ EXAMPLES::
863
+
864
+ sage: R.<t> = LaurentSeriesRing(QQ)
865
+ sage: R.uniformizer()
866
+ t
867
+
868
+ sage: R.<t> = LaurentSeriesRing(ZZ)
869
+ sage: R.uniformizer()
870
+ Traceback (most recent call last):
871
+ ...
872
+ TypeError: the base ring is not a field
873
+ """
874
+ if not self.base_ring().is_field():
875
+ raise TypeError("the base ring is not a field")
876
+ return self.gen()
877
+
878
+ def ngens(self):
879
+ """
880
+ Laurent series rings are univariate.
881
+
882
+ EXAMPLES::
883
+
884
+ sage: R = LaurentSeriesRing(QQ, "x")
885
+ sage: R.ngens()
886
+ 1
887
+ """
888
+ return 1
889
+
890
+ def polynomial_ring(self):
891
+ r"""
892
+ If this is the Laurent series ring `R((t))`, return the
893
+ polynomial ring `R[t]`.
894
+
895
+ EXAMPLES::
896
+
897
+ sage: R = LaurentSeriesRing(QQ, "x")
898
+ sage: R.polynomial_ring()
899
+ Univariate Polynomial Ring in x over Rational Field
900
+ """
901
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
902
+ return PolynomialRing(self.base_ring(), self.variable_name(),
903
+ sparse=self.is_sparse())
904
+
905
+ def laurent_polynomial_ring(self):
906
+ r"""
907
+ If this is the Laurent series ring `R((t))`, return the Laurent
908
+ polynomial ring `R[t,1/t]`.
909
+
910
+ EXAMPLES::
911
+
912
+ sage: R = LaurentSeriesRing(QQ, "x")
913
+ sage: R.laurent_polynomial_ring()
914
+ Univariate Laurent Polynomial Ring in x over Rational Field
915
+ """
916
+ from sage.rings.polynomial.laurent_polynomial_ring import LaurentPolynomialRing
917
+ return LaurentPolynomialRing(self.base_ring(), self.variable_name(),
918
+ sparse=self.is_sparse())
919
+
920
+ def power_series_ring(self):
921
+ r"""
922
+ If this is the Laurent series ring `R((t))`, return the
923
+ power series ring `R[[t]]`.
924
+
925
+ EXAMPLES::
926
+
927
+ sage: R = LaurentSeriesRing(QQ, "x")
928
+ sage: R.power_series_ring()
929
+ Power Series Ring in x over Rational Field
930
+ """
931
+ return self._power_series_ring