Changeset 8428:228224d8ccf5


Ignore:
Timestamp:
11/11/07 14:22:37 (6 years ago)
Author:
David Roe <roed@…>
Branch:
default
Message:

Updating some padic parents.

Location:
sage/rings/padics
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • sage/rings/padics/padic_extension_generic.py

    r4450 r8428  
    3333 
    3434    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 
    3936 
    4037    def defining_polynomial(self): 
  • sage/rings/padics/padic_extension_leaves.py

    r3674 r8428  
     1from pow_computer_ext import PowComputer_ext_maker 
     2from sage.libs.ntl.ntl_ZZ_pX import ntl_ZZ_pX 
     3 
    14from unramified_extension_generic import UnramifiedExtensionGeneric 
    25from eisenstein_extension_generic import EisensteinExtensionGeneric 
     
    1013from padic_fixed_mod_ring_generic import pAdicFixedModRingGeneric 
    1114 
     15from padic_ring_fixed_mod import pAdicRingFixedMod 
     16 
    1217from unramified_extension_absolute_element import UnramifiedExtensionAbsoluteElement 
    1318from unramified_extension_capped_relative_element import UnramifiedExtensionCappedRelativeElement 
     
    1924from padic_general_extension_capped_relative_element import pAdicGeneralExtensionCappedRelativeElement 
    2025from padic_general_extension_lazy_element import pAdicGeneralExtensionLazyElement 
     26 
     27from unramified_fixed_mod_element import UnramifiedFixedModElement 
     28from eisenstein_fixed_mod_element import EisensteinFixedModElement 
     29 
     30from sage.rings.integer_ring import ZZ 
    2131 
    2232class UnramifiedExtensionRingCappedRelative(UnramifiedExtensionGeneric, pAdicCappedRelativeRingGeneric): 
     
    4454class UnramifiedExtensionRingFixedMod(UnramifiedExtensionGeneric, pAdicFixedModRingGeneric): 
    4555    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 
    4767 
    4868class EisensteinExtensionRingCappedRelative(EisensteinExtensionGeneric, pAdicCappedRelativeRingGeneric): 
     
    7090class EisensteinExtensionRingFixedMod(EisensteinExtensionGeneric, pAdicFixedModRingGeneric): 
    7191    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 
    73114 
    74115class pAdicGeneralExtensionRingCappedRelative(pAdicGeneralExtensionGeneric, pAdicCappedRelativeRingGeneric): 
  • sage/rings/padics/padic_generic.py

    r7014 r8428  
    5858import sage.rings.ring 
    5959 
    60 from sage.rings.padics.pow_computer import PowComputer 
    6160from sage.rings.integer import Integer 
     61from sage.rings.padics.padic_printing import pAdicPrinter 
    6262 
    6363infinity = sage.rings.infinity.infinity 
     
    7272        #else: 
    7373        #    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) 
    7675        self._element_class = element_class 
    7776 
     
    136135            'series' 
    137136        """ 
    138         return self._print_mode 
    139  
    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. 
    143142     
    144         WARNING: You should not use this function. 
    145  
    146         INPUT: 
    147             self -- a p-adic ring 
    148             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) 
    149148     
    150         NOTES: 
    151             The options for print_mode are: 
    152             'val-unit' -- elements are displayed as p^k*u 
    153             'terse' -- elements are displayed as an integer if positive valuation, as u/ppow or u/p^k if negative valuation 
    154             '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_mode 
    159                 self._print_mode = print_mode 
    160                 return old 
    161             except AttributeError: 
    162                 self._print_mode = print_mode 
    163         else: 
    164             raise ValueError, "print_mode=%s must be either val-unit, terse, series"%print_mode 
     149#         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 
    165164         
    166165    def _element_class(self): 
     
    201200 
    202201    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        """ 
    203214        if n is infinity: 
    204215            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 
    206223 
    207224    def residue_characteristic(self): 
     
    504521            NotImplementedError: This is not yet ready for general use. 
    505522        """ 
    506         raise NotImplementedError, "This is not yet ready for general use." 
    507523        if not self is modulus.base_ring(): 
    508524            modulus = modulus.parent().change_ring(self)(modulus) 
     
    512528    ext = extension 
    513529 
    514 class local_print_mode: 
     530def local_print_mode(obj, print_mode, pos = None, uniformizer_name = None): 
    515531    r""" 
    516532    Context manager for safely temporarily changing the print_mode 
     
    528544    NOTES:  For more documentation see localvars in parent_gens.pyx 
    529545    """ 
    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.