Puiseux Series Ring Element - Power Series Rings and Laurent Series Rings

Skip to content
Back to top
View this page
Edit this page

# Puiseux Series Ring Element

A Puiseux series is a series of the form

\[p(x) = \sum_{n=N}^{\infty} a_n (x-a)^{n/e},\]

where the integer \(e\) is called the ramification index of the series and the number \(a\) is the center. A Puiseux series is essentially a Laurent series but with fractional exponents.

EXAMPLES:

We begin by constructing the ring of Puiseux series in \(x\) with coefficients in the rationals:

Sage

    sage: R.<x> = PuiseuxSeriesRing(QQ)

Python

    >>> from sage.all import *
    >>> R = PuiseuxSeriesRing(QQ, names=('x',)); (x,) = R._first_ngens(1)

This command also defines `x` as the generator of this ring.

When constructing a Puiseux series, the ramification index is automatically determined from the greatest common divisor of the exponents:

Sage

    sage: p = x^(1/2); p
    x^(1/2)
    sage: p.ramification_index()
    2
    sage: q = x^(1/2) + x**(1/3); q
    x^(1/3) + x^(1/2)
    sage: q.ramification_index()
    6

[Python]

    >>> from sage.all import *
    >>> p = x**(Integer(1)/Integer(2)); p
    x^(1/2)
    >>> p.ramification_index()
    2
    >>> q = x**(Integer(1)/Integer(2)) + x**(Integer(1)/Integer(3)); q
    x^(1/3) + x^(1/2)
    >>> q.ramification_index()
    6

Other arithmetic can be performed with Puiseux Series:

Sage

    sage: p + q
    x^(1/3) + 2*x^(1/2)
    sage: p - q
    -x^(1/3)
    sage: p * q
    x^(5/6) + x
    sage: (p / q).add_bigoh(4/3)
    x^(1/6) - x^(1/3) + x^(1/2) - x^(2/3) + x^(5/6) - x + x^(7/6) + O(x^(4/3))

Python

    >>> from sage.all import *
    >>> p + q
    x^(1/3) + 2*x^(1/2)
    >>> p - q
    -x^(1/3)
    >>> p * q
    x^(5/6) + x
    >>> (p / q).add_bigoh(Integer(4)/Integer(3))
    x^(1/6) - x^(1/3) + x^(1/2) - x^(2/3) + x^(5/6) - x + x^(7/6) + O(x^(4/3))

Mind the base ring. However, the base ring can be changed:

Sage

    sage: I*q                                                                           # needs sage.rings.number_field
    Traceback (most recent call last):
    ...
    TypeError: unsupported operand parent(s) for *:
    'Number Field in I with defining polynomial x^2 + 1 with I = 1*I' and
    'Puiseux Series Ring in x over Rational Field'
    sage: qz = q.change_ring(ZZ); qz
    x^(1/3) + x^(1/2)
    sage: qz.parent()
    Puiseux Series Ring in x over Integer Ring

[Python]

    >>> from sage.all import *
    >>> I*q                                                                           # needs sage.rings.number_field
    Traceback (most recent call last):
    ...
    TypeError: unsupported operand parent(s) for *:
    'Number Field in I with defining polynomial x^2 + 1 with I = 1*I' and
    'Puiseux Series Ring in x over Rational Field'
    >>> qz = q.change_ring(ZZ); qz
    x^(1/3) + x^(1/2)
    >>> qz.parent()
    Puiseux Series Ring in x over Integer Ring

Other properties of the Puiseux series can be easily obtained:

Sage

    sage: r = (3*x^(-1/5) + 7*x^(2/5) + (1/2)*x).add_bigoh(6/5); r
    3*x^(-1/5) + 7*x^(2/5) + 1/2*x + O(x^(6/5))
    sage: r.valuation()
    -1/5
    sage: r.prec()
    6/5
    sage: r.precision_absolute()
    6/5
    sage: r.precision_relative()
    7/5
    sage: r.exponents()
    [-1/5, 2/5, 1]
    sage: r.coefficients()
    [3, 7, 1/2]

