Hello Vincent, You are probably right that it is the PARI -> Sage conversion that is causing the bug. I added the following debugging statements:
diff --git a/src/sage/rings/polynomial/polynomial_element.pyx b/src/sage/rings/polynomial/polynomial_element.pyx index 4fe2d5c..b0676d7 100644 --- a/src/sage/rings/polynomial/polynomial_element.pyx +++ b/src/sage/rings/polynomial/polynomial_element.pyx @@ -3370,7 +3370,9 @@ cdef class Polynomial(CommutativeAlgebraElement): elif is_FiniteField(R): v = [x._pari_("a") for x in self.list()] f = pari(v).Polrev() + print('f = %s' % f) # PARI polynomial G = list(f.factor()) + print('G = %s' % G) # PARI factorisation elif is_NumberField(R): if R.degree() == 1: @@ -3470,6 +3472,7 @@ cdef class Polynomial(CommutativeAlgebraElement): exps = G[1] R = self.parent() F = [(R(f), int(e)) for f, e in zip(pols, exps)] + print("F = %s" % F) # PARI factorisation converted to Sage if unit is None: unit = self.leading_coefficient() The first failure I is copy-pasted below. The PARI factorisation G is exactly the same the first time (the failure) and the second time (the double-checking). To make it look nicer: gp > lift(lift(Mat(G))) %2 = [ x + 1 1] [ x + (a^7 + a^6 + a^5 + 2*a + 1) 1] [x + (2*a^7 + 2*a^6 + 2*a^5 + a + 1) 1] [ x^5 + x^4 + 2*x^3 + x^2 + x + 1 1] However, the Sage factorisation F is different. In fact, it appears that the call to R(f) used in constructing F incorrectly converts the factor x + (2*a^7 + 2*a^6 + 2*a^5 + a + 1) into T + (2*z^3 + z + 2). Peter f = Mod(Mod(2, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^8 + Mod(Mod(2, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^7 + Mod(Mod(2, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^5 + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^4 + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3)) G = [[Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3)), Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x + Mod(Mod(1, 3)*a^7 + Mod(1, 3)*a^6 + Mod(1, 3)*a^5 + Mod(2, 3)*a + Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3)), Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x + Mod(Mod(2, 3)*a^7 + Mod(2, 3)*a^6 + Mod(2, 3)*a^5 + Mod(1, 3)*a + Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3)), Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^5 + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^4 + Mod(Mod(2, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^3 + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^2 + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))]~, [1, 1, 1, 1]~] F = [(T + 1, 1), (T + z^7 + z^6 + z^5 + 2*z + 1, 1), (T + 2*z^3 + z + 2, 1), (T^5 + T^4 + 2*T^3 + T^2 + T + 1, 1)] ERROR (after 524 iterations): polynomial : 2*T^8 + 2*T^7 + 2*T^5 + T^4 + 1 factorization: (2) * (T + 1) * (T + 2*z^3 + z... product : 2*T^8 + (2*z^7 + 2*z^6 + 2*z^5... f = Mod(Mod(2, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^8 + Mod(Mod(2, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^7 + Mod(Mod(2, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^5 + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^4 + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3)) G = [[Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3)), Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x + Mod(Mod(1, 3)*a^7 + Mod(1, 3)*a^6 + Mod(1, 3)*a^5 + Mod(2, 3)*a + Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3)), Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x + Mod(Mod(2, 3)*a^7 + Mod(2, 3)*a^6 + Mod(2, 3)*a^5 + Mod(1, 3)*a + Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3)), Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^5 + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^4 + Mod(Mod(2, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^3 + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^2 + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))]~, [1, 1, 1, 1]~] F = [(T + 1, 1), (T + z^7 + z^6 + z^5 + 2*z + 1, 1), (T + 2*z^7 + 2*z^6 + 2*z^5 + z + 1, 1), (T^5 + T^4 + 2*T^3 + T^2 + T + 1, 1)] f = Mod(Mod(2, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^8 + Mod(Mod(2, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^7 + Mod(Mod(2, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^5 + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^4 + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3)) G = [[Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3)), Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x + Mod(Mod(1, 3)*a^7 + Mod(1, 3)*a^6 + Mod(1, 3)*a^5 + Mod(2, 3)*a + Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3)), Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x + Mod(Mod(2, 3)*a^7 + Mod(2, 3)*a^6 + Mod(2, 3)*a^5 + Mod(1, 3)*a + Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3)), Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^5 + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^4 + Mod(Mod(2, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^3 + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x^2 + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))*x + Mod(Mod(1, 3), Mod(1, 3)*a^8 + Mod(2, 3)*a^5 + Mod(1, 3)*a^4 + Mod(2, 3)*a^2 + Mod(2, 3)*a + Mod(2, 3))]~, [1, 1, 1, 1]~] F = [(T + 1, 1), (T + z^7 + z^6 + z^5 + 2*z + 1, 1), (T + 2*z^7 + 2*z^6 + 2*z^5 + z + 1, 1), (T^5 + T^4 + 2*T^3 + T^2 + T + 1, 1)] calling once more p.factor().prod() gives back the polynomial!! > Hi John, > > Thanks for the feedback. > > 2014-08-27 11:30 UTC+02:00, John Cremona <john.crem...@gmail.com>: >> OK, so witth the corrected script and still with unpatched 6.4.beta1, > >> with test1() I get a few error messages as predicted, for a while, but >> then all was fine for 1000, 2000, 3000 iterations (at which point I >> checked the script and saw that it would run for ever sot killed it!). > > Right, you have to kill them ;-) (I included it in the error messages > now). I have the same behavior, few errors and then it works fine. So > at least it is somehow reproducible... but nevertheless very strange! > And do you get as well the line "calling once more p.factor().prod() > gives back the polynomial!!"? > >> With test2(), no problems up to 1000 iterations, after that It crashed >> when p2 was 0 (better put in a test for that too). > > Was it 10000 or 1000? > > I added a check in test2 to forbid zero polynomial and better > presentation that makes the code readable. > > Thanks > Vincent -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel. For more options, visit https://groups.google.com/d/optout.