Karim Belabas on Wed, 16 Sep 2020 16:11:35 +0200


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

pari-2.12.1 released [BETA]


Dear PARI lovers,

I would like to announce the release of pari-2.12.1-BETA !

It contains major improvements to the Number Fields module and lots of cool
new functions and features. And bug fixes.

Sources and binaries for Windows or MacOS can be obtained through the address
  http://pari.math.u-bordeaux.fr/download.html

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

Have fun !

  K.B.

HIGHLIGHTS FOR PARI-2.12.1-BETA: see below for COMPATIBILITY ISSUES.
================================

[Number Fields]
  - Number fields functions now allow compact representations of algebraic
    numbers, as factorization matrices: products of "small" elements possibly
    raised to huge powers. This is very useful for units and S-units or
    principal ideals generators, which may be huge in expanded form. Functions
    transparently process such objects but, for compatibility reasons, they are
    not created by default, this must be specified as follows:
    * bnf = bnfinit(pol, 1) now constructs an algebraic bnf structure
      containing all data (including units) in exact compact form.
      This is the critical step. Class field theoretic functions involving bnf
      will process units in compact form, allowing them to succeed
      independently of their size or the working precision.
    * new GP function bnfunits(bnf, optional S) returns the fundamental
      S-units in compact form [ bnf.fu returns the units in expanded form
      which can be expensive ].
    * bnfisprincipal(bnf,id,4) or bnrisprincipal(bnr,id,4) return
      the principal part of the discrete logarithm in compact form.
    Without optional flags, nothing changes: old programs should run
    without modification and fail when units are large. New programs should
    use the new flags.

  - The old bnrinit(, 1) flag [ include explicit bnr generators in the output ]
    was mandatory in many class field theoretic functions. Not anymore: their
    internal compact representation is always sufficient. You can still use
    them for debugging but they are expensive and no longer needed elsewhere.

  - The bnrinit function computes general ray class groups G = Cl_f(K) but we
    are often interested in simpler quotients G/H, e.g., G/G^N for abelian
    extensions of exponent N. The function bnrinit now accepts an optional
    argument to specify N; later calls to bnrisprincipal solve the discrete
    logarithm in this quotient group and are now only correct modulo N, which
    is adequate if we actually want to work in G/H for any congruence subgroup
    of index dividing N. This trick avoids expensive discrete logarithms if the
    modulus f is large. This is used intensively in PARI internals, speeding
    up all class field theoretic functions.

    The rnfconductor function, which computes a pair (f,H) attached to an
    abelian extension K[X]/(T) of the base field K together with a bnr
    structure for G = Cl_f(K), now accepts a new flag to return G / G^deg(T),
    which is less expensive and usually sufficient.

    The same trick is available in idealstar for the group G = (Z_K/f)^*,
    allowing to compute in G/G^N; ideallog then returns results which are
    correct modulo N.

  - new GP function bnrmap to map ray class groups Cl_A -> Cl_B when B | A.
    This also works with ray class groups modulo N provided the exponent of
    Cl_A divides N

  - nfsubfields: add van Hoeij-Klueners-Novocin algorithm to the existing
    algorithms of Klueners (doesn't run in polynomial time) and Allombert
    (not always applicable). The running time is polynomial in the output size.
    New GP functions nfsubfieldsmax (maximal subfields) and nfsubfieldscm
    (maximal CM subfield), both of which always run in polynomial time
    because their output is provably small.

  - new GP member function nf.p returning rational ramified primes;
    rnf.p returns rational primes dividing the norm of the relative
    discriminant ideal.

  - allow nfinit([T, Z_K basis, ramified primes]) when all arithmetic
    invariants are known.

  - galoisinit: the definition of "weakly super-solvable" groups, supported
    by the function, is less restrictive. For instance, there are no
    exceptions in order < 48 and 23 exceptions in order < 144, 40% of them in
    order 96. There were 29 such exceptions in 2.12.0.

[Transcendental functions]
  - faster exp(small rational number) using binary splitting. E.g, at 10^6
    decimal digits of accuracy, exp(1/3) is now computed in 0.2s, about 50
    times faster than in pari-2.11.
  - faster formulas for Catalan() and log(2)
  - x^s: faster and more precise when s is a t_COMPLEX
  - add optional argument to sqrtint to obtain the remainder as well
  - gammamellininvinit(A): allow A to be an L-function; this also allowed
    in gammamellininv and gammamellininvasymp.

[Multiple Zeta Values]
  - new GP function polylogmult for multiple polylogarithm values and their
    Yamamoto interpolation.
  - new GP function zetamultdual: zetamultdual([4]) -> [2,1,1]
    (the corresponding Muliple Zeta Value is the same).
  - zetamult now accepts an optional parameter t for Yamamoto's
    interpolation; in particular for t = 1, we obtain star MZVs and for
    t = 'x, Yamamoto's polynomial.
  - zetamultall: add optional flag to compute only values of given weight,
    and/or up to duality, and/or star values.

[Elementary Number Theory]
  - new GP function eulerianpol (eulerian polynomials), eulerpol (Euler
    polynomials), eulerfrac (Euler numbers), eulervec (vector [E_0, ..., E_2n]).
  - new GP function halfgcd: given polynomials or integers [x,y], compute an
    invertible matrix M such that M * [x,y]~ = [a,b]~ with b small (half the
    "size" of [x,y]).
  - qfbsolve: new optional flag to ask for all solutions modulo units (vs. a
    single solution) or to allow non-primitive solutions.
  - randomprime: new optional argument to specify a congruence class.
    E.g. randomprime([2^31, 2^32-1], 7) -> a 32-bit prime congruent to 1 mod 7.
         randomprime([a, b], Mod(2,3)) -> a prime = 2 mod 3 in [a,b]

[Polynomials and Power series]
  - polrootsreal: faster due to asymptotically fast P(X) -> P(X+a) algorithm
  - power series and truncated polynomials: systematic use of Newton division
  - polrootspadic: allow computing roots in unramified extensions of Q_p
    E.g. T = y^2+y+1; p = 2;
         polrootspadic(x^3-x^2+64*y, [T,p], 5);
  - new GP function rootsof1(N): complex roots of unity of order N.
  - new GP functions fft, fftinv: Fast Fourier Transform of order 2^n and its
    inverse, given roots of unity. Supports general base rings,
    e.g., finite rings.

[Linear Algebra]
  - matsnf(integral matrix): now uses a modular algorithm.
  - matrixqz(,-1 or -2): faster implementation.
  - matrank, matker over the integers: faster implementation for large
    rectangular matrices.
  - qflll(x, 3) in place reduction: return x * qflll(x) [faster].

[Curves]
  - new GP function ellpadiclambdamu: Iwasawa invariants lambda and mu for
    the p-adic L function L_p(E), where p is a prime of good or bad
    multiplicative reduction for the elliptic curve E/Q.
  - hyperellpadicfrobenius: allow X defined over a number field and
    compute Frobenius over unramified extension of Q_p. E.g.,
      M = hyperellpadicfrobenius(x^5 + 'a  * x + 1, ['a^2+1,3], 10);
    (over Q_9, to 10 3-adic digits of accuracy)

