This is a known bug in Sage, developers are working on it.

In the meanwhile, a workaround is to use the numerator and denominator.

Suppose you have defined the Laurent series ring

```
sage: L.<x> = LaurentSeriesRing(QQ)
```

and the symbolic variable

```
sage: xx = SR.var('x')
```

and you want to convert this symbolic expression

```
sage: f = 1/xx + xx
sage: f
x + 1/x
```

into an element of `L`

, the direct approach fails as you noted

```
sage L(f)
Traceback (most recent call last)
...
TypeError: denominator must be a unit
```

but this will work:

```
sage: a, b = f.numerator(), f.denominator()
sage: L(a) / L(b)
x^-1 + x
```

You can now write a small function `laurent`

that will take `f`

and `L`

as arguments, and return `L(f.numerator())/L(f.denominator())`

.

```
def laurent(f, L):
"""
Return the Laurent series for this symbolic expression
"""
return L(f.numerator()) / L(f.denominator())
```

Test it using the above examples

```
sage: laurent(f, L)
x^-1 + x
```

You should rather avoid using the symbolic ring at all if possible.