Changeset 7507:de39c2037850


Ignore:
Timestamp:
12/02/07 02:20:33 (5 years ago)
Author:
Craig Citro <craigcitro@…>
Branch:
default
Message:

More fixes & changes for trac #1129.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sage/rings/polynomial/polynomial_element.pyx

    r7506 r7507  
    14831483            sage: expand(F) 
    14841484            T^6 + 10/7*T^5 + (-867/49)*T^4 + (-76/245)*T^3 + 3148/35*T^2 + (-25944/245)*T + 48771/1225 
     1485 
     1486            sage: f = x^2 - 1/3 ; K.<a> = NumberField(f) ; A.<T> = K[] ; g = A(x^2-1) 
     1487            sage: g.factor() 
     1488            (T - 1) * (T + 1) 
     1489 
     1490            sage: h = A(3*x^2-1) ; h.factor() 
     1491            (3) * (T - a) * (T + a) 
     1492 
     1493            sage: h = A(x^2-1/3) ; h.factor() 
     1494            (T - a) * (T + a) 
    14851495         
    14861496        Over the real double field: 
     
    15531563        G = None 
    15541564         
    1555         from sage.rings.number_field.all import is_NumberField, is_RelativeNumberField 
     1565        from sage.rings.number_field.all import is_NumberField, \ 
     1566             is_RelativeNumberField, NumberField 
    15561567        from sage.rings.finite_field import is_FiniteField 
    15571568 
     
    15821593 
    15831594             
    1584         elif is_NumberField(R) or is_FiniteField(R): 
    1585             v = [x._pari_("a") for x in self.list()] 
    1586             f = pari(v).Polrev() 
    1587             G = list(R.pari_polynomial("a").nfinit().nffactor(f)) 
     1595        elif is_NumberField(R): 
     1596            if (R.defining_polynomial().denominator() == 1) and \ 
     1597                   (self.denominator() == 1): 
     1598                v = [ x._pari_("a") for x in self.list() ] 
     1599                f = pari(v).Polrev() 
     1600                Rpari = R.pari_nf() 
     1601                if (Rpari.variable() != "a"): 
     1602                    Rpari = Rpari.copy() 
     1603                    Rpari[0] = Rpari[0]("a") 
     1604                    Rpari[6] = [ x("a") for x in Rpari[6] ] 
     1605                G = list(Rpari.nffactor(f)) 
     1606 
     1607            else: 
     1608 
     1609                Rdenom = R.defining_polynomial().denominator() 
     1610 
     1611                new_Rpoly = (R.defining_polynomial() * Rdenom).change_variable_name("a") 
     1612 
     1613                Rpari, Rdiff = new_Rpoly._pari_().nfinit(3) 
     1614 
     1615                AZ = polynomial_ring.PolynomialRing(QQ,'z') 
     1616                Raux = NumberField(AZ(Rpari[0]),'alpha') 
     1617 
     1618                S, gSRaux, fRauxS = Raux.change_generator(Raux(Rdiff)) 
     1619 
     1620                phi_RS = R.Hom(S)([S.gen(0)]) 
     1621                phi_SR = S.Hom(R)([R.gen(0)]) 
     1622 
     1623                unit = self.leading_coefficient() 
     1624                temp_f = self * 1/unit 
     1625 
     1626                v = [ gSRaux(phi_RS(x))._pari_("a") for x in temp_f.list() ] 
     1627                f = pari(v).Polrev() 
     1628 
     1629                pari_factors = Rpari.nffactor(f) 
     1630 
     1631                factors = [ ( self.parent([ phi_SR(fRauxS(Raux(pari_factors[0][i][j]))) 
     1632                                            for j in range(len(pari_factors[0][i])) ]) , 
     1633                             int(pari_factors[1][i]) ) 
     1634                            for i in range(pari_factors.nrows()) ] 
     1635 
     1636                return Factorization(factors, unit) 
     1637         
    15881638 
    15891639        elif is_RealField(R): 
Note: See TracChangeset for help on using the changeset viewer.