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.

Reply via email to