Python

    >>> from sage.all import *
    >>> r = (Integer(3)*x**(-Integer(1)/Integer(5)) + Integer(7)*x**(Integer(2)/Integer(5)) + (Integer(1)/Integer(2))*x).add_bigoh(Integer(6)/Integer(5)); r
    3*x^(-1/5) + 7*x^(2/5) + 1/2*x + O(x^(6/5))
    >>> r.valuation()
    -1/5
    >>> r.prec()
    6/5
    >>> r.precision_absolute()
    6/5
    >>> r.precision_relative()
    7/5
    >>> r.exponents()
    [-1/5, 2/5, 1]
    >>> r.coefficients()
    [3, 7, 1/2]

Finally, Puiseux series are compatible with other objects in Sage. For example, you can perform arithmetic with Laurent series:

Sage

    sage: L.<x> = LaurentSeriesRing(ZZ)
    sage: l = 3*x^(-2) + x^(-1) + 2 + x**3
    sage: r + l
    3*x^-2 + x^-1 + 3*x^(-1/5) + 2 + 7*x^(2/5) + 1/2*x + O(x^(6/5))

[Python]

    >>> from sage.all import *
    >>> L = LaurentSeriesRing(ZZ, names=('x',)); (x,) = L._first_ngens(1)
    >>> l = Integer(3)*x**(-Integer(2)) + x**(-Integer(1)) + Integer(2) + x**Integer(3)
    >>> r + l
    3*x^-2 + x^-1 + 3*x^(-1/5) + 2 + 7*x^(2/5) + 1/2*x + O(x^(6/5))

AUTHORS:

- Chris Swierczewski 2016: initial version on https://github.com/abelfunctions/abelfunctions/tree/master/abelfunctions

- Frédéric Chapoton 2016: integration of code

- Travis Scrimshaw, Sebastian Oehms 2019-2020: basic improvements and completions

REFERENCES:

- Wikipedia article Puiseux_series

