Hello community,

here is the log from the commit of package pari for openSUSE:Factory checked in 
at 2016-08-05 18:16:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pari (Old)
 and      /work/SRC/openSUSE:Factory/.pari.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "pari"

Changes:
--------
--- /work/SRC/openSUSE:Factory/pari/pari.changes        2016-03-26 
15:23:28.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.pari.new/pari.changes   2016-08-05 
18:16:23.000000000 +0200
@@ -1,0 +2,9 @@
+Sun Jul 31 16:46:14 UTC 2016 - jeng...@inai.de
+
+- Update to new upstream release 2.7.6
+* fixed O(1)==O(x) returning 0
+* matsolve(a,b) and a^(-1) gave wrong results [or SEGV] when t_MAT
+  a was not square and a,b "modular"; same for x^(-1)
+* fixed a memory leak in pari_close: sopath was not freed
+
+-------------------------------------------------------------------

Old:
----
  pari-2.7.5.changelog
  pari-2.7.5.tar.gz
  pari-2.7.5.tar.gz.asc

New:
----
  pari-2.7.6.changelog
  pari-2.7.6.tar.gz
  pari-2.7.6.tar.gz.asc

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ pari.spec ++++++
--- /var/tmp/diff_new_pack.jtmIZg/_old  2016-08-05 18:16:24.000000000 +0200
+++ /var/tmp/diff_new_pack.jtmIZg/_new  2016-08-05 18:16:24.000000000 +0200
@@ -18,7 +18,7 @@
 
 Name:           pari
 %define lname  libpari-gmp4
-Version:        2.7.5
+Version:        2.7.6
 Release:        0
 Summary:        Computer Algebra System for fast computations in Number Theory
 License:        GPL-2.0

++++++ pari-2.7.5.changelog -> pari-2.7.6.changelog ++++++
--- /work/SRC/openSUSE:Factory/pari/pari-2.7.5.changelog        2016-03-26 
15:23:27.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.pari.new/pari-2.7.6.changelog   2016-08-05 
18:16:23.000000000 +0200
@@ -1,6 +1,29 @@
 # $Id$
 Bug numbers refer to the BTS at http://pari.math.u-bordeaux.fr/Bugs/
 
