\(p\)-adic Printing¶
This file contains code for printing \(p\)-adic elements.
It has been moved here to prevent code duplication and make finding the relevant code easier.
AUTHORS:
David Roe
- sage.rings.padics.padic_printing.pAdicPrinter(ring, options={})[source]¶
Create a
pAdicPrinter.INPUT:
ring– a \(p\)-adic ring or fieldoptions– dictionary, with keys in'mode','pos','ram_name','unram_name','var_name','max_ram_terms','max_unram_terms','max_terse_terms','sep','alphabet'; seepAdicPrinter_classfor the meanings of these keywords.
EXAMPLES:
sage: from sage.rings.padics.padic_printing import pAdicPrinter sage: R = Zp(5) sage: pAdicPrinter(R, {'sep': '&'}) series printer for 5-adic Ring with capped relative precision 20
>>> from sage.all import * >>> from sage.rings.padics.padic_printing import pAdicPrinter >>> R = Zp(Integer(5)) >>> pAdicPrinter(R, {'sep': '&'}) series printer for 5-adic Ring with capped relative precision 20
- class sage.rings.padics.padic_printing.pAdicPrinterDefaults(mode='series', pos=True, max_ram_terms=-1, max_unram_terms=-1, max_terse_terms=-1, sep='|', alphabet=None)[source]¶
Bases:
SageObjectThis class stores global defaults for \(p\)-adic printing.
- allow_negatives(neg=None)[source]¶
Controls whether or not to display a balanced representation.
neg=Nonereturns the current value.EXAMPLES:
sage: padic_printing.allow_negatives(True) sage: padic_printing.allow_negatives() True sage: Qp(29)(-1) -1 + O(29^20) sage: Qp(29)(-1000) -14 - 5*29 - 29^2 + O(29^20) sage: padic_printing.allow_negatives(False)
>>> from sage.all import * >>> padic_printing.allow_negatives(True) >>> padic_printing.allow_negatives() True >>> Qp(Integer(29))(-Integer(1)) -1 + O(29^20) >>> Qp(Integer(29))(-Integer(1000)) -14 - 5*29 - 29^2 + O(29^20) >>> padic_printing.allow_negatives(False)
- alphabet(alphabet=None)[source]¶
Controls the alphabet used to translate \(p\)-adic digits into strings (so that no separator need be used in
'digits'mode).alphabetshould be passed in as a list or tuple.alphabet=Nonereturns the current value.EXAMPLES:
sage: padic_printing.alphabet("abc") sage: padic_printing.mode('digits') sage: repr(Qp(3)(1234)) '...bcaacab' sage: padic_printing.mode('series') sage: padic_printing.alphabet(('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'))
>>> from sage.all import * >>> padic_printing.alphabet("abc") >>> padic_printing.mode('digits') >>> repr(Qp(Integer(3))(Integer(1234))) '...bcaacab' >>> padic_printing.mode('series') >>> padic_printing.alphabet(('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'))
- max_poly_terms(max=None)[source]¶
Controls the number of terms appearing when printing polynomial representations in
'terse'or'val-unit'modes.max=Nonereturns the current value.max=-1encodes ‘no limit.’EXAMPLES:
sage: padic_printing.max_poly_terms(3) sage: padic_printing.max_poly_terms() 3 sage: padic_printing.mode('terse') sage: Zq(7^5, 5, names='a')([2,3,4])^8 # needs sage.libs.ntl 2570 + 15808*a + 9018*a^2 + ... + O(7^5) sage: padic_printing.max_poly_terms(-1) sage: padic_printing.mode('series')
>>> from sage.all import * >>> padic_printing.max_poly_terms(Integer(3)) >>> padic_printing.max_poly_terms() 3 >>> padic_printing.mode('terse') >>> Zq(Integer(7)**Integer(5), Integer(5), names='a')([Integer(2),Integer(3),Integer(4)])**Integer(8) # needs sage.libs.ntl 2570 + 15808*a + 9018*a^2 + ... + O(7^5) >>> padic_printing.max_poly_terms(-Integer(1)) >>> padic_printing.mode('series')
- max_series_terms(max=None)[source]¶
Controls the maximum number of terms shown when printing in
'series','digits'or'bars'mode.max=Nonereturns the current value.max=-1encodes ‘no limit.’EXAMPLES:
sage: padic_printing.max_series_terms(2) sage: padic_printing.max_series_terms() 2 sage: Qp(31)(1000) 8 + 31 + ... + O(31^20) sage: padic_printing.max_series_terms(-1) sage: Qp(37)(100000) 26 + 37 + 36*37^2 + 37^3 + O(37^20)
>>> from sage.all import * >>> padic_printing.max_series_terms(Integer(2)) >>> padic_printing.max_series_terms() 2 >>> Qp(Integer(31))(Integer(1000)) 8 + 31 + ... + O(31^20) >>> padic_printing.max_series_terms(-Integer(1)) >>> Qp(Integer(37))(Integer(100000)) 26 + 37 + 36*37^2 + 37^3 + O(37^20)
- max_unram_terms(max=None)[source]¶
For rings with non-prime residue fields, controls how many terms appear in the coefficient of each
pi^nwhen printing in'series'or'bar'modes.max=Nonereturns the current value.max=-1encodes ‘no limit.’EXAMPLES:
sage: padic_printing.max_unram_terms(2) sage: padic_printing.max_unram_terms() 2 sage: Zq(5^6, 5, names='a')([1,2,3,-1])^17 # needs sage.libs.ntl (3*a^4 + ... + 3) + (a^5 + ... + a)*5 + (3*a^3 + ... + 2)*5^2 + (3*a^5 + ... + 2)*5^3 + (4*a^5 + ... + 4)*5^4 + O(5^5) sage: padic_printing.max_unram_terms(-1)
>>> from sage.all import * >>> padic_printing.max_unram_terms(Integer(2)) >>> padic_printing.max_unram_terms() 2 >>> Zq(Integer(5)**Integer(6), Integer(5), names='a')([Integer(1),Integer(2),Integer(3),-Integer(1)])**Integer(17) # needs sage.libs.ntl (3*a^4 + ... + 3) + (a^5 + ... + a)*5 + (3*a^3 + ... + 2)*5^2 + (3*a^5 + ... + 2)*5^3 + (4*a^5 + ... + 4)*5^4 + O(5^5) >>> padic_printing.max_unram_terms(-Integer(1))
- mode(mode=None)[source]¶
Set the default printing mode.
mode=Nonereturns the current value.The allowed values for mode are:
'val-unit','series','terse','digits'and'bars'.EXAMPLES:
sage: padic_printing.mode('terse') sage: padic_printing.mode() 'terse' sage: Qp(7)(100) 100 + O(7^20) sage: padic_printing.mode('series') sage: Qp(11)(100) 1 + 9*11 + O(11^20) sage: padic_printing.mode('val-unit') sage: Qp(13)(130) 13 * 10 + O(13^21) sage: padic_printing.mode('digits') sage: repr(Qp(17)(100)) '...5F' sage: repr(Qp(17)(1000)) '...37E' sage: padic_printing.mode('bars') sage: repr(Qp(19)(1000)) '...2|14|12' sage: padic_printing.mode('series')
>>> from sage.all import * >>> padic_printing.mode('terse') >>> padic_printing.mode() 'terse' >>> Qp(Integer(7))(Integer(100)) 100 + O(7^20) >>> padic_printing.mode('series') >>> Qp(Integer(11))(Integer(100)) 1 + 9*11 + O(11^20) >>> padic_printing.mode('val-unit') >>> Qp(Integer(13))(Integer(130)) 13 * 10 + O(13^21) >>> padic_printing.mode('digits') >>> repr(Qp(Integer(17))(Integer(100))) '...5F' >>> repr(Qp(Integer(17))(Integer(1000))) '...37E' >>> padic_printing.mode('bars') >>> repr(Qp(Integer(19))(Integer(1000))) '...2|14|12' >>> padic_printing.mode('series')
- sep(sep=None)[source]¶
Controls the separator used in
'bars'mode.sep=Nonereturns the current value.EXAMPLES:
sage: padic_printing.sep('][') sage: padic_printing.sep() '][' sage: padic_printing.mode('bars') sage: repr(Qp(61)(-1)) '...60][60][60][60][60][60][60][60][60][60][60][60][60][60][60][60][60][60][60][60' sage: padic_printing.sep('|') sage: padic_printing.mode('series')
>>> from sage.all import * >>> padic_printing.sep('][') >>> padic_printing.sep() '][' >>> padic_printing.mode('bars') >>> repr(Qp(Integer(61))(-Integer(1))) '...60][60][60][60][60][60][60][60][60][60][60][60][60][60][60][60][60][60][60][60' >>> padic_printing.sep('|') >>> padic_printing.mode('series')
- class sage.rings.padics.padic_printing.pAdicPrinter_class[source]¶
Bases:
SageObjectThis class stores the printing options for a specific \(p\)-adic ring or field, and uses these to compute the representations of elements.
- dict()[source]¶
Return a dictionary storing all of
self’s printing options.EXAMPLES:
sage: D = Zp(5)._printer.dict(); D['sep'] '|'
>>> from sage.all import * >>> D = Zp(Integer(5))._printer.dict(); D['sep'] '|'
- repr_gen(elt, do_latex, pos=None, mode=None, ram_name=None)[source]¶
The entry point for printing an element.
INPUT:
elt– a \(p\)-adic element of the appropriate ring to printdo_latex– whether to return a latex representation or a normal one
EXAMPLES:
sage: R = Zp(5,5); P = R._printer; a = R(-5); a 4*5 + 4*5^2 + 4*5^3 + 4*5^4 + 4*5^5 + O(5^6) sage: P.repr_gen(a, False, pos=False) '-5 + O(5^6)' sage: P.repr_gen(a, False, ram_name='p') '4*p + 4*p^2 + 4*p^3 + 4*p^4 + 4*p^5 + O(p^6)'
>>> from sage.all import * >>> R = Zp(Integer(5),Integer(5)); P = R._printer; a = R(-Integer(5)); a 4*5 + 4*5^2 + 4*5^3 + 4*5^4 + 4*5^5 + O(5^6) >>> P.repr_gen(a, False, pos=False) '-5 + O(5^6)' >>> P.repr_gen(a, False, ram_name='p') '4*p + 4*p^2 + 4*p^3 + 4*p^4 + 4*p^5 + O(p^6)'
- richcmp_modes(other, op)[source]¶
Return a comparison of the printing modes of
selfandother.Return 0 if and only if all relevant modes are equal (
max_unram_termsis irrelevant if the ring is totally ramified over the base, for example). This does not check if the rings are equal (to prevent infinite recursion in the comparison functions of \(p\)-adic rings), but it does check if the primes are the same (since the prime affects whetherposis relevant).EXAMPLES:
sage: R = Qp(7, print_mode='digits', print_pos=True) sage: S = Qp(7, print_mode='digits', print_pos=False) sage: R._printer == S._printer True sage: R = Qp(7) sage: S = Qp(7, print_mode='val-unit') sage: R == S False sage: R._printer < S._printer True
>>> from sage.all import * >>> R = Qp(Integer(7), print_mode='digits', print_pos=True) >>> S = Qp(Integer(7), print_mode='digits', print_pos=False) >>> R._printer == S._printer True >>> R = Qp(Integer(7)) >>> S = Qp(Integer(7), print_mode='val-unit') >>> R == S False >>> R._printer < S._printer True