class sage.rings.puiseux_series_ring_element.PuiseuxSeries

  Bases: `AlgebraElement`

  A Puiseux series.

  \[\sum_{n=-N}^\infty a_n x^{n/e}\]

  It is stored as a Laurent series:

  \[\sum_{n=-N}^\infty a_n t^n\]

  where \(t = x^{1/e}\).

  INPUT:

  - `parent` – the parent ring

  - `f` – one of the following types of inputs:

    - instance of `PuiseuxSeries`

    - instance that can be coerced into the Laurent series ring of the parent

  - `e` – integer (default: 1); the ramification index

  EXAMPLES:

  Sage

      sage: R.<x> = PuiseuxSeriesRing(QQ)
      sage: p = x^(1/2) + x**3; p
      x^(1/2) + x^3
      sage: q = x**(1/2) - x**(-1/2)
      sage: r = q.add_bigoh(7/2); r
      -x^(-1/2) + x^(1/2) + O(x^(7/2))
      sage: r**2
      x^-1 - 2 + x + O(x^3)

  Python

      >>> from sage.all import *
      >>> R = PuiseuxSeriesRing(QQ, names=('x',)); (x,) = R._first_ngens(1)
      >>> p = x**(Integer(1)/Integer(2)) + x**Integer(3); p
      x^(1/2) + x^3
      >>> q = x**(Integer(1)/Integer(2)) - x**(-Integer(1)/Integer(2))
      >>> r = q.add_bigoh(Integer(7)/Integer(2)); r
      -x^(-1/2) + x^(1/2) + O(x^(7/2))
      >>> r**Integer(2)
      x^-1 - 2 + x + O(x^3)

  add_bigoh(prec)

    Return the truncated series at chosen precision `prec`.

    INPUT:

    - `prec` – the precision of the series as a rational number

    EXAMPLES:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(QQ)
        sage: p = x^(-7/2) + 3 + 5*x^(1/2) - 7*x**3
        sage: p.add_bigoh(2)
        x^(-7/2) + 3 + 5*x^(1/2) + O(x^2)
        sage: p.add_bigoh(0)
        x^(-7/2) + O(1)
        sage: p.add_bigoh(-1)
        x^(-7/2) + O(x^-1)

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(QQ, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = x**(-Integer(7)/Integer(2)) + Integer(3) + Integer(5)*x**(Integer(1)/Integer(2)) - Integer(7)*x**Integer(3)
        >>> p.add_bigoh(Integer(2))
        x^(-7/2) + 3 + 5*x^(1/2) + O(x^2)
        >>> p.add_bigoh(Integer(0))
        x^(-7/2) + O(1)
        >>> p.add_bigoh(-Integer(1))
        x^(-7/2) + O(x^-1)

    Note

    The precision passed to the method is adapted to the common ramification index:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(ZZ)
        sage: p = x**(-1/3) + 2*x**(1/5)
        sage: p.add_bigoh(1/2)
        x^(-1/3) + 2*x^(1/5) + O(x^(7/15))

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(ZZ, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = x**(-Integer(1)/Integer(3)) + Integer(2)*x**(Integer(1)/Integer(5))
        >>> p.add_bigoh(Integer(1)/Integer(2))
        x^(-1/3) + 2*x^(1/5) + O(x^(7/15))

  change_ring(R)

    Return `self` over a the new ring `R`.

    EXAMPLES:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(ZZ)
        sage: p = x^(-7/2) + 3 + 5*x^(1/2) - 7*x**3
        sage: q = p.change_ring(QQ); q
        x^(-7/2) + 3 + 5*x^(1/2) - 7*x^3
        sage: q.parent()
        Puiseux Series Ring in x over Rational Field

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(ZZ, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = x**(-Integer(7)/Integer(2)) + Integer(3) + Integer(5)*x**(Integer(1)/Integer(2)) - Integer(7)*x**Integer(3)
        >>> q = p.change_ring(QQ); q
        x^(-7/2) + 3 + 5*x^(1/2) - 7*x^3
        >>> q.parent()
        Puiseux Series Ring in x over Rational Field

  coefficients()

    Return the list of coefficients.

    EXAMPLES:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(ZZ)
        sage: p = x^(3/4) + 2*x^(4/5) + 3* x^(5/6)
        sage: p.coefficients()
        [1, 2, 3]

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(ZZ, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = x**(Integer(3)/Integer(4)) + Integer(2)*x**(Integer(4)/Integer(5)) + Integer(3)* x**(Integer(5)/Integer(6))
        >>> p.coefficients()
        [1, 2, 3]

  common_prec(p)

    Return the minimum precision of \(p\) and `self`.

    EXAMPLES:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(ZZ)
        sage: p = (x**(-1/3) + 2*x**3)**2
        sage: q5 = p.add_bigoh(5); q5
        x^(-2/3) + 4*x^(8/3) + O(x^5)
        sage: q7 = p.add_bigoh(7); q7
        x^(-2/3) + 4*x^(8/3) + 4*x^6 + O(x^7)
        sage: q5.common_prec(q7)
        5
        sage: q7.common_prec(q5)
        5

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(ZZ, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = (x**(-Integer(1)/Integer(3)) + Integer(2)*x**Integer(3))**Integer(2)
        >>> q5 = p.add_bigoh(Integer(5)); q5
        x^(-2/3) + 4*x^(8/3) + O(x^5)
        >>> q7 = p.add_bigoh(Integer(7)); q7
        x^(-2/3) + 4*x^(8/3) + 4*x^6 + O(x^7)
        >>> q5.common_prec(q7)
        5
        >>> q7.common_prec(q5)
        5

  degree()

    Return the degree of `self`.

    EXAMPLES:

    Sage

        sage: P.<y> = PolynomialRing(GF(5))
        sage: R.<x> = PuiseuxSeriesRing(P)
        sage: p = 3*y*x**(-2/3) + 2*y**2*x**(1/5); p
        3*y*x^(-2/3) + 2*y^2*x^(1/5)
        sage: p.degree()
        1/5

    Python

        >>> from sage.all import *
        >>> P = PolynomialRing(GF(Integer(5)), names=('y',)); (y,) = P._first_ngens(1)
        >>> R = PuiseuxSeriesRing(P, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = Integer(3)*y*x**(-Integer(2)/Integer(3)) + Integer(2)*y**Integer(2)*x**(Integer(1)/Integer(5)); p
        3*y*x^(-2/3) + 2*y^2*x^(1/5)
        >>> p.degree()
        1/5

  exponents()

    Return the list of exponents.

    EXAMPLES:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(ZZ)
        sage: p = x^(3/4) + 2*x^(4/5) + 3* x^(5/6)
        sage: p.exponents()
        [3/4, 4/5, 5/6]

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(ZZ, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = x**(Integer(3)/Integer(4)) + Integer(2)*x**(Integer(4)/Integer(5)) + Integer(3)* x**(Integer(5)/Integer(6))
        >>> p.exponents()
        [3/4, 4/5, 5/6]

  inverse()

    Return the inverse of `self`.

    EXAMPLES:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(QQ)
        sage: p = x^(-7/2) + 3 + 5*x^(1/2) - 7*x**3
        sage: 1/p
        x^(7/2) - 3*x^7 - 5*x^(15/2) + 7*x^10 + 9*x^(21/2) + 30*x^11 +
        25*x^(23/2) + O(x^(27/2))

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(QQ, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = x**(-Integer(7)/Integer(2)) + Integer(3) + Integer(5)*x**(Integer(1)/Integer(2)) - Integer(7)*x**Integer(3)
        >>> Integer(1)/p
        x^(7/2) - 3*x^7 - 5*x^(15/2) + 7*x^10 + 9*x^(21/2) + 30*x^11 +
        25*x^(23/2) + O(x^(27/2))

  is_monomial()

    Return whether `self` is a monomial.

    This is `True` if and only if `self` is \(x^p\) for some rational \(p\).

    EXAMPLES:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(QQ)
        sage: p = x^(1/2) + 3/4 * x^(2/3)
        sage: p.is_monomial()
        False
        sage: q = x**(11/13)
        sage: q.is_monomial()
        True
        sage: q = 4*x**(11/13)
        sage: q.is_monomial()
        False

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(QQ, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = x**(Integer(1)/Integer(2)) + Integer(3)/Integer(4) * x**(Integer(2)/Integer(3))
        >>> p.is_monomial()
        False
        >>> q = x**(Integer(11)/Integer(13))
        >>> q.is_monomial()
        True
        >>> q = Integer(4)*x**(Integer(11)/Integer(13))
        >>> q.is_monomial()
        False

  is_unit()

    Return whether `self` is a unit.

    A Puiseux series is a unit if and only if its leading coefficient is.

    EXAMPLES:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(ZZ)
        sage: p = x^(-7/2) + 3 + 5*x^(1/2) - 7*x**3
        sage: p.is_unit()
        True
        sage: q = 4 * x^(-7/2) + 3 * x**4
        sage: q.is_unit()
        False

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(ZZ, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = x**(-Integer(7)/Integer(2)) + Integer(3) + Integer(5)*x**(Integer(1)/Integer(2)) - Integer(7)*x**Integer(3)
        >>> p.is_unit()
        True
        >>> q = Integer(4) * x**(-Integer(7)/Integer(2)) + Integer(3) * x**Integer(4)
        >>> q.is_unit()
        False

  is_zero()

    Return whether `self` is zero.

    EXAMPLES:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(QQ)
        sage: p = x^(1/2) + 3/4 * x^(2/3)
        sage: p.is_zero()
        False
        sage: R.zero().is_zero()
        True

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(QQ, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = x**(Integer(1)/Integer(2)) + Integer(3)/Integer(4) * x**(Integer(2)/Integer(3))
        >>> p.is_zero()
        False
        >>> R.zero().is_zero()
        True

  laurent_part()

    Return the underlying Laurent series.

    EXAMPLES:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(QQ)
        sage: p = x^(1/2) + 3/4 * x^(2/3)
        sage: p.laurent_part()
        x^3 + 3/4*x^4

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(QQ, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = x**(Integer(1)/Integer(2)) + Integer(3)/Integer(4) * x**(Integer(2)/Integer(3))
        >>> p.laurent_part()
        x^3 + 3/4*x^4

  laurent_series()

    If `self` is a Laurent series, return it as a Laurent series.

    EXAMPLES:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(ZZ)
        sage: p = x**(1/2) - x**(-1/2)
        sage: p.laurent_series()
        Traceback (most recent call last):
        ...
        ArithmeticError: self is not a Laurent series
        sage: q = p**2
        sage: q.laurent_series()
        x^-1 - 2 + x

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(ZZ, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = x**(Integer(1)/Integer(2)) - x**(-Integer(1)/Integer(2))
        >>> p.laurent_series()
        Traceback (most recent call last):
        ...
        ArithmeticError: self is not a Laurent series
        >>> q = p**Integer(2)
        >>> q.laurent_series()
        x^-1 - 2 + x

  list()

    Return the list of coefficients indexed by the exponents of the the corresponding Laurent series.

    EXAMPLES:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(ZZ)
        sage: p = x^(3/4) + 2*x^(4/5) + 3* x^(5/6)
        sage: p.list()
        [1, 0, 0, 2, 0, 3]

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(ZZ, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = x**(Integer(3)/Integer(4)) + Integer(2)*x**(Integer(4)/Integer(5)) + Integer(3)* x**(Integer(5)/Integer(6))
        >>> p.list()
        [1, 0, 0, 2, 0, 3]

  power_series()

    If `self` is a power series, return it as a power series.

    EXAMPLES:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(QQbar)
        sage: p = x**(3/2) - QQbar(I)*x**(1/2)
        sage: p.power_series()
        Traceback (most recent call last):
        ...
        ArithmeticError: self is not a power series
        sage: q = p**2
        sage: q.power_series()
        -x - 2*I*x^2 + x^3

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(QQbar, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = x**(Integer(3)/Integer(2)) - QQbar(I)*x**(Integer(1)/Integer(2))
        >>> p.power_series()
        Traceback (most recent call last):
        ...
        ArithmeticError: self is not a power series
        >>> q = p**Integer(2)
        >>> q.power_series()
        -x - 2*I*x^2 + x^3

  prec()

    Return the precision of `self`.

    EXAMPLES:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(ZZ)
        sage: p = (x**(-1/3) + 2*x**3)**2; p
        x^(-2/3) + 4*x^(8/3) + 4*x^6
        sage: q = p.add_bigoh(5); q
        x^(-2/3) + 4*x^(8/3) + O(x^5)
        sage: q.prec()
        5

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(ZZ, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = (x**(-Integer(1)/Integer(3)) + Integer(2)*x**Integer(3))**Integer(2); p
        x^(-2/3) + 4*x^(8/3) + 4*x^6
        >>> q = p.add_bigoh(Integer(5)); q
        x^(-2/3) + 4*x^(8/3) + O(x^5)
        >>> q.prec()
        5

  precision_absolute()

    alias of `prec()`.

  precision_relative()

    Return the relative precision of the series.

    The relative precision of the Puiseux series is the difference between its absolute precision and its valuation.

    EXAMPLES:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(GF(3))
        sage: p = (x**(-1/3) + 2*x**3)**2; p
        x^(-2/3) + x^(8/3) + x^6
        sage: q = p.add_bigoh(7); q
        x^(-2/3) + x^(8/3) + x^6 + O(x^7)
        sage: q.precision_relative()
        23/3

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(GF(Integer(3)), names=('x',)); (x,) = R._first_ngens(1)
        >>> p = (x**(-Integer(1)/Integer(3)) + Integer(2)*x**Integer(3))**Integer(2); p
        x^(-2/3) + x^(8/3) + x^6
        >>> q = p.add_bigoh(Integer(7)); q
        x^(-2/3) + x^(8/3) + x^6 + O(x^7)
        >>> q.precision_relative()
        23/3

  ramification_index()

    Return the ramification index.

    EXAMPLES:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(QQ)
        sage: p = x^(1/2) + 3/4 * x^(2/3)
        sage: p.ramification_index()
        6

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(QQ, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = x**(Integer(1)/Integer(2)) + Integer(3)/Integer(4) * x**(Integer(2)/Integer(3))
        >>> p.ramification_index()
        6

  shift(r)

    Return this Puiseux series multiplied by \(x^r\).

    EXAMPLES:

    Sage

        sage: P.<y> = LaurentPolynomialRing(ZZ)
        sage: R.<x> = PuiseuxSeriesRing(P)
        sage: p = y*x**(-1/3) + 2*y^(-2)*x**(1/2); p
        y*x^(-1/3) + (2*y^-2)*x^(1/2)
        sage: p.shift(3)
        y*x^(8/3) + (2*y^-2)*x^(7/2)

    Python

        >>> from sage.all import *
        >>> P = LaurentPolynomialRing(ZZ, names=('y',)); (y,) = P._first_ngens(1)
        >>> R = PuiseuxSeriesRing(P, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = y*x**(-Integer(1)/Integer(3)) + Integer(2)*y**(-Integer(2))*x**(Integer(1)/Integer(2)); p
        y*x^(-1/3) + (2*y^-2)*x^(1/2)
        >>> p.shift(Integer(3))
        y*x^(8/3) + (2*y^-2)*x^(7/2)

  truncate(r)

    Return the Puiseux series of degree \(< r\).

    This is equivalent to `self` modulo \(x^r\).

    EXAMPLES:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(ZZ)
        sage: p = (x**(-1/3) + 2*x**3)**2; p
        x^(-2/3) + 4*x^(8/3) + 4*x^6
        sage: q = p.truncate(5); q
        x^(-2/3) + 4*x^(8/3)
        sage: q == p.add_bigoh(5)
        True

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(ZZ, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = (x**(-Integer(1)/Integer(3)) + Integer(2)*x**Integer(3))**Integer(2); p
        x^(-2/3) + 4*x^(8/3) + 4*x^6
        >>> q = p.truncate(Integer(5)); q
        x^(-2/3) + 4*x^(8/3)
        >>> q == p.add_bigoh(Integer(5))
        True

  valuation()

    Return the valuation of `self`.

    EXAMPLES:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(QQ)
        sage: p = x^(-7/2) + 3 + 5*x^(1/2) - 7*x**3
        sage: p.valuation()
        -7/2

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(QQ, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = x**(-Integer(7)/Integer(2)) + Integer(3) + Integer(5)*x**(Integer(1)/Integer(2)) - Integer(7)*x**Integer(3)
        >>> p.valuation()
        -7/2

  variable()

    Return the variable of `self`.

    EXAMPLES:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(QQ)
        sage: p = x^(-7/2) + 3 + 5*x^(1/2) - 7*x**3
        sage: p.variable()
        'x'

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(QQ, names=('x',)); (x,) = R._first_ngens(1)
        >>> p = x**(-Integer(7)/Integer(2)) + Integer(3) + Integer(5)*x**(Integer(1)/Integer(2)) - Integer(7)*x**Integer(3)
        >>> p.variable()
        'x'