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)