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.clear_mpz_globals()
sage.rings.padics.padic_printing.gmp_randrange()
sage.rings.padics.padic_printing.init_mpz_globals()
sage.rings.padics.padic_printing.pAdicPrinter()

Creates a pAdicPrinter.

INPUT:

- ring -- a p-adic ring or field.

- options -- a dictionary, with keys in 'mode', 'pos',
  'ram_name', 'unram_name', 'var_name', 'max_ram_terms',
  'max_unram_terms', 'max_terse_terms', 'sep', 'alphabet'; see
  pAdicPrinter_class for 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
class sage.rings.padics.padic_printing.pAdicPrinterDefaults

This class stores global defaults for p-adic printing.

__init__()

Instances of this class store global defaults used in determining printing options during the creation of p-adic rings and fields. One instance stored in padic_printing stores the globally relevant default values.

See pAdicPrinter_class for details on the meanings of these inputs.

TESTS:

sage: from sage.rings.padics.padic_printing import pAdicPrinterDefaults
sage: D = pAdicPrinterDefaults(sep='&'); D.sep()
'&'
__weakref__
list of weak references to the object (if defined)
allow_negatives()

Controls whether or not to display a balanced representation.

neg=None returns 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)
alphabet()

Controls the alphabet used to translate p-adic digits into strings (so that no separator need be used in ‘digits’ mode).

alphabet should be passed in as a list or tuple.

alphabet=None returns 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'))
max_poly_terms()

Controls the number of terms appearing when printing polynomial representations in ‘terse’ or ‘val-unit’ modes.

max=None returns the current value.

max=-1 encodes ‘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
2570 + 15808*a + 9018*a^2 + ... + O(7^5)

sage: padic_printing.max_poly_terms(-1)
sage: padic_printing.mode('series')
max_series_terms()

Controls the maximum number of terms shown when printing in ‘series’, ‘digits’ or ‘bars’ mode.

max=None returns the current value.

max=-1 encodes ‘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)
max_unram_terms()

For rings with non-prime residue fields, controls how many terms appear in the coefficient of each pi^n when printing in ‘series’ or ‘bar’ modes.

max=None returns the current value.

max=-1 encodes ‘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
(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)
mode()

Set the default printing mode.

mode=None returns 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')
sep()

Controls the separator used in ‘bars’ mode.

sep=None returns 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')
class sage.rings.padics.padic_printing.pAdicPrinter_class

This class stores the printing options for a specific p-adic ring or field, and uses these to compute the representations of elements.

__cmp__()
x.__cmp__(y) <==> cmp(x,y)
__enter__()

Used for context printing.

EXAMPLES:

sage: from sage.rings.padics.padic_printing import pAdicPrinter
sage: R = Zp(5,5); a = R(-1); a
4 + 4*5 + 4*5^2 + 4*5^3 + 4*5^4 + O(5^5)
sage: with pAdicPrinter(R, {'pos': False}): a
-1 + O(5^5)
__exit__()

Used for context printing.

EXAMPLES:

sage: from sage.rings.padics.padic_printing import pAdicPrinter
sage: R = Zp(5,5); a = R(-1); a
4 + 4*5 + 4*5^2 + 4*5^3 + 4*5^4 + O(5^5)
sage: with pAdicPrinter(R, {'pos': False}): a
-1 + O(5^5)
sage: a
4 + 4*5 + 4*5^2 + 4*5^3 + 4*5^4 + O(5^5)
__init__()
x.__init__(...) initializes x; see x.__class__.__doc__ for signature
static __new__()
T.__new__(S, ...) -> a new object with type S, a subtype of T
__reduce__()

Pickling.

TESTS:

sage: R = Zp(5, print_mode='bars', print_sep='&'); P = loads(dumps(R._printer))
sage: R._printer == P
True
sage: P._sep()
'&'
_alphabet()

Accesses self.pos.

EXAMPLES:

sage: R = Zp(5); R._printer._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')
_base_p_list()

Returns a list of integers forming the base p expansion of value.

If pos is True, these integers will be in the range [0,... p-1]; if po is False, they will be in the range [(1-p)/2,..., p/2].

The first entry will be the coefficient of p^0, etc.

EXAMPLES:

sage: P = Zp(17)._printer
sage: P._base_p_list(1298734,True)
[2, 15, 5, 9, 15]
sage: P._base_p_list(1298734,False)
[2, -2, 6, -8, -1, 1]
_max_ram_terms()

Accesses self.max_ram_terms.

EXAMPLES:

sage: R = Zp(5); R._printer._max_ram_terms()
-1
_max_terse_terms()

Accesses self.max_terse_terms.

EXAMPLES:

sage: R = Zp(5); R._printer._max_terse_terms()
-1
_max_unram_terms()

Accesses self.max_unram_terms.

EXAMPLES:

sage: R = Zp(5); R._printer._max_unram_terms()
-1
_pos()

Accesses self.pos.

EXAMPLES:

sage: R = Zp(5); R._printer._pos()
True
_print_mode()

Accesses self.mode.

EXAMPLES:

sage: R = Zp(5); R._printer._print_mode()
'series'
_ram_name()

Accesses self.ram_name.

EXAMPLES:

sage: R = Zp(5,5); R._printer._ram_name()
'5'
_repr_()

Representation of this printer.

EXAMPLES:

sage: Zp(5)._printer #indirect doctest
series printer for 5-adic Ring with capped relative precision 20
_ring()

Accesses self.ring.

EXAMPLES:

sage: R = Zp(5,5); R._printer._ring()
5-adic Ring with capped relative precision 5
_sep()

Accesses self.sep.

EXAMPLES:

sage: R = Zp(5); R._printer._sep()
'|'
_uniformizer_name()

Accesses self.ram_name.

EXAMPLES:

sage: R = Zp(5,5); R._printer._uniformizer_name()
'5'
cmp_modes()

Returns a comparison of the printing modes of self and other.

Returns 0 if and only if all relevant modes are equal (max_unram_terms is irrelevant if the ring is totally ramified over the base for example). 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 whether pos is 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.cmp_modes(S._printer)
0
sage: R = Qp(7)
sage: S = Qp(7,print_mode='val-unit')
sage: R == S
False
sage: R._printer.cmp_modes(S._printer)
-1
dict()

Returns a dictionary storing all of self’s printing options.

EXAMPLES:

sage: D = Zp(5)._printer.dict(); D['sep']
'|'
repr_gen()

The entry point for printing an element.

INPUT:

- elt -- a p-adic element of the appropriate ring to print.

- do_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)'

Previous topic

PowComputer_ext.

Next topic

Precision Error.

This Page