Changeset 7441:5b6d6e2e4a87


Ignore:
Timestamp:
11/14/07 15:24:07 (6 years ago)
Author:
dmharvey@…
Branch:
default
Message:

partially addresses trac #1134 by creating fast QQ => numberfield_quadratic coercion

Location:
sage/rings/number_field
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • sage/rings/number_field/number_field.py

    r7288 r7441  
    45514551        parts = -b/(2*a), (Dpoly/D).sqrt()/(2*a) 
    45524552        self._NumberField_generic__gen = self._element_class(self, parts) 
     4553 
     4554 
     4555    def coerce_map_from_impl(self, S): 
     4556        """ 
     4557        EXAMPLES: 
     4558            sage: K.<a> = QuadraticField(-3) 
     4559            sage: f = K.coerce_map_from(QQ); f 
     4560            Natural morphism: 
     4561              From: Rational Field 
     4562              To:   Number Field in a with defining polynomial x^2 + 3 
     4563            sage: f(3/5) 
     4564            3/5 
     4565            sage: parent(f(3/5)) is K 
     4566            True 
     4567        """ 
     4568        if S is QQ: 
     4569            return number_field_element_quadratic.Q_to_quadratic_field_element(self) 
     4570        else: 
     4571            return NumberField_absolute.coerce_map_from_impl(self, S) 
     4572 
     4573 
    45534574         
    45544575    def discriminant(self, v=None): 
  • sage/rings/number_field/number_field_element_quadratic.pyx

    r7288 r7441  
    55    -- Robert Bradshaw (2007-09): Initial version 
    66    -- David Harvey (2007-10): fix up a few bugs, polish around the edges 
     7 
     8TODO: 
     9    the _new() method should be overridden in this class to copy the D attribute 
     10 
    711""" 
    812#***************************************************************************** 
     
    3640from sage.rings.rational_field import QQ 
    3741from sage.rings.integer_ring import ZZ 
     42from sage.categories.morphism cimport Morphism 
    3843 
    3944 
     
    935940        res._reduce_c_() 
    936941        return res 
     942 
     943 
     944 
     945cdef class Q_to_quadratic_field_element(Morphism): 
     946    """ 
     947    Morphism that coerces from rationals to elements of a 
     948    quadratic number field K. 
     949    """ 
     950    cdef NumberFieldElement_quadratic zero_element    # the zero element of K 
     951     
     952    def __init__(self, K): 
     953        """ K is the target quadratic field """ 
     954        import sage.categories.homset 
     955        Morphism.__init__(self, sage.categories.homset.Hom(QQ, K)) 
     956        self.zero_element = PY_NEW(NumberFieldElement_quadratic) 
     957        self.zero_element._parent = K 
     958        self.zero_element.D = K._D 
     959         
     960 
     961    cdef Element _call_c_impl(self, Element x): 
     962        cdef NumberFieldElement_quadratic y = self.zero_element._new() 
     963        y.D = self.zero_element.D 
     964        mpz_set(y.a, mpq_numref((<Rational>x).value)) 
     965        mpz_set(y.denom, mpq_denref((<Rational>x).value)) 
     966        return y 
     967 
     968    def _repr_type(self): 
     969        return "Natural" 
Note: See TracChangeset for help on using the changeset viewer.