Skip to content
This repository was archived by the owner on Jan 30, 2023. It is now read-only.

Commit 0facd2f

Browse files
committed
Merge branch 'public/4618' of git://trac.sagemath.org/sage into puiseux_series_4618
2 parents dde78cb + 99f43aa commit 0facd2f

8 files changed

+1581
-1
lines changed

src/doc/en/reference/power_series/index.rst

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ Power Series Rings and Laurent Series Rings
1919
sage/rings/lazy_laurent_series_ring
2020
sage/rings/lazy_laurent_series_operator
2121

22+
sage/rings/puiseux_series_ring
23+
sage/rings/puiseux_series_ring_element
24+
2225
sage/rings/tate_algebra
2326

2427
.. include:: ../footer.txt

src/module_list.py

+3
Original file line numberDiff line numberDiff line change
@@ -1192,6 +1192,9 @@ def uname_specific(name, value, alternative):
11921192
Extension('sage.rings.tate_algebra_ideal',
11931193
sources = ['sage/rings/tate_algebra_ideal.pyx']),
11941194

1195+
Extension('sage.rings.puiseux_series_ring_element',
1196+
sources = ['sage/rings/puiseux_series_ring_element.pyx']),
1197+
11951198
Extension('sage.rings.rational',
11961199
sources = ['sage/rings/rational.pyx'],
11971200
libraries=['ntl']),

src/sage/rings/all.py

+4
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,10 @@
133133
# Tate algebras
134134
from .tate_algebra import TateAlgebra
135135

136+
# Puiseux series ring
137+
from .puiseux_series_ring import PuiseuxSeriesRing
138+
from .puiseux_series_ring_element import PuiseuxSeries
139+
136140
# Pseudo-ring of PARI objects.
137141
from .pari_ring import PariRing, Pari
138142

src/sage/rings/big_oh.py

+13
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import sage.arith.all as arith
1515
from . import laurent_series_ring_element
16+
from sage.rings.puiseux_series_ring_element import PuiseuxSeries
1617
import sage.rings.padics.factory as padics_factory
1718
import sage.rings.padics.padic_generic_element as padic_generic_element
1819
from . import power_series_ring_element
@@ -87,6 +88,15 @@ def O(*x, **kwds):
8788
sage: O(n)
8889
O(n)
8990
91+
Application with Puiseux series::
92+
93+
sage: P.<y> = PuiseuxSeriesRing(ZZ)
94+
sage: y^(1/5) + O(y^(1/3))
95+
y^(1/5) + O(y^(1/3))
96+
sage: y^(1/3) + O(y^(1/5))
97+
O(y^(1/5))
98+
99+
90100
TESTS::
91101
92102
sage: var('x, y')
@@ -133,6 +143,9 @@ def O(*x, **kwds):
133143
return laurent_series_ring_element.LaurentSeries(x.parent(), 0).\
134144
add_bigoh(x.valuation(), **kwds)
135145

146+
elif isinstance(x, PuiseuxSeries):
147+
return x.add_bigoh(x.valuation(), **kwds)
148+
136149
elif isinstance(x, integer_types + (integer.Integer, rational.Rational)):
137150
# p-adic number
138151
if x <= 0:

src/sage/rings/laurent_series_ring_element.pyx

+61-1
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,66 @@ cdef class LaurentSeries(AlgebraElement):
363363
s += " + %s"%bigoh
364364
return s[1:]
365365

366+
def verschiebung(self, n):
367+
r"""
368+
Return the ``n``-th Verschiebung of ``self``.
369+
370+
If `f = \sum a_m x^m` then this function returns `\sum a_m x^{mn}`.
371+
372+
EXAMPLES::
373+
374+
sage: R.<x> = LaurentSeriesRing(QQ)
375+
sage: f = -1/x + 1 + 2*x^2 + 5*x^5
376+
sage: f.V(2)
377+
-x^-2 + 1 + 2*x^4 + 5*x^10
378+
sage: f.V(-1)
379+
5*x^-5 + 2*x^-2 + 1 - x
380+
sage: h = f.add_bigoh(7)
381+
sage: h.V(2)
382+
-x^-2 + 1 + 2*x^4 + 5*x^10 + O(x^14)
383+
sage: h.V(-2)
384+
Traceback (most recent call last):
385+
...
386+
ValueError: For finite precision only positive arguments allowed
387+
388+
TESTS::
389+
390+
sage: R.<x> = LaurentSeriesRing(QQ)
391+
sage: f = x
392+
sage: f.V(3)
393+
x^3
394+
sage: f.V(-3)
395+
x^-3
396+
sage: g = 2*x^(-1) + 3 + 5*x
397+
sage: g.V(-1)
398+
5*x^-1 + 3 + 2*x
399+
"""
400+
if n == 0:
401+
raise ValueError('n must be non zero')
402+
403+
if n < 0:
404+
if not self.prec() is infinity:
405+
raise ValueError('For finite precision only positive arguments allowed')
406+
407+
exponents = [e * n for e in self.exponents()]
408+
u = min(exponents)
409+
exponents = [e - u for e in exponents]
410+
coefficients = self.coefficients()
411+
zero = self.base_ring().zero()
412+
w = [zero] * (max(exponents) + 1)
413+
for i in range(len(exponents)):
414+
e = exponents[i]
415+
c = coefficients[i]
416+
w[e] = c
417+
l = LaurentSeries(self._parent, w, u)
418+
else:
419+
__u = self.__u.V(n)
420+
__n = <long>self.__n * n
421+
l = LaurentSeries(self._parent, __u, __n)
422+
return l
423+
424+
V = verschiebung
425+
366426
def _latex_(self):
367427
r"""
368428
EXAMPLES::
@@ -1307,7 +1367,7 @@ cdef class LaurentSeries(AlgebraElement):
13071367
return self.prec() - self.valuation()
13081368

13091369
def __copy__(self):
1310-
return type(self)(self._parent, self.__u.copy(), self.__n)
1370+
return type(self)(self._parent, self.__u.__copy__(), self.__n)
13111371

13121372
def reverse(self, precision=None):
13131373
"""

0 commit comments

Comments
 (0)