Karim Belabas on Sun, 23 Dec 2007 20:59:35 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

pari-2.4.2 (UNSTABLE, ALPHA) released


Dear PARI lovers,

I would like to announce the release of pari-2.4.2-ALPHA. The sources
and a binary for Windows can be obtained through the address

  http://pari.math.u-bordeaux.fr/download.html

It includes Bill Allombert's major rewrite of the GP parser / evaluator;
see the release notes below. Thanks for a very nice piece of work, Bill.

It is also partly a bugfix release for the UNSTABLE development branch
(118 bugs fixed). Please help us test this ALPHA release!

See http://pari.math.u-bordeaux.fr/Bugs/ for how to report problems or submit
wishlist items.

Merry Christmas !

Have fun,

  Karim.

===========================================================================
HIGHLIGHTS: For simplicity, the description below is sligthly inaccurate;
be sure to check the documentation, in particular sections II.6 and II.7
of the "User's Guide to PARI/GP".

  * In the old gp, it was not possible to use the same identifier for variables
  and functions; now there is nothing wrong with defining a user function
  f(x,y)=x^2+y^2, then setting f = 1 (thereby deleting the function).
  
  In fact, the distinction between variables and functions has been abolished:
  anonymous functions (closures) may be defined and assigned to variables,
  e.g. the old f(x,y) = x^2+y^2 is now an alias for  f = (x,y) -> x^2+y^2

  COMPATIBILITY ISSUE: function calls *must* include parentheses. I.e.
  typing f() calls the function f without arguments as expected, typing f
  returns an anonymous function with the same definition as f; for instance,
  v[1] = f is valid.

  KNOWN BUG, to be fixed in next snapshot release: For the time being,
  built-in functions don't generate closures. A statement like 'f = sin' is
  invalid ( f = x->sin(x) or f(x) = sin(x) are both correct ).

  * This has a large number of useful side effects; it made possible two new
  functions select() and apply():

   \\ primes in { i^2+1 : i <= 50 }
   ? select(vector(50,i,i^2+1), x->isprime(x))
   %1 = [2, 5, 17, 37, 101, 197, 257, 401, 577, 677, 1297, 1601]

   \\ entries < 100 in the preceding list
   ? select(%, x -> (x<100))
   %2 = [2, 5, 17, 37]

   \\ enumerates (Z/NZ)*
   ? invertibles(N) = select(vector(N,i,i), x->gcd(x,N) == 1)

   \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

   ? apply(x->x^2, [1,2,3,4])
   %1 = [1, 4, 9, 16]
   ? apply(x->x^2, [1,2;3,4])
   %2 =
   [1 4]

   [9 16]

   \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

   Similarly, vecsort() was extended to allow arbitrary comparison functions:

   \\ sorts a vector of polynomials by increasing discriminant
   ? vecsort( v, (x,y) -> sign(poldisc(x) - poldisc(y)) )

  * COMPATIBILITY ISSUE: variables implicitly scoped to loop or function
  bodies are now lexically scoped. This means that in
    for(i = 1, 10, g())
    f(i) = g()
  the index i is truly local to the loop/function body. It is no longer seen
  by the function g(), as used to be the case.

  One can declare lexicaly-scoped variable anywhere using the construct
  my(x, y, z, t), possibly with initializations: my(x = 1, y = x).
  The old "local" keyword keeps the same semantic (dynamic scoping) and is
  mostly obsolete, outside of very specific situations beyond the scope of
  these release notes.
  
  * Lists now grow as needed, without imposing an awkward maximal length.
  v = List()  is now sufficient to initialize an empty list, instead of
  v = listcreate(100) to initialize a list which wouldn't grow past 100
  elements.

  As well, vectors of lists are now valid objects; something like 
  v = [List()]; listput(v[1], ...) does work now.

  * Special polynomials (polcyclo, polchebyshev, pollegendre...) are orders of
  magnitude faster ( polcyclo(10^6): 5min (2.4.1) -> 16ms (2.4.2) ) and
  directly allow evaluation at a given point, e.g. polcyclo(n, 2) for Phi_n(2).

  * issquare(t_POL) now works reliably over prime finite fields ( we used
  to have  issquare(Mod(1,2)*(x^2+1)) -> 0, or error messages in more
  complicated cases ). In the same vein, charpoly no longer assumes that 
  the characteristic is 0 or large enough (Berkowitz division-free algorithm).

  * new default "factor_proven" to guarantee that all integer factorizations
  outputs proven primes ( the default is to be happy with strong pseudoprimes ).

  * new defaults "graphcolormap" and "graphcolors" to allow arbitrary colormaps
  in hi-res plots.

