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,1317 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ """
3
+ Power Series Methods
4
+
5
+ The class ``PowerSeries_poly`` provides additional methods for univariate power series.
6
+ """
7
+ from sage.rings.power_series_ring_element cimport PowerSeries
8
+ from sage.structure.element cimport Element
9
+ from sage.rings.infinity import infinity
10
+
11
+ try:
12
+ from cypari2.handle_error import PariError
13
+ from cypari2.gen import Gen as pari_gen
14
+ except ImportError:
15
+ pari_gen = ()
16
+ PariError = ()
17
+
18
+
19
+ cdef class PowerSeries_poly(PowerSeries):
20
+
21
+ def __init__(self, parent, f=0, prec=infinity, int check=1, is_gen=0):
22
+ """
23
+ EXAMPLES::
24
+
25
+ sage: R.<q> = PowerSeriesRing(CC); R # needs sage.rings.real_mpfr
26
+ Power Series Ring in q over Complex Field with 53 bits of precision
27
+ sage: loads(q.dumps()) == q # needs sage.rings.real_mpfr
28
+ True
29
+
30
+ sage: R.<t> = QQ[[]]
31
+ sage: f = 3 - t^3 + O(t^5)
32
+ sage: a = f^3; a
33
+ 27 - 27*t^3 + O(t^5)
34
+ sage: b = f^-3; b
35
+ 1/27 + 1/27*t^3 + O(t^5)
36
+ sage: a*b
37
+ 1 + O(t^5)
38
+
39
+ Check that :issue:`22216` is fixed::
40
+
41
+ sage: R.<T> = PowerSeriesRing(QQ)
42
+ sage: R(pari('1 + O(T)')) # needs sage.libs.pari
43
+ 1 + O(T)
44
+ sage: R(pari('1/T + O(T)')) # needs sage.libs.pari
45
+ Traceback (most recent call last):
46
+ ...
47
+ ValueError: series has negative valuation
48
+ """
49
+ R = parent._poly_ring()
50
+ if isinstance(f, Element):
51
+ if (<Element>f)._parent is R:
52
+ pass
53
+ elif (<Element>f)._parent == R.base_ring():
54
+ f = R([f])
55
+ elif isinstance(f, PowerSeries): # not only PowerSeries_poly
56
+ prec = (<PowerSeries>f)._prec
57
+ f = R(f.polynomial())
58
+ else:
59
+ if f:
60
+ f = R(f, check=check)
61
+ else:
62
+ f = R(None)
63
+ elif isinstance(f, pari_gen) and f.type() == 't_SER':
64
+ if f._valp() < 0:
65
+ raise ValueError('series has negative valuation')
66
+ if prec is infinity:
67
+ prec = f.length() + f._valp()
68
+ f = R(f.truncate())
69
+ else:
70
+ if f:
71
+ f = R(f, check=check)
72
+ else: # None is supposed to yield zero
73
+ f = R(None)
74
+
75
+ self.__f = f
76
+ if check and not (prec is infinity):
77
+ self.__f = self.__f.truncate(prec)
78
+ PowerSeries.__init__(self, parent, prec, is_gen)
79
+
80
+ def __hash__(self):
81
+ """
82
+ Return a hash of ``self``.
83
+
84
+ EXAMPLES::
85
+
86
+ sage: R.<t> = ZZ[[]]
87
+ sage: hash(t) == hash(R.gen())
88
+ True
89
+ sage: hash(t) != hash(R.one())
90
+ True
91
+ """
92
+ return hash(self.__f)
93
+
94
+ def __reduce__(self):
95
+ """
96
+ Used for pickling.
97
+
98
+ EXAMPLES::
99
+
100
+ sage: A.<z> = RR[[]]
101
+ sage: f = z - z^3 + O(z^10)
102
+ sage: f == loads(dumps(f)) # indirect doctest
103
+ True
104
+ """
105
+ return self.__class__, (self._parent, self.__f, self._prec, self._is_gen)
106
+
107
+ def polynomial(self):
108
+ """
109
+ Return the underlying polynomial of ``self``.
110
+
111
+ EXAMPLES::
112
+
113
+ sage: R.<t> = GF(7)[[]]
114
+ sage: f = 3 - t^3 + O(t^5)
115
+ sage: f.polynomial()
116
+ 6*t^3 + 3
117
+ """
118
+ return self.__f
119
+
120
+ def valuation(self):
121
+ """
122
+ Return the valuation of ``self``.
123
+
124
+ EXAMPLES::
125
+
126
+ sage: R.<t> = QQ[[]]
127
+ sage: (5 - t^8 + O(t^11)).valuation()
128
+ 0
129
+ sage: (-t^8 + O(t^11)).valuation()
130
+ 8
131
+ sage: O(t^7).valuation()
132
+ 7
133
+ sage: R(0).valuation()
134
+ +Infinity
135
+ """
136
+ if self.__f == 0:
137
+ return self._prec
138
+
139
+ return self.__f.valuation()
140
+
141
+ def degree(self):
142
+ """
143
+ Return the degree of the underlying polynomial of ``self``.
144
+
145
+ That is, if ``self`` is of the form `f(x) + O(x^n)`, we return
146
+ the degree of `f(x)`. Note that if `f(x)` is `0`, we return `-1`,
147
+ just as with polynomials.
148
+
149
+ EXAMPLES::
150
+
151
+ sage: R.<t> = ZZ[[]]
152
+ sage: (5 + t^3 + O(t^4)).degree()
153
+ 3
154
+ sage: (5 + O(t^4)).degree()
155
+ 0
156
+ sage: O(t^4).degree()
157
+ -1
158
+ """
159
+ return self.__f.degree()
160
+
161
+ def __bool__(self):
162
+ """
163
+ Return ``True`` if ``self`` is nonzero, and ``False`` otherwise.
164
+
165
+ EXAMPLES::
166
+
167
+ sage: R.<t> = GF(11)[[]]
168
+ sage: bool(1 + t + O(t^18))
169
+ True
170
+ sage: bool(R(0))
171
+ False
172
+ sage: bool(O(t^18))
173
+ False
174
+ """
175
+ return not not self.__f
176
+
177
+ def __call__(self, *x, **kwds):
178
+ """
179
+ Evaluate the series at `x=a`.
180
+
181
+ INPUT:
182
+
183
+ - ``x``:
184
+
185
+ - a tuple of elements the first of which can be meaningfully
186
+ substituted in ``self``, with the remainder used for substitution
187
+ in the coefficients of ``self``.
188
+
189
+ - a dictionary for kwds:value pairs. If the variable name of
190
+ ``self`` is a keyword it is substituted for. Other keywords
191
+ are used for substitution in the coefficients of ``self``.
192
+
193
+ OUTPUT: the value of ``self`` after substitution
194
+
195
+ EXAMPLES::
196
+
197
+ sage: R.<t> = ZZ[[]]
198
+ sage: f = t^2 + t^3 + O(t^6)
199
+ sage: f(t^3)
200
+ t^6 + t^9 + O(t^18)
201
+ sage: f(t=t^3)
202
+ t^6 + t^9 + O(t^18)
203
+ sage: f(f)
204
+ t^4 + 2*t^5 + 2*t^6 + 3*t^7 + O(t^8)
205
+ sage: f(f)(f) == f(f(f))
206
+ True
207
+
208
+ The following demonstrates that the problems raised in :issue:`3979`
209
+ and :issue:`5367` are solved::
210
+
211
+ sage: [f(t^2 + O(t^n)) for n in [9, 10, 11]]
212
+ [t^4 + t^6 + O(t^11), t^4 + t^6 + O(t^12), t^4 + t^6 + O(t^12)]
213
+ sage: f(t^2)
214
+ t^4 + t^6 + O(t^12)
215
+
216
+ It is possible to substitute a series for which only the precision
217
+ is defined::
218
+
219
+ sage: f(O(t^5))
220
+ O(t^10)
221
+
222
+ or to substitute a polynomial (the result belonging to the power
223
+ series ring over the same base ring)::
224
+
225
+ sage: P.<z> = ZZ[]
226
+ sage: g = f(z + z^3); g
227
+ z^2 + z^3 + 2*z^4 + 3*z^5 + O(z^6)
228
+ sage: g.parent()
229
+ Power Series Ring in z over Integer Ring
230
+
231
+ A series defined over another ring can be substituted::
232
+
233
+ sage: S.<u> = GF(7)[[]]
234
+ sage: f(2*u + u^3 + O(u^5))
235
+ 4*u^2 + u^3 + 4*u^4 + 5*u^5 + O(u^6)
236
+
237
+ As can a `p`-adic integer as long as the coefficient ring is compatible::
238
+
239
+ sage: f(100 + O(5^7)) # needs sage.rings.padics
240
+ 5^4 + 3*5^5 + 4*5^6 + 2*5^7 + 2*5^8 + O(5^9)
241
+ sage: f.change_ring(Zp(5))(100 + O(5^7)) # needs sage.rings.padics
242
+ 5^4 + 3*5^5 + 4*5^6 + 2*5^7 + 2*5^8 + O(5^9)
243
+ sage: f.change_ring(Zp(5))(100 + O(2^7)) # needs sage.rings.padics
244
+ Traceback (most recent call last):
245
+ ...
246
+ ValueError: Cannot substitute this value
247
+
248
+ To substitute a value it must have valuation at least 1::
249
+
250
+ sage: f(0)
251
+ 0
252
+ sage: f(1 + t)
253
+ Traceback (most recent call last):
254
+ ...
255
+ ValueError: Can only substitute elements of positive valuation
256
+ sage: f(2 + O(5^3)) # needs sage.rings.padics
257
+ Traceback (most recent call last):
258
+ ...
259
+ ValueError: Can only substitute elements of positive valuation
260
+ sage: f(t^-2)
261
+ Traceback (most recent call last):
262
+ ...
263
+ ValueError: Can only substitute elements of positive valuation
264
+
265
+ Unless, of course, it is being substituted in a series with infinite
266
+ precision, i.e., a polynomial::
267
+
268
+ sage: g = t^2 + t^3
269
+ sage: g(1 + t + O(t^2))
270
+ 2 + 5*t + O(t^2)
271
+ sage: g(3)
272
+ 36
273
+
274
+ Arguments beyond the first can refer to the base ring::
275
+
276
+ sage: P.<x> = GF(5)[]
277
+ sage: Q.<y> = P[[]]
278
+ sage: h = (1 - x*y)^-1 + O(y^7); h
279
+ 1 + x*y + x^2*y^2 + x^3*y^3 + x^4*y^4 + x^5*y^5 + x^6*y^6 + O(y^7)
280
+ sage: h(y^2, 3)
281
+ 1 + 3*y^2 + 4*y^4 + 2*y^6 + y^8 + 3*y^10 + 4*y^12 + O(y^14)
282
+
283
+ These secondary values can also be specified using keywords::
284
+
285
+ sage: h(y=y^2, x=3)
286
+ 1 + 3*y^2 + 4*y^4 + 2*y^6 + y^8 + 3*y^10 + 4*y^12 + O(y^14)
287
+ sage: h(y^2, x=3)
288
+ 1 + 3*y^2 + 4*y^4 + 2*y^6 + y^8 + 3*y^10 + 4*y^12 + O(y^14)
289
+ """
290
+ P = self.parent()
291
+
292
+ if len(kwds) >= 1:
293
+ name = P.variable_name()
294
+ if name in kwds: # a keyword specifies the power series generator
295
+ if x:
296
+ raise ValueError("must not specify %s keyword and positional argument" % name)
297
+ a = self(kwds[name])
298
+ del kwds[name]
299
+ try:
300
+ return a(**kwds)
301
+ except TypeError:
302
+ return a
303
+ elif x: # both keywords and positional arguments
304
+ a = self(*x)
305
+ try:
306
+ return a(**kwds)
307
+ except TypeError:
308
+ return a
309
+ else: # keywords but no positional arguments
310
+ return P(self.__f(**kwds)).add_bigoh(self._prec)
311
+
312
+ if len(x) == 0:
313
+ return self
314
+
315
+ if isinstance(x[0], tuple):
316
+ x = x[0]
317
+ a = x[0]
318
+
319
+ s = self._prec
320
+ if s == infinity:
321
+ return self.__f(x)
322
+
323
+ Q = a.parent()
324
+
325
+ from sage.rings.padics.padic_generic import pAdicGeneric
326
+ padic = isinstance(Q, pAdicGeneric)
327
+ if padic:
328
+ p = Q.prime()
329
+
330
+ try:
331
+ t = a.valuation()
332
+ except (TypeError, AttributeError):
333
+ if a.is_zero():
334
+ t = infinity
335
+ else:
336
+ t = 0
337
+
338
+ if t == infinity:
339
+ return self[0]
340
+
341
+ if t <= 0:
342
+ raise ValueError("Can only substitute elements of positive valuation")
343
+
344
+ if not Q.has_coerce_map_from(P.base_ring()):
345
+ from sage.structure.element import canonical_coercion
346
+ try:
347
+ R = canonical_coercion(P.base_ring()(0), Q.base_ring()(0))[0].parent()
348
+ self = self.change_ring(R)
349
+ except TypeError:
350
+ raise ValueError("Cannot substitute this value")
351
+
352
+ r = (self - self[0]).valuation()
353
+ if r == s: # self is constant + O(x^s)
354
+ if padic:
355
+ from sage.rings.big_oh import O
356
+ return self[0] + O(p**(s*t))
357
+ else:
358
+ return P(self[0]).add_bigoh(s*t)
359
+
360
+ try:
361
+ u = a.prec()
362
+ except AttributeError:
363
+ u = a.precision_absolute()
364
+ n = (s - r + 1)*t
365
+ if n < u:
366
+ a = a.add_bigoh(n)
367
+ x = list(x)
368
+ x[0] = a
369
+ x = tuple(x)
370
+ return self.__f(x)
371
+
372
+ def _unsafe_mutate(self, i, value):
373
+ """
374
+ Sage assumes throughout that commutative ring elements are immutable.
375
+ This is relevant for caching, etc. But sometimes you need to change
376
+ a power series and you really know what you're doing. That's
377
+ when this function is for you.
378
+
379
+ ** DO NOT USE THIS ** unless you know what you're doing.
380
+
381
+ EXAMPLES::
382
+
383
+ sage: R.<t> = GF(7)[[]]
384
+ sage: f = 3 + 6*t^3 + O(t^5)
385
+ sage: f._unsafe_mutate(0, 5)
386
+ sage: f
387
+ 5 + 6*t^3 + O(t^5)
388
+ sage: f._unsafe_mutate(2, 1); f
389
+ 5 + t^2 + 6*t^3 + O(t^5)
390
+
391
+ - Mutating can even bump up the precision::
392
+
393
+ sage: f._unsafe_mutate(6, 1); f
394
+ 5 + t^2 + 6*t^3 + t^6 + O(t^7)
395
+ sage: f._unsafe_mutate(0, 0); f
396
+ t^2 + 6*t^3 + t^6 + O(t^7)
397
+ sage: f._unsafe_mutate(1, 0); f
398
+ t^2 + 6*t^3 + t^6 + O(t^7)
399
+ sage: f._unsafe_mutate(11,0); f
400
+ t^2 + 6*t^3 + t^6 + O(t^12)
401
+
402
+ sage: g = t + O(t^7)
403
+ sage: g._unsafe_mutate(1,0); g
404
+ O(t^7)
405
+ """
406
+ self.__f._unsafe_mutate(i, value)
407
+ self._prec = max(self._prec, i+1)
408
+
409
+ def __getitem__(self, n):
410
+ """
411
+ Return the ``n``-th coefficient of ``self``.
412
+
413
+ This returns 0 for negative coefficients and raises an
414
+ :exc:`IndexError` if trying to access beyond known coefficients.
415
+
416
+ If ``n`` is a slice object ``[:k]``, this will return a power
417
+ series of the same precision, whose coefficients are the same
418
+ as ``self`` for those indices in the slice, and 0 otherwise.
419
+ Other kinds of slicing are not allowed.
420
+
421
+ EXAMPLES::
422
+
423
+ sage: R.<t> = QQ[[]]
424
+ sage: f = 3/2 - 17/5*t^3 + O(t^5)
425
+ sage: f[3]
426
+ -17/5
427
+ sage: f[-2]
428
+ 0
429
+ sage: f[4]
430
+ 0
431
+ sage: f[5]
432
+ Traceback (most recent call last):
433
+ ...
434
+ IndexError: coefficient not known
435
+
436
+ Using slices::
437
+
438
+ sage: R.<t> = ZZ[[]]
439
+ sage: f = (2-t)^5; f
440
+ 32 - 80*t + 80*t^2 - 40*t^3 + 10*t^4 - t^5
441
+ sage: f[:4]
442
+ 32 - 80*t + 80*t^2 - 40*t^3
443
+ sage: f = 1 + t^3 - 4*t^4 + O(t^7); f
444
+ 1 + t^3 - 4*t^4 + O(t^7)
445
+ sage: f[:4]
446
+ 1 + t^3 + O(t^7)
447
+
448
+ TESTS::
449
+
450
+ sage: f[1:4]
451
+ Traceback (most recent call last):
452
+ ...
453
+ IndexError: polynomial slicing with a start is not defined
454
+ """
455
+ if isinstance(n, slice):
456
+ return PowerSeries_poly(self._parent, self.polynomial()[n],
457
+ prec=self._prec, check=False)
458
+ elif n < 0:
459
+ return self.base_ring().zero()
460
+ elif n > self.__f.degree():
461
+ if self._prec > n:
462
+ return self.base_ring().zero()
463
+ else:
464
+ raise IndexError("coefficient not known")
465
+ return self.__f[n]
466
+
467
+ def __iter__(self):
468
+ """
469
+ Return an iterator over the coefficients of this power series.
470
+
471
+ EXAMPLES::
472
+
473
+ sage: R.<t> = QQ[[]]
474
+ sage: f = t + 17/5*t^3 + 2*t^4 + O(t^5)
475
+ sage: [a for a in f]
476
+ [0, 1, 0, 17/5, 2]
477
+ """
478
+ return iter(self.__f)
479
+
480
+ def __neg__(self):
481
+ """
482
+ Return the negative of this power series.
483
+
484
+ EXAMPLES::
485
+
486
+ sage: R.<t> = QQ[[]]
487
+ sage: f = t + 17/5*t^3 + 2*t^4 + O(t^5)
488
+ sage: -f
489
+ -t - 17/5*t^3 - 2*t^4 + O(t^5)
490
+ """
491
+ return PowerSeries_poly(self._parent, -self.__f,
492
+ self._prec, check=False)
493
+
494
+ cpdef _add_(self, right_m):
495
+ """
496
+ EXAMPLES::
497
+
498
+ sage: R.<x> = PowerSeriesRing(ZZ)
499
+ sage: f = x^4 + O(x^5); f
500
+ x^4 + O(x^5)
501
+ sage: g = x^2 + O(x^3); g
502
+ x^2 + O(x^3)
503
+ sage: f+g
504
+ x^2 + O(x^3)
505
+
506
+ TESTS:
507
+
508
+ In the past this could die with EXC_BAD_ACCESS (:issue:`8029`)::
509
+
510
+ sage: # needs sage.rings.real_mpfr
511
+ sage: A.<x> = RR['x']
512
+ sage: B.<t> = PowerSeriesRing(A)
513
+ sage: 1. + O(t)
514
+ 1.00000000000000 + O(t)
515
+ sage: 1. + O(t^2)
516
+ 1.00000000000000 + O(t^2)
517
+ sage: 1. + O(t^3)
518
+ 1.00000000000000 + O(t^3)
519
+ sage: 1. + O(t^4)
520
+ 1.00000000000000 + O(t^4)
521
+ """
522
+ cdef PowerSeries_poly right = <PowerSeries_poly>right_m
523
+ return PowerSeries_poly(self._parent, self.__f + right.__f,
524
+ self.common_prec_c(right), check=True)
525
+
526
+ cpdef _sub_(self, right_m):
527
+ """
528
+ Return the difference of two power series.
529
+
530
+ EXAMPLES::
531
+
532
+ sage: k.<w> = ZZ[]
533
+ sage: R.<t> = k[[]]
534
+ sage: w*t^2 -w*t +13 - (w*t^2 + w*t)
535
+ 13 - 2*w*t
536
+ """
537
+ cdef PowerSeries_poly right = <PowerSeries_poly>right_m
538
+ return PowerSeries_poly(self._parent, self.__f - right.__f,
539
+ self.common_prec_c(right), check=True)
540
+
541
+ cpdef _mul_(self, right_r):
542
+ """
543
+ Return the product of two power series.
544
+
545
+ EXAMPLES::
546
+
547
+ sage: k.<w> = ZZ[[]]
548
+ sage: (1+17*w+15*w^3+O(w^5))*(19*w^10+O(w^12))
549
+ 19*w^10 + 323*w^11 + O(w^12)
550
+ """
551
+ prec = self._mul_prec(right_r)
552
+ return PowerSeries_poly(self._parent,
553
+ self.__f * (<PowerSeries_poly>right_r).__f,
554
+ prec=prec,
555
+ check=True) # check, since truncation may be needed
556
+
557
+ cpdef _rmul_(self, Element c):
558
+ """
559
+ Multiply ``self`` on the right by a scalar.
560
+
561
+ EXAMPLES::
562
+
563
+ sage: R.<t> = GF(7)[[]]
564
+ sage: f = t + 3*t^4 + O(t^11)
565
+ sage: f * GF(7)(3)
566
+ 3*t + 2*t^4 + O(t^11)
567
+ """
568
+ return PowerSeries_poly(self._parent, self.__f * c, self._prec, check=False)
569
+
570
+ cpdef _lmul_(self, Element c):
571
+ """
572
+ Multiply ``self`` on the left by a scalar.
573
+
574
+ EXAMPLES::
575
+
576
+ sage: R.<t> = GF(11)[[]]
577
+ sage: f = 1 + 3*t^4 + O(t^120)
578
+ sage: 2 * f
579
+ 2 + 6*t^4 + O(t^120)
580
+ """
581
+ return PowerSeries_poly(self._parent, c * self.__f, self._prec, check=False)
582
+
583
+ def __lshift__(PowerSeries_poly self, n):
584
+ """
585
+ Shift ``self`` to the left by ``n``, i.e. multiply by `x^n`.
586
+
587
+ EXAMPLES::
588
+
589
+ sage: R.<t> = QQ[[]]
590
+ sage: f = 1 + t + t^4
591
+ sage: f << 1
592
+ t + t^2 + t^5
593
+ """
594
+ if n:
595
+ return PowerSeries_poly(self._parent, self.__f << n, self._prec + n)
596
+ else:
597
+ return self
598
+
599
+ def __rshift__(PowerSeries_poly self, n):
600
+ """
601
+ Shift ``self`` to the right by ``n``, i.e. multiply by `x^{-n}` and
602
+ remove any terms of negative exponent.
603
+
604
+ EXAMPLES::
605
+
606
+ sage: # needs sage.rings.finite_rings
607
+ sage: R.<t> = GF(2)[[]]
608
+ sage: f = t + t^4 + O(t^7)
609
+ sage: f >> 1
610
+ 1 + t^3 + O(t^6)
611
+ sage: f >> 10
612
+ O(t^0)
613
+ """
614
+ if n:
615
+ return PowerSeries_poly(self._parent, self.__f >> n, max(0,self._prec - n))
616
+ else:
617
+ return self
618
+
619
+ def __invert__(self):
620
+ """
621
+ Return the inverse of the power series (i.e., a series `Y` such
622
+ that `XY = 1`).
623
+
624
+ The first nonzero coefficient must be a unit in
625
+ the coefficient ring. If the valuation of the series is positive or
626
+ `X` is not a unit, this function will return a
627
+ :class:`sage.rings.laurent_series_ring_element.LaurentSeries`.
628
+
629
+ EXAMPLES::
630
+
631
+ sage: R.<q> = QQ[[]]
632
+ sage: 1/(1+q + O(q**2))
633
+ 1 - q + O(q^2)
634
+ sage: 1/(1+q)
635
+ 1 - q + q^2 - q^3 + q^4 - q^5 + q^6 - q^7 + q^8 - q^9 + q^10 - q^11 + q^12 - q^13 + q^14 - q^15 + q^16 - q^17 + q^18 - q^19 + O(q^20)
636
+ sage: prec = R.default_prec(); prec
637
+ 20
638
+ sage: 1/(1+q) + O(q^5)
639
+ 1 - q + q^2 - q^3 + q^4 + O(q^5)
640
+
641
+ ::
642
+
643
+ sage: 1/(q + q^2) + O(q^4)
644
+ q^-1 - 1 + q - q^2 + q^3 + O(q^4)
645
+ sage: g = 1/(q + q^2 + O(q^5))
646
+ sage: g; g.parent()
647
+ q^-1 - 1 + q - q^2 + O(q^3)
648
+ Laurent Series Ring in q over Rational Field
649
+
650
+ ::
651
+
652
+ sage: 1/g
653
+ q + q^2 + O(q^5)
654
+ sage: (1/g).parent()
655
+ Laurent Series Ring in q over Rational Field
656
+
657
+ ::
658
+
659
+ sage: 1/(2 + q) + O(q^5)
660
+ 1/2 - 1/4*q + 1/8*q^2 - 1/16*q^3 + 1/32*q^4 + O(q^5)
661
+
662
+ ::
663
+
664
+ sage: R.<q> = PowerSeriesRing(QQ, name='q', default_prec=5)
665
+ sage: f = 1 + q + q^2 + O(q^50)
666
+ sage: f/10
667
+ 1/10 + 1/10*q + 1/10*q^2 + O(q^50)
668
+ sage: f/(10+q)
669
+ 1/10 + 9/100*q + 91/1000*q^2 - 91/10000*q^3 + 91/100000*q^4 + O(q^5)
670
+
671
+ ::
672
+
673
+ sage: R.<t> = PowerSeriesRing(QQ, sparse=True)
674
+ sage: u = 17 + 3*t^2 + 19*t^10 + O(t^12)
675
+ sage: v = ~u; v
676
+ 1/17 - 3/289*t^2 + 9/4913*t^4 - 27/83521*t^6 + 81/1419857*t^8 - 1587142/24137569*t^10 + O(t^12)
677
+ sage: u*v
678
+ 1 + O(t^12)
679
+
680
+ If we try a nonzero, non-unit constant term, we end up in
681
+ the fraction field, i.e. the Laurent series ring::
682
+
683
+ sage: R.<t> = PowerSeriesRing(ZZ)
684
+ sage: ~R(2)
685
+ 1/2
686
+ sage: parent(~R(2))
687
+ Laurent Series Ring in t over Rational Field
688
+
689
+ As for units, we stay in the power series ring::
690
+
691
+ sage: ~R(-1)
692
+ -1
693
+ sage: parent(~R(-1))
694
+ Power Series Ring in t over Integer Ring
695
+
696
+ However, inversion of non-unit elements must fail when the underlying
697
+ ring is not an integral domain::
698
+
699
+ sage: R = IntegerModRing(8)
700
+ sage: P.<s> = R[[]]
701
+ sage: ~P(2)
702
+ Traceback (most recent call last):
703
+ ...
704
+ ValueError: must be an integral domain
705
+ """
706
+ if self.is_one():
707
+ return self
708
+ prec = self.prec()
709
+ if prec is infinity:
710
+ if self.degree() > 0:
711
+ prec = self._parent.default_prec()
712
+ else:
713
+ # constant series
714
+ a = self[0]
715
+ if not a.is_unit():
716
+ from sage.categories.integral_domains import IntegralDomains
717
+ if self._parent in IntegralDomains():
718
+ R = self._parent.fraction_field()
719
+ return 1 / R(a)
720
+ else:
721
+ raise ValueError('must be an integral domain')
722
+ try:
723
+ a = a.inverse_unit()
724
+ except (AttributeError, NotImplementedError):
725
+ a = self._parent.base_ring()(~a)
726
+ return self._parent(a, prec=infinity)
727
+
728
+ if self.valuation() > 0:
729
+ u = ~self.valuation_zero_part() # inverse of unit part
730
+ R = self._parent.laurent_series_ring()
731
+ return R(u, -self.valuation())
732
+
733
+ return self._parent(self.truncate().inverse_series_trunc(prec), prec=prec)
734
+
735
+ def truncate(self, prec=infinity):
736
+ """
737
+ The polynomial obtained from power series by truncation at
738
+ precision ``prec``.
739
+
740
+ EXAMPLES::
741
+
742
+ sage: R.<I> = GF(2)[[]]
743
+ sage: f = 1/(1+I+O(I^8)); f
744
+ 1 + I + I^2 + I^3 + I^4 + I^5 + I^6 + I^7 + O(I^8)
745
+ sage: f.truncate(5)
746
+ I^4 + I^3 + I^2 + I + 1
747
+ """
748
+ if prec is infinity:
749
+ return self.__f
750
+ else:
751
+ return self.__f.truncate(prec)
752
+
753
+ cdef _inplace_truncate(self, long prec):
754
+ """
755
+ Truncate ``self`` to precision ``prec`` in place.
756
+
757
+ .. NOTE::
758
+
759
+ This is very unsafe, since power series are supposed to
760
+ be immutable in Sage. Use at your own risk!
761
+ """
762
+ self.__f = self.__f._inplace_truncate(prec)
763
+ self.prec = prec
764
+ return self
765
+
766
+ def truncate_powerseries(self, long prec):
767
+ r"""
768
+ Given input ``prec`` = `n`, returns the power series of degree
769
+ `< n` which is equivalent to ``self`` modulo `x^n`.
770
+
771
+ EXAMPLES::
772
+
773
+ sage: R.<I> = GF(2)[[]]
774
+ sage: f = 1/(1+I+O(I^8)); f
775
+ 1 + I + I^2 + I^3 + I^4 + I^5 + I^6 + I^7 + O(I^8)
776
+ sage: f.truncate_powerseries(5)
777
+ 1 + I + I^2 + I^3 + I^4 + O(I^5)
778
+ """
779
+ return PowerSeries_poly(self._parent, self.__f.truncate(prec),
780
+ min(self._prec, prec), check=False)
781
+
782
+ def list(self):
783
+ """
784
+ Return the list of known coefficients for ``self``.
785
+
786
+ This is just the list of coefficients of the underlying
787
+ polynomial, so in particular, need not have length equal to
788
+ ``self.prec()``.
789
+
790
+ EXAMPLES::
791
+
792
+ sage: R.<t> = ZZ[[]]
793
+ sage: f = 1 - 5*t^3 + t^5 + O(t^7)
794
+ sage: f.list()
795
+ [1, 0, 0, -5, 0, 1]
796
+ """
797
+ return self.__f.list()
798
+
799
+ def monomial_coefficients(self, copy=True):
800
+ """
801
+ Return a dictionary of coefficients for ``self``.
802
+
803
+ This is simply a dict for the underlying polynomial, so need
804
+ not have keys corresponding to every number smaller than
805
+ ``self.prec()``.
806
+
807
+ EXAMPLES::
808
+
809
+ sage: R.<t> = ZZ[[]]
810
+ sage: f = 1 + t^10 + O(t^12)
811
+ sage: f.monomial_coefficients()
812
+ {0: 1, 10: 1}
813
+
814
+ ``dict`` is an alias::
815
+
816
+ sage: f.dict()
817
+ {0: 1, 10: 1}
818
+ """
819
+ return self.__f.monomial_coefficients(copy=copy)
820
+
821
+ dict = monomial_coefficients
822
+
823
+ def _derivative(self, var=None):
824
+ """
825
+ Return the derivative of this power series with respect
826
+ to the variable ``var``.
827
+
828
+ If ``var`` is ``None`` or is the generator of this ring, we
829
+ take the derivative with respect to the generator.
830
+
831
+ Otherwise, we call ``_derivative(var)`` on each coefficient of
832
+ the series.
833
+
834
+ .. SEEALSO::
835
+
836
+ ``self.derivative()``
837
+
838
+ EXAMPLES::
839
+
840
+ sage: R.<t> = PowerSeriesRing(QQ, sparse=True)
841
+ sage: f = 2 + 3*t^2 + t^100000 + O(t^10000000); f
842
+ 2 + 3*t^2 + t^100000 + O(t^10000000)
843
+ sage: f._derivative()
844
+ 6*t + 100000*t^99999 + O(t^9999999)
845
+ sage: f._derivative(t)
846
+ 6*t + 100000*t^99999 + O(t^9999999)
847
+
848
+ sage: R.<x> = PolynomialRing(ZZ)
849
+ sage: S.<y> = PowerSeriesRing(R, sparse=True)
850
+ sage: f = x^3*y^4 + O(y^5)
851
+ sage: f._derivative()
852
+ 4*x^3*y^3 + O(y^4)
853
+ sage: f._derivative(y)
854
+ 4*x^3*y^3 + O(y^4)
855
+ sage: f._derivative(x)
856
+ 3*x^2*y^4 + O(y^5)
857
+
858
+ TESTS::
859
+
860
+ sage: R.<t> = PowerSeriesRing(QQ, sparse=True)
861
+ sage: x = var('x') # needs sage.symbolic
862
+ sage: t.derivative(x)
863
+ Traceback (most recent call last):
864
+ ...
865
+ ValueError: cannot differentiate with respect to x
866
+ """
867
+ if var is not None and var != self._parent.gen():
868
+ try:
869
+ # call _derivative() recursively on coefficients
870
+ return PowerSeries_poly(self._parent, self.__f._derivative(var),
871
+ self.prec(), check=False)
872
+ except AttributeError:
873
+ raise ValueError('cannot differentiate with respect to {}'.format(var))
874
+
875
+ # compute formal derivative with respect to generator
876
+ return PowerSeries_poly(self._parent, self.__f._derivative(),
877
+ self.prec()-1, check=False)
878
+
879
+ def integral(self, var=None):
880
+ """
881
+ Return the integral of this power series.
882
+
883
+ By default, the integration variable is the variable of the
884
+ power series.
885
+
886
+ Otherwise, the integration variable is the optional parameter ``var``.
887
+
888
+ .. NOTE::
889
+
890
+ The integral is always chosen so the constant term is 0.
891
+
892
+ EXAMPLES::
893
+
894
+ sage: k.<w> = QQ[[]]
895
+ sage: (1+17*w+15*w^3+O(w^5)).integral()
896
+ w + 17/2*w^2 + 15/4*w^4 + O(w^6)
897
+ sage: (w^3 + 4*w^4 + O(w^7)).integral()
898
+ 1/4*w^4 + 4/5*w^5 + O(w^8)
899
+ sage: (3*w^2).integral()
900
+ w^3
901
+
902
+ TESTS::
903
+
904
+ sage: t = PowerSeriesRing(QQ,'t').gen()
905
+ sage: f = t + 5*t^2 + 21*t^3
906
+ sage: g = f.integral(); g
907
+ 1/2*t^2 + 5/3*t^3 + 21/4*t^4
908
+ sage: g.parent()
909
+ Power Series Ring in t over Rational Field
910
+
911
+ sage: R.<x> = QQ[]
912
+ sage: t = PowerSeriesRing(R,'t').gen()
913
+ sage: f = x*t +5*t^2
914
+ sage: f.integral()
915
+ 1/2*x*t^2 + 5/3*t^3
916
+ sage: f.integral(x)
917
+ 1/2*x^2*t + 5*x*t^2
918
+ """
919
+ return PowerSeries_poly(self._parent, self.__f.integral(var),
920
+ self.prec()+1, check=False)
921
+
922
+ def reverse(self, precision=None):
923
+ """
924
+ Return the reverse of `f`, i.e., the series `g` such that `g(f(x)) = x`.
925
+
926
+ Given an optional argument ``precision``, return the reverse with given
927
+ precision (note that the reverse can have precision at most
928
+ ``f.prec()``). If `f` has infinite precision, and the argument
929
+ ``precision`` is not given, then the precision of the reverse defaults
930
+ to the default precision of ``f.parent()``.
931
+
932
+ Note that this is only possible if the valuation of ``self`` is exactly
933
+ 1.
934
+
935
+ ALGORITHM:
936
+
937
+ We first attempt to pass the computation to pari; if this fails, we
938
+ use Lagrange inversion. Using ``sage: set_verbose(1)`` will print
939
+ a message if passing to pari fails.
940
+
941
+ If the base ring has positive characteristic, then we attempt to
942
+ lift to a characteristic zero ring and perform the reverse there.
943
+ If this fails, an error is raised.
944
+
945
+ EXAMPLES::
946
+
947
+ sage: R.<x> = PowerSeriesRing(QQ)
948
+ sage: f = 2*x + 3*x^2 - x^4 + O(x^5)
949
+ sage: g = f.reverse()
950
+ sage: g
951
+ 1/2*x - 3/8*x^2 + 9/16*x^3 - 131/128*x^4 + O(x^5)
952
+ sage: f(g)
953
+ x + O(x^5)
954
+ sage: g(f)
955
+ x + O(x^5)
956
+
957
+ sage: A.<t> = PowerSeriesRing(ZZ)
958
+ sage: a = t - t^2 - 2*t^4 + t^5 + O(t^6)
959
+ sage: b = a.reverse(); b
960
+ t + t^2 + 2*t^3 + 7*t^4 + 25*t^5 + O(t^6)
961
+ sage: a(b)
962
+ t + O(t^6)
963
+ sage: b(a)
964
+ t + O(t^6)
965
+
966
+ sage: B.<b,c> = PolynomialRing(ZZ)
967
+ sage: A.<t> = PowerSeriesRing(B)
968
+ sage: f = t + b*t^2 + c*t^3 + O(t^4)
969
+ sage: g = f.reverse(); g
970
+ t - b*t^2 + (2*b^2 - c)*t^3 + O(t^4)
971
+ sage: f(g)
972
+ t + O(t^4)
973
+ sage: g(f)
974
+ t + O(t^4)
975
+
976
+ sage: A.<t> = PowerSeriesRing(ZZ)
977
+ sage: B.<s> = A[[]]
978
+ sage: f = (1 - 3*t + 4*t^3 + O(t^4))*s + (2 + t + t^2 + O(t^3))*s^2 + O(s^3)
979
+ sage: from sage.misc.verbose import set_verbose
980
+ sage: set_verbose(1)
981
+ sage: g = f.reverse(); g
982
+ verbose 1 (<module>) passing to pari failed; trying Lagrange inversion
983
+ (1 + 3*t + 9*t^2 + 23*t^3 + O(t^4))*s + (-2 - 19*t - 118*t^2 + O(t^3))*s^2 + O(s^3)
984
+ sage: set_verbose(0)
985
+ sage: f(g) == g(f) == s
986
+ True
987
+
988
+ If the leading coefficient is not a unit, we pass to its fraction
989
+ field if possible::
990
+
991
+ sage: A.<t> = PowerSeriesRing(ZZ)
992
+ sage: a = 2*t - 4*t^2 + t^4 - t^5 + O(t^6)
993
+ sage: a.reverse()
994
+ 1/2*t + 1/2*t^2 + t^3 + 79/32*t^4 + 437/64*t^5 + O(t^6)
995
+
996
+ sage: B.<b> = PolynomialRing(ZZ)
997
+ sage: A.<t> = PowerSeriesRing(B)
998
+ sage: f = 2*b*t + b*t^2 + 3*b^2*t^3 + O(t^4)
999
+ sage: g = f.reverse(); g
1000
+ 1/(2*b)*t - 1/(8*b^2)*t^2 + ((-3*b + 1)/(16*b^3))*t^3 + O(t^4)
1001
+ sage: f(g)
1002
+ t + O(t^4)
1003
+ sage: g(f)
1004
+ t + O(t^4)
1005
+
1006
+ We can handle some base rings of positive characteristic::
1007
+
1008
+ sage: A8.<t> = PowerSeriesRing(Zmod(8))
1009
+ sage: a = t - 15*t^2 - 2*t^4 + t^5 + O(t^6)
1010
+ sage: b = a.reverse(); b
1011
+ t + 7*t^2 + 2*t^3 + 5*t^4 + t^5 + O(t^6)
1012
+ sage: a(b)
1013
+ t + O(t^6)
1014
+ sage: b(a)
1015
+ t + O(t^6)
1016
+
1017
+ The optional argument ``precision`` sets the precision of the output::
1018
+
1019
+ sage: R.<x> = PowerSeriesRing(QQ)
1020
+ sage: f = 2*x + 3*x^2 - 7*x^3 + x^4 + O(x^5)
1021
+ sage: g = f.reverse(precision=3); g
1022
+ 1/2*x - 3/8*x^2 + O(x^3)
1023
+ sage: f(g)
1024
+ x + O(x^3)
1025
+ sage: g(f)
1026
+ x + O(x^3)
1027
+
1028
+ If the input series has infinite precision, the precision of the
1029
+ output is automatically set to the default precision of the parent
1030
+ ring::
1031
+
1032
+ sage: R.<x> = PowerSeriesRing(QQ, default_prec=20)
1033
+ sage: (x - x^2).reverse() # get some Catalan numbers
1034
+ x + x^2 + 2*x^3 + 5*x^4 + 14*x^5 + 42*x^6 + 132*x^7 + 429*x^8 + 1430*x^9
1035
+ + 4862*x^10 + 16796*x^11 + 58786*x^12 + 208012*x^13 + 742900*x^14
1036
+ + 2674440*x^15 + 9694845*x^16 + 35357670*x^17 + 129644790*x^18
1037
+ + 477638700*x^19 + O(x^20)
1038
+ sage: (x - x^2).reverse(precision=3)
1039
+ x + x^2 + O(x^3)
1040
+
1041
+ TESTS::
1042
+
1043
+ sage: R.<x> = PowerSeriesRing(QQ)
1044
+ sage: f = 1 + 2*x + 3*x^2 - x^4 + O(x^5)
1045
+ sage: f.reverse()
1046
+ Traceback (most recent call last):
1047
+ ...
1048
+ ValueError: Series must have valuation one for reversion.
1049
+
1050
+ sage: Series = PowerSeriesRing(SR, 'x') # needs sage.symbolic
1051
+ sage: ser = Series([0, pi]); ser # needs sage.symbolic
1052
+ pi*x
1053
+ sage: ser.reverse() # needs sage.symbolic
1054
+ 1/pi*x + O(x^20)
1055
+ """
1056
+ if self.valuation() != 1:
1057
+ raise ValueError("Series must have valuation one for reversion.")
1058
+
1059
+ f = self
1060
+
1061
+ if f.prec() is infinity and precision is None:
1062
+ precision = f.parent().default_prec()
1063
+ if precision:
1064
+ f = f.add_bigoh(precision)
1065
+
1066
+ out_prec = f.prec()
1067
+
1068
+ if not f[1].is_unit():
1069
+ # if leading coefficient is not a unit, attempt passing
1070
+ # to fraction field
1071
+ try:
1072
+ f = f.change_ring(f.base_ring().fraction_field())
1073
+ except TypeError:
1074
+ raise TypeError("Leading coefficient must be a unit, or base ring must have a fraction field.")
1075
+
1076
+ # set output parent after possibly passing to fraction field,
1077
+ # but before possibly lifting to characteristic zero
1078
+ out_parent = f.parent()
1079
+
1080
+ # first, try reversion with pari; this is faster than Lagrange inversion
1081
+ try:
1082
+ f2 = f.__pari__()
1083
+ g = f2.serreverse()
1084
+ return PowerSeries_poly(f.parent(), g.Vec(-out_prec), out_prec)
1085
+ except (TypeError, ValueError, AttributeError, PariError, ImportError, NameError):
1086
+ # if pari fails, continue with Lagrange inversion
1087
+ from sage.misc.verbose import verbose
1088
+ verbose("passing to pari failed; trying Lagrange inversion")
1089
+
1090
+ if f.parent().characteristic():
1091
+ # over a ring of positive characteristic, attempt lifting to
1092
+ # characteristic zero ring
1093
+ verbose("parent ring has positive characteristic; attempting lift to characteristic zero")
1094
+ base_lift = f.base_ring().lift().codomain()
1095
+ verbose("characteristic zero base is "+str(base_lift))
1096
+ f_lift = f.change_ring(base_lift)
1097
+ verbose("f_lift is "+str(f_lift))
1098
+ rev_lift = f_lift.reverse()
1099
+ return rev_lift.change_ring(f.base_ring())
1100
+
1101
+ t = f.parent().gen()
1102
+ R = f.parent().base_ring()
1103
+
1104
+ h = t/f
1105
+ k = 1
1106
+ g = 0
1107
+ for i in range(1, out_prec):
1108
+ k *= h
1109
+ g += R(k.padded_list(i)[i - 1]/i)*t**i
1110
+ g = g.add_bigoh(out_prec)
1111
+ return PowerSeries_poly(out_parent, g, out_prec, check=False)
1112
+
1113
+ def pade(self, m, n):
1114
+ r"""
1115
+ Return the Padé approximant of ``self`` of index `(m, n)`.
1116
+
1117
+ The Padé approximant of index `(m, n)` of a formal power
1118
+ series `f` is the quotient `Q/P` of two polynomials `Q` and `P`
1119
+ such that `\deg(Q)\leq m`, `\deg(P)\leq n` and
1120
+
1121
+ .. MATH::
1122
+
1123
+ f(z) - Q(z)/P(z) = O(z^{m+n+1}).
1124
+
1125
+ The formal power series `f` must be known up to order `n + m`.
1126
+
1127
+ See :wikipedia:`Padé\_approximant`
1128
+
1129
+ INPUT:
1130
+
1131
+ - ``m``, ``n`` -- integers, describing the degrees of the polynomials
1132
+
1133
+ OUTPUT: a ratio of two polynomials
1134
+
1135
+ ALGORITHM:
1136
+
1137
+ This method uses the formula as a quotient of two determinants.
1138
+
1139
+ .. SEEALSO::
1140
+
1141
+ * :mod:`sage.matrix.berlekamp_massey`,
1142
+ * :meth:`sage.rings.polynomial.polynomial_zmod_flint.Polynomial_zmod_flint.rational_reconstruction`
1143
+
1144
+ EXAMPLES::
1145
+
1146
+ sage: z = PowerSeriesRing(QQ, 'z').gen()
1147
+ sage: exp(z).pade(4, 0)
1148
+ 1/24*z^4 + 1/6*z^3 + 1/2*z^2 + z + 1
1149
+ sage: exp(z).pade(1, 1)
1150
+ (-z - 2)/(z - 2)
1151
+ sage: exp(z).pade(3, 3)
1152
+ (-z^3 - 12*z^2 - 60*z - 120)/(z^3 - 12*z^2 + 60*z - 120)
1153
+ sage: log(1-z).pade(4, 4)
1154
+ (25/6*z^4 - 130/3*z^3 + 105*z^2 - 70*z)/(z^4 - 20*z^3 + 90*z^2
1155
+ - 140*z + 70)
1156
+ sage: sqrt(1+z).pade(3, 2)
1157
+ (1/6*z^3 + 3*z^2 + 8*z + 16/3)/(z^2 + 16/3*z + 16/3)
1158
+ sage: exp(2*z).pade(3, 3)
1159
+ (-z^3 - 6*z^2 - 15*z - 15)/(z^3 - 6*z^2 + 15*z - 15)
1160
+
1161
+ TESTS:
1162
+
1163
+ With real coefficients::
1164
+
1165
+ sage: # needs sage.rings.real_mpfr
1166
+ sage: R.<z> = RR[[]]
1167
+ sage: f = exp(2*z)
1168
+ sage: f.pade(3, 3) # abs tol 1e-10
1169
+ (-z^3 - 6.0*z^2 - 15.0*z - 15.0)/(z^3 - 6.0*z^2 + 15.0*z - 15.0)
1170
+
1171
+ When precision is too low::
1172
+
1173
+ sage: # needs sage.rings.real_mpfr
1174
+ sage: f = z + O(z**6)
1175
+ sage: f.pade(4, 4)
1176
+ Traceback (most recent call last):
1177
+ ...
1178
+ ValueError: the precision of the series is not large enough
1179
+
1180
+ Check that :issue:`21212` is fixed::
1181
+
1182
+ sage: QQx.<x> = QQ[[]]
1183
+ sage: (1 + x + O(x^100)).pade(2,2)
1184
+ x + 1
1185
+
1186
+ Check for correct precision::
1187
+
1188
+ sage: QQx.<x> = QQ[[]]
1189
+ sage: (1 + x + O(x^2)).pade(0,1)
1190
+ -1/(x - 1)
1191
+ """
1192
+ if self.precision_absolute() < n + m + 1:
1193
+ raise ValueError("the precision of the series is not large enough")
1194
+ polyring = self.parent()._poly_ring()
1195
+ z = polyring.gen()
1196
+ c = self.polynomial()
1197
+ u, v = c.rational_reconstruction(z**(n + m + 1), m, n)
1198
+ return u / v
1199
+
1200
+ def _symbolic_(self, ring):
1201
+ """
1202
+ Conversion to symbolic series.
1203
+
1204
+ EXAMPLES::
1205
+
1206
+ sage: # needs sage.symbolic
1207
+ sage: R.<x> = PowerSeriesRing(QQ)
1208
+ sage: s = R([1,2,3,4,5], prec=10); s
1209
+ 1 + 2*x + 3*x^2 + 4*x^3 + 5*x^4 + O(x^10)
1210
+ sage: SR(s)
1211
+ 1 + 2*x + 3*x^2 + 4*x^3 + 5*x^4 + Order(x^10)
1212
+ sage: SR(s).is_terminating_series()
1213
+ False
1214
+ sage: SR(s).variables()
1215
+ (x,)
1216
+ sage: s = R([1,2,3,4,5]); s
1217
+ 1 + 2*x + 3*x^2 + 4*x^3 + 5*x^4
1218
+ sage: SR(s)
1219
+ 1 + 2*x + 3*x^2 + 4*x^3 + 5*x^4
1220
+ sage: _.is_terminating_series()
1221
+ True
1222
+
1223
+ TESTS:
1224
+
1225
+ Check that :issue:`18094` is fixed::
1226
+
1227
+ sage: R.<x> = PolynomialRing(ZZ)
1228
+ sage: SR(R(0).add_bigoh(20)) # needs sage.symbolic
1229
+ Order(x^20)
1230
+ """
1231
+ from sage.symbolic.ring import SR
1232
+ pex = SR(self.polynomial())
1233
+ var = SR.var(self.variable())
1234
+ return pex.series(var, self.prec())
1235
+
1236
+
1237
+ def make_powerseries_poly_v0(parent, f, prec, is_gen):
1238
+ """
1239
+ Return the power series specified by ``f``, ``prec``, and ``is_gen``.
1240
+
1241
+ This function exists for the purposes of pickling. Do not delete
1242
+ this function -- if you change the internal representation,
1243
+ instead make a new function and make sure that both kinds of
1244
+ objects correctly unpickle as the new type.
1245
+
1246
+ EXAMPLES::
1247
+
1248
+ sage: R.<t> = QQ[[]]
1249
+ sage: sage.rings.power_series_poly.make_powerseries_poly_v0(R, t, infinity, True)
1250
+ t
1251
+ """
1252
+ return PowerSeries_poly(parent, f, prec, 0, is_gen)
1253
+
1254
+
1255
+ cdef class BaseRingFloorDivAction(Action):
1256
+ """
1257
+ The floor division action of the base ring on a formal power series.
1258
+ """
1259
+ cpdef _act_(self, g, x):
1260
+ r"""
1261
+ Let ``g`` act on ``x`` under ``self``.
1262
+
1263
+ Regardless of whether this is a left or right action, the acting
1264
+ element comes first.
1265
+
1266
+ INPUT:
1267
+
1268
+ - ``g`` -- an object with parent ``self.G``
1269
+ - ``x`` -- an object with parent ``self.US()``
1270
+
1271
+ .. WARNING::
1272
+
1273
+ This is meant to be a fast internal function, so the
1274
+ conditions on the input are not checked!
1275
+
1276
+ EXAMPLES:
1277
+
1278
+ One gets the correct parent with floor division::
1279
+
1280
+ sage: A = ZZ[['t']]
1281
+ sage: f = A([3*2**n for n in range(6)]).O(6)
1282
+ sage: g = f // 3; g
1283
+ 1 + 2*t + 4*t^2 + 8*t^3 + 16*t^4 + 32*t^5 + O(t^6)
1284
+ sage: g.parent()
1285
+ Power Series Ring in t over Integer Ring
1286
+
1287
+ whereas the parent is larger with division::
1288
+
1289
+ sage: parent(f/3)
1290
+ Power Series Ring in t over Rational Field
1291
+
1292
+ Floor division in case that the power series is not divisible by the divisor::
1293
+
1294
+ sage: f = A([2**n for n in range(6)]).O(6)
1295
+ sage: g = f // 3; g
1296
+ t^2 + 2*t^3 + 5*t^4 + 10*t^5 + O(t^6)
1297
+
1298
+ Another example::
1299
+
1300
+ sage: s = polygen(QQ,'s')
1301
+ sage: A = s.parent()[['t']]
1302
+ sage: f = A([(s+2)*(s+n) for n in range(5)]).O(5)
1303
+ sage: g = f // (s + 2); g
1304
+ s + (s + 1)*t + (s + 2)*t^2 + (s + 3)*t^3 + (s + 4)*t^4 + O(t^5)
1305
+ sage: g.parent()
1306
+ Power Series Ring in t over Univariate Polynomial Ring in s
1307
+ over Rational Field
1308
+
1309
+ sage: R.<t> = PowerSeriesRing(QQ)
1310
+ sage: t // 2
1311
+ 1/2*t
1312
+ """
1313
+ cdef PowerSeries_poly elt = <PowerSeries_poly> x
1314
+ prec = x.prec()
1315
+ P = self.US()
1316
+ g = P.base_ring()(g)
1317
+ return type(x)(P, elt.__f // g, prec=prec, check=False)