Karim Belabas on Wed, 15 May 2013 23:00:41 +0200

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

pari-2.6.0 released !

Dear PARI lovers,

I would like to announce the release of pari-2.6.0-ALPHA, which starts a new
development cycle. The sources and a Windows binary can be obtained through
the address


A number of long-awaited, but stability threatening, improvements have
been committed to this new branch.

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

Have fun !



[The GP language]

  - Ranges and slices: [a..b], x[a..b], x[^a]
    ? v = [2..8]
    %1 = [2, 3, 4, 5, 6, 7, 8]
    ? v[2..4]
    %2 = [3, 4, 5]
    ? v[^2]     \\ remove 2nd element
    %3 = [2, 4, 5, 6, 7, 8]
    ? M = matid(3); M[1..2, ^2]  \\ first two rows, remove 2nd col
    %4 = 
    [1 0]

    [0 0]

  - Set notations:
    ? [ p | p <- primes(10), isprime(p+2) ]
    %1 = [3, 5, 11, 17, 29]

  - Multiple assignments: [a,b,c] = V, for a = V[1], b = V[2], c = V[3]
    ? [D,U,V] = matsnf(A, 1)    \\ returns SNF and transformation matrices

  - Error trapping: iferr() + a new data type 't_ERROR' to represent error
    contexts. See ??iferr

     \\ Compute [B]P on a "curve over Z/NZ". If an exception occurs,
     \\ we found a zero divisor in Z/NZ, thereby factoring N.
     ? ECM(N, B = 1000!, nb = 100)=
         for(a = 1, nb,
           iferr(ellmul(ellinit([a,1], N), [0,1], B),
             E, return(gcd(lift(component(E,2)),N)),
             errname(E) == "e_INV"))
     ? ECM(2^101-1)
     %2 = 7432339208719

  - Timeouts: alarm(delay, expr) spends 'delay' seconds trying to evaluate
    'expr', then aborts returning a t_ERROR object.

  - Multi-if: to simplify successive 'else' clauses
    ? if (a == 1,     print("1"),                \
          a < 0 ,     print("negative"),         \
          isprime(a), print("prime"),            \

  - new function cmp() to "compare" arbitrary objects (transitive order
    relation, returns 0 iff x === y). Useful for sets.

  - new function getenv()

[The GP calculator]

  - forprime(p = a, b, ...) now iterates over arbitrary ranges of primes,
    independently of 'primelimit'. Parameter 'b' can be omitted (no upper
    limit). More generally, primelimit is now deprecated: libpari functions
    can quickly produce their own primes without relying on (enough)
    precomputed primes.

  - new iterators:  forcomposite() / forqfvec()

  - GP debugger, new functions expanding the 'break loop' mechanism: dbg_up(),
    dbg_down(), dbg_x(), breakpoint()

  - new default 'linewrap'

[Multiprecision Kernel]

  - binary splitting: Catalan's constant, Pi, log(2) (to be expanded)

[Elementary Number Theory]

  - arithmetic functions no longer accept vector / matrix arguments
    [ to allow passing factorization matrices ]: use apply()

  - new convenience functions: hamming(), ispowerful(), digits() /
    sumdigits(), ispolygonal(), istotient(), isprimepower()

  - sqrtnint(a,n) for floor(a^(1/n))

  - randomprime(), random([a,b])

  - Bernoulli polynomials: bernpol() and sumformal()
    ? sumformal(n^2)     \\ F such that F(b) = \sum_{n <= b} n^2 
    %1 = 1/3*n^3 + 1/2*n^2 + 1/6*n

  - renamed bezout() -> gcdext()

  - sumdivmult: to Ñum multiplicative expressions

  - seralgdep: to find linear relations with polynomial coefficients
    ? s = 1+1/2*y+3/8*y^2-3/16*y^3+3/128*y^4+15/256*y^5-57/1024*y^6 + O(y^7);
    ? seralgdep(s,2,2) \\ relation of degree <= 2, degree(coeffs) <= 2
    %2 = -x^2 + (y^2 + y + 1)

  - sieve algorithms for znlog() and fflog()

[Polynomial Arithmetic]
  - polgraeffe(f): returns g such that g(x^2) = f(x)f(-x)

  - poliscyclo(), poliscycloprod(), polcyclofactors(): cyclotomic factors
    of rational polynomials

[Linear Algebra]
  - mathnf for matrices over K[X]

  - matqr() to compute the QR-decomposition of a real square matrix;
    mathouseholder() to apply a sequence of Householder transforms

  - internal support for sparse matrices and Wiedemann algorithm; currently
    only used by the discrete log algorithms.

[Elliptic curves]

  - extend ellinit inputs: ellinit([a4, a6]). On singular curve, return []
    instead of raising an error. New function ellfromj().

  - new dynamic implementation of the 'ell' data structure: ellinit is now
    used to record the coefficients of the curve and the domain over which it
    is defined. Further data is added to the structure on demand, if and when
    it is needed, e.g. cardinality and group structure. See ??ellinit.

  - elliptic curves functions no longer assume that a curve over Q is given by
    a minimal model. A non-miminal model used to silently produce wrong
    answers; no longer!

  - allow ellinit(E / Qp) for arbitrary p (also p = 2) and reduction type
    (no longer restricted to Tate curves)

  - allow ellinit(E / Fq) for non-prime finite fields, incl. point counting
    (SEA, Harley)

  - allow ellinit(E / C)

  - new function ellheegner() to find a non-torsion rational point on
    E / Q of rank 1.

  - new implementation of ellweilpairing / elltatepairing

  - renamed ellpow() -> ellmul()

[Number Fields]

  - maximal orders (when the discriminant is hard to factor): allow to specify
    a list of primes at which the order nf.zk must be maximal. This [T, listP]
    format supersedes the old addprimes() hack as well as rigid optional
    flags for nfbasis, nfdisc, polredabs. (And no longer depends on the
    global 'primelimit'...) See ??nfinit
    ? T = polcompositum(x^5 - 101, polcyclo(7))[1];
    ? nf = nfinit( [T, 10^3] );
    ? nfcertify(nf)
    %3 = []
    A priori, nf.zk defines an order which is known to be maximal at all
    primes  <= 10^3. The certification step proves it is actually globally

  - new function polredbest(): "best-effort" variant of polredabs(). Not
    canonical but finishes in polynomial time.

P.S. The Changelog 

Done for version 2.6.0 (released 15/05/2013):

    1- Euclidean chains were confused by t_POLs with t_INTMOD/t_POLMOD coeffs
       [ because a 0 polynomial could have lg() == 3 ]
    2- numerical instability in ellheightoo [#1204]
    3- Flm_gauss(m, smallish p): fix and enable the OK_ulong switch [ faster ]
    4- remi2n didn't allow negative arguments [native kernel] [#1215] 5- ellrootno(e, p) started by computing a global minimal model for e
       instead of a local one at p.
    6- qfbred(t_QFR) wrong when frac( sqrt(D) ) > 0.5
    7- add GC in sumalt()
    8- problems with diagnostic messages when changing a 'default', e.g. \o3
    9- divru() could call bfffo(0) => overflow in expo()
AMe10- (t_FRAC<0) * t_INTMOD => wrong result
   11- trace(t_POL or t_SER) could yield an unormalized object [0 leading term]
LGr12- off-by-1 error in primepi() when argument is = primelimit
   13- bestappr(0.*x+1) -> incorrect object
   14- znlog(3, Mod(3,8), 2) -> error
   15- crash when default(prettyprinter,...) points to a non-existent command
   16- qfperfection(): wrong result in unlucky cases [#1223]
   17- allocatemem() did not reset parse error [#1226]
BA 18- (x->vector(1,j,x))(1) --> significant pointers lost [#1211]
VL 19- [makefile] Incorrect -I and -L flags order [#1212]
   20- nfbasis / nfdisc(f,, partial factorization) would sometimes spend a
       lot of time trying to factorize a discriminant [#1227]
   21- numerical instability in qfgaussred / qfsign [#1232]
   22- missing consistency checks in conjvec [#1231]
   23- numerical instability in polredabs [#1228, #1229]
   24- wrong result in bezoutres [#1233]
   25- wrong sign in polresultant() [#1234]
   26- change default(realprecision) so that it returns the internal precision
       [ as precision(1.) ], not the number of printed digits. [#1235]
   27- subst(Y/X,X,x) -> 0
PB 28- polrootsff(x^2-x-ffgen((v^2+1) * Mod(1,3))) -> SEGV [#1241]
   29- intnum(t=[0,0],[1],(sin(t)/t)^2) -> "precision too low in mpsc1"
BA 30- functions ending by the x[y]=z construct could corrupt the stack.
   31- nfbasis(pol, 0, factorization containing (-1)^1) -> wrong [#1244]
   32- qfminim(): better type checks for matrix entries
   33- qfminim(): incorrect GC in smallvectors()
   34- padicappr(x^2+1+O(3), -1+O(5^10)) --> no error
   35- tests test-kernel and test-ploth were broken
   36- lots of missing sanity checks in hilbert(x,y,p)
       [ e.g. hilbert(O(3), Pi, 5) -> 0 ]
BA 37- for(i=1,10^7,) + SIGINT -> SEGV [#1249]
   38- ellwp: take flag into account also for t_SER output [ was: numerical
       case only ]
   39- factor(p) was much slower than isprime(p) for p a "small" prime
BA 40- mateigen precision error was not trappable.
   41- accuracy problems in bnfisunit [#1253]
   42- broken rnfeltup [#1255]
   43- x===y was always wrong for x,y t_SER
BA 44- gamma(t_SER) with positive valuation did not work.
   45- ispower(x < 0) could return an even value ! [#1259]
   46- ispower(1 / n) return a wrong result [#1259]
BA 47- [breakloop] initial context could be lost.
BA 48- Ser([1+O(x)],x) returned an invalid object.
BA 49- ispseudoprime used too much stack for huge operands.
   50- [rnfidealup doc] idealgentoHNF() was incorrect.
DS 51- elldivpol returned wrong result for degree n >=8.
   52- overflow in mpbern(n) for huge n [#1256]
   53- idealfactor(nf, non integral ideal) would remove a rational content
       instead of factoring A/B with A,B coprime integer ideal. Which led
       to costly factorizations [#1158]
LGr54- the global variables associated to the primetable _maxprime / diffptr
       could become inconsistent
   55- psdraw() ignored plot colors
BA 56- stack_base() was not C89 standard compliant.
BA 57- my(f(x)=x+1);f --> SEGV                                       [#1273]
   58- ellheight([0, 0, 1, -1, 0], [0., 0.]) -> BUG
   59- allow bnrL1 over Q [#1279]
   60- factorpadic(,,,1) => SEGV when linear factors/Q [#1278]
   61- mathnf(..., 4) didn't remove 0 columns from HNF [#1271]
JD 62- possible SEGV in pari_init_opts [#1264]
BA 63- ellorder(E,P*Mod(1,p)) did not work if E was defined over Z
   64- allow writebin to save user functions (t_CLOSURE) [#1171]
   65- sqrtn(1+O(5),5) -> error, ispower(1+O(5),5) -> error [#1261]
   66- parimacro.tex: pdftex --output-format dvi  would produce a PDF
BA 67- pari_close failed to free all allocated memory [#1297]
BA 68- pari_close did not restore GMP memory functions
   69- avoid outputing ANSI escape sequences to reset terminal state when
       unnecessary [#1289]
BA 70- ellpointtoz was numerically unstable
   71- issquarefree(0) => error [#1304]
   72- sizebyte(t_LIST) returned the size of the wrapper type, not the list
       itself [#1307]
   73- ellgroup(E over Q, p) now returns the structure of the group of
       non-singular points, when the curve has bad reduction at p.
   74- factor_proven not taken into account in factor(n), where n is a
   75- core(5*(huge composite)^2) was very slow [#1305]
   76- sqrt(0.E-97-1.12-97*I) -> div by 0 [#1309]
BA 77- FpX_gcd(0,x) -> div by 0
   78- x; y; p; q; subst(Mod(q,p), q, x + y) --> Mod(1, p)*x [#1321]
   79- off-by-1 error when placing prime table sentinel after e.g.
       default(primelimit, 2);
   80- t_REAL with huge exponents print incorrectly [#1322]
   81- a1;a2;a3;a4;a6;ellinit([a1,a2,a3,a4,a6],1) was very slow
BA 82- FpX_factorff and FpX_rootsff were not using standard argument order
PB 83- printf("%.6f", 5E-5) -> SEGV [#1328]
BA 84- diffop(Mod(y,x^2-y),[y],[1]) -> wrong result
BA 85- calling a GP function with a lot of omitted arguments could cause a crash
GH 86- missing solutions in thue(), e.g. thue(thueinit(x^3+92*x+1),3^3)
   87- t_RFRAC == t_RFRAC could return a wrong result [#1339]
   88- obscure bug in polroots() (sage #13314)
   89- polinterpolate([1,2] * Mod(1,7), [2,3], 0) -> incorrect type in gabs
BA 90- printf() did not flush output
   91- logint() used too much memory and could return a wrong result:
       logint(3^64, 3) --> 33
   92- eint1(x < 0) normalization. Now eint1(x) = incgam(0, x) [#418]
   93- polrootsff(2*x+1,2,y) -> SEGV [#1350]
   94- resultant(x,x,y) -> 0 and related problems
   95- thue((x^4+1)^2, 4) -> no solution
BA 96- idealramgroups() and idealfrobenius() did not accept a bnf
   97- using new operators with default(compatible,3) caused a crash
   98- rare corruption in ECM [#1240] factorint(,1) => SEGV
   99- add missing call to normalize() in lift(t_POL/t_SER) [#1359]
BA 100- listput was not SIGINT safe
BA 101- znorder(Mod(5,16),200) -> 5 instead of 4
   102- e.tate lost accuracy
   103- 2-adic ellinit
   104- allow ellinit over C
   105- ellpointtoz(E / Qp, ...)  [ wrong result / error messages ]
JD 106- galoisinit(x^3+x^2-2*x-1) -> uninitialized read [#1389]
BA 107- polhermite(66) -> corrupted result [#1393]
   108- nfhnf() would only accept matrices of maximal rank
BA 109- galoisfixedfield() could return a wrong result for polynomials with
        large roots [#1406]
   110- bnrdisc could return a wrong result if the modulus had more than
        2 prime divisors [#1399]
   111- a = Mod(1,2)*x; gcd(a,a) return x instead of Mod(1,2)*x
   112- changing primelimit from within forprime loop yielded unpredictable
        results (potential SEGV)
   113- y;z;(x^2+y)*w/z/x -> significant pointers lost [#1248]
   114- log(t_FRAC close to 1) => junk (idem lngamma) [#1238]
   115- thue(thueinit(x^3-1493,1),3) -> error
LGr116- typo in modr_safe -> precision error [#1413]
   117- nfhnfmod(non-integral module) => wrong result
        nf=nfinit(y); A = [[1,1/2;0,1],[1,1]];
        nfhnfmod(nf, A, nfdetint(nf,A))

    1- mathnf: swapped flag 3 and 5.
    2- allow ellinit([a4,a6]) [#1213]
    3- ellinit(... singular curve ...]): return [] instead of raising an error
    4- GP set elements are no longer converted to t_STR (requiring "eval" to
       recover the underlying object). Arbitrary GENs can be stored in a set.
    5- moved Odos/* to relevant src/systems subdirectory
    6- removed Odos directory
    7- no longer allow Vec()/Vecrev(), Col(), Vecsmall(),  without argument.
       Use [], []~, Vecsmall([]), respectively.
    8- allow specifying an optional dimension in Vec/Vecrev, Col, Vecsmall.
    9- allow Vecsmall(t_POL or t_SER)
LGr10- nicer printout of small matrices: justify columns
   11- improve gmul(t_REAL, t_FRAC) when numerator of t_FRAC is 1
BA 12- [darwin] do not use dylib_ prefix to ld options [#1210]
   13- allow idealhnf(nf, t_QFI / t_QFR) for quadratic fields
   14- no longer allow 3 arguments in bestappr() [useless], no longer
       mix Pade approximants and continued fractions [too confusing: must a
       t_SER be converted to a t_RFRAC or be treated coefficientwise?]
   15- if znlog() has no solution, return [] instead of error
   16- znlog(x, g): no longer assume that g is a primitive root, nor that the
       underlying (Z/N)^* is cyclic
   17- renamed gen_eltorder -> gen_order
   18- logfile: strip properly color escape sequences [#1225]
   19- change nfbasis(T, flag, fa) to nfbasis(T, listP). flag was used to invoke
       round2 instead of round4 (inefficient=> useless) OR to only
       partially factor poldisc(T), up to primelimit (very dangerous since
       primelimit is a global variable). Now listP describes a list of primes,
       and we return a basis of an order which is p-maximal at all those primes:
       either a vector of primes, a factorisation (as fa before) or an integer
       B to indicated {p <= B} (a safe and flexible version of nfbasis(T, 1)).
       nfdisc() was changed similarly.
   20- first call isanypower() in BPSP_psp_nosmalldiv() when input is > 2^512
       [ < 1% of required time, 1 order of magnitude faster when it succeeds ]
       [ #1074 ]
   21- sort polroots() output so that it no longer depends on current precision
   22- delete README-subversion, replace with README-git
   23- move README.os2 to src/system/os2/README
   24- change compiler version printout in gp header
   25- much faster final divisibility test in nfgcd() [#1214]
   26- error type sqrter5 "not a quadratic residue in sqrt" now generalized
       to denote "not an n-th power residue in sqrtn"
BA 27- global_err_data is now a GEN.
BA 28- more usable form of alarm(s, code): evaluate code, aborting after s
       seconds. Return the result or a t_ERROR object.
   29- [non-Unix systems] the name of the preferences file is now "gprc.txt"
       (it remains ".gprc" on Unix systems)
   30- also look for the preferences file in PARI's "datadir"
   31- removed rootsold() code : polroots(x, 1) is no longer accepted
   32- rewrite ellan using C-longs + new function anellsmall()
   33- renamed all libpari error codes [ pari_err() arguments ]
   34- allow t_VECSMALL in vecextract
   35- look for a few more short vectors in polred(), only return subfields
       and the best primitive polynomial [wrt discriminant]
   36- [library] remove precdl argument in ellwp0: use a t_SER argument like
       in all other transcendental functions.
   37- ellsigma / ellzeta: allow t_SER arguments, like ellwp.
   38- polcoeff(x+2*y,1,y) -> 2  [ was 2*x^0 ]
   39- quadhilbert / quadray: replace final polredabs call by polredbest [#1025]
   40- listsort() now uses the cmp() comparison function, and becomes fully
       compatible with setsearch() [#1167]
   41- vecsort(,,2) [lexicographic order] is now always on. The flag is
       now deprecated and ignored.
   42- allow t_SER with integral coefficients to use asymptotically fast
       (ZX_mul / ZX_sqr) polynomial multiplication
LGr43- let initprimes0 use an existing prime table
   44- rename stackmalloc -> stack_malloc. Add stack_calloc
   45- matimagecompl() now returns a permutation (t_VECMALL) no longer a t_VEC
   46- remove config/gitversion from 'make snapshot' tarball
JM 47- Better implementation of ellweilpairing/elltatepairing
BA 48- agm now returns the optimal AGM
   49- unify make_emacs_tags / make_vi_tags => make_tags + fix problems for
       (exuberant-ctags)-based etags. Both tag files (emacs / vi) contain
       the same tags now.
   50- ellglobalred(E) now also returns the conductor factorization [4th compo]
   51- library functions *_incremental_CRT no longer need the product of the
       moduli, instead they compute it and update the running modulus.
   52- factor_proven now affects all the factoring machinery, as documented, i.e
       also multiplicative function (moebius, sumdiv,...)
   53- allow t_VECSMALL in lex()
   54- nfrootsof1(K) check whether K.pol is a translate of a cyclotomic pol.
       [initial patch LGr, #1175]
   55- format of cached Bernoulli table: now a t_VEC of t_FRAC / t_REALs.
       Removed bern() macro. The new data must be accessed using bernfrac /
   56- [libpari] simplify init_primepointer(n, p, &pd) interface
       => init_primepointer(n, &pd). Remove argument 'p', ignore the previous
       value of pd [ remove assumption that it pointed into a prime table ]
       and always set pd to a pointer into the private prime table.
   57- forprime loop: no longer allow to modify the loop index
       ? forprime(p = 2, 10, p = [])
        ***   at top-level: forprime(p=2,10,p=[])
        ***                                   ^---
        ***   prime index read-only: was changed to [].
   58- faster forparii() [ for() with t_INT lower bound ]
   59- forprime(p = a, b, ...) now iterates over arbitrary ranges of primes,
       independently of 'primelimit'. Parameter 'b' can be omitted (no upper
       limit). More generally primelimit is no longer a true limit to iterate
       over primes: all libpari functions use the forprime_t interface
   60- rename ggval -> gvaluation
BA 70- GP function ellpow is renamed to ellmul
BA 71- rename powell->ellmul, addell->elladd, subell->ellsub
   72- is_pth_power interface [ pass a forprime_t iterator ]
   73- polrootsmod(, 4) is no longer accepted
   74- revert to Ramanujan's formula to compute Pi [ + binary splitting ]
   75- polinterpolate(,, 'x) use divide & conquer algorithm
BA 76- binary(0) now return []
   77- polisirreducible() now avoids factoring in most cases
HC 78- reimplement incgam()
   79- allow eint1(t_COMPLEX)
   80- when 'echo = 1', no longer echo commands if they were entered
       interactively [commands ended up printed twice]
   81- unless 'echo = 1', no longer log commands entered non-interactively
       when 'log = 1'. '\r file' used to log the entire content of 'file'.
   82- allow thue(t_POL, rhs) for thue(thueinit(t_POL, rhs))
   83- elltors now uses division polynomials by default
   84- modified "Hit Return to Continue" message so that it becomes a comment
       when copy-pasted
   85- rnf_fix_pol() takes an extra argument, the calling function's name
   86- fast gerepilecopy() for leaves
   87- rename leftright_pow_fold -> gen_pow_fold, leftright_pow_fold_i
       -> gen_pow_fold_i
   88- upowuu now returns 0 on overflow
   89- primes(n) no longer needs precomputed primes
   90- prime(n) no longer needs precomputed primes
   91- primepi(n) no longer needs precomputed primes
   92- removed 3s delay when recompiling PARI after modifying a header
       [ Was there to avoid problems on slightly out-of-synch NFS fileserver
       host. Had become an annoyance on fast multicore servers, esp. when
       bisecting to find a broken commit. ]
   93- improve Configure --tune + let tune -t/-tt/-ttt print more and more
       verbose messages [ old 'tune -t' corresponds to current 'tune -tt' ]
   94- arithmetic functions no longer accept vector / matrix arguments [ to
    later allow passing factorization matrices ]: use apply()
BA 95- rename RgX_check_ZXY -> RgX_check_ZXX, ZXY_max_lg -> to ZXX_max_lg
   96- elleta() and elleisnum(e, 2) to use a theta series formula in
       O~(prec^(3/2)) instead of O~(prec^2).
BA 97- zv_cmp0 renamed to zv_equal0
   98- allow ellinit / Qp for arbitrary reduction type
   99- ellpointtoz(E / Qp, ...), now return phi(P) [ used to return the same
       result for phi(P) and phi(-P) [ split multiplicative reduction ],
       resp. phi(P) + 1/phi(P) [ non-split reduction ]
  100- ellinit(E / Qp).tate : the u component is now always a square root
       of u2, also in the non-split case (in which case it lives in a
       quadratic extension of Qp)
  101- renamed library function divsum() => sumdivexpr()
  102- listpop(empty list) => no-op [ was "domain error" ]
  103- ellap, ellak, ellan: allow non-minimal model
  104- when timer = 1, no longer print timing if the time is negligible;
       in particular, no timing should be printed when defining a user function
       or and alias.
  105- The proper way to initialize an nf structure when the polynomial
       discriminant is hard to factor is nfinit([T, listP]), where listP
       specifies a list of primes (see ??nfinit). nfdisc, nfbasis, all the
       polred functions allow analogous arguments (see Changed-19). This is
       cleaner and more flexible than old flags relying on the value
       primelimit (e.g. nfinit([T, nfbasis(T, 1)]), now deprecated). Also,
       the nfinit function now sees the local specifications and can
       take steps to avoid problems (instead of taking for granted a basis,
       without knowing whether it is correct or not). The result can
       also be certified (nfcertify)
  106- polredabs() with (deprecated) nf_PARTIALFACT flag (or new [T,listP]
       argument) now returns 0 if the resulting order cannot be proven to be
  107- rename bezout() -> gcdext(), polresultant() -> polresultantext()
  108- the prime table is now computed once and for all on startup and can
       no longer be increased by modifying primelimit: the dynamic forprime
       machinery allows fast primes up to primelimit^2 which is more than
       enough even with a small table. The default value of 500.000 is already
       larger than necessary
  109- removed the mechanism allowing prime gaps larger than 255 in the
       prime table: as a result it now limited to 436273290, allowing fast
       primes up to 1.9 10^17
BA110- permtonum/numtoperm now use the standard lexicographic numbering
  111- issquare(t_INTMOD), ispower(t_INTMOD): factor modulus incrementally,
       in case we hit a local non-residue -> early abort [#1376]
  112- gphelp + OS/X : make "open" the default PDF viewer (was "acroread")
  113- renamed exp_Ir -> expIr

    1- mathnf for matrices over K[X] [#41]
BA  2- GP function ellheegner
BA  3- asm inline macro addllx8 for faster addition
BA  4- Library function FpXQ_autpowers
    5- GP default 'linewrap'
    6- functions Fp_issquare, Fq_issquare.
    7- GP function cmp [ universal comparison ]
    8- library functions Fp_addmul, addmulii, addmulii_inplace, addmuliu,
       addmuliu_inplace, lincombii, mulsubii, submulii, submuliu,
LGr 9- Catalan's constant [ Catalan() ]
BA 10- library functions F2x_issquare/F2x_sqrt
BA 11- [INSTALL] Documentation of RUNTEST
   12- library function bestapprPade
   13- library function gen_factored_order, Fp_factored_order
   14- macros retmkvec, retmkvec2, retmkvec3, retmkvec4, retmkcol, retmkcol2,
       retmkmat, retmkmat2, retmkintmod, retmkpolmod
       retmkintmod, retmkpolmod, retconst_col, retconst_vec
   15- allow Ser(t_VECSMALL)
BA 16- library function gsprintf/gvsprintf
BA 17- new PARI type t_ERROR (error messages)
BA 18- new error trapping system and GP functions iferr,iferrname
BA 19- implement lngamma(t_PADIC)
LGr20- new PARI functions F2m_gauss, F2m_inv, F2m_rank, F2m_image, matid_F2m,
       F2m_mul, F2m_F2c_mul
BA 21- GP function getenv
   22- new error class e_PRIME [ pari_err() ]
BA 23- low-level function int_bit
   24- library function stack_strcat
   25- function polredbest [ adapting a preliminary patch by BA ]
BA 26- library functions Fl_invsafe, F2x_halfgcd, Flx_Flxq_eval and Flx_FlxqV_eval.
BA 27- support for sparse matrix and Wiedemann algorithm
   28- GP function vecsearch() [ use with vecsort() ]
BA 29- library function Z_issmooth
BA 30- linear sieve algorithm for Fp_log/znlog
BA 31- library functions Flx_to_FlxX, F2m_to_Flm, F2c_to_Flc, and Flxq_powu
   32- GP function idealnumden()
LGr33- library function uprecprime()
   34- library function ZM_pivots()
   35- library functions nm_Z_mul, ZM_togglesign, ZM_nm_mul [ to improve Zlm_gauss ]
BA 36- [breakloop] GP functions dbg_up/dbg_down (like gdb up/down)
   37- library functions rootsof1_Fp, rootsof1u_Fp, rootsof1_Fl
BA 38- GP functions dbg_x (like \x) and dbg_err (current error data)
   39- matconcat()
BA 40- library functions Flm_Fl_add, Flm_invimage, FlxY_evalx
BA 41- library functions Flx_ffisom, Flx_ffintersect, Flxq_ffisom_inv
BA 42- library functions Flx_is_irred, Flx_is_smooth, F2x_is_irred
BA 43- accessors functions for t_CLOSURE: closure_arity,closure_codestr,closure_get_*
   44- library functions ZMs_ZC_mul, ZpMs_ZpCs_solve, gen_ZpM_Dixon
BA 45- [breakloop] GP function breakpoint
BA 46- GP function ffnbirred
BA 47- cubic sieve algorithm for Flxq_log
BA 48- library functions F2x_F2xqV_eval, F2x_F2xq_eval
BA 49- forqfvec()
BA 50- library functions FqM_image, FqM_rank, FpXQXQ_powers, FpXQXQ_matrix_pow
BA 51- ellgroup(,,1): also return the generators
BA 52- library functions FpVV_to_mod, FpE_changepoint, FpE_changepointinv
BA 53- GP syntax [a..b] : [a,a+1,...,b]
BA 54- GP syntax [a(x)|x<-b,c(x)] : apply(a,select(c,b))
BA 55- GP syntax M[a..b,^c] : vecextract(M,"a..b","^c")
BA 56- library function FpE_log
   57- select(f, v, 1) for indirect selection
   58- hamming() function [initial implementation CG]
   59- ispowerful() function
   60- polgraeffe() function
   61- functions poliscyclo(), poliscycloprod(), polcyclofactors()
   62- function setbinop(f,X,Y) = { f(x,y), x in X, y in Y }
   63- libpari function moebiusu()
   64- sumdigits() function
   65- libpari functions addiu, addui, subiu, subui, uissquare
   66- randomprime() function. Allow random([a,b])  (return n, a <= n <= b)
   67- ispolygonal() function
   68- libpari functions uissquarefree, uposisfundamental, unegisfundamental
   69- istotient() function
   70- implement Haible/Papanikolaou binary splitting
BA 71- PARI functions FlxqX_nbroots, FpXQX_nbroots, FpXQX_nbfact.
BA 72- PARI function zv_search
BA 73- GP syntax: multiif if(a==1,b,a==2,c,default).
BA 74- GP syntax: multi assignement: [a,b,c]=V -> a=V[1];b=V[2];c=V[3]
BA 75- PARI functions gen_gener, gen_ellgroup, gen_ellgens, gen_powers
BA 76- FlxqE functions family (for elliptic curves over field of small characteristic>3)
BA 77- PARI functions Flxq_sqrt, FpXQ_sqrt
   78- bernpol() function
   79- sumformal() function
BA 80- PARI functions ZX_equal1, zvV_equal, ZXV_equal, FpXX_neg, FqX_neg
BA 81- FpXQE functions family (for elliptic curves over field of large characteristic)
BA 82- added GP function ellcard
BA 83- PARI functions FpXQ_powu, Fq_powu, FpXX_mulu, Fq_mulu, Fq_div
BA 84- PARI functions FqXQ_powers, FqXQ_matrix_pow, FqX_mulu, FqX_Fq_add
BA 85- PARI functions FqXY_eval, FqXY_evalx, FpXY_Fq_evaly
BA 86- SEA over non-prime finite field (for char p > 1000)
LGr87- Add clock_gettime timer option
   88- add new error type e_DOMAIN
BA 89- Add black box finite fields for generic linear algebra
BA 90- PARI functions FlxqM_image, FlxqM_ker, FqM_deplin
BA 91- GP function ellneg
BA 92- PARI functions Fp_ellcard, FpXQ_ellcard, Flxq_ellcard
LGr93- vecmax / vecmin: add optional pointer argument (to hold index of a
       largest/smallest entry)
   94- printsep() function
CG 95- isprimepower() function
   96- PARI functions F2v_to_F2x, F2x_valrem, F2x_deflate, F2x_shift
   97- PARI function RgV_polint
BA 98- GP function digits
   99- GP default 'sopath' [ rewritten from initial patch by GTo ]
LGr100- allow polylog(n, t_SER) around a != 0
BA 101- PARI functions ZX_shifti, ZX_remi2n, ZXV_remi2n
   102- PARI functions cxexp1, mpsincos1
BA 103- GP function ellfromj
   103- GP function forcomposite
   104- new error class e_PRIORITY [ pari_err() ]
BA 105- Add black box algebra for Brent and Kung algorithm
   106- PARI function RgM_dimensions()
BA 107- PARI functions RgX_splitting(), Flx_splitting()
   108- made public the CATCH / TRY interface, renamed pari_CATCH / pari_TRY
        PARI functions err_get_num(), err_get_compo(), pari_err_last()
   109- PARI function stack_sprintf()
   110- PARI function RgX_is_QX()
BA 111- PARI functions retmkmat2,retmkcol2,mkmat2,mkcol2,mkcols,mkcol2s et al.
BA 112- PARI functions ZXV_dotproduct(), ZXX_Z_divexact()
BA 113- PARI function gen_ZpX_Newton()
   114- optional argument to contfracpnqn: return all convergents up to
        p_n/q_n, not only the last 2
BA 115- PARI functions Flxq_autpow, F2xq_autpow
BA 116- PARI functions FpX_divrem_Barrett and unconditional FpX_rem_Barrett
BA 117- PARI functions F2xq_sqrt_fast, Flxq_lroot, Flxq_lroot_fast
BA 118- PARI functions FlxqV_dotproduct, FlxV_red
BA 119- PARI functions ZpXQ_inv, ZpXQ_invlift, ZpXQ_log
   120- PARI functions absi_shallow, mpabs_shallow, absfrac_shallow,
BA 121- PARI functions FlxX_Flx_add, FlxX_Fl_mul, FlxX_Flx_mul, FlxX_neg
BA 122- PARI functions Fp_ellj, FpXQ_ellj, Flxq_ellj
BA 123- PARI functions FpX_mulu, Flx_mulu, ZX_mulu
BA 124- PARI functions FlxqXQV_autpow, FlxqXQV_autsum
BA 125- PARI functions FpXQXQV_autpow, FpXQXQV_autsum
BA 126- PARI functions FpXT_red, FlxT_red, ZXT_to_FlxT, ZXT_remi2n
BA 127- Support for preconditionned reduction in FpXQ/Flxq
   128- PARI functions padic_to_Q, padic_to_Q_shallow, QpV_to_QV, Q_pvalrem,
        ZX_Zp_root, Zp_appr, Fp_muls, retmkfrac
BA 129- Add safegel et al. for GP2C -C option
HC 130- Function sqrtnint
   131- sumdivmult() to sum multiplicative functions
   132- ?? online help: allow searching labels, e.g. ??"se:priority"@
   133- PARI function ZpM_echelon, zlm_echelon
   134- GP functions matqr and mathouseholder, PARI functions QR_init,
        QgM_QR_init, gaussred_from_QR, R_from_QR, gtomp, RgC_gtomp, RgM_gtomp
   135- PARI functions trivial_fact, prime_fact
   136- PARI function rfrac_to_ser
   137- PARI functions padic_lindep, Xadic_lindep
   138- GP function seralgdep
BA 139- arm, mips and mips64 level0 inline assembly kernel
   140- new error class e_COMPONENT
   141- PARI functions init_primepointer_geq, init_primepointer_gt,
        init_primepointer_leq, init_primepointer_lt
BA 142- new default strictargs for mandatory arguments
   143- GP function nfcertify
   144- GP function ellchangepointinv
   145- optional 'variable' argument to polresultantext()
   146- export part of the ifac_* interface (ifact_start, ifact_next,
        ifac_read, ifac_skip, ifac_isprime)
   147- PARI function expIxy
   148- poor man's graphic engine 'plotps' (Configure --graphic=ps) when
        no graphic library is available; dumps the hi-res plot to a temporary
        PostScript file, then opens a PostScript viewer ('open -W' by default,
        $GP_POSTSCRIPT_VIEWER otherwise). Works around #1354 on OS/X.

    1- dropped DOS support
    2- qfrep(): bit 2 of flag is now meaningless, we now always return a
    3- file language/errmsg.c and global errmessage[] array: all error
       messages are now part of pari_err_display())
    4- error types arither1,mattype1,notpoler (merged with typeer), matinv1
       (merged with gdiver)
    5- legacy lindep and PSLQ implementations [algdep/lindep with
       negative flags]: now use LLL in all cases.
BA  6- [libpari] removed unusable functions dbg_close/dbg_release.
    7- [libpari] gisfundamental, gkronecker, gbigomega, geulerphi,
       gissquarefree, gmoebius, gnextprime, gnumbdiv, gomega, gprecprime,
       gsumdiv, gdumdivk, znprimroot0
    8- ellsigma: flags 3 and 4 [ inefficient algorithm using the product
       formula ]
    9- Member function 'w' (this is technical, and no longer needed:-)
   10- obsolete function weipell(). Use ellwpseries()
   11- [libpari] obsolete function Polred. Use polredbest
Karim Belabas, IMB (UMR 5251)  Tel: (+33) (0)5 40 00 26 17
Universite Bordeaux 1          Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation    http://www.math.u-bordeaux1.fr/~kbelabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux1.fr/  [PARI/GP]