===========================================================================

P.S: The Changelog

Done for version 2.4.2 (released 22/12/2007):

  Fixed
    1- divrs(0., negative integer) had the wrong exponent
    2- vecsort(,,4) was broken in 2.4.1
    3- allocatemem(z) didn't check that z >= 0 [#556]
    4- remove hack in internal function 'readbin' that used the clone bit as
    a special marker hence returned an invalid object, which could be
    propagated to higher level public functions.
BA  5- sqrtn(Mod(a,p),..) and factorff() were broken in 2.4.1
BA  6- bitnegimply(1,2^65) returned a wrong result [#560]
    7- nfeltreduce(nf,t_POLMOD,id) didn't work [#558]
    8- [library] missing function intfourierexp()
    9- segv in polrootspadic / repeated roots in FpX_root (only in deg 2) [#562]
   10- log(2+O(4^4)) --> oo loop
   11- log(exp(1e-100)) -> 1.000000000149525401279188592 E-100
       [ for some accuracies, log & exp inacurate near 1 and 0 resp. ]
   12- numbpart inaccurate (and slow). E.g numbpart(52602) off by 1 [#557].
BA 13- &, |, && and || were right-associative instead of left-associative
   14- remove type assumptions in mulcxI, mulcxmI: unsafe [#516]]
   15- too much memory allocated to print real numbers
   16- (y/x)/(x^0/y) not correctly simplified
   17- \s reported a misleading number of available user variables
   18- 1/(quadgen(-4)*x)+0. -> exponent overflow [#591]
   19- sumpos(x=1,1/x^2,1) had the wrong sign [#587]
   20- matrixqz(x,0) would not work if first two determinants were 0
       + might lose pointers in gerepile
   21- sumpos(x=1,0) -> oo loop [#585]
   22- qfminim([[;]],,,2) --> SEGV [#598]
   23- intformal(1) --> incorrect object
   24- intformal(y,x) --> y*y
   25- matadjoint(0) --> gerepile error
   26- prodinf(x=0,0), prodinf(x=0,-1,1) --> oo loop
   27- agm(-1, 1+1e-55) --> oo loop, agm(-1,1) --> wrong result
LGr28- killing hi-res graphic window created zombie process (missing wait())
   29- missing type check in eint1(x,n)
   30- ploth(...) + Ctrl-C --> hi-res graphic window killed [use pari_daemon()]
   31- quadgen([]) --> incorrect object [#606]
   32- hyperu(0,1,1) --> oo loop [#608]
   33- fix headers so that ulong is always defined
   34- read("a b.gz")   \\ filename contains a space
       gzip: ./a.gz: No such file or directory
   35- logagmcx inaccurate [ used for log(t_COMPLEX), large precision ]
   36- RgX_divrem: prevent "impossible" situations for weird base rings
       1/ Mod((y-1)*x-1, Mod(2,6)*x^3-Mod(1,2)*x^2-1) --> SEGV
   37- gclone didn't work on t_INTs with lg > lgefint
   38- GC error in add_rfrac() [#612]
   39- missing type check in subgrouplist [#616]
   40- inconsistent type checking in nfeltdivmodpr [#617]
   41- nfdisc(x^32+24888960*x^30+227077545803904*x^28+887225199431341086720*x^26+1145458263702669503266741248*x^24-459489127319699704284694158213120*x^22+73430099675988831740428200872826863616*x^20-6599321778961370851005469933592282336329728*x^18+369563540304176984501448638025309170375722401792*x^16-13214618078037183940422584396181416089308059714715648*x^14+291247424536170563676138246427605494527806096141868597248*x^12-3407227562250271661213064368167141844394234574629997803208704*x^10+8699659624155196549893192408316795253695601521375537680749690880*x^8+153390110447793800411208197070089975539253907830958400507847198638080*x^6-34704742472413552993642506624568826441560550586777137133227202205188096*x^4+43389826962123095743039577910848855441856968086933919852164410699581227008*x^2+336462877895453750216450425189196151877685043455706101021513167474262016, 1)
       --> "not a prime" error (help Round4 to recover when using non-primes,
       instead of raising immediate errors) [#624]
   42- vecextract: C14 in 2.4.0 didn't work for large masks [#623]
   43- clean up version handling: move version setting code to config/version
       and always set PARIVERSION from CHANGES if 'CVS' [ used to require
       a 'Configure' ]
   44- zeta(0e1) --> SEGV [#627], exp(0e1*I) --> SEGV [#630]
   45- exp(2^200*I) --> catastrophic cancellation [cos/sin were OK] [#631]
DE 46- on NFS filesystems, make install would rebuild all [#503]
   47- default(compatible,3); default(compatible,1) --> case no longer taken
       into account [#629]
   48- missing GC in 'sigma'
   49- eta(x): valuation would overflow if seriesprecision is large
   50- typo in src/kernel/none/mp.c:convi --> inefficiency
   51- concat(v) used too much memory (quadratic in #v, make it linear) [#634]
BA 52- gp -q -f < eval('y) --> SEGV
   53- "significant pointers lost" for objects involving 0 t_SERs [#635]
   54- for trivial x, isanypower(x,&p) would not set p
MSo55- [Configure] don't rely on $CC exit status, check whether a non-0 size
       executable is produced [ problems with tcc ]
BA 56- wrong Prototype for subgrouplist [ extra 'p' ]
   57- hole in 'secure' mode: don't allow changing psfile / logfile [#645]
   58- nf.codiff was only correct up to multiplication by some rational number
       [cf #510 & 2.4.1-F7]
   59- cgiv failed to delete the last object on stack [ if recursive ]
LGr60- first default(parisize,*) would segfault [due to C-1, #569]
   61- pariputs("") --> invalid read of size 1 [ valgrind ]
   62- ell.omega, ell.eta, pr.gen could lead to gerepile error [#641]
   63- y=[x];eval('y) --> error [#652]
   64- incorrect use of gerepileupto in inittestlift [ galoisconj ]
   65- extra multiplication in the innermost loop of Cholesky decomposition
       (qfgaussred, etc).
   66- made FpX_add, FpX_sub, Fq_add, Fq_sub stack-clean. FpX_neg, Fq_neg
   returned an incorrect result if input was not reduced mod p
   67- setrand(4);polgalois(x^8-264*x^6+25410*x^4-1054152*x^2+15856203)
       --> wrong result [#660]
   68- build fails with "env: parameter list too long" [#661]
   69- factorff did not accept inputs with t_FFELT coeffs
   70- could use PARI stack while reading gprc [ before pari_init ]
   71- Mod(Mod(1,v),v) --> invalid object.
   72- a = Mod(y, v); y = Mod(1,v); eval(a) --> invalid object
   73- for some complicated t_RFRAC z: z' --> impossible assignment I-->S
   74- typo in bnfisintnorm(): missed some solutions  [ couldn't find a unit
       of norm -1 even though one exists ]
   75- ffprimroot(ffgen( t_POL of degree 1)) --> oo loop
   76- wrong result in theta(q, z) if sin(nz) was small for some small n [#667]
   77- 1/Mod(0,2) --> impossible inverse modulo: Mod(2, 2)
   78- alias(a,b), then ?a --> 'a is aliased to a'
   79- -Mod(0,2) --> Mod(2,2)
MA 80- [Linux-PPC] missing -fPIC in DLCFLAGS
   81- possible oo loop in _isprincipal [ precision was supposed to increase,
       but could in fact remain the same ]
   82- quadregulator(y) -> SEGV [#674]
   83- acos(x^0) -> division by 0 [ instead of O(x^8), at \ps 16 ]
       Analogously, acosh(x^0), asin(x^0), asinh(I+O(x)) --> division by 0
   84- dilog(-1) [ more generally polylog of < 0 t_REALs ] should have
       0 imaginary part
   85- problems with  [ build/install ] directory names containing spaces
   86- avoid catastrophic cancellation in 3M [ Karatsuba ] formula for
       t_COMPLEX * t_COMPLEX
   87- ix86, x86_64: missing earlyclobber constraint for addllx, subllx, divll
   88- ploth(,4) --> huge memory use for large plots
   89- stirling(0,0,2) --> 0  [ should be 1, #690 ]
   90- deriv(x/(x+1),y) --> invalid t_RFRAC with exact 0 numerator [#687]
   91- issquare(t_POL) assumed characteristic 0 [#549]
   92- sqrt(Mod(4,5) + x) --> error [ e.g. stack overflow ]
   93- hyperu(0*I,1,1) --> forbidden assignment t_COMPLEX --> t_REAL.
BA 94- fix compilation problem with g++-4.2 and GMP.
   95- ??factor_proven, ??factor_add_primes did not work
   96- typo in znprimroot: wrong result for large moduli
       znprimroot(5*2^127+1) --> 2 [#696]
   97- ffgen(x*Mod(1,2)) --> x [ should be 0 ]
   98- ffprimroot(ffgen((x+1)*Mod(1,2))) --> oo loop
   99- nffactor(nfinit(y),x^2+Mod(1,y)) --> SEGV [#699]
  100- "precision error in minim0" on qfminim(G, norml2(M[,1]), 100)
       from tutorial
  101- nffactor(nfinit(y^2+1),(2*x+1)*x*(x+1)) --> SEGV [#702]
  102- isprime((6^2176+1)/(6^128+1)) --> length (lg) overflow [#697]
       [ analogous problems for any large integer ]
  103- various problems related to allocatemem() [ + document quirks ]
       Remove the br_ALOCATEMEM construct and end allocatemem0() by a longjmp
  104- missing GC in det_simple_gauss() [ matdet for inexact inputs ]
  105- rare stack corruption in add_rfrac [#700]
  106- add missing GC in gsubst
  107- polred([pol, b]) computed unnecessary but possibly expensive
       invariants of pol [ e.g. disc, index ]
  108- compilation failed on AIX [ YYSIZE_T, pow ]
  109- ? Mod(1,2)*x + Mod(1,2)*y
       %1 = Mod(1, 2)*x + (Mod(1, 2)*y) \\ extra parentheses in constant term
       ? % + 0*z
       %2 = Mod(1, 2)*x + Mod(1, 2)*y
  110- factornf(x^5+(-a+2)*x^4-a*x^3+(3*a-6)*x^2+(5*a-10)*x+(2*a-5), a^2-5) 
       --> SEGV  [ not squarefree -> denominators creeping in ] [#708]
  111- problems with isexactzero and t_INTMODs. Mod(0,2)*x*1. -> 0,
       Pol(Mod(0,2))+2 -> 2, (2+0*I)+I*Mod(0,4)->Mod(2,4), Mod(0,2)/x -> 0
       Use isrationalzero instead.
  112- substvec(x^2, [x^2], [y]) --> y^2  [ should be an error ]
  113- typo in FpM_gauss_pivot: FpM_rank, FpM_image, FpM_suppl, FpM_indexrank
       much slower than they should be. Analogous problem in FqM_gauss_pivot.
BA114- missing GP2C descriptions for Pol and Polrev.
BA115- zero FFELTs were not considered as exact zeros [#710]
  116- rare SEGV in gp when recovering from error (dereferencing 
       global_err_data equal to BREAK_LOOP)
  117- vecsort(t_LIST) returned a t_VEC
  118- gp "huge file" + stack overflow --> stack overflow in next 
       interactive command (+ minor memoryleak) [#712]

  Changed
BA  1- The combined GP parser/evaluator has been replaced by a bytecode
       compiler and a bytecode evaluator
BA  2- install(): parser code 'E' and 'I' now refer to closures, not strings:
       'I': closure whose value is ignored, like in for() loop
       'E': closure whose value is used, like in sum() loop
    3- Fl_pow renamed to Fl_powu [ exponent may not be negative ]
    4- split usersch3.tex moving function documentation to src/functions/*
    5- simplify table of contents for users.dvi
    6- rename Flx_rand -> random_Flx, FpX_rand -> random_FpX
BA  7- use factor_pn_1 to compute various orders in FF.c
    8- file usersch3.tex is now generated from functions/*
    9- rewrote logr_abs [ inaccurate + slow for x = 2^k * (1 - epsilon) ]
   10- rewrote exp1r_abs [ inaccurate + slow ]  and mpexp_basecase [ reduce
       input mod log(2) ]
   11- rewrote mpsc1 [ slow ] -> faster sin and cos
   12- [library] rename pointch ->  ellchangepoint, coordch -> ellchangecurve
   13- prototype of constpi, consteuler.
   14- use a little less memory to compute pi, euler, log(2)
   15- qfminim(x,b,m,flag) made 'm' parameter optionnal also when flag=0
   16- made second argument to matrixqz optional, allow non-prime values
   17- matpascal(n < -1), mathilbert(n < 0) now raise an error
   18- add optional extra argument to ffprimroot, fforder, fflog
   19- allow znlog(x,g) where g a t_PADIC or an t_INTMOD modulo any N
       that znprimroot(N) would accept
   20- log(x t_PADIC): check whether x = 1 (mod p) before replacing x <- x^(p-1)
   21- znprimroot(p^k): use isanypower() instead of factor().
       E.g. znprimroot(nextprime(10^20)^1000): 8mn --> 12ms
       znprimroot(N) no longer checks reliably whether (Z/N)^* is cyclic.
       Result undefined if it is not.
   22- padic sqrt much faster [ small and large accuracies ]
   23- let primes() indicate a value of primelimit if unable to answer [#625]
   24- remove variable names from ?0
   25- exp(0e10) returned 1.000, made it 0exxx [ no significant digit ]
MSo26- define polchebyshev(n, 1 or 2), pollegendre(n) for n < 0
   27- znorder faster for non-prime modulus [ try it for Mod(2,5^10*7^10) ]
       (compute lcm of local p-adic orders)
   28- changed icopyifstack / copyifstack macros so that their arguments
       are GENs, not GENs typecast to long.
   29- add -funroll-loops to gcc flags when compiling arithmetic kernel
   30- improve ellap (Shanks) by computing #E(F_p) mod 2 [ idea stolen from
       Pierrick Gaudry ]
   31- nfreducemodpr was exceedingly slow for large t_POL inputs, e.g.
        w=x^48 + 158*x^46 + 4*x^45 + 12103*x^44 + 448*x^43 + 597874*x^42 + 23928*x^41 + 21373779*x^40 + 802424*x^39 + 588314524*x^38 + 18516794*x^37 + 12951694530*x^36 + 294992428*x^35 + 233870773964*x^34 + 2752210590*x^33 + 3524535272389*x^32 - 5797649292*x^31 + 44873186922754*x^30 - 798816466566*x^29 + 486736157075707*x^28 - 18082470992066*x^27 + 4523171646555185*x^26 - 271968456240780*x^25 + 36127625049532658*x^24 - 3144283847234232*x^23 + 248308835345289047*x^22 - 29271322082172250*x^21 + 1467438460133718165*x^20 - 223406933340907742*x^19 + 7435650911902583447*x^18 - 1405525828628464338*x^17 + 32139937168429173010*x^16 - 7272631544138987758*x^15 + 117563850386577478340*x^14 - 30686320483051428956*x^13 + 359649878031434743177*x^12 - 103986861631984042496*x^11 + 904392935429691313557*x^10 - 276283466933590000414*x^9 + 1822091999374665372405*x^8 - 554259164403897051340*x^7 + 2827767569115449802250*x^6 - 788757355446858093774*x^5 + 3170224521565069297504*x^4 - 708295322502763110380*x^3 + 2280480720610858280676*x^2 - 300602103002034938488*x + 788466592242441477569;
        nf=nfinit([w, nfbasis(w,1)]);
        modpr=nfmodprinit(nf, idealprimedec(nf,5)[1]);
        L = nfgaloisconj(w); vector(#L,i, nfeltreducemodpr(nf,L[i],modpr));
      (in this example, the last reduction is down from ~ 1minute to ~ 2s)
   32- make sure nfmodprininit chooses a monic T to represent
      Fq ~ Fp[X]/(T)  [#646]
   33- remove obsolete undocumented functions outerr, outbeauterr, outsor,
    outtex. Rename voir -> dbgGEN. Functions brute, outbrute, matbrute,
    outmat, sor, outbeaut are obsoleted and no longer documented.
   34- rename errfile -> pari_errfile, infile -> pari_infile, logfile ->
    pari_logfile
   35- extra test infrastructure [ drop file in src/test/in and possibly
    src/test/[32|64], then run Configure, no need to edit config/get_tests ]
   36- inline gerepileupto/gerepileuptoleaf + improve gerepileupto
   37- [libpari] cleanup of user / temp variable handling. manage_var
   obsoleted (kept for backward compatibility, to be removed), see Section 5.9
   for new equivalents. Fixes #633, #650
   38- fix t_LIST as components: v = [List()]; listput(v[1],) didn't work [#468]
   39- listcreate() and listkill() are obsolete, don't use them. L = List()
    should be enough in all cases. All lists now grow as needed, without
    requiring an awkward maximal length (from listcreate).
   40- rename sqred -> qfgaussred, signat -> qfsign,
    sqred1 -> qfgaussred_positive
   41- rename gaddmat -> RgM_Rg_add and swap arguments. Add RgM_Rg_add_shallow
   42- document library functions zv_neg, zm_transpose, fix typo in
    documentation for RgX_neg
   43- document library functions gmaxgs, gmaxsg, gmings, gminsg.
   44- document library function gfloor2n
   45- document library function zx_shift
   46- cleaned up splines handling [ ploth(,,,256) ] : remove quark_gen & QUARK
BA 47- implicitly local variables are lexically-scoped
BA 48- local and my can now appear anywhere in a program.
   49- [library] rename apell -> ellap
   50- Removed the OK_ULONG macro and renamed u_OK_ULONG -> SMALL_ULONG
   51- Rename BIGINT -> NO_VARIABLE [used by gvar()], VERYBIGINT -> LONG_MAX,
       MAXULONG -> LONG_UMAX. Remove BYTES_IN_LONG, TWOPOTBYTES_IN_LONG
   52- implement directly gsubsg [ was a macro calling a trivial wrapper ]
   53- optimize multiplication for quadratic t_POLMOD [ t_QUAD remains faster ]
   54- theta(q,z) very inefficient for large accuracies
   55- remove support for nf of the form [nf, change of variable] in
       nfnewprec() [#672]
   56- global() now obsolete and scheduled for removal
LGr57- 'make ctags' gctags-specific flags [ add #defines, typedefs ]
   58- prototype of nfsubfields [ 2nd argument GEN -> long ]
   59- allow t_FFELT in issquare / issquarerem / ispower
   60- sqrt(t_SER) now uses Newton iteration
   61- rename gissquarerem -> gissquareall, uissquarerem -> uissquareall,
       Z_issquarerem -> Z_issquareall (analogy with sqrtrem was faulty: we do
       not store a remainder but the square root)
BA 62- User functions are now regular variables holding values of type t_CLOSURE
   63- Output of \u is now sorted
   64- More explicit error messages in gp_history, e.g.
       ***   History result %10 not available [%1-%6]
BA 65- vecsmall_uniq(v) no longer assumes that v is sorted
   66- allow ellorder to handle curves over Fp, add an optional parameter to
       indicate a multiple of the order as in znorder.
   67- allow polcyclo(n, a) for an arbitrary a [ had to be a variable ] +
       major speedups: polcyclo(10^6) 5min -> 16ms. Similarly for polchebyshev,
       pollegendre and polhermite
   68- ?0 listed all "user-defined identifiers". Restrict to "functions"
   69- use simplify in setsearch() and Set() [#707]

  Added
    1- library functions expu, adduu, subuu
    2- library functions divisorsu, factor_pn_1 (using cyclotomic factors and
       Aurifeuille), merge_factor
    3- library function divru, dbllog2r
    4- library function ZX_gcd, ZX_isirreducible
    5- library function gtos
    6- library function pari_daemon
    7- library function Fp_sqr, padicsqrtlift
    7- library function RgXQ_inv
    8- bench 'extract'
    9- charpoly: Berkowitz division-free algorithm (new default) [#541]
   10- library function phiu
   11- library function mkvecsmalln
   12- library function chk_gerepileupto, dbg_gerepile, dbg_gerepileupto
   13- library function gen_sort_uniq, gen_indexsort_uniq+add flag 8 in vecsort
   14- library function remi2n, cmp_RgX, gen_cmp_RgX
   15- library function RgV_dotproduct, ZV_dotproduct, RgV_dotsquare, ZV_dotsquare, FpV_dotproduct, FpV_dotsquare
   16- library function FpX_Fp_add_shallow
   17- library function Q_pval
BA 18- new keyword "my" to declare lexically-scopped local variables. 
   19- new GP function listpop()
   20- library function RgX_inflate, RgX_deflate, Flx_inflate, Flx_deflate, poldeflate
   21- library function Fp_neg, Fp_add, Fp_sub
   22- library function ugcd
   23- library function vecinv, vecmul, vecpow, vecdiv, vecmodii
   24- library function RgM_isidentity, RgV_isin
   25- library function nfnewprec_shallow, bnfnewprec_shallow, bnrnewprec_shallow
   26- library function Zp_issquare
   27- library function dvmdsBIL, divsBIL, remsBIL
   28- library functions gassoc_proto, map_proto_G, map_proto_GG, map_proto_GL,
       map_proto_lG, map_proto_lGG, map_proto_lGL [ were private with
       other names ]
   29- default factor_proven
   30- experimental -balloon option to gphelp
LGr31- defaults graphcolormap, graphcolors [runtime-defined colormap for plots]
LGr32- bit 4096 [ complex ] to ploth
   33- member function .p / .mod for t_PADIC
   34- same mnemonic flags to plotrecth as in ploth
BA 35- member function .pol, .mod and .p for t_FFELT
BA 36- New type t_CLOSURE to store GP functions
   37- Ability to use arbitrary comparison functions in vecsort()
   38- library functions closure_callgen1, closure_callgen2, closure_callgen,
       closure_callgenvec.
   39- GP function apply(), select()
   40- library functions FF_issquare, FpXQ_issquare, Flxq_issquare
BA 41- library function vecsmall_uniq_sorted
   42- bench 'ff', 'exact0'
   43- has_getenv.c
   44- library function FpX_oneroot
   45- library function gcmpX
   46- library functions ZV_sort, ZV_sort_uniq, ZV_search

  Removed
    1- obsolete function kbessel2 (now static). Removed optional flag in besselk
    2- Removed obsolete optional flag in ellap(), Mod() and gcd()
    3- Rename gen_search_aux -> gen_search and document it [ old gen_search
       disappears: use tablesearch() ]
    4- undocumented library functions gpolylogz, polylog, polylogd, polylogp,
       polylogdold. Use polylog0 with appropriate flags.
    5- undocumented library function ghell2. Use ellheight0 with appropriate
       flag.
    6- obsolete function log0; use glog
    7- obsolete undocumented library function mpdivz, polzagreel, RgX_powers
       (use RgXQ_powers)
    8- obsolete undocumented library function sqred3
    9- the emacs/ directory: PariEmacs is now distributed separately.
   10- obsolete functions ellap0, apell2
   11- obsolete header file pariport.h
   12- obsolete error codes paramer1, valencer1, accurer, caracer1
   13- removed obsolete system-specific #ifdefs (macintosh, alliant)

-- 
Karim Belabas                  Tel: (+33) (0)5 40 00 26 17
IMB, Universite Bordeaux 1     Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation    http://www.math.u-bordeaux.fr/~belabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux.fr/  [PARI/GP]