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:
- class sage.rings.puiseux_series_ring.PuiseuxSeriesRing(laurent_series)[source]¶
Bases:
UniqueRepresentation
,Parent
Rings of Puiseux series.
EXAMPLES:
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)
>>> 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)
P = PuiseuxSeriesRing(QQ, 'y') y = P.gen() f = y**(4/3) + y**(-5/6); f f.add_bigoh(2) f.add_bigoh(1)
- Element[source]¶
alias of
PuiseuxSeries
- base_extend(R)[source]¶
Extend the coefficients.
INPUT:
R
– a ring
EXAMPLES:
sage: A = PuiseuxSeriesRing(ZZ, 'y') sage: A.base_extend(QQ) Puiseux Series Ring in y over Rational Field
>>> from sage.all import * >>> A = PuiseuxSeriesRing(ZZ, 'y') >>> A.base_extend(QQ) Puiseux Series Ring in y over Rational Field
A = PuiseuxSeriesRing(ZZ, 'y') A.base_extend(QQ)
- change_ring(R)[source]¶
Return a Puiseux series ring over another ring.
INPUT:
R
– a ring
EXAMPLES:
sage: A = PuiseuxSeriesRing(ZZ, 'y') sage: A.change_ring(QQ) Puiseux Series Ring in y over Rational Field
>>> from sage.all import * >>> A = PuiseuxSeriesRing(ZZ, 'y') >>> A.change_ring(QQ) Puiseux Series Ring in y over Rational Field
A = PuiseuxSeriesRing(ZZ, 'y') A.change_ring(QQ)
- default_prec()[source]¶
Return the default precision of
self
.EXAMPLES:
sage: A = PuiseuxSeriesRing(AA, 'z') # needs sage.rings.number_field sage: A.default_prec() # needs sage.rings.number_field 20
>>> from sage.all import * >>> A = PuiseuxSeriesRing(AA, 'z') # needs sage.rings.number_field >>> A.default_prec() # needs sage.rings.number_field 20
A = PuiseuxSeriesRing(AA, 'z') # needs sage.rings.number_field A.default_prec() # needs sage.rings.number_field
- fraction_field()[source]¶
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: 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
>>> 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
R = PuiseuxSeriesRing(ZZ, 't', 30).fraction_field() R R.default_prec() PuiseuxSeriesRing(Zmod(4), 't').fraction_field()
- gen(n=0)[source]¶
Return the generator of
self
.EXAMPLES:
sage: A = PuiseuxSeriesRing(AA, 'z') # needs sage.rings.number_field sage: A.gen() # needs sage.rings.number_field z
>>> from sage.all import * >>> A = PuiseuxSeriesRing(AA, 'z') # needs sage.rings.number_field >>> A.gen() # needs sage.rings.number_field z
A = PuiseuxSeriesRing(AA, 'z') # needs sage.rings.number_field A.gen() # needs sage.rings.number_field
- gens()[source]¶
Return the tuple of generators.
EXAMPLES:
sage: A = PuiseuxSeriesRing(QQ, 'z') sage: A.gens() (z,)
>>> from sage.all import * >>> A = PuiseuxSeriesRing(QQ, 'z') >>> A.gens() (z,)
A = PuiseuxSeriesRing(QQ, 'z') A.gens()
- is_dense()[source]¶
Return whether
self
is dense.EXAMPLES:
sage: A = PuiseuxSeriesRing(ZZ, 'y') sage: A.is_dense() True
>>> from sage.all import * >>> A = PuiseuxSeriesRing(ZZ, 'y') >>> A.is_dense() True
A = PuiseuxSeriesRing(ZZ, 'y') A.is_dense()
- is_field(proof=True)[source]¶
Return whether
self
is a field.A Puiseux series ring is a field if and only its base ring is a field.
EXAMPLES:
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
>>> 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
A = PuiseuxSeriesRing(ZZ, 'y') A.is_field() A in Fields() B = A.change_ring(QQ); B.is_field() B in Fields()
- is_sparse()[source]¶
Return whether
self
is sparse.EXAMPLES:
sage: A = PuiseuxSeriesRing(ZZ, 'y') sage: A.is_sparse() False
>>> from sage.all import * >>> A = PuiseuxSeriesRing(ZZ, 'y') >>> A.is_sparse() False
A = PuiseuxSeriesRing(ZZ, 'y') A.is_sparse()
- laurent_series_ring()[source]¶
Return the underlying Laurent series ring.
EXAMPLES:
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
>>> 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
A = PuiseuxSeriesRing(AA, 'z') # needs sage.rings.number_field A.laurent_series_ring() # needs sage.rings.number_field
- ngens()[source]¶
Return the number of generators of
self
, namely 1.EXAMPLES:
sage: A = PuiseuxSeriesRing(AA, 'z') # needs sage.rings.number_field sage: A.ngens() # needs sage.rings.number_field 1
>>> from sage.all import * >>> A = PuiseuxSeriesRing(AA, 'z') # needs sage.rings.number_field >>> A.ngens() # needs sage.rings.number_field 1
A = PuiseuxSeriesRing(AA, 'z') # needs sage.rings.number_field A.ngens() # needs sage.rings.number_field
- residue_field()[source]¶
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: 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
>>> 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
R.<x> = PuiseuxSeriesRing(GF(17)) R.residue_field() R.<x> = PuiseuxSeriesRing(ZZ) R.residue_field()
- uniformizer()[source]¶
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: 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
>>> 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
R.<t> = PuiseuxSeriesRing(QQ) R.uniformizer() R.<t> = PuiseuxSeriesRing(ZZ) R.uniformizer()