Ticket #1400: 1400-quadratic_field_order.patch

File 1400-quadratic_field_order.patch, 2.6 kB (added by AlexGhitza, 9 months ago)
  • a/sage/rings/number_field/class_group.py

    old new  
    190190        """ 
    191191        return self.parent()(self.__ideal.reduce_equiv()) 
    192192 
    193     #def multiplicative_order(self): 
    194     #    try: 
    195     #        return self.__multiplicative_order 
    196     #    except AttributeError: 
     193    def order(self): 
     194        """ 
     195        Return the (multiplicative) order of the class group element self. 
     196 
     197        EXAMPLES: 
     198            sage: QF.<x> = QuadraticField(-39) 
     199            sage: CF = QF.class_group() 
     200            sage: I = CF.gen(0) 
     201            sage: I.order() 
     202            4 
     203            sage: (I^2).order() 
     204            2 
     205            sage: (I^4).order() 
     206            1 
     207            sage: CF(QF.ideal(1+x)).order() 
     208            1 
     209        """ 
     210        return self.ideal().order() 
     211 
     212    multiplicative_order = order 
    197213 
    198214    def ideal(self): 
    199215        """ 
  • a/sage/rings/number_field/number_field_ideal.py

    old new  
    10901090            return ZZ(self._pari_prime.getattr('f')) 
    10911091        raise ValueError, "the ideal (= %s) is not prime"%self 
    10921092 
     1093    def order(self): 
     1094        """ 
     1095        Return the (multiplicative) order of the fractional ideal self 
     1096        viewed as an element of the underlying class group. 
     1097 
     1098        EXAMPLES: 
     1099            sage: QF.<x> = QuadraticField(-39) 
     1100            sage: QF.ideal(1+x).order() 
     1101            1 
     1102            sage: QF.ideal(2, 1/2*x - 1/2).order() 
     1103            4 
     1104        """ 
     1105        try: 
     1106            return self.__order 
     1107        except AttributeError: 
     1108            k = 1 
     1109            I = self.reduce_equiv() 
     1110            J = I 
     1111            while True: 
     1112                if J.is_principal(): 
     1113                    self.__order = k 
     1114                    return k 
     1115                else: 
     1116                    J = (J*I).reduce_equiv() 
     1117                    k = k + 1 
     1118 
     1119    multiplicative_order = order 
     1120 
     1121 
     1122 
    10931123def is_NumberFieldFractionalIdeal(x): 
    10941124    """ 
    10951125    Return True if x is a fractional ideal of a number field.