[L-functions and Modular Forms]
  - new GP function lfundual (to manipulate the dual L-function) and
    lfunshift (to manipulate L(s + a))
  - new GP function mfisetaquo(f): can f be represented as a meromorphic eta
    quotient ?
  - new GP function dirpowerssum for fast computation of 1^s + 2^s + ... + N^s
  - exact (fast!) rational formulas for quadratic Dirichlet L-functions at
    non-positive integers. E.g.
      lfun(1, -7) -> 1/240 [ = zeta(-7) ]
      lfun(-691, -2) -> -175118   [ = L(chi_{-691}, -2) ]
  - lfuncreate(v) can now correctly handle non-rational data: instead of
    v = [a, asta, Vga, k, N, eps, poles], v can now be a closure (without
    arguments) evaluating to such a vector at current working precision.
  - lfuncreate([G,v]): where G is (Z/NZ)^* or a ray class group and v a
    vector of characters with the same conductor. This vector-valued L-function
    allows fast simultaneous evaluation for multiple characters. E.g.,
      F = [Mat(160), [1]];
      G = bnrinit(bnfinit(x), F); \\ ray class group
      \\ vector of all primitive characters
      v = [ c | c <- bnrchar(G, [1]), bnrconductor(G, c) == F ];
      L = lfuncreate([G, v]);
      lfun(L,1); \\ evaluate all L(chi, 1) simultaneously
  - improved zetahurwitz: faster & use less memory.
  - parallel support for lfuninit.

[Miscellaneous]
  - new GP function asympnumraw: extrapolate the first terms of the asymptotic
    expansion of some expression; more robust and versatile than asympnum
    (which only supports rational expansions). E.g.,
      f(n) = n! / (sqrt(n) * (n/exp(1))^n);
      \p100
      v = asympnumraw(f, 10);
      bestappr(v/v[1])
    returns 10 terms of Stirling's expansion without needing to identify
    v[1] = sqrt(2*Pi); asympnum would fail because of the v[1] 'period'.
  - new GP function permcycles to return the decomposition of a permutation
    as a product of disjoint cycles.
  - new GP function mscosets to construct H\G given generators for
    a group G and a description of a subgroup H

    ? PSL2 = [[0,1;-1,0], [1,1;0,1]];  \\ S and T
    \\ G = PSL2, H = Gamma0(2)
    ? [C] = mscosets(PSL2, g -> g[2,1] % 2 == 0);
    ? C \\ three cosets
    %3 = [[1, 0; 0, 1], [0, 1; -1, 0], [0, 1; -1, -1]]

    The function also returns the right action of G on H\G.

  - new GP function msfarey to build subgroups H of G = PSL_2(Z) (as Farey
    symbols) given an oracle deciding whether an element of G belongs to H.

    \\ Gamma_0(N) is built-in
    G0(N) = mspolygon(N);
     
    \\ Gamma_1(N) via Gamma_0(N)
    G1(N) = msfarey(G0(N), g -> my(a = g[1,1] % N); a == 1 || a == N-1);
     
    \\ Gamma(N)
    G(N) = msfarey(G1(N), g -> g[1,2] % N == 0);

[The GP language]
  - new GP function matreduce, to convert a multiset to a vector of distinct
    elements together with their multiplicities:
    ? matreduce([x,y,z,x,x,y])
    %2 = 
    [x 3]
  
    [y 2]
  
    [z 1]

    Can also be used to merge factorizations:
    F1 = factor(12);
    F2 = factor(20);
    matreduce(matconcat([F1,F2]~)) -> factor(12 * 20)

  - lexical variables names can now reuse builtin functions names as in
    f(theta) = my(gamma=1/3); sum(omega=1,10, exp(2*I*Pi*gamma*theta*omega);
  - GP closures improvement: no longer copy the full context, only the
    variables actually accessed by the function.
  - allow holes in multi-assignements: [a,,c]=[1,2,3].
  - support plotinit/plotexport even when no graphic engine is available
    (Configure --graphic=none).
  - new parallel GP function parplothexport, parforprimestep, parforeach.


COMPATIBILITY ISSUES BETWEEN 2.12.0 and 2.12.1
============================================

0) Obsoleted functions and interfaces:
  - removed obsolete functions 'bnfcompress' and 'zetamultinit'
  - 'bnfissunit' is obsolete, use bnfisunit
  - 'rnfkummer' is obsolete, use bnrclassfield!
  - bnf.fu returns fundamental units in expanded form and can be very
    expensive. Use bnfunits !
  - bnfsunit()[1] returns fundamental S-units (without units) in expanded
    form and can be very expensive. More generally, bnfsunit contains mostly
    useless information in an expensive form and is now mostly obsolete.
    Use bnfunits !

1) Output changes:
  - qfbsolve (revert 2-12-0 C18); we had changed the interface to
    return all solutions modulo units instead of a single solution in 2.11.
    For compatibility reasons, we restored the old behaviour by default, an
    optional flag allows to get more diverse data (all solutions, all primitive
    solutions, a single solution).
  - matrixqz(,-1 or -2): no longer return result in HNF (very expensive now
    that the functions have been sped up and often not needed).
  - bnfisunit and bnfissunit: the torsion unit exponent is now a t_INT
    (used to be a t_INTMOD, requiring awkward conversions).

