p-Adic Fixed-Mod Element
Elements of p-Adic Rings with Fixed Modulus
AUTHORS:
Bases: sage.rings.padics.padic_fixed_mod_element.pAdicTemplateElement
Initialization.
EXAMPLES:
sage: a = Zp(5)(1/2,3); a
3 + 2*5 + 2*5^2 + O(5^3)
sage: type(a)
<type 'sage.rings.padics.padic_capped_relative_element.pAdicCappedRelativeElement'>
sage: TestSuite(a).run()
Returns a new element truncated modulo .
INPUT:
OUTPUT:
- a new element truncated modulo
.
EXAMPLES:
sage: R = Zp(7,4,'fixed-mod','series'); a = R(8); a.add_bigoh(1)
1 + O(7^4)
Returns whether this element is equal to right modulo .
If absprec is None, returns if self == 0.
INPUT:
EXAMPLES:
sage: R = ZpFM(2, 6)
sage: R(13).is_equal_to(R(13))
True
sage: R(13).is_equal_to(R(13+2^10))
True
sage: R(13).is_equal_to(R(17), 2)
True
sage: R(13).is_equal_to(R(17), 5)
False
Returns whether self is zero modulo .
INPUT:
EXAMPLES:
sage: R = ZpFM(17, 6)
sage: R(0).is_zero()
True
sage: R(17^6).is_zero()
True
sage: R(17^2).is_zero(absprec=2)
True
Returns a list of coefficients of starting with
.
INPUT:
OUTPUT:
The list of coefficients of this element.
Note
EXAMPLES:
sage: R = ZpFM(7,6); a = R(12837162817); a
3 + 4*7 + 4*7^2 + 4*7^4 + O(7^6)
sage: L = a.list(); L
[3, 4, 4, 0, 4]
sage: sum([L[i] * 7^i for i in range(len(L))]) == a
True
sage: L = a.list('smallest'); L
[3, -3, -2, 1, -3, 1]
sage: sum([L[i] * 7^i for i in range(len(L))]) == a
True
sage: L = a.list('teichmuller'); L
[3 + 4*7 + 6*7^2 + 3*7^3 + 2*7^5 + O(7^6),
O(7^6),
5 + 2*7 + 3*7^3 + 6*7^4 + 4*7^5 + O(7^6),
1 + O(7^6),
3 + 4*7 + 6*7^2 + 3*7^3 + 2*7^5 + O(7^6),
5 + 2*7 + 3*7^3 + 6*7^4 + 4*7^5 + O(7^6)]
sage: sum([L[i] * 7^i for i in range(len(L))])
3 + 4*7 + 4*7^2 + 4*7^4 + O(7^6)
The absolute precision of this element.
EXAMPLES:
sage: R = Zp(7,4,'fixed-mod'); a = R(7); a.precision_absolute()
4
The relative precision of this element.
EXAMPLES:
sage: R = Zp(7,4,'fixed-mod'); a = R(7); a.precision_relative()
3
sage: a = R(0); a.precision_relative()
0
Returns a list [,
,...,
] such that
EXAMPLES:
sage: R = ZpFM(5,5); R(14).list('teichmuller') #indirect doctest
[4 + 4*5 + 4*5^2 + 4*5^3 + 4*5^4 + O(5^5),
3 + 3*5 + 2*5^2 + 3*5^3 + 5^4 + O(5^5),
2 + 5 + 2*5^2 + 5^3 + 3*5^4 + O(5^5),
1 + O(5^5),
4 + 4*5 + 4*5^2 + 4*5^3 + 4*5^4 + O(5^5)]
Returns the unit part of self.
If the valuation of self is positive, then the high digits of the result will be zero.
EXAMPLES:
sage: R = Zp(17, 4, 'fixed-mod')
sage: R(5).unit_part()
5 + O(17^4)
sage: R(18*17).unit_part()
1 + 17 + O(17^4)
sage: R(0).unit_part()
O(17^4)
sage: type(R(5).unit_part())
<type 'sage.rings.padics.padic_fixed_mod_element.pAdicFixedModElement'>
sage: R = ZpFM(5, 5); a = R(75); a.unit_part()
3 + O(5^5)
Returns a 2-tuple, the first element set to the valuation of self, and the second to the unit part of self.
If self == 0, then the unit part is O(p^self.parent().precision_cap()).
EXAMPLES:
sage: R = ZpFM(5,5)
sage: a = R(75); b = a - a
sage: a.val_unit()
(2, 3 + O(5^5))
sage: b.val_unit()
(5, O(5^5))
Unpickles a fixed modulus element.
EXAMPLES:
sage: from sage.rings.padics.padic_fixed_mod_element import make_pAdicFixedModElement
sage: R = ZpFM(5)
sage: a = make_pAdicFixedModElement(R, 17*25); a
2*5^2 + 3*5^3 + O(5^20)
Bases: sage.rings.morphism.RingHomomorphism_coercion
The canonical inclusion from ZZ to a fixed modulus ring.
EXAMPLES:
sage: f = ZpFM(5).coerce_map_from(ZZ); f
Ring Coercion morphism:
From: Integer Ring
To: 5-adic Ring of fixed modulus 5^20
Returns a map back to ZZ that approximates an element of this
-adic ring by an integer.
EXAMPLES:
sage: f = ZpFM(5).coerce_map_from(ZZ).section()
sage: f(ZpFM(5)(-1)) - 5^20
-1
Bases: sage.rings.morphism.RingMap
The map from a fixed modulus ring back to ZZ that returns the the smallest non-negative integer approximation to its input which is accurate up to the precision.
If the input is not in the closure of the image of ZZ, raises a ValueError.
EXAMPLES:
sage: f = ZpFM(5).coerce_map_from(ZZ).section(); f
Set-theoretic ring morphism:
From: 5-adic Ring of fixed modulus 5^20
To: Integer Ring
Bases: sage.categories.morphism.Morphism
The inclusion map from QQ to a fixed modulus ring that is defined on all elements with non-negative p-adic valuation.
EXAMPLES:
sage: f = ZpFM(5).convert_map_from(QQ); f
Generic morphism:
From: Rational Field
To: 5-adic Ring of fixed modulus 5^20
Bases: sage.rings.padics.padic_fixed_mod_element.FMElement
INPUT:
Note
The following types are currently supported for x:
The following types should be supported eventually:
EXAMPLES:
sage: R = Zp(5, 20, 'fixed-mod', 'terse')
Construct from integers:
sage: R(3)
3 + O(5^20)
sage: R(75)
75 + O(5^20)
sage: R(0)
0 + O(5^20)
sage: R(-1)
95367431640624 + O(5^20)
sage: R(-5)
95367431640620 + O(5^20)
Construct from rationals:
sage: R(1/2)
47683715820313 + O(5^20)
sage: R(-7875/874)
9493096742250 + O(5^20)
sage: R(15/425)
Traceback (most recent call last):
...
ValueError: p divides denominator
Construct from IntegerMod:
sage: R(Integers(125)(3))
3 + O(5^20)
sage: R(Integers(5)(3))
3 + O(5^20)
sage: R(Integers(5^30)(3))
3 + O(5^20)
sage: R(Integers(5^30)(1+5^23))
1 + O(5^20)
sage: R(Integers(49)(3))
Traceback (most recent call last):
...
TypeError: cannot coerce from the given integer mod ring (not a power of the same prime)
sage: R(Integers(48)(3))
Traceback (most recent call last):
...
TypeError: cannot coerce from the given integer mod ring (not a power of the same prime)
Some other conversions:
sage: R(R(5))
5 + O(5^20)
Todo
doctests for converting from other types of -adic rings
Return an integer congruent to self modulo the precision.
Warning
Since fixed modulus elements don’t track their precision,
the result may not be correct modulo
if the element was defined by
constructions that lost precision.
EXAMPLES:
sage: R = Zp(7,4,'fixed-mod'); a = R(8); a.lift()
8
sage: type(a.lift())
<type 'sage.rings.integer.Integer'>
Return the minimum possible multiplicative order of self.
OUTPUT:
an integer – the multiplicative order of this element. This is the
minimum multiplicative order of all elements of lifting this
element to infinite precision.
EXAMPLES:
sage: R = ZpFM(7, 6) sage: R(1/3) 5 + 4*7 + 4*7^2 + 4*7^3 + 4*7^4 + 4*7^5 + O(7^6) sage: R(1/3).multiplicative_order() +Infinity sage: R(7).multiplicative_order() +Infinity sage: R(1).multiplicative_order() 1 sage: R(-1).multiplicative_order() 2 sage: R.teichmuller(3).multiplicative_order() 6
Reduce self mod .
INPUT:
OUTPUT:
element of Z/(p^prec Z) – self reduced mod p^prec
EXAMPLES:
sage: R = Zp(7,4,'fixed-mod'); a = R(8); a.residue(1)
1
Bases: sage.rings.padics.padic_generic_element.pAdicGenericElement
A class for common functionality among the -adic template classes.
INPUT:
EXAMPLES:
sage: Zp(17)(17^3, 8, 4)
17^3 + O(17^7)
Returns another element of the same parent with absolute precision at
least absprec, congruent to this -adic element modulo the
precision of this element.
INPUT:
Note
If setting absprec that high would violate the precision cap, raises a precision error. Note that the new digits will not necessarily be zero.
EXAMPLES:
sage: R = ZpCA(17)
sage: R(-1,2).lift_to_precision(10)
16 + 16*17 + O(17^10)
sage: R(1,15).lift_to_precision(10)
1 + O(17^15)
sage: R(1,15).lift_to_precision(30)
Traceback (most recent call last):
...
PrecisionError: Precision higher than allowed by the precision cap.
sage: R(-1,2).lift_to_precision().precision_absolute() == R.precision_cap()
True
sage: R = Zp(5); c = R(17,3); c.lift_to_precision(8)
2 + 3*5 + O(5^8)
sage: c.lift_to_precision().precision_relative() == R.precision_cap()
True
Fixed modulus elements don’t raise errors:
sage: R = ZpFM(5); a = R(5); a.lift_to_precision(7)
5 + O(5^20)
sage: a.lift_to_precision(10000)
5 + O(5^20)
Returns a list of coefficients of the uniformizer
starting with
up to
exclusive (padded with
zeros if needed).
For a field element of valuation , starts at
instead.
INPUT:
EXAMPLES:
sage: R = Zp(7,4,'capped-abs'); a = R(2*7+7**2); a.padded_list(5)
[0, 2, 1, 0, 0]
sage: R = Zp(7,4,'fixed-mod'); a = R(2*7+7**2); a.padded_list(5)
[0, 2, 1, 0, 0]
For elements with positive valuation, this function will return a list with leading 0s if the parent is not a field:
sage: R = Zp(7,3,'capped-rel'); a = R(2*7+7**2); a.padded_list(5)
[0, 2, 1, 0, 0]
sage: R = Qp(7,3); a = R(2*7+7**2); a.padded_list(5)
[2, 1, 0, 0]
sage: a.padded_list(3)
[2, 1]
Returns the unit part of this element.
This is the -adic element
in the same ring so that this
element is
, where
is a uniformizer and
is
the valuation of this element.
Unpickles a capped relative element.
EXAMPLES:
sage: from sage.rings.padics.padic_fixed_mod_element import pAdicFixedModElement, unpickle_fme_v2
sage: R = ZpFM(5)
sage: a = unpickle_fme_v2(pAdicFixedModElement, R, 17*25); a
2*5^2 + 3*5^3 + O(5^20)
sage: a.parent() is R
True