Changeset 7728:a186b1eeb481


Ignore:
Timestamp:
12/14/07 03:41:23 (5 years ago)
Author:
William Stein <wstein@…>
Branch:
default
Message:

Trac #1183 -- More work on residue class fields. (not done yet)

Location:
sage
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • sage/modules/quotient_module.py

    r7527 r7728  
    173173        An element coerces in if it can be coerced into V, or if not at least if 
    174174        if it can be made sense of as a list of length the dimension of self. 
    175          
    176          
     175                 
    177176        EXAMPLES: 
    178177        We create a 2-dimensional quotient of a 3-dimension ambient vector space. 
     
    193192        """ 
    194193        try: 
    195             return self._coerce_impl(x) 
    196         except TypeError: 
     194            if x.parent() is self: 
     195                return x 
     196        except AttributeError: 
    197197            pass 
    198198        try: 
  • sage/rings/residue_field.pyx

    r7727 r7728  
    5656residue_field_cache = {} 
    5757 
    58 def ResidueField(p, names = None, check = True): 
     58def ResidueField(p, names = None, check = True, trygen=False): 
    5959    """ 
    6060    A function that returns the residue class field of a prime ideal p 
     
    6262 
    6363    INPUT: 
    64         p -- a prime integer or prime ideal of an order in a number 
    65              field. 
     64        p -- a prime ideal of an order in a number field. 
    6665        names -- the variable name for the finite field created. 
    6766                 Defaults to the name of the number field variable but 
     
    7776        sage: ResidueField(P) 
    7877        Residue field in abar of Fractional ideal (2*a^2 + 3*a - 10) 
     78 
     79    The result is cached: 
     80        sage: ResidueField(P) is ResidueField(P) 
     81        True 
    7982        sage: k = K.residue_field(P); k 
    8083        Residue field in abar of Fractional ideal (2*a^2 + 3*a - 10) 
     
    124127        else: 
    125128            names = None 
    126     key = (p, names) 
     129    key = (p, names, trygen) 
    127130    if residue_field_cache.has_key(key): 
    128131        k = residue_field_cache[key]() 
     
    149152    gen_ok = False 
    150153    from sage.matrix.constructor import matrix 
    151     try: 
    152         x = K.gen() 
    153         M = matrix(k, n+1, n, [to_vs(x**i).list() for i in range(n+1)]) 
    154         W = M.transpose().echelon_form() 
    155         if M.rank() == n: 
    156             PB = M.matrix_from_rows(range(n)) 
    157             gen_ok = True 
    158             f = R((-W.column(n)).list() + [1]) 
    159     except TypeError: 
    160         pass 
     154    if trygen: 
     155        # This optimization not ready yet.  
     156        try: 
     157            x = K.gen() 
     158            M = matrix(k, n+1, n, [to_vs(x**i).list() for i in range(n+1)]) 
     159            print M 
     160            W = M.transpose().echelon_form() 
     161            if M.rank() == n: 
     162                PB = M.matrix_from_rows(range(n)) 
     163                gen_ok = True 
     164                f = R((-W.column(n)).list() + [1]) 
     165        except (TypeError, ZeroDivisionError): 
     166            pass 
    161167    if not gen_ok: 
    162168        bad = True 
     
    420426 
    421427        EXAMPLES: 
    422             sage: k = ResidueField(17); k 
    423             Residue field of 17 
    424             sage: type(k) 
    425             <class 'sage.rings.residue_field.ResidueFiniteField_prime_modn'> 
     428            sage: K.<i> = QuadraticField(-1) 
     429            sage: kk = ResidueField(K.factor_integer(5)[0][0]) 
     430            sage: type(kk) 
     431            <class 'sage.rings.residue_field.ResidueFiniteField_prime_modn'>         
    426432        """ 
    427433        self.p = p # Here because we have to create a NFResidueFieldHomomorphism before calling ResidueField_generic.__init__(self,...) 
Note: See TracChangeset for help on using the changeset viewer.