Changeset 8428:228224d8ccf5
- Timestamp:
- 11/11/07 14:22:37 (6 years ago)
- Branch:
- default
- Location:
- sage/rings/padics
- Files:
-
- 3 edited
-
padic_extension_generic.py (modified) (1 diff)
-
padic_extension_leaves.py (modified) (5 diffs)
-
padic_generic.py (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
sage/rings/padics/padic_extension_generic.py
r4450 r8428 33 33 34 34 def gen(self, n=0): 35 if n != 0: 36 raise IndexError, "extension has only one generator" 37 #this won't work for padic_general extensions 38 return self(self._PQR.polynomial_ring().gen()) 35 raise NotImplementedError 39 36 40 37 def defining_polynomial(self): -
sage/rings/padics/padic_extension_leaves.py
r3674 r8428 1 from pow_computer_ext import PowComputer_ext_maker 2 from sage.libs.ntl.ntl_ZZ_pX import ntl_ZZ_pX 3 1 4 from unramified_extension_generic import UnramifiedExtensionGeneric 2 5 from eisenstein_extension_generic import EisensteinExtensionGeneric … … 10 13 from padic_fixed_mod_ring_generic import pAdicFixedModRingGeneric 11 14 15 from padic_ring_fixed_mod import pAdicRingFixedMod 16 12 17 from unramified_extension_absolute_element import UnramifiedExtensionAbsoluteElement 13 18 from unramified_extension_capped_relative_element import UnramifiedExtensionCappedRelativeElement … … 19 24 from padic_general_extension_capped_relative_element import pAdicGeneralExtensionCappedRelativeElement 20 25 from padic_general_extension_lazy_element import pAdicGeneralExtensionLazyElement 26 27 from unramified_fixed_mod_element import UnramifiedFixedModElement 28 from eisenstein_fixed_mod_element import EisensteinFixedModElement 29 30 from sage.rings.integer_ring import ZZ 21 31 22 32 class UnramifiedExtensionRingCappedRelative(UnramifiedExtensionGeneric, pAdicCappedRelativeRingGeneric): … … 44 54 class UnramifiedExtensionRingFixedMod(UnramifiedExtensionGeneric, pAdicFixedModRingGeneric): 45 55 def __init__(self, poly, prec, halt, print_mode, names): 46 UnramifiedExtensionGeneric.__init__(self, poly, prec, print_mode, names, UnramifiedExtensionAbsoluteElement) 56 ntl_poly = ntl_ZZ_pX([a.lift() for a in poly.list()], poly.base_ring().prime()**prec) 57 self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), max(min(prec - 1, 30), 1), prec, False, ntl_poly, "FM", "u") 58 UnramifiedExtensionGeneric.__init__(self, poly, prec, print_mode, names, UnramifiedFixedModElement) 59 60 def coerce_map_explicit(self, S): 61 from sage.rings.padics.morphism import Morphism_ZZ_UnrFM, Morphism_ZpFM_UnrFM 62 if S is ZZ: 63 return Morphism_ZZ_UnrFM(self) 64 elif isinstance(S, pAdicRingFixedMod) and S.prime() == self.prime(): 65 return Morphism_ZpFM_UnrFM(S, self) 66 return None 47 67 48 68 class EisensteinExtensionRingCappedRelative(EisensteinExtensionGeneric, pAdicCappedRelativeRingGeneric): … … 70 90 class EisensteinExtensionRingFixedMod(EisensteinExtensionGeneric, pAdicFixedModRingGeneric): 71 91 def __init__(self, poly, prec, halt, print_mode, names): 72 EisensteinExtensionGeneric.__init__(self, poly, prec, print_mode, names, EisensteinExtensionAbsoluteElement) 92 prec = prec // poly.degree() 93 ntl_poly = ntl_ZZ_pX([a.lift() for a in poly.list()], poly.base_ring().prime()**prec) 94 #print poly.base_ring().prime(), prec, poly.degree(), ntl_poly 95 # deal with prec not a multiple of e better. 96 self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), max(min(prec - 1, 30), 1), prec, False, ntl_poly, "FM", "e") 97 EisensteinExtensionGeneric.__init__(self, poly, prec, print_mode, names, EisensteinFixedModElement) 98 99 def coerce_map_explicit(self, S): 100 from sage.rings.padics.morphism import Morphism_ZZ_EisFM, Morphism_ZpFM_EisFM 101 if S is ZZ: 102 return Morphism_ZZ_EisFM(self) 103 elif isinstance(S, pAdicRingFixedMod) and S.prime() == self.prime(): 104 return Morphism_ZpFM_EisFM(S, self) 105 return None 106 107 # Temp fix 108 def gen(self, n=0): 109 if n != 0: 110 raise IndexError, "extension has only one generator" 111 #this won't work for padic_general extensions 112 return self([0,1]) 113 73 114 74 115 class pAdicGeneralExtensionRingCappedRelative(pAdicGeneralExtensionGeneric, pAdicCappedRelativeRingGeneric): -
sage/rings/padics/padic_generic.py
r7014 r8428 58 58 import sage.rings.ring 59 59 60 from sage.rings.padics.pow_computer import PowComputer61 60 from sage.rings.integer import Integer 61 from sage.rings.padics.padic_printing import pAdicPrinter 62 62 63 63 infinity = sage.rings.infinity.infinity … … 72 72 #else: 73 73 # self.prime_pow = PowComputer(p, 3, prec, self.is_field()) 74 self.prime_pow = PowComputer(p, max(min(prec - 1, 30), 1), prec, self.is_field()) 75 self.__set_print_mode(print_mode) 74 self._printer = pAdicPrinter(self, print_mode, True, None, None, None) 76 75 self._element_class = element_class 77 76 … … 136 135 'series' 137 136 """ 138 return self._print _mode139 140 def __set_print_mode(self, print_mode):141 """142 Sets the print mode.137 return self._printer._print_mode() 138 139 # def __set_print_mode(self, print_mode): 140 # """ 141 # Sets the print mode. 143 142 144 WARNING: You should not use this function.145 146 INPUT:147 self -- a p-adic ring148 print_mode -- string (see NOTES)143 # WARNING: You should not use this function. 144 145 # INPUT: 146 # self -- a p-adic ring 147 # print_mode -- string (see NOTES) 149 148 150 NOTES:151 The options for print_mode are:152 'val-unit' -- elements are displayed as p^k*u153 'terse' -- elements are displayed as an integer if positive valuation, as u/ppow or u/p^k if negative valuation154 'series' -- elements are displayed as series in p, where p is self.variable_name() (default, e.g., "5")155 """156 if (print_mode in ['val-unit', 'terse', 'series']):157 try:158 old = self._print_mode159 self._print_mode = print_mode160 return old161 except AttributeError:162 self._print_mode = print_mode163 else:164 raise ValueError, "print_mode=%s must be either val-unit, terse, series"%print_mode149 # NOTES: 150 # The options for print_mode are: 151 # 'val-unit' -- elements are displayed as p^k*u 152 # 'terse' -- elements are displayed as an integer if positive valuation, as u/ppow or u/p^k if negative valuation 153 # 'series' -- elements are displayed as series in p, where p is self.variable_name() (default, e.g., "5") 154 # """ 155 # if (print_mode in ['val-unit', 'terse', 'series']): 156 # try: 157 # old = self._print_mode 158 # self._print_mode = print_mode 159 # return old 160 # except AttributeError: 161 # self._print_mode = print_mode 162 # else: 163 # raise ValueError, "print_mode=%s must be either val-unit, terse, series"%print_mode 165 164 166 165 def _element_class(self): … … 201 200 202 201 def uniformizer_pow(self, n): 202 """ 203 Returns p^n, as an element of self. 204 205 If n is infinity, returns 0. 206 207 EXAMPLES: 208 sage: R = Zp(3, 5, 'fixed-mod') 209 sage: R.uniformizer_pow(3) 210 27 211 sage: R.uniformizer_pow(infinity) 212 0 213 """ 203 214 if n is infinity: 204 215 return self(0) 205 return self.uniformizer()**n 216 return self(self.prime_pow.pow_Integer_Integer(n)) 217 218 def _unram_print(self): 219 """ 220 For printing. Will be None if the unramified subextension of self is of degree 1 over Z_p or Q_p. 221 """ 222 return None 206 223 207 224 def residue_characteristic(self): … … 504 521 NotImplementedError: This is not yet ready for general use. 505 522 """ 506 raise NotImplementedError, "This is not yet ready for general use."507 523 if not self is modulus.base_ring(): 508 524 modulus = modulus.parent().change_ring(self)(modulus) … … 512 528 ext = extension 513 529 514 class local_print_mode:530 def local_print_mode(obj, print_mode, pos = None, uniformizer_name = None): 515 531 r""" 516 532 Context manager for safely temporarily changing the print_mode … … 528 544 NOTES: For more documentation see localvars in parent_gens.pyx 529 545 """ 530 def __init__(self, obj, print_mode): 531 self._obj = obj 532 self._print_mode = print_mode 533 534 def __enter__(self): 535 self._orig = self._obj._pAdicGeneric__set_print_mode(self._print_mode) 536 537 def __exit__(self, type, value, traceback): 538 self._obj._pAdicGeneric__set_print_mode(self._orig) 546 if pos is None: 547 pos = obj._printer._pos() 548 if uniformizer_name is None: 549 uniformizer_name = obj._printer._uniformizer_name() 550 return pAdicPrinter(obj, print_mode, pos, uniformizer_name)
Note: See TracChangeset
for help on using the changeset viewer.
