Ticket #3913: sage-trac3913.patch

File sage-trac3913.patch, 3.7 kB (added by cremona, 5 months ago)
  • a/sage/rings/number_field/class_group.py

    old new  
    148148    """ 
    149149    def __init__(self, ideal, class_group): 
    150150        """ 
    151         A fractional ideal class
     151        Returns the ideal class of this fractional ideal
    152152        """ 
    153153        self.__ideal = ideal 
    154154        MultiplicativeGroupElement.__init__(self, class_group) 
     
    171171        return self.parent()((self.__ideal * other.__ideal).reduce_equiv()) 
    172172 
    173173    def is_principal(self): 
     174        """ 
     175        Returns True iff this ideal class is the trivial (principal) class 
     176 
     177        EXAMPLE: 
     178        sage: K.<w>=QuadraticField(-23) 
     179        sage: OK=K.ring_of_integers() 
     180        sage: C=OK.class_group() 
     181        sage: P2a,P2b=[P for P,e in (2*OK).factor()] 
     182        sage: c=C(P2a) 
     183        sage: c.is_principal()     
     184        False 
     185        sage: (c^2).is_principal() 
     186        False 
     187        sage: (c^3).is_principal() 
     188        True 
     189        """ 
    174190        return self.__ideal.is_principal() 
    175191 
    176192    def reduce(self): 
     
    190206        """ 
    191207        return self.parent()(self.__ideal.reduce_equiv()) 
    192208 
    193     #def multiplicative_order(self): 
    194     #    try: 
    195     #        return self.__multiplicative_order 
    196     #    except AttributeError: 
     209    def order(self): 
     210        """ 
     211        Return the order of this ideal class in the class group. 
    197212 
     213        EXAMPLE: 
     214            sage: K.<w>=QuadraticField(-23) 
     215            sage: OK=K.ring_of_integers() 
     216            sage: C=OK.class_group() 
     217            sage: h=C.order(); h 
     218            3 
     219            sage: P2a,P2b=[P for P,e in (2*OK).factor()] 
     220            sage: c=C(P2a); c 
     221            Fractional ideal class (2, 1/2*w - 1/2) 
     222            sage: c.order() 
     223            3 
     224 
     225            sage: k.<a> = NumberField(x^2 + 20072); G = k.class_group(); G 
     226            Class group of order 76 with structure C38 x C2 of Number Field in a with defining polynomial x^2 + 20072 
     227            sage: [c.order() for c in G.gens()] 
     228            [38, 2] 
     229 
     230        """ 
     231        try: 
     232            return self.__multiplicative_order 
     233        except AttributeError: 
     234            from sage.groups.generic import order_from_multiple 
     235            self.__multiplicative_order = order_from_multiple(self,self.parent().order(),operation='*') 
     236            return self.__multiplicative_order 
     237 
     238    multiplicative_order = order 
     239     
    198240    def ideal(self): 
    199241        """ 
    200242        Return a representative ideal in this ideal class. 
     243 
     244        EXAMPLE: 
     245        sage: K.<w>=QuadraticField(-23) 
     246        sage: OK=K.ring_of_integers() 
     247        sage: C=OK.class_group() 
     248        sage: P2a,P2b=[P for P,e in (2*OK).factor()] 
     249        sage: c=C(P2a); c 
     250        Fractional ideal class (2, 1/2*w - 1/2) 
     251        sage: c.ideal() 
     252        Fractional ideal (2, 1/2*w - 1/2) 
    201253        """ 
    202254        return self.__ideal 
    203255 
     
    205257        """ 
    206258        Return generators for a representative ideal in this 
    207259        ideal class. 
     260 
     261        EXAMPLE: 
     262        sage: K.<w>=QuadraticField(-23) 
     263        sage: OK=K.ring_of_integers() 
     264        sage: C=OK.class_group() 
     265        sage: P2a,P2b=[P for P,e in (2*OK).factor()] 
     266        sage: c=C(P2a); c 
     267        Fractional ideal class (2, 1/2*w - 1/2) 
     268        sage: c.gens() 
     269        (2, 1/2*w - 1/2) 
    208270        """ 
    209271        return self.ideal().gens()