+Done for version 2.7.6 (released 20/06/2016):
+[last column crossreferences current development release 2.8.0]
+
+  Fixed
+    1- [from 2.7.5] O(1) == O(x) returned 0                      [#1765]
+    2- matsolve(a,b) and a^(-1) gave wrong results [or SEGV] when t_MAT  [F86]
+       a was not square and a,b "modular" (F2m,Flm,FpM,FqM,F2xqM,FlxqM)
+       same for x^(-1)                                           [#1666]
+    3- e=ellinit("11a1"); ellztopoint(e,3*e.omega[1]/5)[2] wrong [#1683] [F97]
+    4- K.codiff incorrect if [K:Q] > 2                                   [F130]
+    5- nfrootsof1(polcyclo(85)) -> 85 instead of 170             [#1766] [F133]
+    6- at \p19, polroots((x+1)^2*(x-1)^7*(x^2-x+1)^5*1.0)-> SEGV [#1767] [F134]
+BA  7- ellsea returned the trace instead of the cardinal as documented.  [F135]
+BA  8- ellsea(,,1)  could return a wrong result                  [#1768] [F136]
+MC  9- memory leak in pari_close: sopath not freed                       [F138]
+   10- isprimepower(30011^(3*17)) returned 0                             [F141]
+BA 11- [mpi] interrupt/alarm could cause a crash                         [F143]
+BA 12- [mpi] relinking empty t_LIST caused a crash                       [F144]
+BA 13- my(s=1,a=0);forstep(i=1,20,s,s++;a+=i);a -> wrong result          [F146]
+   14- sqrt(0) -> loss of accuracy (sqrtn was correct)                   [F148]
+   15- K = bnrinit(bnfinit(y^2-5),[1,[1,1]]); bnrdisc(K) ->wrong [#1804] [F152]
+   16- ellztopoint(ellinit([-1,0]), I) -> wrong result           [#1800] [F153]
+
 Done for version 2.7.5 (released 09/11/2015):
 [last column crossreferences current development release 2.8.0]
 

++++++ pari-2.7.5.tar.gz -> pari-2.7.6.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/AUTHORS new/pari-2.7.6/AUTHORS
--- old/pari-2.7.5/AUTHORS      2015-06-02 16:03:57.000000000 +0200
+++ new/pari-2.7.6/AUTHORS      2016-05-31 17:10:23.000000000 +0200
@@ -107,6 +107,7 @@
 LGr= Loic Grenie
 LM = Lorenz Minder
 MA = Michael Abshoff
+MC = Marie-Angela Cornelie
 MD = Mark Dickinson
 MH = Marije Huizing
 MS = Michael Stoll
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/CHANGES new/pari-2.7.6/CHANGES
--- old/pari-2.7.5/CHANGES      2015-10-26 09:59:48.000000000 +0100
+++ new/pari-2.7.6/CHANGES      2016-06-03 10:38:05.000000000 +0200
@@ -1,6 +1,29 @@
 # $Id$
 Bug numbers refer to the BTS at http://pari.math.u-bordeaux.fr/Bugs/
 
+Done for version 2.7.6 (released 20/06/2016):
+[last column crossreferences current development release 2.8.0]
+
+  Fixed
+    1- [from 2.7.5] O(1) == O(x) returned 0                      [#1765]
+    2- matsolve(a,b) and a^(-1) gave wrong results [or SEGV] when t_MAT  [F86]
+       a was not square and a,b "modular" (F2m,Flm,FpM,FqM,F2xqM,FlxqM)
+       same for x^(-1)                                           [#1666]
+    3- e=ellinit("11a1"); ellztopoint(e,3*e.omega[1]/5)[2] wrong [#1683] [F97]
+    4- K.codiff incorrect if [K:Q] > 2                                   [F130]
+    5- nfrootsof1(polcyclo(85)) -> 85 instead of 170             [#1766] [F133]
+    6- at \p19, polroots((x+1)^2*(x-1)^7*(x^2-x+1)^5*1.0)-> SEGV [#1767] [F134]
+BA  7- ellsea returned the trace instead of the cardinal as documented.  [F135]
+BA  8- ellsea(,,1)  could return a wrong result                  [#1768] [F136]
+MC  9- memory leak in pari_close: sopath not freed                       [F138]
+   10- isprimepower(30011^(3*17)) returned 0                             [F141]
+BA 11- [mpi] interrupt/alarm could cause a crash                         [F143]
+BA 12- [mpi] relinking empty t_LIST caused a crash                       [F144]
+BA 13- my(s=1,a=0);forstep(i=1,20,s,s++;a+=i);a -> wrong result          [F146]
+   14- sqrt(0) -> loss of accuracy (sqrtn was correct)                   [F148]
+   15- K = bnrinit(bnfinit(y^2-5),[1,[1,1]]); bnrdisc(K) ->wrong [#1804] [F152]
+   16- ellztopoint(ellinit([-1,0]), I) -> wrong result           [#1800] [F153]
+
 Done for version 2.7.5 (released 09/11/2015):
 [last column crossreferences current development release 2.8.0]
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/README new/pari-2.7.6/README
--- old/pari-2.7.5/README       2015-01-31 13:27:30.000000000 +0100
+++ new/pari-2.7.6/README       2016-06-01 13:55:03.000000000 +0200
@@ -1,7 +1,7 @@
 This is PARI/GP, version 2.7.x (*).
 
 PARI/GP Number Theory-oriented Computer Algebra System
-        Copyright (C) 2000-2015 The PARI Group, Bordeaux.
+        Copyright (C) 2000-2016 The PARI Group, Bordeaux.
 
 ==========================================================================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/config/version 
new/pari-2.7.6/config/version
--- old/pari-2.7.5/config/version       2015-10-26 10:00:11.000000000 +0100
+++ new/pari-2.7.6/config/version       2016-06-03 10:39:49.000000000 +0200
@@ -5,7 +5,7 @@
 VersionMinor='7'
 
 # Patch level
-patch='5'
+patch='6'
 
 # Version code
 version_code=`expr $VersionMajor \\* 65536 + $VersionMinor \\* 256 + $patch`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/doc/appa.tex new/pari-2.7.6/doc/appa.tex
--- old/pari-2.7.5/doc/appa.tex 2015-01-31 13:28:00.000000000 +0100
+++ new/pari-2.7.6/doc/appa.tex 2016-06-01 13:55:03.000000000 +0200
@@ -603,7 +603,7 @@
 @@manual{PARI2,
     organization = "{The PARI~Group}",
     title        = "{PARI/GP version @vers}",
-    year         = 2015,
+    year         = 2016,
     address      = "Bordeaux",
     note         = "available from \url{http://pari.math.u-bordeaux.fr/}";
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/doc/usersch3.tex 
new/pari-2.7.6/doc/usersch3.tex
--- old/pari-2.7.5/doc/usersch3.tex     2015-10-07 18:45:50.000000000 +0200
+++ new/pari-2.7.6/doc/usersch3.tex     2016-05-31 17:27:46.000000000 +0200
@@ -2196,16 +2196,16 @@
 
 \subsec{sqrtn$(x,n,\{\&z\})$}\kbdsidx{sqrtn}\label{se:sqrtn}
 Principal branch of the $n$th root of $x$,
-i.e.~such that $\text{Arg}(\text{sqrt}(x))\in{} ]-\pi/n, \pi/n]$. Intmod
+i.e.~such that $\text{Arg}(\text{sqrtn}(x))\in{} ]-\pi/n, \pi/n]$. Intmod
 a prime and $p$-adics are allowed as arguments.
 
 If $z$ is present, it is set to a suitable root of unity allowing to
 recover all the other roots. If it was not possible, z is
-set to zero. In the case this argument is present and no square root exist,
-$0$ is returned instead or raising an error.
+set to zero. In the case this argument is present and no $n$th root exist,
+$0$ is returned instead of raising an error.
 \bprog
 ? sqrtn(Mod(2,7), 2)
-%1 = Mod(4, 7)
+%1 = Mod(3, 7)
 ? sqrtn(Mod(2,7), 2, &z); z
 %2 = Mod(6, 7)
 ? sqrtn(Mod(2,7), 3)
@@ -2236,7 +2236,7 @@
 
 The library syntax is \fun{GEN}{gsqrtn}{GEN x, GEN n, GEN *z = NULL, long 
prec}.
 If $x$ is a \typ{PADIC}, the function
-\fun{GEN}{Qp_sqrt}{GEN x, GEN n, GEN *z} is also available.
+\fun{GEN}{Qp_sqrtn}{GEN x, GEN n, GEN *z} is also available.
 
 \subsec{tan$(x)$}\kbdsidx{tan}\label{se:tan}
 Tangent of $x$.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/doc/usersch5.tex 
new/pari-2.7.6/doc/usersch5.tex
--- old/pari-2.7.5/doc/usersch5.tex     2015-01-22 20:51:45.000000000 +0100
+++ new/pari-2.7.6/doc/usersch5.tex     2016-05-31 17:10:23.000000000 +0200
@@ -3386,8 +3386,8 @@
 
 \fun{GEN}{FpM_intersect}{GEN x, GEN y, GEN p} as \kbd{intersect}
 
-\fun{GEN}{FpM_inv}{GEN x, GEN p} returns the inverse of \kbd{x}, or
-\kbd{NULL} if \kbd{x} is not invertible.
+\fun{GEN}{FpM_inv}{GEN x, GEN p} returns a left inverse of \kbd{x}
+(the inverse if $x$ is square), or \kbd{NULL} if \kbd{x} is not invertible.
 
 \fun{GEN}{FpM_FpC_invimage}{GEN m, GEN v, GEN p}
  given an \kbd{FpM} $x$ and an \kbd{FpC} $y$, returns an $x$ such that $Ax =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/basemath/alglin1.c 
new/pari-2.7.6/src/basemath/alglin1.c
--- old/pari-2.7.5/src/basemath/alglin1.c       2015-05-19 16:56:25.000000000 
+0200
+++ new/pari-2.7.6/src/basemath/alglin1.c       2016-05-31 17:26:08.000000000 
+0200
@@ -998,10 +998,9 @@
 F2xqM_inv(GEN a, GEN T)
 {
   pari_sp av = avma;
-  long n = lg(a)-1;
   GEN u;
-  if (!n) { avma = av; return cgetg(1, t_MAT); }
-  u = F2xqM_gauss_gen(a, matid_F2xqM(n,T), T);
+  if (lg(a) == 1) { avma = av; return cgetg(1, t_MAT); }
+  u = F2xqM_gauss_gen(a, matid_F2xqM(nbrows(a),T), T);
   if (!u) { avma = av; return NULL; }
   return gerepilecopy(av, u);
 }
@@ -1756,6 +1755,23 @@
   return z;
 }
 
+static GEN
+F2_get_col(GEN b, GEN d, long li, long aco)
+{
+  long i, l = nbits2lg(aco);
+  GEN u = cgetg(l, t_VECSMALL);
+  u[1] = aco;
+  for (i = 1; i <= li; i++)
+    if (d[i]) /* d[i] can still be 0 if li > aco */
+    {
+      if (F2v_coeff(b, i))
+        F2v_set(u, d[i]);
+      else
+        F2v_clear(u, d[i]);
+    }
+  return u;
+}
+
 /* destroy a, b */
 static GEN
 F2m_gauss_sp(GEN a, GEN b)
@@ -1764,7 +1780,7 @@
   GEN u, d;
 
   if (!aco) return cgetg(1,t_MAT);
-  li = coeff(a,1,1);
+  li = gel(a,1)[1];
   d = zero_Flv(li);
   bco = lg(b)-1;
   for (i=1; i<=aco; i++)
@@ -1783,32 +1799,16 @@
     for (l=1; l<=aco; l++)
     {
       GEN al = gel(a,l);
-      if (!F2v_coeff(al,k)) continue;
-
-      F2v_add_inplace(al,ai);
+      if (F2v_coeff(al,k)) F2v_add_inplace(al,ai);
     }
     for (l=1; l<=bco; l++)
     {
-      GEN al = gel(b,l);
-      if (!F2v_coeff(al,k)) continue;
-
-      F2v_add_inplace(al,ai);
+      GEN bl = gel(b,l);
+      if (F2v_coeff(bl,k)) F2v_add_inplace(bl,ai);
     }
   }
-  u = gcopy(b);
-  for (j = 1; j <= bco; j++)
-  {
-    GEN bj = gel(b, j), uj = gel(u, j);
-
-    for (i = 1; i <= li; i++)
-      if (d[i] && d[i] != i) /* can d[i] still be 0 ? */
-      {
-        if (F2v_coeff(bj, i))
-          F2v_set(uj, d[i]);
-        else
-          F2v_clear(uj, d[i]);
-      }
-  }
+  u = cgetg(bco+1,t_MAT);
+  for (j = 1; j <= bco; j++) gel(u,j) = F2_get_col(gel(b,j), d, li, aco);
   return u;
 }
 
@@ -1833,7 +1833,7 @@
 {
   pari_sp av = avma;
   if (lg(a) == 1) return cgetg(1,t_MAT);
-  return gerepileupto(av, F2m_gauss_sp(F2m_copy(a), matid_F2m(lg(a)-1)));
+  return gerepileupto(av, F2m_gauss_sp(F2m_copy(a), matid_F2m(gel(a,1)[1])));
 }
 
 /* destroy a, b */
@@ -1941,7 +1941,8 @@
 }
 static GEN
 Flm_inv_sp(GEN a, ulong *detp, ulong p) {
-  return Flm_gauss_sp(a, matid_Flm(lg(a)-1), detp, p);
+  if (lg(a) == 1) return cgetg(1,t_MAT);
+  return Flm_gauss_sp(a, matid_Flm(nbrows(a)), detp, p);
 }
 GEN
 Flm_inv(GEN a, ulong p) {
@@ -1962,11 +1963,11 @@
   const struct bb_field *S = get_Fp_field(&E,p);
   return gen_Gauss(a,b, E, S);
 }
-/* a an FpM; b an FpM or NULL (replace by identity) */
+/* a an FpM, lg(a)>1; b an FpM or NULL (replace by identity) */
 static GEN
 FpM_gauss_i(GEN a, GEN b, GEN p, ulong *pp)
 {
-  long n = lg(a)-1;
+  long n = nbrows(a);
   a = FpM_init(a,p,pp);
   switch(*pp)
   {
@@ -2056,10 +2057,9 @@
 FlxqM_inv(GEN a, GEN T, ulong p)
 {
   pari_sp av = avma;
-  long n = lg(a)-1;
   GEN u;
-  if (!n) { avma = av; return cgetg(1, t_MAT); }
-  u = FlxqM_gauss_gen(a, matid_FlxqM(n,T,p), T,p);
+  if (lg(a) == 1) { avma = av; return cgetg(1, t_MAT); }
+  u = FlxqM_gauss_gen(a, matid_FlxqM(nbrows(a),T,p), T,p);
   if (!u) { avma = av; return NULL; }
   return gerepilecopy(av, u);
 }
@@ -2098,10 +2098,9 @@
 {
   pari_sp av = avma;
   GEN u;
-  long n;
   if (!T) return FpM_inv(a,p);
-  n = lg(a)-1; if (!n) return cgetg(1, t_MAT);
-  u = FqM_gauss_gen(a,matid(n),T,p);
+  if (lg(a) == 1) return cgetg(1, t_MAT);
+  u = FqM_gauss_gen(a,matid(nbrows(a)),T,p);
   if (!u) { avma = av; return NULL; }
   return gerepilecopy(av, u);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/basemath/arith1.c 
new/pari-2.7.6/src/basemath/arith1.c
--- old/pari-2.7.5/src/basemath/arith1.c        2015-05-19 19:34:24.000000000 
+0200
+++ new/pari-2.7.6/src/basemath/arith1.c        2016-05-31 17:26:08.000000000 
+0200
@@ -1267,7 +1267,7 @@
     if (DEBUGLEVEL>4) err_printf("Z_isanypower: now k=%ld, x=%ld-bit\n", k, 
expi(x));
     xmodQ = umodiu(x, Q);
     /* test Q | x, just in case */
-    if (!xmodQ) return k * split_exponent(Z_lval(x,Q), px);
+    if (!xmodQ) { *px = x; return k * split_exponent(Z_lval(x,Q), px); }
     /* x^(1/p) < 2^31 */
     p = T.p;
     if (p <= e2)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/basemath/buch3.c 
new/pari-2.7.6/src/basemath/buch3.c
--- old/pari-2.7.5/src/basemath/buch3.c 2014-09-15 13:32:55.000000000 +0200
+++ new/pari-2.7.6/src/basemath/buch3.c 2016-05-31 17:10:23.000000000 +0200
@@ -1561,7 +1561,7 @@
 
 /* Given a number field bnf=bnr[1], a ray class group structure bnr, and a
  * subgroup H (HNF form) of the ray class group, compute [n, r1, dk]
- * associated to H (cf. discrayall). If flcond = 1, abort (return gen_0) if
+ * associated to H. If flcond = 1, abort (return gen_0) if
  * module is not the conductor If flrel = 0, compute only N(dk) instead of
  * the ideal dk proper */
 static GEN
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/basemath/elliptic.c 
new/pari-2.7.6/src/basemath/elliptic.c
--- old/pari-2.7.5/src/basemath/elliptic.c      2015-09-02 20:12:11.000000000 
+0200
+++ new/pari-2.7.6/src/basemath/elliptic.c      2016-05-31 17:10:23.000000000 
+0200
@@ -1898,12 +1898,12 @@
   GEN w1,w2,tau; /* original basis for L = <w1,w2> = w2 <1,tau> */
   GEN W1,W2,Tau; /* new basis for L = <W1,W2> = W2 <1,tau> */
   GEN a,b,c,d; /* t_INT; tau in F = h/Sl2, tau = g.t, g=[a,b;c,d] in SL(2,Z) */
-  GEN z,Z; /* z/w2 defined mod <1,tau>, Z = z + x*tau + y reduced mod <1,tau> 
*/
+  GEN z,Z; /* z/w2 defined mod <1,tau>, Z = z/w2 + x*tau+y reduced mod 
<1,tau>*/
   GEN x,y; /* t_INT */
   int swap; /* 1 if we swapped w1 and w2 */
   int some_q_is_real; /* exp(2iPi g.tau) for some g \in SL(2,Z) */
   int some_z_is_real; /* z + xw1 + yw2 is real for some x,y \in Z */
-  int some_z_is_pure_imag; /* z + xw1 + yw2 = it, t \in R */
+  int some_z_is_pure_imag; /* z + xw1 + yw2 in i*R */
   int q_is_real; /* exp(2iPi tau) \in R */
   int abs_u_is_1; /* |exp(2iPi Z)| = 1 */
   long prec; /* precision(Z) */
@@ -1979,6 +1979,13 @@
   p = precision(T->Tau); if (!p) p = prec;
   T->prec = p;
 }
+/* is z real or pure imaginary ? */
+static void
+check_complex(GEN z, int *real, int *imag)
+{
+  if (typ(z) != t_COMPLEX) *real = 1;
+  else if (isexactzero(gel(z,1))) *imag = 1;
+}
 static void
 reduce_z(GEN z, ellred_t *T)
 {
@@ -2001,12 +2008,18 @@
   if (signe(T->x)) Z = gsub(Z, gmul(T->x,T->Tau));
   T->y = ground(real_i(Z));
   if (signe(T->y)) Z = gsub(Z, T->y);
-  if (typ(Z) != t_COMPLEX)
-    T->some_z_is_real = T->abs_u_is_1 = 1;
-  else if (typ(z) != t_COMPLEX)
-    T->some_z_is_real = 1;
-  else if (isexactzero(gel(z,1)) || isexactzero(gel(Z,1)))
-    T->some_z_is_pure_imag = 1;
+  if (typ(Z) != t_COMPLEX) T->abs_u_is_1 = 1;
+  /* Z = - y - x tau + z/W2, x,y integers */
+  check_complex(z, &(T->some_z_is_real), &(T->some_z_is_pure_imag));
+  if (!T->some_z_is_real && !T->some_z_is_pure_imag)
+  {
+    int W2real = 0, W2imag = 0;
+    check_complex(T->W2,&W2real,&W2imag);
+    if (W2real)
+      check_complex(Z, &(T->some_z_is_real), &(T->some_z_is_pure_imag));
+    else if (W2imag)
+      check_complex(Z, &(T->some_z_is_pure_imag), &(T->some_z_is_real));
+  }
   p = precision(Z);
   if (gequal0(Z) || (p && gexpo(Z) < 5 - prec2nbits(p)))
     Z = NULL; /*z in L*/
@@ -2244,12 +2257,12 @@
   u = expIxy(pi2, T.Z, prec);
   u1 = gsubsg(1,u);
   u2 = gsqr(u1); /* (1-u)^2 = -4u sin^2(Pi Z) */
-  if (gequal0(u2)) return NULL; /* possible if loss of accuracy */
+  if (gequal0(gnorm(u2))) return NULL; /* possible if loss of accuracy */
   y = gdiv(u,u2); /* -1/4(sin^2(Pi Z)) */
   if (T.abs_u_is_1) y = real_i(y);
   simple_case = T.abs_u_is_1 && T.q_is_real;
   y = gadd(mkfrac(gen_1, utoipos(12)), y);
-  yp = flall? gdiv(gaddsg(1,u), gmul(u1,u2)): NULL;
+  yp = flall? gen_0: NULL;
   toadd = (long)ceil(get_toadd(T.Z));
 
   av1 = avma; lim = stack_lim(av1,1); qn = q;
@@ -2261,12 +2274,8 @@
     GEN a = gsubsg(1,qnu);/* 1 - q^n u */
     GEN a2 = gsqr(a);     /* (1 - q^n u)^2 */
     if (yp) ypadd = gdiv(gaddsg(1,qnu),gmul(a,a2));
-    if (simple_case)
-    { /* conj(u) = 1/u: formula simplifies */
-      yadd = gdiv(u, a2);
-      yadd = gmul2n(real_i(yadd), 1);
-      if (yp) ypadd = gmul2n(real_i(ypadd), 1);
-    }
+    if (simple_case) /* conj(u) = 1/u: formula simplifies */
+      yadd = gmul2n(real_i(gdiv(u,a2)), 1);
     else
     {
       GEN b = gsub(qn,u);/* q^n - u */
@@ -2286,6 +2295,11 @@
       gerepileall(av1, flall? 3: 2, &y, &qn, &yp);
     }
   }
+  if (yp)
+  {
+    if (simple_case) yp = gsub(yp, gconj(gmul(yp,gsqr(u))));
+    yp = gadd(yp, gdiv(gaddsg(1,u), gmul(u1,u2)));
+  }
 
   u1 = gdiv(pi2, mulcxmI(T.W2));
   u2 = gsqr(u1);
@@ -2295,7 +2309,11 @@
   if (yp)
   {
     yp = gmul(u, gmul(gmul(u1,u2),yp));/* yp *= u (2i pi / w2)^3 */
-    if (T.some_q_is_real && T.some_z_is_real) yp = real_i(yp);
+    if (T.some_q_is_real)
+    {
+      if (T.some_z_is_real) yp = real_i(yp);
+      else if (T.some_z_is_pure_imag) yp = mkcomplex(gen_0, imag_i(yp));
+    }
     y = mkvec2(y, gmul2n(yp,-1));
   }
   return gerepilecopy(av, y);
@@ -2471,10 +2489,8 @@
   if (et) y = gadd(y,et);
   if (T.some_q_is_real)
   {
-    if (T.some_z_is_real)
-      y = real_i(y);
-    else if (T.some_z_is_pure_imag)
-      gel(y,1) = gen_0;
+    if (T.some_z_is_real) y = real_i(y);
+    else if (T.some_z_is_pure_imag) gel(y,1) = gen_0;
   }
   return gerepilecopy(av, y);
 }
@@ -2567,10 +2583,8 @@
     y = gmul(y, gexp(y1,prec));
     if (T.some_q_is_real)
     {
-      if (T.some_z_is_real)
-        y = real_i(y);
-      else if (T.some_z_is_pure_imag)
-        gel(y,1) = gen_0;
+      if (T.some_z_is_real) y = real_i(y);
+      else if (T.some_z_is_pure_imag) gel(y,1) = gen_0;
     }
   }
   return gerepilecopy(av, y);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/basemath/gen2.c 
new/pari-2.7.6/src/basemath/gen2.c
--- old/pari-2.7.5/src/basemath/gen2.c  2015-09-06 13:02:32.000000000 +0200
+++ new/pari-2.7.6/src/basemath/gen2.c  2016-05-31 17:21:24.000000000 +0200
@@ -299,12 +299,12 @@
       {
         if (gequal0(gel(x,2))) return 1;
         if (typ(gel(x,1))!=t_REAL || typ(gel(x,2))!=t_REAL) return 0;
-        return (expo(gel(x,1))>expo(gel(x,2)));
+        return (expo(gel(x,1))>=expo(gel(x,2)));
       }
       if (gequal0(gel(x,2)))
       {
         if (typ(gel(x,1))!=t_REAL || typ(gel(x,2))!=t_REAL) return 0;
-        return (expo(gel(x,2))>expo(gel(x,1)));
+        return (expo(gel(x,2))>=expo(gel(x,1)));
       }
       return 0;
 
@@ -908,7 +908,15 @@
 serequal(GEN x, GEN y)
 {
   long lx;
-  if ((x[1] ^ y[1]) & (VARNBITS | SIGNBITS | VALPBITS)) return 0;
+  if (varn(x) != varn(y)) return 0;
+  if (!signe(x))
+  {
+    if (!signe(y)) return 1;
+    return valp(y) >= valp(x);
+  }
+  if (!signe(y))
+    return valp(x) >= valp(y);
+  if ((x[1] ^ y[1]) & VALPBITS) return 0;
   lx = minss(lg(x), lg(y));
   for (lx--; lx >= 2; lx--) if (!gequal(gel(x,lx), gel(y,lx))) return 0;
   return 1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/basemath/hnf_snf.c 
new/pari-2.7.6/src/basemath/hnf_snf.c
--- old/pari-2.7.5/src/basemath/hnf_snf.c       2014-10-01 16:57:38.000000000 
+0200
+++ new/pari-2.7.6/src/basemath/hnf_snf.c       2016-05-31 17:10:23.000000000 
+0200
@@ -1954,7 +1954,7 @@
   long n = lg(A)-1, m, i, k;
   GEN u, r;
 
-  if (!n) return NULL;
+  if (!n) return lg(b)==1? cgetg(1,t_COL):NULL;
   m = nbrows(A); /* m >= n */
   u = cgetg(n+1, t_COL);
   for (i = n, k = m; k > 0; k--)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/basemath/nffactor.c 
new/pari-2.7.6/src/basemath/nffactor.c
--- old/pari-2.7.5/src/basemath/nffactor.c      2015-04-29 19:32:49.000000000 
+0200
+++ new/pari-2.7.6/src/basemath/nffactor.c      2016-05-31 17:21:24.000000000 
+0200
@@ -2089,19 +2089,33 @@
   for (i = 1; i < l; i++)
   {
     long p = LP[i];
-    /* Cheap test: can Q(zeta_{2p}) be a subset of K ? */
+    /* Degree and ramification test: find largest k such that Q(zeta_{p^k})
+     * may be a subfield of K. Q(zeta_p^k) has degree (p-1)p^(k-1)
+     * and v_p(discriminant) = ((p-1)k-1)p^(k-1); so we must have
+     * v_p(disc_K) >= ((p-1)k-1) * n / (p-1) = kn - q, where q = n/(p-1) */
     if (p == 2)
-    { /* 2 | n and v_p(disc K) >= n/2 ? */
+    { /* the test simplifies a little in that case */
+      long v, vnf, k;
       if (LE[i] == 1) continue;
-      if (!odd(nfdegree) && vali(disc) >= nfdegree / 2) continue;
+      vnf = vals(nfdegree);
+      v = vali(disc);
+      for (k = minss(LE[i], vnf+1); k >= 1; k--)
+        if (v >= nfdegree*(k-1)) { nbguessed >>= LE[i]-k; LE[i] = k; break; }
+      /* N.B the test above always works for k = 1: LE[i] >= 1 */
     }
     else
-    { /* p-1 | n and v_p(disc K) >= (p-2) n/(p-1) ? */
+    {
+      long v, vnf, k;
       ulong r, q = udivuu_rem(nfdegree, p-1, &r);
-      if (r == 0 && (ulong)Z_lval(disc, p) >= q * (p-2)) continue;
+      if (r) { nbguessed /= upowuu(p, LE[i]); LE[i] = 0; continue; }
+      /* q = n/(p-1) */
+      vnf = u_lval(q, p);
+      v = Z_lval(disc, p);
+      for (k = minss(LE[i], vnf+1); k >= 0; k--)
+        if (v >= nfdegree*k-(long)q)
+        { nbguessed /= upowuu(p, LE[i]-k); LE[i] = k; break; }
+      /* N.B the test above always works for k = 0: LE[i] >= 0 */
     }
-    nbguessed /= upowuu(p, LE[i]);
-    LE[i] = 0;
   }
   if (DEBUGLEVEL>2)
     timer_printf(&ti, "after ramification conditions [guess = %ld]", 
nbguessed);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/basemath/polarit2.c 
new/pari-2.7.6/src/basemath/polarit2.c
--- old/pari-2.7.5/src/basemath/polarit2.c      2014-10-05 12:06:24.000000000 
+0200
+++ new/pari-2.7.6/src/basemath/polarit2.c      2016-05-31 17:10:23.000000000 
+0200
@@ -494,7 +494,7 @@
     exp &= 3;
   }
   if (j > 1) {
-    long k = 1;;
+    long k = 1;
     GEN P1 = cgetg(l, t_COL);
     GEN E1 = cgetg(l, t_COL);
     /* remove factors with exponent 0 */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/basemath/rootpol.c 
new/pari-2.7.6/src/basemath/rootpol.c
--- old/pari-2.7.5/src/basemath/rootpol.c       2015-04-23 17:25:59.000000000 
+0200
+++ new/pari-2.7.6/src/basemath/rootpol.c       2016-04-26 18:46:24.000000000 
+0200
@@ -657,7 +657,7 @@
 static double
 logmax_modulus(GEN p, double tau)
 {
-  GEN r,q,aux,gunr;
+  GEN r, q, aux, gunr;
   pari_sp av, ltop = avma;
   long i,k,n=degpol(p),nn,bit,M,e;
   double rho,eps, tau2 = (tau > 3.0)? 0.5: tau/6.;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/basemath/trans1.c 
new/pari-2.7.6/src/basemath/trans1.c
--- old/pari-2.7.5/src/basemath/trans1.c        2015-09-02 20:01:02.000000000 
+0200
+++ new/pari-2.7.6/src/basemath/trans1.c        2016-05-31 17:10:23.000000000 
+0200
@@ -1330,6 +1330,9 @@
 
   switch(typ(x))
   {
+    case t_INT:
+      if (!signe(x)) return real_0(prec); /* no loss of accuracy */
+      x = itor(x,prec); /* fall through */
     case t_REAL: return sqrtr(x);
 
     case t_INTMOD:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/funclist new/pari-2.7.6/src/funclist
--- old/pari-2.7.5/src/funclist 2015-10-07 18:45:49.000000000 +0200
+++ new/pari-2.7.6/src/funclist 2016-05-31 17:27:46.000000000 +0200
@@ -1,7 +1,7 @@
 1557685643 1558 ../functions/conversions/Col
 3234299882 400 ../functions/conversions/Colrev
 4195552700 684 ../functions/conversions/List
-981428093 924 ../functions/conversions/Mat
+919990366 994 ../functions/conversions/Mat
 2678939693 1487 ../functions/conversions/Mod
 3703587249 1772 ../functions/conversions/Pol
 812817715 914 ../functions/conversions/Polrev
@@ -682,7 +682,7 @@
 2733156182 394 ../functions/programming/readstr
 2278186691 967 ../functions/programming/readvec
 1182439920 287 ../functions/programming/return
-1550019273 2768 ../functions/programming/select
+1979737947 2773 ../functions/programming/select
 3452942428 504 ../functions/programming/setrand
 3720197410 447 ../functions/programming/system
 3717803513 2317 ../functions/programming/trap
@@ -815,7 +815,7 @@
 2704877408 133 ../functions/transcendental/sinh
 473305427 963 ../functions/transcendental/sqr
 685184966 819 ../functions/transcendental/sqrt
-213571604 1522 ../functions/transcendental/sqrtn
+215829221 1523 ../functions/transcendental/sqrtn
 1255385460 114 ../functions/transcendental/tan
 1579606196 139 ../functions/transcendental/tanh
 4246144284 278 ../functions/transcendental/teichmuller
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/functions/conversions/Mat 
new/pari-2.7.6/src/functions/conversions/Mat
--- old/pari-2.7.5/src/functions/conversions/Mat        2011-09-22 
22:02:11.000000000 +0200
+++ new/pari-2.7.6/src/functions/conversions/Mat        2016-04-26 
19:37:59.000000000 +0200
@@ -4,6 +4,9 @@
 Prototype: DG
 Help: Mat({x=[]}): transforms any GEN x into a matrix. Empty matrix if x is
  omitted.
+Description:
+ ():vec        cgetg(1, t_MAT)
+ (gen):vec     gtomat($1)
 Doc:
  transforms the object $x$ into a matrix.
  If $x$ is already a matrix, a copy of $x$ is created.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/functions/programming/select 
new/pari-2.7.6/src/functions/programming/select
--- old/pari-2.7.5/src/functions/programming/select     2014-10-01 
16:57:39.000000000 +0200
+++ new/pari-2.7.6/src/functions/programming/select     2016-04-26 
19:33:08.000000000 +0200
@@ -9,7 +9,7 @@
 Description:
   (gen,gen):gen    genselect(${1 cookie}, ${1 wrapper}, $2)
   (gen,gen,0):gen  genselect(${1 cookie}, ${1 wrapper}, $2)
-  (gen,gen,1):gen  genindexselect(${1 cookie}, ${1 wrapper}, $2)
+  (gen,gen,1):vecsmall  genindexselect(${1 cookie}, ${1 wrapper}, $2)
 Doc: We first describe the default behavior, when $\fl$ is 0 or omitted.
  Given a vector or list \kbd{A} and a \typ{CLOSURE} \kbd{f}, \kbd{select}
  returns the elements $x$ of \kbd{A} such that $f(x)$ is non-zero. In other
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/functions/transcendental/sqrtn 
new/pari-2.7.6/src/functions/transcendental/sqrtn
--- old/pari-2.7.5/src/functions/transcendental/sqrtn   2014-03-25 
09:59:21.000000000 +0100
+++ new/pari-2.7.6/src/functions/transcendental/sqrtn   2016-05-31 
17:27:28.000000000 +0200
@@ -6,16 +6,16 @@
  set to a suitable root of unity to recover all solutions. If it was not
  possible, z is set to zero.
 Doc: principal branch of the $n$th root of $x$,
- i.e.~such that $\text{Arg}(\text{sqrt}(x))\in{} ]-\pi/n, \pi/n]$. Intmod
+ i.e.~such that $\text{Arg}(\text{sqrtn}(x))\in{} ]-\pi/n, \pi/n]$. Intmod
  a prime and $p$-adics are allowed as arguments.
 
  If $z$ is present, it is set to a suitable root of unity allowing to
  recover all the other roots. If it was not possible, z is
- set to zero. In the case this argument is present and no square root exist,
- $0$ is returned instead or raising an error.
+ set to zero. In the case this argument is present and no $n$th root exist,
+ $0$ is returned instead of raising an error.
  \bprog
  ? sqrtn(Mod(2,7), 2)
- %1 = Mod(4, 7)
+ %1 = Mod(3, 7)
  ? sqrtn(Mod(2,7), 2, &z); z
  %2 = Mod(6, 7)
  ? sqrtn(Mod(2,7), 3)
@@ -44,4 +44,4 @@
  addhelp(sqrtnall,"sqrtnall(x,n):compute the vector of nth-roots of x");
  @eprog\noindent
 Variant: If $x$ is a \typ{PADIC}, the function
- \fun{GEN}{Qp_sqrt}{GEN x, GEN n, GEN *z} is also available.
+ \fun{GEN}{Qp_sqrtn}{GEN x, GEN n, GEN *z} is also available.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/gp/gp.c new/pari-2.7.6/src/gp/gp.c
--- old/pari-2.7.5/src/gp/gp.c  2015-06-02 16:03:57.000000000 +0200
+++ new/pari-2.7.6/src/gp/gp.c  2016-06-01 13:55:45.000000000 +0200
@@ -867,7 +867,7 @@
 #endif
   print_version();
   pari_putc('\n');
-  center("Copyright (C) 2000-2015 The PARI Group");
+  center("Copyright (C) 2000-2016 The PARI Group");
   pari_putc('\n');
   print_text("PARI/GP is free software, covered by the GNU General Public \
 License, and comes WITHOUT ANY WARRANTY WHATSOEVER.");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/language/eval.c 
new/pari-2.7.6/src/language/eval.c
--- old/pari-2.7.5/src/language/eval.c  2014-10-09 15:30:58.000000000 +0200
+++ new/pari-2.7.6/src/language/eval.c  2016-05-31 17:10:23.000000000 +0200
@@ -2120,7 +2120,7 @@
       if (lg(x)==8) gen_relink(closure_get_frame(x), table);
       break;
     case t_LIST:
-      gen_relink(list_data(x), table);
+      if (list_data(x)) gen_relink(list_data(x), table);
       break;
     case t_VEC: case t_COL: case t_MAT: case t_ERROR:
       lx = lg(x);
@@ -2162,7 +2162,7 @@
       if (lg(x)==8) gen_unlink(closure_get_frame(x));
       break;
     case t_LIST:
-      gen_unlink(list_data(x));
+      if (list_data(x)) gen_unlink(list_data(x));
       break;
     case t_VEC: case t_COL: case t_MAT: case t_ERROR:
       lx = lg(x);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/language/init.c 
new/pari-2.7.6/src/language/init.c
--- old/pari-2.7.5/src/language/init.c  2015-06-02 16:03:57.000000000 +0200
+++ new/pari-2.7.6/src/language/init.c  2016-05-31 17:10:23.000000000 +0200
@@ -812,6 +812,8 @@
     if (GP_DATA->pp->cmd) free((void*)GP_DATA->pp->cmd);
     delete_dirs(GP_DATA->path);
     free((void*)GP_DATA->path->PATH);
+    delete_dirs(GP_DATA->sopath);
+    free((void*)GP_DATA->sopath->PATH);
   }
   BLOCK_SIGINT_END;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/language/members.c 
new/pari-2.7.6/src/language/members.c
--- old/pari-2.7.5/src/language/members.c       2014-09-15 13:32:55.000000000 
+0200
+++ new/pari-2.7.6/src/language/members.c       2016-04-26 18:37:48.000000000 
+0200
@@ -254,7 +254,7 @@
   T = gel(y,4);
   D = absi(nf_get_disc(nf));
   DinvT = ZM_inv(T,D);
-  return gdiv(ZM_hnfmod(DinvT, D), D);
+  return gdiv(ZM_hnfmodid(DinvT, D), D);
 }
 
 GEN
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/language/sumiter.c 
new/pari-2.7.6/src/language/sumiter.c
--- old/pari-2.7.5/src/language/sumiter.c       2015-09-02 19:50:39.000000000 
+0200
+++ new/pari-2.7.6/src/language/sumiter.c       2016-05-31 17:10:23.000000000 
+0200
@@ -145,7 +145,7 @@
   GEN v = NULL;
   int (*cmp)(GEN,GEN);
 
-  b = gcopy(b); av=avma; lim = stack_lim(av,1);
+  b = gcopy(b); s = gcopy(s); av=avma; lim = stack_lim(av,1);
   push_lex(a,code);
   if (is_vec_t(typ(s)))
   {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/modules/ellsea.c 
new/pari-2.7.6/src/modules/ellsea.c
--- old/pari-2.7.5/src/modules/ellsea.c 2014-10-05 12:26:22.000000000 +0200
+++ new/pari-2.7.6/src/modules/ellsea.c 2016-05-31 17:36:25.000000000 +0200
@@ -1466,7 +1466,7 @@
       long t_mod_ellkt = trace_mod[1];
       if (smallfact && ell > smallfact)
       { /* does ell divide q + 1 - t ? */
-        long card_mod_ell = (umodiu(q,ell) + 1 - t_mod_ellkt) % ell ;
+        long card_mod_ell = smodss(umodiu(q,ell) + 1 - t_mod_ellkt, ell) ;
         if (!card_mod_ell)
         {
           if (DEBUGLEVEL)
@@ -1532,5 +1532,5 @@
   GEN a6 = modii(mulis(Rg_to_Fp(gel(E,11), p), -54), p);
   GEN card = Fp_ellcard_SEA(a4, a6, p, smallfact);
   if (!card) pari_err_PACKAGE("seadata");
-  return gerepileuptoint(av, subii(addis(p,1),card));
+  return gerepileuptoint(av, card);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/mt/mpi.c new/pari-2.7.6/src/mt/mpi.c
--- old/pari-2.7.5/src/mt/mpi.c 2014-11-26 23:37:24.000000000 +0100
+++ new/pari-2.7.6/src/mt/mpi.c 2016-05-31 17:10:23.000000000 +0200
@@ -10,10 +10,10 @@
 Check the License for details. You should have received a copy of it, along
 with the package; see the file 'COPYING'. If not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 
*/
+#include <mpi.h>
 #include "pari.h"
 #include "paripriv.h"
 #include "mt.h"
-#include <mpi.h>
 
 static THREAD int pari_MPI_size, pari_MPI_rank;
 static THREAD long nbreq = 0;
@@ -35,7 +35,9 @@
 static void
 send_long(long a, long dest)
 {
+  BLOCK_SIGINT_START
   MPI_Send(&a, 1, MPI_LONG, dest, 0, MPI_COMM_WORLD);
+  BLOCK_SIGINT_END
 }
 
 static void
@@ -52,7 +54,11 @@
   GEN reloc = copybin_unlink(elt);
   GENbin *buf = copy_bin(mkvec2(elt,reloc));
   size = sizeof(GENbin) + buf->len*sizeof(ulong);
-  MPI_Send(buf, size, MPI_CHAR, dest, 0, MPI_COMM_WORLD);
+  {
+    BLOCK_SIGINT_START
+    MPI_Send(buf, size, MPI_CHAR, dest, 0, MPI_COMM_WORLD);
+    BLOCK_SIGINT_END
+  }
   pari_free(buf); avma = av;
 }
 
@@ -74,7 +80,9 @@
 recvfrom_long(int src)
 {
   long a;
+  BLOCK_SIGINT_START
   MPI_Recv(&a, 1, MPI_LONG, src, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+  BLOCK_SIGINT_END
   return a;
 }
 
@@ -89,11 +97,13 @@
 {
   int size;
   GENbin *buf;
+  BLOCK_SIGINT_START
 
   MPI_Get_count(status, MPI_CHAR, &size);
   buf = (GENbin *)pari_malloc(size);
   MPI_Recv(buf, size, MPI_CHAR, source, 0/* tag */,
           MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+  BLOCK_SIGINT_END
   return buf;
 }
 
@@ -117,7 +127,9 @@
 recvfrom_GEN(int src)
 {
   MPI_Status status;
+  BLOCK_SIGINT_START
   MPI_Probe(src, 0, MPI_COMM_WORLD, &status);
+  BLOCK_SIGINT_END
   return recvstatus_GEN(src, &status);
 }
 
@@ -125,8 +137,10 @@
 recvany_GEN(int *source)
 {
   MPI_Status status;
+  BLOCK_SIGINT_START
   MPI_Probe(MPI_ANY_SOURCE, 0 /* tag */, MPI_COMM_WORLD, &status);
   *source = status.MPI_SOURCE;
+  BLOCK_SIGINT_END
   return recvstatus_GEN(*source, &status);
 }
 
@@ -134,8 +148,10 @@
 recvany_void(int *source)
 {
   MPI_Status status;
+  BLOCK_SIGINT_START
   MPI_Probe(MPI_ANY_SOURCE, 0 /* tag */, MPI_COMM_WORLD, &status);
   *source = status.MPI_SOURCE;
+  BLOCK_SIGINT_END
   recvstatus_void(*source, &status);
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/mt/pthread.c 
new/pari-2.7.6/src/mt/pthread.c
--- old/pari-2.7.5/src/mt/pthread.c     2014-11-26 23:37:24.000000000 +0100
+++ new/pari-2.7.6/src/mt/pthread.c     2016-05-31 17:10:23.000000000 +0200
@@ -10,10 +10,10 @@
 Check the License for details. You should have received a copy of it, along
 with the package; see the file 'COPYING'. If not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 
*/
+#include <pthread.h>
 #include "pari.h"
 #include "paripriv.h"
 #include "mt.h"
-#include <pthread.h>
 
 struct mt_queue
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/32/bnr 
new/pari-2.7.6/src/test/32/bnr
--- old/pari-2.7.5/src/test/32/bnr      2015-09-08 14:10:09.000000000 +0200
+++ new/pari-2.7.6/src/test/32/bnr      2016-05-31 17:10:23.000000000 +0200
@@ -43,4 +43,9 @@
 1
 [4, [2, 2], [[3, 1; 0, 1], [114, 1; 0, 1]]]
 [[1, 0, 0; 0, 1, 0; 0, 0, 1], [0]]
-Total time spent: 20
+[2, 2, 5]
+[1, 2, [1, 0; 0, 1]]
+0
+0
+[2, 2, 5]
+Total time spent: 32
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/32/ell 
new/pari-2.7.6/src/test/32/ell
--- old/pari-2.7.5/src/test/32/ell      2015-01-17 13:47:03.000000000 +0100
+++ new/pari-2.7.6/src/test/32/ell      2016-05-31 17:10:23.000000000 +0200
@@ -126,6 +126,11 @@
 ^8 + 2^9 + O(2^11))), 2^3 + 2^4 + O(2^8), [2^-3 + 2^2 + 2^4 + 2^7 + 2^10 + O
 (2^11), 2^-3 + 2^2 + 2^5 + 2^6 + 2^10 + O(2^13)]]
 x^-2 + 31/15*x^2 + 2501/756*x^4 + 961/675*x^6 + 77531/41580*x^8 + O(x^9)
+[5.0000000000000000000000000000000000000, 4.99999999999999999999999999999999
+99998]
+[0]
+[-1.2137559863387746413172077159498331998, -0.757861263970860955134912630669
+68406624*I]
 [-1, -2*w]
 [I, 1]
 [[I, 1], [-3.1415926535897932384626433832795028842*I, 3.14159265358979323846
@@ -280,7 +285,7 @@
 [16, [8, 2], [[117433600, 6734213027200], [352179456, -176089728]]]
 [4, [2, 2], [[-1377493124511464657, 0], [-691668349248679055, 0]]]
 [0.49999999999999999999999999999999999978 - 2.057115114 E-38*I, 1.9216402159
-513147090074725264936203858 + 0.26019438802828824617801390769760176484*I]
+513147090074725264936203858 + 0.26019438802828824617801390769760176483*I]
 3 + 11^2 + 2*11^3 + 3*11^4 + O(11^5)
 Mod((2 + 3 + O(3^4))*u + (2*3 + 3^2 + O(3^4)), u^2 + (1 + 3 + 2*3^4 + 3^8 + 
 2*3^9 + O(3^10)))
@@ -396,4 +401,4 @@
 13 + O(x^17)
 -52760
 -52832
-Total time spent: 1048
+Total time spent: 1084
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/32/ispower 
new/pari-2.7.6/src/test/32/ispower
--- old/pari-2.7.5/src/test/32/ispower  2015-05-19 19:34:39.000000000 +0200
+++ new/pari-2.7.6/src/test/32/ispower  2016-05-31 17:10:23.000000000 +0200
@@ -1199,4 +1199,5 @@
 187
 1
 5
-Total time spent: 2796
+51
+Total time spent: 3032
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/32/iterator 
new/pari-2.7.6/src/test/32/iterator
--- old/pari-2.7.5/src/test/32/iterator 2014-03-25 09:59:21.000000000 +0100
+++ new/pari-2.7.6/src/test/32/iterator 2016-05-31 17:10:23.000000000 +0200
@@ -1,3 +1,32 @@
+18446744073709551614
+18446744073709551615
+18446744073709551616
+18446744073709551617
+18446744073709551618
+-18446744073709551618
+-18446744073709551617
+-18446744073709551616
+-18446744073709551615
+-18446744073709551614
+4294967279
+4294967291
+4294967311
+18446744073709551557
+18446744073709551629
+18446744073709551653
+0.50000000000000000000000000000000000000
+1.5000000000000000000000000000000000000
+2.5000000000000000000000000000000000000
+3
+6
+9
+12
+5 3 1 
+1 2 5 6 9 10 
+210
+  ***   at top-level: forprime(p=2,10,p=4)
+  ***                                   ^--
+  ***   prime index read-only: was changed to 4.
 4
 6
 8
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/32/mat 
new/pari-2.7.6/src/test/32/mat
--- old/pari-2.7.5/src/test/32/mat      2015-01-17 14:50:24.000000000 +0100
+++ new/pari-2.7.6/src/test/32/mat      2016-05-31 17:10:23.000000000 +0200
@@ -360,4 +360,40 @@
 0
 2
 17
-Total time spent: 72
+  ***   at top-level: vecsum(1)
+  ***                 ^---------
+  *** vecsum: incorrect type in vecsum (t_INT).
+  ***   at top-level: 1~
+  ***                 ^--
+  *** _~: incorrect type in gtrans (t_INT).
+
+[1 0 0]
+
+[0 0 1]
+
+
+[1 0 0]
+
+[0 0 1]
+
+
+[1 0 0]
+
+[0 0 1]
+
+
+[1 0]
+
+[1 0]
+
+
+[1 2]
+
+[0 1]
+
+
+[1 2]
+
+[3 4]
+
+Total time spent: 40
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/32/member 
new/pari-2.7.6/src/test/32/member
--- old/pari-2.7.5/src/test/32/member   2015-01-17 13:47:03.000000000 +0100
+++ new/pari-2.7.6/src/test/32/member   2016-04-26 18:37:48.000000000 +0200
@@ -316,4 +316,11 @@
 .mod: [[4, 1; 0, 1], [0, 0]]
 .no: 2
 .zkst: [2, [2]]
-Total time spent: 48
+
+[1/3   0   0]
+
+[  0 1/6   0]
+
+[  0   0 1/6]
+
+Total time spent: 60
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/32/nfrootsof1 
new/pari-2.7.6/src/test/32/nfrootsof1
--- old/pari-2.7.5/src/test/32/nfrootsof1       2011-09-22 22:02:11.000000000 
+0200
+++ new/pari-2.7.6/src/test/32/nfrootsof1       2016-04-26 18:43:11.000000000 
+0200
@@ -5,4 +5,6 @@
 2
 2
 2
-Total time spent: 58691
+68
+170
+Total time spent: 17688
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/32/parallel 
new/pari-2.7.6/src/test/32/parallel
--- old/pari-2.7.5/src/test/32/parallel 2014-07-30 15:38:47.000000000 +0200
+++ new/pari-2.7.6/src/test/32/parallel 2016-05-31 17:10:23.000000000 +0200
@@ -20,4 +20,6 @@
 7432339208719
 7432339208719
 [75, 85070591730234615858594180193637120807]
-Total time spent: 23517
+4037913
+122000794103870768
+Total time spent: 17861
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/32/ser 
new/pari-2.7.6/src/test/32/ser
--- old/pari-2.7.5/src/test/32/ser      2015-09-27 01:11:11.000000000 +0200
+++ new/pari-2.7.6/src/test/32/ser      2016-04-26 18:33:45.000000000 +0200
@@ -48,4 +48,9 @@
   ***   at top-level: Ser("")
   ***                 ^-------
   *** Ser: incorrect type in gtoser (t_STR).
+1 + O(y)
+1 + y^2 + O(y^4)
+1
+1
+0
 Total time spent: 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/32/sqrtn 
new/pari-2.7.6/src/test/32/sqrtn
--- old/pari-2.7.5/src/test/32/sqrtn    2014-07-30 15:38:47.000000000 +0200
+++ new/pari-2.7.6/src/test/32/sqrtn    2016-05-31 17:10:23.000000000 +0200
@@ -1,3 +1,4 @@
+0.E-38
 0.E-12
 0.E-12 + 0.E-12*I
 0.79370052598409973737585281963615413020
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/64/bnr 
new/pari-2.7.6/src/test/64/bnr
--- old/pari-2.7.5/src/test/64/bnr      2015-09-08 14:11:15.000000000 +0200
+++ new/pari-2.7.6/src/test/64/bnr      2016-05-31 17:10:23.000000000 +0200
@@ -43,4 +43,9 @@
 1
 [4, [2, 2], [[3, 1; 0, 1], [114, 1; 0, 1]]]
 [[1, 0, 0; 0, 1, 0; 0, 0, 1], [0]]
-Total time spent: 20
+[2, 2, 5]
+[1, 2, [1, 0; 0, 1]]
+0
+0
+[2, 2, 5]
+Total time spent: 24
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/64/ell 
new/pari-2.7.6/src/test/64/ell
--- old/pari-2.7.5/src/test/64/ell      2014-11-23 00:14:45.000000000 +0100
+++ new/pari-2.7.6/src/test/64/ell      2016-05-31 17:10:23.000000000 +0200
@@ -126,6 +126,11 @@
 ^8 + 2^9 + O(2^11))), 2^3 + 2^4 + O(2^8), [2^-3 + 2^2 + 2^4 + 2^7 + 2^10 + O
 (2^11), 2^-3 + 2^2 + 2^5 + 2^6 + 2^10 + O(2^13)]]
 x^-2 + 31/15*x^2 + 2501/756*x^4 + 961/675*x^6 + 77531/41580*x^8 + O(x^9)
+[5.0000000000000000000000000000000000000, 4.99999999999999999999999999999999
+99998]
+[0]
+[-1.2137559863387746413172077159498331998, -0.757861263970860955134912630669
+68406624*I]
 [-1, -2*w]
 [I, 1]
 [[I, 1], [-3.1415926535897932384626433832795028842*I, 3.14159265358979323846
@@ -287,7 +292,7 @@
 [4, [2, 2], [[-1377493124511464657, 0], [-691668349248679055, 0]]]
 [0.49999999999999999999999999999999999978 - 2.0571151139390031389 E-38*I, 1.
 9216402159513147090074725264936203858 + 0.2601943880282882461780139076976017
-6484*I]
+6483*I]
 3 + 11^2 + 2*11^3 + 3*11^4 + O(11^5)
 Mod((2 + 3 + O(3^4))*u + (2*3 + 3^2 + O(3^4)), u^2 + (1 + 3 + 2*3^4 + 3^8 + 
 2*3^9 + O(3^10)))
@@ -403,4 +408,4 @@
 13 + O(x^17)
 -52760
 -52832
-Total time spent: 580
+Total time spent: 560
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/64/member 
new/pari-2.7.6/src/test/64/member
--- old/pari-2.7.5/src/test/64/member   2014-09-15 13:32:55.000000000 +0200
+++ new/pari-2.7.6/src/test/64/member   2016-04-26 18:37:48.000000000 +0200
@@ -316,4 +316,11 @@
 .mod: [[4, 1; 0, 1], [0, 0]]
 .no: 2
 .zkst: [2, [2]]
-Total time spent: 48
+
+[1/3   0   0]
+
+[  0 1/6   0]
+
+[  0   0 1/6]
+
+Total time spent: 32
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/in/bnr 
new/pari-2.7.6/src/test/in/bnr
--- old/pari-2.7.5/src/test/in/bnr      2015-09-08 14:10:09.000000000 +0200
+++ new/pari-2.7.6/src/test/in/bnr      2016-05-31 17:10:23.000000000 +0200
@@ -51,3 +51,12 @@
 
 bnfnarrow(bnfinit(x^2-460))
 bnrconductor(bnfinit(K),4,Mat(3))
+
+\\#1804
+K=bnfinit(y^2-5);
+bnr = bnrinit(K,[1,[1,1]]);
+bnrdisc(bnr)
+bnrdisc(bnr,,,1)
+bnrdisc(bnr,,,2)
+bnrdisc(K,[1,[1,0]],,2)
+bnrdisc(K,[1,[0,0]],,2)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/in/ell 
new/pari-2.7.6/src/test/in/ell
--- old/pari-2.7.5/src/test/in/ell      2015-01-17 13:47:03.000000000 +0100
+++ new/pari-2.7.6/src/test/in/ell      2016-05-31 17:10:23.000000000 +0200
@@ -113,8 +113,19 @@
 e = ellinit(ellfromj(11/8),  O(2^5));
 e.tate
 
+e = ellinit([0,-1,1,-10,-20]);
 \\#1185
-ellwp(ellinit([0,-1,1,-10,-20]),x+O(x^12))
+ellwp(e,x+O(x^12))
+\\#1683
+ellztopoint(e,3*e.omega[1]/5)
+
+\\#1683
+e = ellinit([1,1,0,-1740,22184]);
+z=-3.0059315873096303229151114945365166621 + 0.E-36*I/2;
+ellztopoint(e,z)
+
+\\#1800
+ellztopoint(ellinit([-1,0]), I)
 
 \\#1186
 ellmul(ellinit([3,0]), [1,2], -quadgen(-4))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/in/ispower 
new/pari-2.7.6/src/test/in/ispower
--- old/pari-2.7.5/src/test/in/ispower  2015-05-19 19:34:24.000000000 +0200
+++ new/pari-2.7.6/src/test/in/ispower  2016-05-31 17:10:23.000000000 +0200
@@ -124,3 +124,5 @@
 
 \\#1703
 ispower(-167^10)
+\\#1782
+isprimepower(30011^(17*3))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/in/iterator 
new/pari-2.7.6/src/test/in/iterator
--- old/pari-2.7.5/src/test/in/iterator 2014-03-25 09:59:21.000000000 +0100
+++ new/pari-2.7.6/src/test/in/iterator 2016-05-31 17:10:23.000000000 +0200
@@ -1,3 +1,20 @@
+default(realprecision,38);
+N = 1<<64;
+for(a=N-2, N+2, print(a))
+for(a=-N-2, -N+2, print(a))
+
+forprime(p=2^32-50,2^32+30,print(p))
+forprime(p=2^64-70,2^64+50,print(p))
+
+for(a=0.5,3,print(a))
+for(a=1,10, print(a+=2))
+
+forstep(a=5,1,-2,print1(a," "))
+forstep(a=1,10,[1,3],print1(a," "))
+my(s=1,a=0);forstep(i=1,20,s,s++;a+=i);a
+
+forprime(p=2,10,p=4)
+
 forcomposite(a=2,10,print(a))
 forcomposite(a=5,11,print(a))
 forcomposite(a=6,12,print(a))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/in/mat 
new/pari-2.7.6/src/test/in/mat
--- old/pari-2.7.5/src/test/in/mat      2015-01-17 14:48:24.000000000 +0100
+++ new/pari-2.7.6/src/test/in/mat      2016-05-31 17:10:23.000000000 +0200
@@ -94,3 +94,13 @@
 vecsum([])
 vecsum([2])
 vecsum(primes(4))
+vecsum(1)
+1~
+
+m=[1,0;0,0;0,1]; b=[1,2;0,0;3,4];
+liftint(Mod(m,2)^(-1))
+liftint(Mod(m,3)^(-1))
+liftint(Mod(m,2^64+13)^(-1))
+liftint(matsolve(Mod(m,2),b))
+liftint(matsolve(Mod(m,3),b))
+liftint(matsolve(Mod(m,2^64+13),b))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/in/member 
new/pari-2.7.6/src/test/in/member
--- old/pari-2.7.5/src/test/in/member   2014-09-15 13:32:55.000000000 +0200
+++ new/pari-2.7.6/src/test/in/member   2016-04-26 18:37:48.000000000 +0200
@@ -88,3 +88,4 @@
 A=idealpow(NF,P,2);
 print("BID"); test(idealstar(NF,A,2))
 print("BID (nogen)"); test(idealstar(NF,idealpow(NF,A,1)))
+nfinit(y^3-2).codiff
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/in/nfrootsof1 
new/pari-2.7.6/src/test/in/nfrootsof1
--- old/pari-2.7.5/src/test/in/nfrootsof1       2011-09-22 22:02:11.000000000 
+0200
+++ new/pari-2.7.6/src/test/in/nfrootsof1       2016-04-26 18:43:11.000000000 
+0200
@@ -7,3 +7,5 @@
 do(x^2+396735)
 do(x^2+4372152)
 do(x^2+x+99184)
+do(polcyclo(68))
+do(polcyclo(85))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/in/parallel 
new/pari-2.7.6/src/test/in/parallel
--- old/pari-2.7.5/src/test/in/parallel 2014-07-30 15:38:47.000000000 +0200
+++ new/pari-2.7.6/src/test/in/parallel 2016-05-31 17:10:23.000000000 +0200
@@ -32,3 +32,8 @@
 ellp(n)=parfirst(chkell(n),[1..10000]);
 ellp(128)
 uninline();
+
+my(N=1);until(type(A)=="t_ERROR",A=alarm(1,parfor(i=1,10,for(i=1,N,isprime(i))));N*=2);
+
+my(s,L=List());parfor(x=1,10,x!,f,s+=f);s
+my(s);parforprime(p=2,20,p!,f,s+=f);s
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/in/ser 
new/pari-2.7.6/src/test/in/ser
--- old/pari-2.7.5/src/test/in/ser      2015-09-27 01:11:11.000000000 +0200
+++ new/pari-2.7.6/src/test/in/ser      2016-04-26 18:33:45.000000000 +0200
@@ -21,3 +21,9 @@
 Ser(x+y+O(x^2),x)
 Ser(x+y+O(x^2),y)
 Ser("")
+
+subst(1+O(x),x,y)
+subst(1+x+O(x^2),x,y^2)
+O(1)==O(x)
+O(1)==x
+O(x)==1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pari-2.7.5/src/test/in/sqrtn 
new/pari-2.7.6/src/test/in/sqrtn
--- old/pari-2.7.5/src/test/in/sqrtn    2014-07-30 15:38:47.000000000 +0200
+++ new/pari-2.7.6/src/test/in/sqrtn    2016-05-31 17:10:23.000000000 +0200
@@ -1,4 +1,5 @@
 default(realprecision,38);
+sqrt(0)
 sqrtn(0.,3)
 sqrtn(0.*I,3)
 sqrtn(1/2,3)


Reply via email to