Puiseux Series Ring - Power Series Rings and Laurent Series Rings

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

# Puiseux Series Ring

The ring of Puiseux series.

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.PuiseuxSeriesRing(laurent_series)

  Bases: `UniqueRepresentation`, `Parent`

  Rings of Puiseux series.

  EXAMPLES:

  Sage

      sage: P = PuiseuxSeriesRing(QQ, 'y')
      sage: y = P.gen()
      sage: f = y**(4/3) + y**(-5/6); f
      y^(-5/6) + y^(4/3)
      sage: f.add_bigoh(2)
      y^(-5/6) + y^(4/3) + O(y^2)
      sage: f.add_bigoh(1)
      y^(-5/6) + O(y)

  Python

      >>> from sage.all import *
      >>> P = PuiseuxSeriesRing(QQ, 'y')
      >>> y = P.gen()
      >>> f = y**(Integer(4)/Integer(3)) + y**(-Integer(5)/Integer(6)); f
      y^(-5/6) + y^(4/3)
      >>> f.add_bigoh(Integer(2))
      y^(-5/6) + y^(4/3) + O(y^2)
      >>> f.add_bigoh(Integer(1))
      y^(-5/6) + O(y)

  Element

    alias of `PuiseuxSeries`

  base_extend(R)

    Extend the coefficients.

    INPUT:

    - `R` – a ring

    EXAMPLES:

    Sage

        sage: A = PuiseuxSeriesRing(ZZ, 'y')
        sage: A.base_extend(QQ)
        Puiseux Series Ring in y over Rational Field

    Python

        >>> from sage.all import *
        >>> A = PuiseuxSeriesRing(ZZ, 'y')
        >>> A.base_extend(QQ)
        Puiseux Series Ring in y over Rational Field

  change_ring(R)

    Return a Puiseux series ring over another ring.

    INPUT:

    - `R` – a ring

    EXAMPLES:

    Sage

        sage: A = PuiseuxSeriesRing(ZZ, 'y')
        sage: A.change_ring(QQ)
        Puiseux Series Ring in y over Rational Field

    Python

        >>> from sage.all import *
        >>> A = PuiseuxSeriesRing(ZZ, 'y')
        >>> A.change_ring(QQ)
        Puiseux Series Ring in y over Rational Field

  default_prec()

    Return the default precision of `self`.

    EXAMPLES:

    Sage

        sage: A = PuiseuxSeriesRing(AA, 'z')                                        # needs sage.rings.number_field
        sage: A.default_prec()                                                      # needs sage.rings.number_field
        20

    Python

        >>> from sage.all import *
        >>> A = PuiseuxSeriesRing(AA, 'z')                                        # needs sage.rings.number_field
        >>> A.default_prec()                                                      # needs sage.rings.number_field
        20

  fraction_field()

    Return the fraction field of this ring of Laurent series.

    If the base ring is a field, then Puiseux series are already a field. If the base ring is a domain, then the Puiseux series over its fraction field is returned. Otherwise, raise a `ValueError`.

    EXAMPLES:

    Sage

        sage: R = PuiseuxSeriesRing(ZZ, 't', 30).fraction_field()
        sage: R
        Puiseux Series Ring in t over Rational Field
        sage: R.default_prec()
        30

        sage: PuiseuxSeriesRing(Zmod(4), 't').fraction_field()
        Traceback (most recent call last):
        ...
        ValueError: must be an integral domain

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(ZZ, 't', Integer(30)).fraction_field()
        >>> R
        Puiseux Series Ring in t over Rational Field
        >>> R.default_prec()
        30

        >>> PuiseuxSeriesRing(Zmod(Integer(4)), 't').fraction_field()
        Traceback (most recent call last):
        ...
        ValueError: must be an integral domain

  gen(n=0)

    Return the generator of `self`.

    EXAMPLES:

    Sage

        sage: A = PuiseuxSeriesRing(AA, 'z')                                        # needs sage.rings.number_field
        sage: A.gen()                                                               # needs sage.rings.number_field
        z

    Python

        >>> from sage.all import *
        >>> A = PuiseuxSeriesRing(AA, 'z')                                        # needs sage.rings.number_field
        >>> A.gen()                                                               # needs sage.rings.number_field
        z

  gens()

    Return the tuple of generators.

    EXAMPLES:

    Sage

        sage: A = PuiseuxSeriesRing(QQ, 'z')
        sage: A.gens()
        (z,)

    Python

        >>> from sage.all import *
        >>> A = PuiseuxSeriesRing(QQ, 'z')
        >>> A.gens()
        (z,)

  is_dense()

    Return whether `self` is dense.

    EXAMPLES:

    Sage

        sage: A = PuiseuxSeriesRing(ZZ, 'y')
        sage: A.is_dense()
        True

    Python

        >>> from sage.all import *
        >>> A = PuiseuxSeriesRing(ZZ, 'y')
        >>> A.is_dense()
        True

  is_field(proof=True)

    Return whether `self` is a field.

    A Puiseux series ring is a field if and only its base ring is a field.

    EXAMPLES:

    Sage

        sage: A = PuiseuxSeriesRing(ZZ, 'y')
        sage: A.is_field()
        False
        sage: A in Fields()
        False
        sage: B = A.change_ring(QQ); B.is_field()
        True
        sage: B in Fields()
        True

    Python

        >>> from sage.all import *
        >>> A = PuiseuxSeriesRing(ZZ, 'y')
        >>> A.is_field()
        False
        >>> A in Fields()
        False
        >>> B = A.change_ring(QQ); B.is_field()
        True
        >>> B in Fields()
        True

  is_sparse()

    Return whether `self` is sparse.

    EXAMPLES:

    Sage

        sage: A = PuiseuxSeriesRing(ZZ, 'y')
        sage: A.is_sparse()
        False

    Python

        >>> from sage.all import *
        >>> A = PuiseuxSeriesRing(ZZ, 'y')
        >>> A.is_sparse()
        False

  laurent_series_ring()

    Return the underlying Laurent series ring.

    EXAMPLES:

    Sage

        sage: A = PuiseuxSeriesRing(AA, 'z')                                        # needs sage.rings.number_field
        sage: A.laurent_series_ring()                                               # needs sage.rings.number_field
        Laurent Series Ring in z over Algebraic Real Field

    Python

        >>> from sage.all import *
        >>> A = PuiseuxSeriesRing(AA, 'z')                                        # needs sage.rings.number_field
        >>> A.laurent_series_ring()                                               # needs sage.rings.number_field
        Laurent Series Ring in z over Algebraic Real Field

  ngens()

    Return the number of generators of `self`, namely 1.

    EXAMPLES:

    Sage

        sage: A = PuiseuxSeriesRing(AA, 'z')                                        # needs sage.rings.number_field
        sage: A.ngens()                                                             # needs sage.rings.number_field
        1

    Python

        >>> from sage.all import *
        >>> A = PuiseuxSeriesRing(AA, 'z')                                        # needs sage.rings.number_field
        >>> A.ngens()                                                             # needs sage.rings.number_field
        1

  residue_field()

    Return the residue field of this Puiseux series field if it is a complete discrete valuation field (i.e. if the base ring is a field, in which case it is also the residue field).

    EXAMPLES:

    Sage

        sage: R.<x> = PuiseuxSeriesRing(GF(17))
        sage: R.residue_field()
        Finite Field of size 17

        sage: R.<x> = PuiseuxSeriesRing(ZZ)
        sage: R.residue_field()
        Traceback (most recent call last):
        ...
        TypeError: the base ring is not a field

    Python

        >>> from sage.all import *
        >>> R = PuiseuxSeriesRing(GF(Integer(17)), names=('x',)); (x,) = R._first_ngens(1)
        >>> R.residue_field()
        Finite Field of size 17

        >>> R = PuiseuxSeriesRing(ZZ, names=('x',)); (x,) = R._first_ngens(1)
        >>> R.residue_field()
        Traceback (most recent call last):
        ...
        TypeError: the base ring is not a field

  uniformizer()

    Return a uniformizer of this Puiseux series field if it is a discrete valuation field (i.e. if the base ring is actually a field). Otherwise, an error is raised.

    EXAMPLES:

    Sage

        sage: R.<t> = PuiseuxSeriesRing(QQ)
        sage: R.uniformizer()
        t

        sage: R.<t> = PuiseuxSeriesRing(ZZ)
        sage: R.uniformizer()
        Traceback (most recent call last):
        ...
        TypeError: the base ring is not a field

    Python

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

        >>> R = PuiseuxSeriesRing(ZZ, names=('t',)); (t,) = R._first_ngens(1)
        >>> R.uniformizer()
        Traceback (most recent call last):
        ...
        TypeError: the base ring is not a field