# 28.3 Laurent Series Rings

Module: `sage.rings.laurent_series_ring`

Laurent Series Rings

```sage: R = LaurentSeriesRing(QQ, "x")
sage: R.base_ring()
Rational Field
sage: S = LaurentSeriesRing(GF(17)['x'], 'y')
sage: S
Laurent Series Ring in y over Univariate Polynomial Ring in x over
Finite Field of size 17
sage: S.base_ring()
Univariate Polynomial Ring in x over Finite Field of size 17
```

Module-level Functions

 LaurentSeriesRing( base_ring, [name=None], [names=None], [sparse=False])

```sage: R = LaurentSeriesRing(QQ, 'x'); R
Laurent Series Ring in x over Rational Field
sage: x = R.0
sage: g = 1 - x + x^2 - x^4 +O(x^8); g
1 - x + x^2 - x^4 + O(x^8)
sage: g = 10*x^(-3) + 2006 - 19*x + x^2 - x^4 +O(x^8); g
10*x^-3 + 2006 - 19*x + x^2 - x^4 + O(x^8)
```

You can also use more mathematical notation when the base is a field:

```sage: Frac(QQ[['x']])
Laurent Series Ring in x over Rational Field
sage: Frac(GF(5)['y'])
Fraction Field of Univariate Polynomial Ring in y over Finite Field of size
5
```

Here the fraction field is not just the Laurent series ring, so you can't use the `Frac` notation to make the Laurent series ring.

```sage: Frac(ZZ[['t']])
Fraction Field of Power Series Ring in t over Integer Ring
```

Laurent series rings are determined by their variable and the base ring, and are globally unique.

```sage: K = Qp(5, prec = 5)
sage: L = Qp(5, prec = 200)
sage: R.<x> = LaurentSeriesRing(K)
sage: S.<y> = LaurentSeriesRing(L)
sage: R is S
False
sage: T.<y> = LaurentSeriesRing(Qp(5,prec=200))
sage: S is T
True
sage: W.<y> = LaurentSeriesRing(Qp(5,prec=199))
sage: W is T
False
```

 is_LaurentSeriesRing( x)

Class: `LaurentSeriesRing_domain`

class LaurentSeriesRing_domain
 LaurentSeriesRing_domain( self, base_ring, [name=None], [sparse=False])

Class: `LaurentSeriesRing_field`

class LaurentSeriesRing_field
 LaurentSeriesRing_field( self, base_ring, [name=None], [sparse=False])

Class: `LaurentSeriesRing_generic`

class LaurentSeriesRing_generic
Univariate Laurent Series Ring

```sage: K, q = LaurentSeriesRing(CC, 'q').objgen(); K
Laurent Series Ring in q over Complex Field with 53 bits of precision
True
```
 LaurentSeriesRing_generic( self, base_ring, [name=None], [sparse=False])

Functions: base_extend, change_ring, characteristic, default_prec, gen, is_dense, is_exact, is_field, is_sparse, ngens, power_series_ring, set_default_prec

 base_extend( self, R)
Returns the laurent series ring over R in the same variable as self, assuming there is a canonical coerce map from the base ring of self to R.

 power_series_ring( self)
If this is the Laurent series ring , return the power series ring .

```sage: R = LaurentSeriesRing(QQ, "x")
sage: R.power_series_ring()
Power Series Ring in x over Rational Field
```

Special Functions: __call__, __cmp__, __reduce__, __repr__, _coerce_impl, _is_valid_homomorphism_

 __call__( self, x, [n=0])

```sage: R.<u> = LaurentSeriesRing(Qp(5, 10))
sage: S.<t> = LaurentSeriesRing(RationalField())
sage: print R(t + t^2 + O(t^3))
(1 + O(5^10))*u + (1 + O(5^10))*u^2 + O(u^3)
```

Note that coercing an element into its own parent just produces that element again (since Laurent series are immutable):

```sage: u is R(u)
True
```

 _coerce_impl( self, x)
Return canonical coercion of x into self.

Rings that canonically coerce to this power series ring R:

* R itself * Any laurent series ring in the same variable whose base ring canonically coerces to the base ring of R. * Any ring that canonically coerces to the power series ring over the base ring of R. * Any ring that canonically coerces to the base ring of R