Puiseux Series Ring Element¶
A Puiseux series is a series of the form
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: R.<x> = PuiseuxSeriesRing(QQ)
>>> 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: 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
>>> 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: 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))
>>> 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: 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
>>> 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: 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]
>>> 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: 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))
>>> 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:
- class sage.rings.puiseux_series_ring_element.PuiseuxSeries[source]¶
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 ringf
– 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: 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)
>>> 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)[source]¶
Return the truncated series at chosen precision
prec
.INPUT:
prec
– the precision of the series as a rational number
EXAMPLES:
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)
>>> 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: 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))
>>> 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)[source]¶
Return
self
over a the new ringR
.EXAMPLES:
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
>>> 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()[source]¶
Return the list of coefficients.
EXAMPLES:
sage: R.<x> = PuiseuxSeriesRing(ZZ) sage: p = x^(3/4) + 2*x^(4/5) + 3* x^(5/6) sage: p.coefficients() [1, 2, 3]
>>> 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)[source]¶
Return the minimum precision of \(p\) and
self
.EXAMPLES:
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
>>> 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()[source]¶
Return the degree of
self
.EXAMPLES:
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
>>> 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()[source]¶
Return the list of exponents.
EXAMPLES:
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]
>>> 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()[source]¶
Return the inverse of
self
.EXAMPLES:
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))
>>> 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()[source]¶
Return whether
self
is a monomial.This is
True
if and only ifself
is \(x^p\) for some rational \(p\).EXAMPLES:
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
>>> 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()[source]¶
Return whether
self
is a unit.A Puiseux series is a unit if and only if its leading coefficient is.
EXAMPLES:
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
>>> 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()[source]¶
Return whether
self
is zero.EXAMPLES:
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
>>> 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()[source]¶
Return the underlying Laurent series.
EXAMPLES:
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
>>> 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()[source]¶
If
self
is a Laurent series, return it as a Laurent series.EXAMPLES:
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
>>> 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()[source]¶
Return the list of coefficients indexed by the exponents of the the corresponding Laurent series.
EXAMPLES:
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]
>>> 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()[source]¶
If
self
is a power series, return it as a power series.EXAMPLES:
sage: # needs sage.rings.number_field 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
>>> from sage.all import * >>> # needs sage.rings.number_field >>> 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()[source]¶
Return the precision of
self
.EXAMPLES:
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
>>> 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()[source]¶
Return the precision of
self
.EXAMPLES:
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
>>> 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_relative()[source]¶
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: 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
>>> 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()[source]¶
Return the ramification index.
EXAMPLES:
sage: R.<x> = PuiseuxSeriesRing(QQ) sage: p = x^(1/2) + 3/4 * x^(2/3) sage: p.ramification_index() 6
>>> 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)[source]¶
Return this Puiseux series multiplied by \(x^r\).
EXAMPLES:
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)
>>> 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)[source]¶
Return the Puiseux series of degree \(< r\).
This is equivalent to
self
modulo \(x^r\).EXAMPLES:
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
>>> 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()[source]¶
Return the valuation of
self
.EXAMPLES:
sage: R.<x> = PuiseuxSeriesRing(QQ) sage: p = x^(-7/2) + 3 + 5*x^(1/2) - 7*x**3 sage: p.valuation() -7/2
>>> 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()[source]¶
Return the variable of
self
.EXAMPLES:
sage: R.<x> = PuiseuxSeriesRing(QQ) sage: p = x^(-7/2) + 3 + 5*x^(1/2) - 7*x**3 sage: p.variable() 'x'
>>> 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'