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 - jengelh@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 = = w2 <1,tau> */
GEN W1,W2,Tau; /* new basis for L = = 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
#include "pari.h"
#include "paripriv.h"
#include "mt.h"
-#include
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
#include "pari.h"
#include "paripriv.h"
#include "mt.h"
-#include
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)