2) Input changes:
  - zetamult: the optional 'zetamultinit' argument is gone (the implemented
    algorithm is uniformly faster than the old one which made use of this
    precomputation)
  - parsum: removed optional argument initializing the sum to the given value
    [this wasn't very useful and removing it allows grouping subsums => faster]
  - mfshimura: disallow the discriminant D argument (not well defined);
    only allow squarefree positive t
  - disallow mfeisenstein(k,chi1,chi2) when Q(chi1 chi2) is not its field
    of definition: the resulting modular form would violate asumptions made
    in almost all mf routines, preventing those routines from accepting the
    form.
-------------------------------------------------------------------------------

P.S. The Changelog 

Bug numbers refer to the BTS at http://pari.math.u-bordeaux.fr/Bugs/

Done for version 2.12.1 (released 14/09/2020):
  Fixed
BA   1- plotlines flag was ignored
     2- fileopen(,"w" or "a") was bypassing the check for 'secure' default
     3- bug in idealismaximal: K=nfinit(y^2+7); idealismaximal(K,[11,7;0,1])->0
     4- bnfcertify did not certify correctly its argument when DEBUGLEVEL > 1
        (\g 2 and above) and the computed class group was trivial (introduced
        in 2002, commit d3d44841). The code was correct at \g1 or \g0, and in
        all cases if the computed class group was non-trivial.
     5- nfdiscfactors(nfinit([x^2+1, [1,x]])) -> wrong result (didn't support
        inputs from nfinit([T, integer basis]))
     6- nfinit(rnf) would produce a broken nf (not supporting
        nf_get_ramified_primes)
     7- [mf,F] = mffromqf([2,0;0,2]); L=lfunmf(mf,F) => wrong values
     8- t=mfTheta();mfslashexpansion(mfinit(t),t,[0,1;-1,0],1,1) -> error
     9- poldisc(x^4 + 8/y*x) -> type error in Q_divi_to_int [#2157]
    10- T=mfTheta(); mfeval(mfinit(T),T,I/10) -> wrong sign
    11- mfslashexpansion(mf,F,huge matrix,...) -> overflow
    12- mf=mfinit([470,2],0);F=mfeigenbasis(mf)[7]; mfcuspval(mf,F,1/5)
        -> division by 0
    13- quadtofp(quadgen(-3)) -> t_FRAC component [#2158]
    14- [from 2.12.0] nfgcd wouldn't terminate [#2159]
    15- conjvec(t_FFELT of characteristic 2) was missing a conjugate
    16- nf2 = nfnewprec(nf) could return incompatible nf2 [#2154]
    17- [from 2.12.0] u_forprime_next around 2^63 could return primes larger
        than upper bound
    18- [from 2.12.0] gcd(2*x, 2*x+1) -> 2 [instead of 1]
    19- [from 2.12.0] deriv(2/(4*x^2+1),x)->inconsistent exact division [#2162]
    20- issquare(non square t_FFELT, &x) -> SEGV [#2163]
    21- rdivii / rdiviiz imprecise, e.g.
        a=28088408347805994933529600180306266460976;
        b=10333147966386144929666651337523200000000; rdivii(a, b)
    22- typo in QM_inv (wrong result)
    23- modular symbols package: better type checks
    24- division by 0 in Flx_extresultant when one input is 0
    25- [from 2.12.0] lfunconductor(1,[]) -> SEGV
    26- internal error in isprime(,1) after addprime() [#2166]
    27- ZM_gauss returned incorrect result for t_MAT RHS and 0 input
BA  28- lfunhardy(..., t) with t<0 -> error
BA  29- ellweilpairing(E,P,P, odd m) -> wrong result [#2172]
PB  30- FlxqM_mul could return wrong result [#2174]
    31- p = 4*vecprod(primes([3,373]))*587-1; quadclassunit(-p) -> SEGV [#2175]
BA  32- Using local in export()ed functions could crash GP
    33- Flx_div_by_X_x(A, x) didn't handle deg(A) <= 0
    34- M=mfinit([11,2,Mod(3,11)]); f=mfbasis(M)[1]; lfuncheckfeq(lfunmf(M,f))
        -> type error
    35- rare random SEGV in nfbasis [#2178]
    36- missing type checks in lfunthetacheckinit [#2179]
    37- idealispower(x,n,&y): y could be incorrect [#2181]
    38- SEGV in idealispower [#2183]
    39- inconsistencies in subst for constant polynomials: e.g.,
          type(subst('u^0,u,x)) -> t_POL (was t_INT)
          subst('u^0,u,Mat(Mod(1,2))) -> [Mod(1,2)] (was [1])
XR  40- factorpadic: incorrect factors (might not lift to Qp)
        E.g. T=polsubcyclo(271,9); factorpadic(T,3,7)[4,1]
BA  41- polcompositum(x^2+x/3+1,x^2+x/3+1) -> SEGV
    42- p=nextprime(2^20);q=nextprime(2*p);n=q*p;v=n+1;P=x^2-1;
        zncoppersmith(v*P,v*n,p,p*v) --> oo loop
    43- missing reduction of pr.gen in idealprimedec [ slowdown ]
        + nfmodprinit [ division by 0 ]
JR  44- polylog(-m, tiny z): catastrophic cancellation, e.g. polylog(-100,.5)
    45- prodeulerrat((p-2)/(p-1)+(p-1)^(m-1)/p^m,1,3) slow and imprecise [#2192]
    46- Mod(1,5) * O(x) -> O(x) [instead of Mod(0,5) + O(x)]
    47- lfuninit: lfunrootres calls too expensive if rootno and polar part known
    48- incorrect rounding in divrr(realprec = 3)
    49- polrootsreal(x+0.) -> SEGV
DB  50- mspolygon(1,2): incorrect drawing
    51- qflllgram([2,2,3;4,5,6]) -> SEGV
    52- printf("%10.6f\n",2^-100) -> SEGV [#2198]
    53- mfsturm: off-by-1 error
BA  54- ((x^7+x^3+x+1)*Mod(1,Mod(1,2)*d))%(x^4+x^3+x^2+1)->x^3+x
        instead of Mod(1,2)*x^3+Mod(1,2)*x [#2199]
    55- tan(-127336279536511925./2^49) -> completely wrong at \pb64
    56- ellocalred / K != Q: wrong encoding for I0 (kod = 1 instead of 0)
    57- atanh near -1: large relative error
    58- acosh near 1 or -1: large relative error
    59- type(subst('x^0,'y,0)) -> t_INT (instead of t_POL)
    60- bnfisprincipal: overflow when h >> 1
    61- lfun: Pi^s or (2Pi)^s imprecise when Im(s) >> 1
BA  62- factor((x-1)*(x-y)^2) --> oo-loop
BA  63- ellap could fail with division by 0
    64- wrong results in bnfsunit [#2207]
    65- problems with gequal(t_SER or t_POL with inexact coefs or constant
        wrt. some variables). E.g. S=x+O(x^2);T=S+O(y); S == T -> 0 [#2188]
    66- mfkohnenbijection failure [#2211]
MW  67- mateigen would sometime return eigenvalues instead of eigenvectors
AE  68- [libpari] FpX_oneroot_split could fail for deg 2 and 3.
BA  69- [pthread] Fix potential crashes when cancelling threads.
    70- derivnum: add sanity checks for 'ind' [#2216]
NM  71- nfisincl(x^2-2^5,nfinit(x^4-2)) -> wrong result [#2213, #2214]
    72- nfeltsign: wrong results for non-primitive elements in presence of
        ramification at infinity [#2217]
HC  73- F=mfbracket(mfbd(mfEk(4),4),mfTheta(),1); mfcoefs(F,0) -> SEGV
    74- gammamellininv([0, 10^-38], 3/10) -> junk
    75- mfshimura, mfkohnenbijection: could create mf spaces with
        inconsistent character.
BA  76- [mpi] sending t_LIST to remote nodes did not work.
BA  77- my(a,b); parvector(1,i,self()) --> SEGV
AP  78- bnrclassfield(,,2) --> sometimes relative polynomial
AP  79- nfgrunwaldwang could modify its arguments
    80- ldata_vecan(an, N, prec): make sure the function returns N coefficients
    81- T=Pol([1,0,6748,-750056,45535504,-2530688944,140646000784]);
        bnfinit(T,1).cyc -> [240, 12, 4, 2, 2, 2] (instead of [120, 4, 4, 2])
BA  82- [mt] variable priorities in threads could be incorrect.
    83- galoissubcyclo: wrong result with bnr input [#2232]
    84- subgrouplist(bnr) != [] when modulus is not the conductor
    85- incorrect type checks in ideallist
BA  86- polmodular(p,,q) incorrect for large q
BA  87- [pthread] polgalois(deg>7) could crash
    88- forqfvec or qfminim with negative bound => crash [#2237]
    89- Z_issmooth_fact: incorrectly include 1 among prime factors
    90- Rg[MX]_rescale_to_int: result had a large power-of-2 content
DJ  91- sqrtn(Mod(13,112),6) -> o loop [instead of 'bad input' error]
    92- addprimes() creates issues with nfdisc [wrong results], because it
        breaks the assumption that a potential composite in a "bounded
        factorization" has to come last.
    93- addprimes() creates issues with thue [wrong results].
        addprimes(360000000029);
        #thue(x^2+1,500009*500029* 360000000029* 2^100) -> 0 [instead of 32]
    94- factor(257377849,100) -> [61,2; 69169,1] instead of  [61,2; 263,2]
    95- addprimes() creates issues with nffactor [wrong results].
    96- gmulsg(0, t_REAL) followed mulsr semantic (t_REAL) instead of gmul's
       (t_INT). Analogous problem for gmulsg(0, t_COMPLEX)

  Changed
     1- [libpari] rename rootsof1 -> nfrootsof1
     2- [libpari] rename isirreducible -> polisirreducible
     3- hyperellpadicfrobenius: allow X defined over a number field and
        compute Frobenius over unramified extension of Q_p
     4- matsnf(integral matrix): use modular algorithm
     5- rnf structure now contains the list of relative ramified primes
     6- use the documented semantic for Euclidean division involving real t_QUAD
        e.g. x % y is x - floor(x/y)*y; for a t_QUAD x and t_INT y, we used
        to mod out y in "real" and "imaginary" part independently.
     7- [libpari] rename rootpadic -> polrootspadic
     8- polrootspadic: allow computing roots in unramified extension of Q_p
     9- definition of lfunhardy for non-self-dual functions: remove
        rootnumber, which is not well defined since it depends on the choice
        of dual sequence a^*(n)
    10- improved RgXn_powu / RgXn_powu_i for large valuations
    11- improved ZM_ker for wide rectangular matrices
    12- lfun(t_INT D): allow arbitrary non-0 D encoding the attached
        primitive character coredisc(D) (as for other character formats)
    13- exp(small rational number): use binary splitting
    14- parsum: removed optional argument [allows grouping of subsums => faster]
BA  15- old gen_ZpM_Dixon renamed to gen_ZpM_Dixon_Wiedemann,
        new gen_ZpM_Dixon with simpler interface
    16- better formula for Catalan
BA  17- QXQ_div_ratlift renamed to QXQ_div
    18- disallow mfeisenstein(k,chi1,chi2) when Q(chi1 chi2) is not its field
        of definition
    19- improved ZM_rank for rectangular matrices
    20- asymptotically fast variant for RgX_translate algorithms
    21- ZX_Uspensky(flag = 0) is now guaranteed to find all rational roots
    22- lfunzeros: allow intervals not contained in R^+
    23- removed obsolete function 'bnfcompress'
    24- [libpari] rename perf -> qfperfection
    25- format of bnf structure, to allow compact representations
BA  26- [libpari] Z_to_F2x(s,v): v is now a shifted variable number
AP  27- matrixqz(,-1 or -2): faster code + no longer return result in HNF
AP  28- allow nfsubfields([nf,fa],): van Hoeij-Klueners-Novocin algorithm
    29- nfsubfields: retune to avoid huge inertia degrees
BA  30- qfbsolve new flag: bit 1: 1 solution, bit 2: add imprimitive solutions
BA  31- revert 2-12-0 C18: qfbsolve with default flag = previous behaviour
    32- division/inversion power series: use Newton
    33- deprecate LLL_COMPATIBLE (now implicitly always set)
    34- bnfissunit is obsolete, use bnfisunit
    35- bnfsunit is mostly obsolete, use bnfunits
    36- bnfisunit and bnfissunit: torsion unit exponent is now a t_INT (used
        to be a t_INTMOD)
    37- support compact representation in nfeltmul, nfeltpow, nfeltdiv,
        nfmodpr, nfeltsign
    38- elldivpol for negative n: define f_{-n} = -f_n [ was f_n ]
    39- support plotinit/plotexport even when the graphic engine is disabled
        (Configure --graphic=none)
    40- gpow(x,n): faster and more precise when n is a t_COMPLEX
    41- faster formula for log(2)
BA  42- nfgaloisconj(deg 2 pol): swap result to follow nfroots.
BA  43- lexical variables names can now reuse builtin functions names as in
        fun(theta)=my(gamma=1/3);sum(omega=1,10,exp(2*I*Pi*gamma*theta*omega)
    44- mfshimura: disallow the discriminant D argument, only allow
        squarefree positive t
BA  45- closures: do not copy the full context, only the accessible part
    46- add optional argument to randomprime [select congruence class]
    47- add optional argument to sqrtint [set remainder]  [#2229]
    48- gammamellininv*(A,...): allow A to be an L-function
    49- bnrinit: optional argument to compute Cl_f/n, avoid tough discrete logs
    50- rnfkummer: removed "all" flag, function now obsolete. Use bnrclassfield!
    51- rnfconductor: flag to compute Cl_f/[K:Q] instead of Cl_f
    52- bnrconductor_i is now obsolete, use bnrconductor_raw or bnrconductormod
    53- dvdxxx(x,y) allow y = 0 [and return 0 unless x = 0]
    54- [libpari] bnrsurjection now returns [matrix, cyc(F), cyc(f)]
    55- idealstar: optional argument to compute G/G^n, avoid tough discrete logs
HC  56- zetamultall: add flag
    57- subgrouplist: allow any object affording a .cyc method
    58- remove zetamultinit and corresponding optional argument in zetamult
    59- [libpari] ZM_lll: flags LLL_INPLACE and LLL_GRAM are now incompatible
        (reducing a Gram matrix in place without returning the base change
        matrix is not useful; supporting it would complicate the code)
AP  60- improve bnfisprincipal in fields of large degree (test more small
        elements)
    61- bnrgaloismatrix(bnr) no longer needs a bnr with generators
        (from bnrinit(,1))
    62- bnrisprincipal(bnr,1) no longer needs a bnr with generators
        (from bnrinit(,1)). Added flag 4 analogous to bnfisprincipal (compact
        representation of principal part)
    63- added sanity checks when parsing default args in 'install' prototypes
    64- improved zetahurwitz: faster & use less memory

  Added
     1- new GP function rootsof1
BA   2- [libpari] F2xqX_halfgcd, FFX_halfgcd
     3- [libpari] uis2psp, uispsp
     4- [libpari] ZV_lcm
     5- [libpari] nfhyperellpadicfrobenius
     6- [libpari] rnf_get_ramified_primes
     7- allow nfinit([T, basis, ramified primes])
     8- allow nf.p, rnf.p [rational ramified primes]
     9- [libpari] idealfactor_partial
    10- add flag bit to ZM_snfall_i
    11- allow real t_QUAD in floor, ceil, divrem, %, \, \/
    12- [libpari] ff_parse_Tp
    13- new GP function mfisetaquo
    14- [libpari] Qab_tracerel, QabV_tracerel, QabM_tracerel
BA  15- [libpari] RgXV_to_FlxV, FlxV_Flv_multieval,
                  F2v_and_inplace, F2v_negimply_inplace, F2v_or_inplace,
                  F2v_hamming
    16- [libpari] ZpX_primedec
BA  17- [libpari] QM_sqr, FqC_to_mod, ZXQX_gcd, QXQX_gcd
    18- [libpari] radicalu
    19- parallel support for lfuninit
    20- new GP function parplothexport
BA  21- [libpari] gen_ZpM_Newton, ZpM_invlift
BA  22- [libpari] F2xn_red, F2xn_inv, F2xX_to_F2xC, F2xXV_to_F2xM
HC  23- direct formulas for quadratic Dirichlet L-functions at integers
    24- new GP functions: eulerfrac, eulerpol, eulervec
    25- [libpari] lfunquadneg
BA  26- [libpari] vecvecsmall_sort_inplace, vecsmall_isconst, vecsmall_is1to1
BA  27- [libpari] groupelts_quotient, quotient_groupelts, groupelts_to_group
    28- new GP functions mscosets, msfarey
    29- new GP function ellpadiclambdamu
BA  30- [libpari] Flx_Fl_sub, Flx_is_totally_split, Flxq_autpowers
    31- [libpari] Flx_translate1_basecase
    32- [libpari] Vgaeasytheta
BA  33- [libpari] RgV_type, RgV_type2, closure_callgen0prec
BA  34- lfuncreate: support for closures of arity 0
    35- [libpari] ZX_sturm_irred, ZX_realroots_irred
    36- [libpari] QM_image, QM_image_shallow
    37- new GP function asympnumraw
    38- [libpari] QM_gauss_i, SL2_inv_shallow
    39- [libpari] checkfarey_i
    40- [libpari] mspadic_parse_chi, mspadic_unit_eigenvalue
    41- [libpari] ellQtwist_bsdperiod
    42- [libpari] mseval2_ooQ
    43- [libpari] etaquotype
    44- new GP functions fft, fftinv
BA  45- [libpari] init_Flxq
    46- compact representation of units in bnf (bnfinit(pol,1)) and of
        principal ideal generators (bnfisprincipal(bnf,id,4))
    47- [libpari] Flv_factorback, FlxqV_factorback, famatV_zv_factorback,
        famatV_factorback, FqV_factorback
    48- [libpari] nflogembed, nf_cxlog, nfV_cxlog, ZMrow_equal0, ZC_u_divexact
BA  49- [libpari] FpXn_expint, Flxn_expint, Flx_blocks, FlxX_blocks
    50- [libpari] bnf_get_sunits, nfsign_tu, nfsign_fu, ideallog_units,
        sunits_makecoprime, famat_remove_trivial, bnf_build_cheapfu,
        bnf_compactfu, bnf_compactfu_mat, bnf_has_fu, famat_idealfactor,
        famat_div, famat_nfvalrem
BA  51- [libpari] factorial_Fl, factorial_Fp, FpV_prod
BA  52- [libpari] ZX_compositum
BA  53- [libpari] FlxXn_red, FlxqXn_mul, FlxqXn_sqr, FlxqXn_inv, FlxqXn_expint
BA  54- [libpari] FlxX_Laplace, FlxX_invLaplace, FlxqX_Newton, FlxqX_fromNewton
    55- [libpari] RgV_count, RgV_equiv
    56- lfuncreate(znstar or bnr,): allow a vector of characters =>
        vector-valued L-function
    57- [libpari] gc_const
AP  58- [libpari] QM_ImZ, QM_ImZ_all, QM_ImQ, QM_ImQ_all
BA  59- [libpari] RgXn_expint, FpXQXn_expint, FqX_expint
AP  60- new GP functions nfsubfieldscm, nfsubfieldsmax
BA  61- new GP function lfunshift
    62- [libpari] Q_lval, Q_lvalrem
BA  63- [libpari] ZXX_evalx0, zx_z_divexact, zx_lval, upowers
    64- [libpari] is_qfb_t
    65- new GP function eulerianpol
BA  66- [libpari] FlxX_translate1, zlx_translate1, zlxX_translate1
    67- [libpari] rfracrecip
    68- [libpari] ZXQ_minpoly
    69- [libpari] bnrchar_primitive_raw
    70- new GP functions matreduce, bnfunits
BA  71- [libpari] QXQ_to_mod_shallow
    72- [libpari] nf_cxlog_normalize
BA  73- [libpari] cmpss, cmpuu
BA  74- [libpari] FpX_Fp_div, FpX_divu
BA  75- holes in multi-assignement: [a,,c]=[1,2,3]
    76- [libpari] expIPiR, expIPiC
BA  77- [libpari] forqfvec1, pariplot, sumdivmultexpr
    78- [libpari] powPis, pow2Pis
BA  79- nfisincl: new flag: return a single embedding
BA  80- [libpari] FpXC_to_mod, FpXM_to_mod, FqXC_to_mod, FqXM_to_mod
BA  81- [libpari] FFX_add, FpXY_FpXQ_evaly
BA  82- [libpari] halfgcdii, RgX_halfgcd
BA  83- new GP function halfgcd
BA  84- [libpari] pari_realloc_ip
BA  85- [libpari] random_zv, F2m_transpose, F2m_row
BA  86- [libpari] F2Ms_ker, F2Ms_colelim, F2Ms_to_F2m, F2m_to_F2Ms
    87- [libpari] Qdivis, Qdiviu
    88- [libpari] bnr_subgroup_check
    89- [libpari] pow2Pis, powPis
AP  90- [libpari] bnrisprincipalmod, ideallogmod
    91- [libpari] bnrconductor_raw, bnrconductor_factored
    92- [libpari] cyc_get_expo
    93- new GP function bnrmap
HC  94- new GP function polylogmult
    95- new GP function zetamultdual
    96- [libpari] checkbnr_i
    97- [libpari] absZ_factor_limit_strict
    98- [libpari] Idealstarmod, ZV_snf_gcd, ideallog_units0
BA  99- [libpari] FqC_FqV_mul
   100- [libpari] gen_sort_shallow, vecvecsmall_sort_shallow
BA 101- new GP functions parforprimestep, parforeach
BA 102- [libpari] ZXQ_powers, ZXX_Q_mul, QXQX_mul, QXQX_sqr, QXQX_powers
BA 103- [libpari] Kronecker_to_ZXQX, QXQX_QXQ_mul, ZXQX_ZXQ_mul
   104- [libpari] zv_sumpart, div_content, hash_zv
BA 105- [libpari] groupelts_conj_set, group_subgroup_is_faithful
   106- qflll(x,3) in place reduction: return x * qflll(x) [faster]
   107- [libpari] idealpseudominvec
   108- [libpari] galoismatrixapply
BA 109- new GP function permcycles
BA 110- [libpari] FpX_FpXV_multirem, FpXV_chinese
BA 111- galoisinit: support for group (3x3):4 (GAP4(36,9))
BA 112- [libpari] minim_zm
   113- new GP function dirpowerssum
   114- [libpari] vecfactorsquarefreeu_coprime
BA 115- [libpari] nfX_disc, nfX_resultant
BA 116- new GP function lfundual

  Removed
     1- obsolete function rootsof1_kannan: use nfrootsof1
     2- obsolete function checkbnrgen: use bnr_get_gen

Done for version 2.12.0 (released 01/06/2019):
  Fixed
     1- memory leaks due to the use of varhigher/varlower
     2- memory leak on error in plots
     3- memory leak on error in newtoncharpoly
     4- heap-buffer-overflow in init_prefix [readline]
     5- mfsplit(mf,,flag) could return uninitialized objects => SEGV
     6- mfeisenstein(k,,chi) was treated as E(k,chi) instead of E(k,1,chi)
     7- poldegree(y/x) -> 0 [ instead of -1 ]
     8- sumeulerrat(y/x^2,1) -> junk
HC   9- incgam(-1000.4,2) -> SEGV
    10- mfatkininit(mfinit([366,2]),2) -> precision error
    11- forprimestep: wrong when wrapping word boundary (2^32 or 64) [#2071]
    12- mfbracket: [f,g]_m was multiplied by (-1)^m
    13- wrong results in mfatkininit / mfatkineigenvalues due to insufficient
        precision [#2073/#2074]
    14- issquare(Mod(x,ffinit(3,2))) -> wrong result [broken Fq_ispower]
    15- possible SEGV in rnfpseudobasis(, [pol,lim])
    16- wrong result in elllog over F_p, p in [2^63,2^64[
        p=13824553909862352061; A=8953655473130154624; B=9775907253961339458;
        P=[6444058885176327583,7963649599850249187];
        E=ellinit([A,B],p); Q=ellmul(E,P,2);
        elllog(E,Q,P) -> 0 [ Flj_mulu_pre would not accept n >= 2^63 ]
    17- wrong result in mfsymboleval when path extremities are close to real
        axis (cusps were OK) [#2075]
    18- mfcoefs(mfDelta(),0) -> SEGV [#2078]
    19- GC error in lfuncreate(elliptic curve over number field) [#2080]
    20- X11 and Qt graphic engine: pari_close called too soon => crash
    21- pariold.h: mix up with obsoleted  taille / taille2
BA  22- foo(n)=vector(n)[1..n];123; would corrupt the GP interpreter [#2081]
    23- Pol(0)/'x -> t_INT 0 (instead of 0*x^0)
        Pol(0)/(Mod(1,2)*'x) -> t_INT 0 (instead of Mod(0,2)*x^0)
    24- missing typecheck in nfalgtobasis [#2084]
    25- dbllog2(t_COMPLEX of t_FRAC) => junk
    26- nffactor(t_POL, t_POL) => bug in LLL_cmbf [#2083]
    27- ideallog(pure archimedean conductor, t_FRAC) -> log(0) error
    28- lfunrootres: avoid oo-loop
    29- mfgaloistype: dihedral forms possibly incorrect for N > 3000
    30- mfgaloistype: error on mf=mfinit([1159,1,Mod(930,1159)],0);
    31- incorrect accuracy in limitnum / asympnum for alpha != 1
    32- missing GC in polint_i
    33- hash_GEN(x) returned different values depending on whether x was a clone
BA  34- [mpi] setting nbthreads in .gprc could lead to crashes.
    35- accuracy too large in derivnum => slowdown
    36- nfisincl(x^5-x^4+x^3-2*x^2+3*x-1,x^20+x^15+x^10+x^5+1) -> SEGV
    37- stack corruption in addsub_frac
AP  38- segfault in rnfidealup [#2093]
    39- Ser(x,x,0) -> error instead of O(x) [#2092]
    40- fix mspolygon(,2) [add 1/3rd hyperbolic triangles + fix labels]
    41- factor(3/(x^5+3*y*x^4+3*y^2*x^3+y^3*x^2)) -> SEGV
    42- output from bnfcompress() mistaken for rnf and vice-versa
    43- catastrophic cancellation in acosh / asinh for large t_COMPLEX
    44- zeta(1/2 + I*t) => internal error
    45- cos(z) and sin(z) imprecise when Im(z) is nonzero but tiny
BA  46- hyperellcharpoly: wrong results over Z/3Z
    47- gmp kernel: off-by-1 error in red_mongomery [read uninitialized
        memory, then ignores result]
    48- intnuminit([-1,-1/2],[1,-1/2]) twice slower than it should
    49- forcomposite(n=2,4,print(n)) -> empty [#2096]
    50- relative extension of degree 1 was not properly supported in
        rnfidealprimedec and rnfidealup
    51- mfmul(f,g) created invalid forms when f (resp. g) had Nebentypus chi
        (resp. chi') and Q(chi * chi') != Q(chi) or != Q(chi')
        [analogously for mfpow, mfdiv, mfbracket]
    52- let [N,k,chi] = mfparams(f); f had coefficients in Q(chi)
        [or an extension thereof for eigenforms] but the values obtained
        from znchar(chi) and chareval were incompatible with mfcoefs when
        order(chi) = 2 (mod 4) [same cyclotomic field but different
        cyclotomic polynomial]
FB  53- [Configure] library not found despite --with-readline-lib [#2097]
    54- besseli, besselj, besselk, besseln(nu, z): use asymptotic expansion
        for large z [#2006]
    55- minpoly(Mod(1,t^2)) -> SEGV [#2102]
    56- a=ffgen(3^2,'a);poldisc(x^6+a*x+y) -> division by 0 [ positive
        characteristic with a few t_INT coefficients ]
    57- intnumgaussinit(n) actually used 2*ceil(max(4,n/2)) quadrature points
BA  58- [pthread] parapply could crash
BA  59- ffinvmap(m) could SEGV on bad input
    60- ellisdivisible(E/K number field in 'x) -> incorrect priority[#2106]
    61- idealispower(nf, t_INT n) possibly wrong if (n, nf.disc) > 1
    62- zeta''(0): all precision lost [more generally f'...'(n quotes)
        imprecise in the neighbourhood of 0, while derivnum(,n) was OK]
    63- sumdigits(negative number, B) sometimes negative
    64- poldiscfactors(x^0) -> division by 0
    65- factormod(x^3+1,[y^2+1,2]) -> SEGV
    66- factormod(x^3+1,[y^2+1,5]) -> weird error message
    67- besseljh(huge n, z) -> junk
BA  68- [pthread] localbitprec was not exported to threads
BA  69- fix inefficiency in fplll not present in original code
    70- polrootsreal(x^4+2*x^3+x^2/3+x/100-1/2000,[1/100,oo]): no root [#2112]
    71- polrootsreal(x^4+2*x^3+x^2/3+x/100-1/1000,[1/10,oo]): extra root [#2112]
    72- lfun may crash on lfuncreate input with too short an vector [#2118]
BA  73- incorrect use of graphcolors -> SEGV
    74- forcomposite(..., oo, ) was not supported
BA  75- lfunartin with poles: incorrect result
JD  76- factor: significant pointers lost [#2125]
BA  77- matdet/matrank over large fields was inefficient
    78- poldisc(y^2/x + 1, y) -> error [also affects polresultant]
    79- poldisc(x^2/y + 1, y) -> 0 [also affects polresultant]
    80- ispower(2, 2^64) -> error
    81- (f(x) = x*'y); f'(1) -> error
BA  82- sqrtn(Mod(3,19),4) -> no error [#2127]
    83- nfhnfmod: wrong result
    84- matdet(mat with t_RFRAC entries): wrong result [#2128]
    85- n-th derivative of zetahurwitz used 'seriesprecision' instead of n
        + imprecise value when n large [#2130]
    86- lfunzeros(f, [0, b]) wasn't allowed
    87- mateigen(): typo causing wrong results when correct results were
        achievable [#2131]
    88- intnum(x=-oo,[0,-1/2],1/sqrt(-x*(x^4+1))) -> division by 0
    89- eint1(large x > 0) didn't use asymptotic expansion [#2129]
    90- printtex(quadgen(-3,'z)) ==> w
BA  91- [a,b]=a could lead to memory corruption
    92- memory leak in cgetalloc when lg overflows
    93- possible SEGV in padicappr [#2133]
    94- zeta(small even integer) was very slow at large accuracy
    95- core() could destroy its input, if stored in a GP variable
BA  96- (f(x, y = 1) = x*y); f'(1) returned 0
    97- quadgen(2^64+1) * 1. => junk (stack corruption in quad_disc).
    98- ellmoddegree: infinite loop and stack corruption (e.g on 52a2)
    99- ellmoddegree(ellinit("10890ba6")) -> wrong result
   100- nfgcd called ZX_resultant(a,T) with typ(a) == t_INT
   101- random SEGVs in bnfinit with large fundamental units [#2139]
        (due to fundamental units computed via floating point approximations
        rounding to 1 or -1)
   102- qfisom([16,6;6,10],[4,3;3,10]) was not 0. [#2140]
   103- mfeval: wrong result when level of form and space didn't match [#2134]
BA 104- nfisincl(x^3+9,x^6+2187): wrong result [#2144]
   105- ispower(27,2^60) -> SEGV [#2145]
BA 106- matsolve(M,vector(n)) could return result of wrong dimension
   107- [Windows] no longer crash on deep recursion [#2105]
   108- factor(Mod(x^3 + x + y^2,2)) -> oo loop [#2148]

  Changed
     1- [libpari] gp_filter return value is now allocated on the stack
        [was undocumented, malloc'ed and resulted in memory leaks]
     2- improved n!, factorial(n), lngamma(n) and psi(n) for integral n
     3- improved bernvec: no longer Obsolete
     4- [libpari] mpbern is now obsolete: use constbern
     5- rewrote the Bernoulli number cache (using zeta(2n) = * B_{2n})
        and power recycling for zeta(2n) + additive Clausen von Staudt):
        orders of magnitude faster and always store Bernoulli in rational form
BA   6- [libpari] ZpX_ZpXQ_liftroot_ea: change interface for 'early'
     7- bnf.fu: return '0' if bnf does not contain the fundamental units (was an
        error)
     8- support ?? _+_ and friends [extended help for specific operators
        instead of redirecting to "GP operators"]
     9- support ?? _op=_ and ?? op=; support ?? _++ and friends
    10- x ^ t_FRAC: return an exact result if possible; e.g. 4^(1/2) is now 2
HC  11- gamma(t_FRAC) and lngamma: use direct formula when denom | 24
    12- serlaplace(scalar) -> return the scalar (understood as a constant
        polynomial) instead of raising an exception [#2082]
    13- implement hyperu for arbitrary complex parameters
    14- extend lex() to allow complex numbers
    15- lfunconductor(L, [a,b]) no longer supported to look for conductor in
        interval [a,b]; implement lfunconductor(L, list of potential N) instead
    16- renamed GP functions Strchr -> strchr (pari_strchr in libpari),
        Strexpand -> strexpand, Strprintf -> strprintf, Strtex -> strtex
    17- [help] move str* functions from "conversions" to "programming" section
BA  18- qfbsolve now returns a vector of solutions.
    19- limitnum / asympnum: remove useless optional parameter 'muli/k'
        [now implicitly set to 1, not to 20]: just extrapolate u(muli*n).
    20- improve rdivii / rdiviiz [ use divri which may use divri_with_gmp ]
    21- mfparams now returns [N,k,CHI,space or P, Phi] where Phi is the
        cyclotomic polynomials defining the field of values of CHI
    22- inline / uninline are now obsolete, use export/unexport
    23- let localprec(p) accept non integral real p [replace by ceil(p)];
        same for localbitprec.
    24- let precision(x,p) accept non integral real p [replace by ceil(p)];
        same for bitprecision.
    25- besseln is now obsolete, use bessely
    26- [libpari] precision0 / bitprecision0 (meant to implement GP-specific
        commands, not for library use) are now obsolete. The new equivalent
        commands (still not meant for library use) are precision00 and
        bitprecision00.
    27- improve intnumgaussinit (use direct Newton instead of polrootsreal)
    28- improve sumeulerrat / prodeulerrat
    29- factor(x, D), D now encodes the domain over which to factor
    30- allow listinsert(L, x, n) for n > #L, like listput
    31- allow forsquarefree(n = a, b) with a*b < 0
    32- allow L[a..b] and L[^i] for t_LISTs
BA  33- gen_factorback: change argument order to match other functions
    34- polinterpolate(X,Y,t,&e): e is now more precisely defined and the
        error estimate is given as a binary exponent; compared to the value
        dy returned up to this change, we have e = exponent(dy).
    35- suminf is now sensitive to bit precision. In library mode, use
        suminf_bitprec (precision in bits) rather than the historical suminf
        (precision in words)
    36- RgV_polint: use (asymptotically fast) FpV_polint over Fp
BA  37- [libpari] pari_add_hist now take 3 arguments (data, cputime, realtime)
BA  38- # and ## now also display the realtime when nbthreads is not 1
    39- gp_format_time: remove trailing ".\n" from formatted string
BA  40- GP: arguments of the parser code W can start with ~ for clarity, e.g.
        listput(~L,x), mapput(~M,x)
BA  41- GP: the argument of a user member function is now a reference
    42- make ellheight(E, torsion point) return an exact 0 [#2109]
    43- allow rnfdisc(k, polynomial with non-integral coeffs)
    44- allow rnfconductor(k, non-monic polynomial)
    45- poldisc(t_COMPLEX) now raises an exception (used to return -4)
    46- rnfdisc(nf, [T,B]) allow B a list of primes and maximal ideals
        (same for rnfbasis, rnfinit, rnfconductor, rnfpseudobasis)
    47- ??? include double quotes when needed (e.g. ???conductor) [#2122]
    48- improved the prime() function
    49- mpeint1: support all t_REAL x != 0 (was x > 0)
LGr 50- nffactor now supports rational functions
    51- improve QM_gauss [treat contents sensibly]
    52- lngamma and psi near 1: cache values of zeta(odd integers)
    53- [libpari] nfbasis prototype changed: 3rd argument listP is gone, use
        nfbasis(mkvec2(T,listP), &disc). Note that the documentation was
        incorrect: it is not guaranteed that nfbasis([T, listP]) returns the
        maximal order even if listP contains all prime divisors of the field
        discriminant. See ??nfbasis
    54- nfbasis now accepts an optional argument &dK [order discriminant]
    55- mffromlfun: support forms of half-integral weight (e.g. from lfunqf)
BA  56- [libpari] FF_Frobenius: return the image of the standard generator
    57- faster poldiscfactors()
    58- when 'log' is turned on, explicitly output the logfile name

  Added
     1- [libpari] nonsquare_Fl
     2- [libpari] set_avma
BA   3- [libpari] FpXC_FpXQ_eval
     4- [libpari] mulu_interval_step
     5- new file src/basemath/bern.c
     6- [libpari] divisorsu_moebius
     7- [libpari] ZXQ_powu
     8- new GP functions hypergeom, airy
     9- [libpari] gc_bool, gc_double, gc_int, gc_long, gc_ulong, gc_NULL
    10- new GP functions strsplit, strjoin
    11- new file src/basemath/str.c
    12- [libpari] has_str_len
BA  13- qfbsolve(Q,n) now support arbitrary integer n.
    14- [libpari] divisorsu_fact_factored
    15- [libpari] qfiseven
    16- [libpari] zv_cyc_minimize, zv_cyc_minimal
    17- limitnum/asympnum: allow closures of the form N->[u(1),...,u(N)],
        which allows to handle efficiently sums, recursions, continued
        fractions, etc.
BA  18- new GP function polteichmuller
BA  19- [libpari] Flx_Teichmuller, F2x_Teichmuller
    20- [libpari] mpsinhcosh
    21- new GP function dirpowers
BA  22- [libpari] F2xqX_resultant, F2xqX_disc, FlxqX_resultant, FlxqX_disc,
        FpXQX_resultant, FpXQX_disc, FFX_resultant, FFX_disc
BA  23- FFX_gcd, FFX_extgcd
    24- optional flag to pollegendre and polhermite
    25- new GP function pollaguerre
BA  26- [libpari] Flxn_red, Flxn_sqr, Flx_integ
BA  27- new GP functions export, unexport, exportall, unexportall
    28- [libpari] Fp_divu
BA  29- [libpari] ZpXQX_liftroots
    30- new GP functions getlocalprec, getlocalbitprec
    31- [libpari] guncloneNULL, gluncloneNULL_deep
    32- allow subst(e, x, vector v) for vector(subst(e, x, v[i]))
    33- [libpari] pollegendre_reduced
AP  34- new GP function mfgaloisprojrep
    35- optional v argument to nfmodprinit
    36- [libpari] rfrac_deflate, rfrac_deflate_order, rfrac_deflate_max
    37- [libpari] identity_zv, identity_ZV
    38- [libpari] polintspec, polint_i
BA  39- [libpari] FF_var, FF_preimagerel
BA  40- new GP function ffmaprel
BA  41- [libpari] closure_derivn
BA  42- [libpari] walltimer_start, walltimer_delay, pari_get_histrtime
BA  43- new GP function strtime
BA  44- [libpari] Flxn_exp, Flx_Newton, Flx_fromNewton, Flx_Laplace,
        Flx_invLaplace
BA  45- Support call by reference in GP function: f(~L,x)=listput(~L,x+1)
BA  46- Generic fast linear algebra using CUP decomposition
    47- [libpari] nfX_to_monic
BA  48- new GP function derivn
BA  49- new GP function arity
    50- new GP functions idealdown, idealismaximal
    51- [libpari] bid_get_fact2
AP  52- new GP function bnrclassfield
HC  53- implement lfunmfspec in odd weight
HC  54- new GP functions ellE and ellK
    55- [libpari] maxprimeN
BA  56- support for rational model in ellratpoints and hyperellratpoints
    57- [libpari] psi1series
    58- [libpari] constzeta
    59- new GP function nfdiscfactors
    60- [libpari] RgV_is_arithprog
    61- fast algorithm for zeta([a + b*n | n<-[0..N]])
BA  62- ellheight(E) now returns the Faltings height of E
BA  63- lfun now allows non-integral weights
OB  64- example/parigp.sty to re-enable PARI's \pmatrix with amsmath [#2110]
IZ  65- [win32+gp-sta] support for install()
    66- [libpari] setunion_i
BA  67- [libpari] hash_init, hash_init_ulong
BA  68- [libpari] FFXQ_minpoly
BA  69- [libpari] F2x_recip
    70- [libpari] RgV_isin_i

  Removed
     1- member functions .futu and .tufu [deprecated since 2.2]
     2- inferior hash function hash_str2: use hash_str
     3- matsnf: remove obsolete binary flag '2' [make it a no no-op] (cf mathnf)

    K.B.
--
Karim Belabas, IMB (UMR 5251)  Tel: (+33) (0)5 40 00 26 17
Universite de Bordeaux         Fax: (+33) (0)5 40 00 21 23
351, cours de la Liberation    http://www.math.u-bordeaux.fr/~kbelabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux.fr/  [PARI/GP]
`