Bill Allombert on Mon, 05 Sep 2022 14:19:55 +0200


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

Please test pari-2.15.0 prerelease 1


Dear PARI developers,

We have made available a first prerelease of PARI 2.15.0 (stable).
This is a new major stable release.

The expected release date is 19/09/2022.

Please test the prerelease tarball:
<https://pari.math.u-bordeaux.fr/pub/pari/snapshots/pari-2.15.0-pre1.tar.gz>

The digital signature is 
<https://pari.math.u-bordeaux.fr/pub/pari/snapshots/pari-2.15.0-pre1.tar.gz.asc>

Please test the 64bit Windows installer:
<https://pari.math.u-bordeaux.fr/pub/pari/windows/snapshots/Pari64-2-15-0-pre1.exe>

I have also built the 32bit Windows installer:
<https://pari.math.u-bordeaux.fr/pub/pari/windows/snapshots/Pari32-2-15-0-pre1.exe>

and the following standalone Windows binaries:

32bit 
<https://pari.math.u-bordeaux.fr/pub/pari/windows/snapshots/gp32-2-15-0-pre1.exe>
<https://pari.math.u-bordeaux.fr/pub/pari/windows/snapshots/gp32-readline-2-15-0-pre1.exe>

64bit
<https://pari.math.u-bordeaux.fr/pub/pari/windows/snapshots/gp64-2-15-0-pre1.exe>
<https://pari.math.u-bordeaux.fr/pub/pari/windows/snapshots/gp64-readline-2-15-0-pre1.exe>

64bit, multithreaded
<https://pari.math.u-bordeaux.fr/pub/pari/windows/snapshots/gppthread64-2-15-0-pre1.exe>
<https://pari.math.u-bordeaux.fr/pub/pari/windows/snapshots/gppthread64-readline-2-15-0-pre1.exe>

There are no Macos binaries for now. We need your help with building binaries for the new M1.
Our build setup is obsolete running on macos 'mavericks'.

I join the draft of the release announcement (the NEW file) and the changelog (CHANGES).

On behalf of the PARI Group,
Bill
This file highlights some of the novelties in PARI/GP 2.15 compared to
latest stable branch 2.13.*. The detailed Changelog is in CHANGES.
Incompatible changes are described in COMPAT.

%%%%%%%%%%%%%%%%%%%%%%%%%%%% VERSION 2.15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

A general overview (slides and video) of new features is available at
    http://pari.math.u-bordeaux.fr/Events/PARI2022/index.html#TUTO

[The GP language]
  - Notion of DebugLevel "domains" that allow to finely control diagnostics.
    See setdebug()[,1] to obtain a list of domains. You can still print out
    everything using \g 10, but you can also be more specific and use
      \g qflll 10
    which sets the debug level to 10 only for the "qflll" domain,
    i.e. everything related to the LLL algorithm (there are 60 domains so far).
    The alternate syntax setdebug("qflll", 10) is available.
  - The syntax setdebug(dom, val) and default(def, val) are now recognized in
    the GPRC file
  - Recall that random(10) returns an integer in [0,9]; now random(-10) draws
    a random integer in the symetrized interval [-9,9]. More generally,
    recall that random(10 * x^3) returns a polynomial of degree <= 3 and
    coefficients in [0, 9]; now random(-10 * x3) draws coefficients in [-9,9].
  - Recall that valuation(x, t) computes the t-valuation of x; the t argument
    is now optional for types affording a natural valuation: t_PADIC, t_POL
    and t_SER:
      ? valuation(sin(x))
      %1 = 1
      ? valuation(175 + O(5^5))
      %2 = 2

[Linear Algebra]
  - qflll() now implements most LLL modes in fplll (fast, dpe and heuristic),
    allowing large speedups. Directly and in the many functions that use the
    LLL algorithm.
  - new GP function snfrank(), a utility function returning q-ranks from
    Smith Normal Forms

[Elementary Number Theory]
  - New GP function: harmonic(), to compute generalized harmonic numbers
  - Rework Euler numbers, analogously to Benoulli's: eulervec() is now
    faster and caches computed values, and a new GP function eulerreal()
    computes floating point approximations.
  - dirpowerssum() now allows to twist by a completely multiplicative function
     ? dirpowerssum(N, s, n->kronecker(-23,n)) \\ sum_{n <= N} chi(n)n^{-s}
  - New GP function factormodcyclo(n, p) to quickly factor the n-th
    cyclotomic polynomial over Fp

[Elliptic Curves]
  - New module to compute the Mordell-Weil group of rational elliptic curves:
      ell2cover     ellrank       ellrankinit      ellsaturation
    See the tutorial (slides and video) at
      http://pari.math.u-bordeaux.fr/Events/PARI2022/index.html#ELL
    * ellrank() implements 2-descent together with Cassels's pairing
    restrictions yielding rational points and an interval for the rank. If the
    Tate-Shafarevic group has no 4 torsion and we spend enough time looking for
    rational points (on the curve and auxiliary quartics), we obtain the
    Mordell-Weil rank and generators V for a subgroup of finite index in E(Q).
    * ellrankinit() precomputes ellrank() data for all quadratic twists of E.
    * function ellsaturation(E,V,B) updates the generators V and guarantees
    than any prime dividing the index must be > B.
    * ell2cover() returns everywhere locally soluble 2-covers of E
    (rational quartics on which we try to find a rational point).
  - New GP function elltrace() summing the Galois conjugates of a point on E
  - New input format for elliptic curves: ellinit([j]) as a shortcut for
    ellfromj(j).

[Curves of Higher Genus]
  - genus2red(): the given integral model is now a pair [P,Q] such that
    y^2+Q*y = P is minimal everywhere (was minimal over Z[1/2]).
  - new GP functions to handle models of hyperelliptic curves
      hyperelldisc         hyperellisoncurve   hyperellminimalmodel
      hyperellminimaldisc  hyperellred

[L-functions]
  - New module for hypergeometric motives, see ??hgm. GP functions
      hgmalpha     hgmbydegree     hgmcyclo          hgminit
      hgmtwist     hgmcoef         hgmeulerfactor    hgmissymmetrical
      lfunhgm      hgmcoefs        hgmgamma          hgmparams
    See the tutorial (slides and video) at
      http://pari.math.u-bordeaux.fr/Events/PARI2022/index.html#HGM
  - New GP function lfunparams() to return the [N, k, Gamma factors] attached
    to a motivic L-function.
  - New GP function lfuneuler() to return the local Euler factor at a prime p

[Modular Forms]
  - Faster implementation of mfinit() and mfbasis() in weight 1
  - Add optional argument to ramanujantau() to compute the newform of level 1
    and given small weight; parallelize implementation.

[Quadratic Fields]
  - qfbcomp() now implements general composition of integral binary quadratic
    forms (of different discriminants); f * g and f^n are shorthand for
    composition and powerings of forms, including (real) extended forms with a
    Shanks distance component.
  - New GP function qfbcornacchia, solving x^2 + Dy^2 = n in integers
    in essentially linear time.
  - New GP functions quadunitindex() (index of the unit group of a quadratic
    order in the units for the maximal order), quadunitnorm() (norm of the
    fundamental unit). Used to improve qfbclassno for non fundamental
    positive discriminants.

[General Number Fields]
  - nfinit(), nfdisc(), nfbasis() now use lazy factorization: partially
    factor the polynomial discriminant, hoping the unfactored part will be a
    square coprime to the field discriminant, and that we will be able to
    prove it via a variant of Buchmann-Lenstra's algorithm.
  - New bit in nfinit flag to prevent LLL on nf.zk, which is a major speedup
    when the field degree is large and only basic field or ideal arithmetic
    is needed.
  - New GP functions nfeltissquare() and nfeltispower() to quickly check whether
    an algebraic number is a k-th power (and obtain a k-th root when it is).
  - New GP function galoissplittinginit(T) to compute the Galois group of the
    splitting field of T. This can be used in all Galois theory functions,
    e.g., galoissubgroups(), galoisidentify(), etc.
  - New GP function nflist to list number fields with given small Galois
    group by increasing discriminant. Some groups (such as A5 and A5(6))
    require the new 'nflistdata' package. The same function gives a regular
    extension of Q(t) with the requested Galois group for all transitive
    subgroups of S_n, n <= 15.
  - New GP function nfresolvent() computes classical Galois resolvents
    attached to fields of small degree
  - Recal that ideallist(nf, B) returns integral ideals of norm bounded
    by B > 0. The new ideallist(nf, negative B) returns integral ideals
    of norm |B| (in factored form).

[Class Field Theory]
  - New GP function bnrcompositum() to construct the compositum of two
    abelian extensions given by a class field theoretic description.
  - New module to deal with class groups of abelian fields and their Iwasawa
    invariants:
      subcyclohminus     subcycloiwasawa   subcyclopclgp
    See the tutorial (slides and video) at
      http://pari.math.u-bordeaux.fr/Events/PARI2022/index.html#CYCLO
  - New module to generate and compute with Hecke characters:
      chareval         gcharalgebraic   gcharconductor
      gcharduallog     gcharidentify    gcharinit        gcharisalgebraic
      gcharlocal       gcharlog         gcharnewprec
    See ??"Hecke Grossencharacters" as well as the tutorial at
      http://pari.math.u-bordeaux.fr/Events/PARI2022/index.html#HECKE

[Transcendental functions]
  - New GP function lerchphi(), lerchzeta() for the Lerch Phi and zeta function.
  - New GP functions bessljzero(), besselyzero(), for J and Y Bessel functions
  - Lambert W functions are now all supported, one can specify a branch as an
    optional argument: lambertw(y, -1) corresponds to W_{-1}, defined for
    -exp(-1) <= y < 0. Complex arguments are allowed (as well as power series
    and p-adics)
  - Speedup for a number of transcendental functions at rational
    arguments, in particular atanh(), gamma() and lngamma().
  - Allow sqrtint(), sqrtnint() and logint() for positive real number arguments
  - We now allow hypergeom(N, D, t_SER)

[Numerical summation and integration]
  - New GP function sumnumsidi() for Sidi summation.
  - New GP function intnumosc() to integrate quasi-periodic functions of
    half-period H on a real half-line:
      ? \p200
      ? H = Pi; intnumosc(x = 0, sinc(x), H) - Pi/2
      time = 1,241 ms.
      %2 = 0.E-211
    A number of summation algorithms are used (Lagrange, Sidi, Sumalt, Sumpos).
    See ??9 for a comparison of available integration or summation algorithms
  - Allow endpoints in solve() to by +oo or -oo

[Miscellaneous]
  - poliscyclo(): replace Bradford-Davenport's Graeffe method by their
    invphi algorithm (much faster)
  - New GP function polsubcyclofast: fast variant of polsubcyclo() in small
    degree, returning ad hoc generators (instead of Gaussian periods)
  - New GP function poltomonic(T): fast monic integral generating polynomial
    for Q[x] / (T)
  - New GP function qfminimize to minimize a rational quadratic form.
  - New GP function setdelta() for symmetric difference.
  - New GP function serdiffdep() to find linear relations with polynomial
    coefficients of bounded degree between derivatives of a power series:
    ? y = sum(i=0, 50, binomial(3*i,i)*t^i) + O(t^51);
    ? serdiffdep(y, 4, 3) \\ order <= 4 and degrees <= 3
    %2 = [(27*t^2 - 4*t)*x^2 + (54*t - 2)*x + 6, 0]
    ? (27*t^2 - 4*t)*y'' + (54*t - 2)*y' + 6*y
    %3 = O(T^50)

COMPATIBILITY ISSUES BETWEEN 2.13.* and 2.15.*
============================================

0) Obsoleted functions and interfaces:
  - default(debugfiles,) is now obsolete, use setdebug("io",)
  - Unify real and imaginary binary quadratic forms: there are no longer
    t_QFI and t_QFR for real an imaginary forms, only generic t_QFB.
    One can still create a form using q = Qfb(a,b,c) [ or Qfb(v) if v=[a,b,c] ],
    and a pair [q, d] denotes an extended (real) form including a Shanks
    distance component 'd' (which used to be part of 'q', but no longer).

1) Output changes:
  - system(cmd) now returns the shell return value
  - elltwist now returns an ellinit, and accepts the same input formats
    as ellinit ([a1,a2,a3,a4,a6], [a4,a6], Cremona label)
  - genus2red 3rd component is now a pair [P,Q] such that y^2+Q*y=P is
    minimal everywhere.

2) Input changes:
  - qfbredsl2(q, S): change format of S: was [D,isD], is now isD
Bug numbers refer to the BTS at http://pari.math.u-bordeaux.fr/Bugs/
Done for version 2.15.0 (released 19/09/2022):
  Fixed
     1- slowdown in zeta (e.g. zeta(Pi) at \p500)
     2- GC error in idealinv [#2258]
     3- qfminim inefficiency (initial bound from non-LLL-reduced matrix) 4- mfshimura in weight 3/2 => oo loop
     5- zetahurwitz(s, huge x) => overflow or very slow
     6- matsolve([1,1,1/2; 1,0,1/2; 2,1,0], [-1;1;-1]) -> SEGV [#2261]
     7- qfminim(Mat(1),,,2) -> precision error [#2262]
     8- subst(p, v, t_SER) very slow if p contains many variables [#2264]
     9- mfsymboleval for trivial path returned 0 instead of a vector of 0s
        when f has multiple embeddings [#2260]
    10- 2^(1 + O(3^4)) -> type error
    11- Zn_quad_roots(8,0,-1) to compute roots of x^2-1 mod 8 -> [4,[1,3]]
        (1 or 3 mod 4) instead of the expected [2,[1]] (1 mod 2) [#2265]
    12- tan(1+10^20*I) -> overflow (same for cotan and psi)
BA  13- Mod(2,3)^1000000000000000000001 -> Mod(-1,3) [#2266]
    14- subst(O(y) + x, x, (1 - y + O(y^2))*x + O(x^2)) -> SEGV [#2267]
    15- (Mod(0,3) + x) + O(x^2) -> x + O(x^2)  [now Mod(1,3)*x + O(x^2)]
    16- precision too low for units in mfgaloisprojrep
    17- missing GC at the end of RgXn_inv
    18- (-1)^(1/3) -> -1 instead of exp(log(-1)/3)
    19- mfeisenstein(k, trivial characters mod N > 1) not handled correctly
BA  20- missing GC in qfsolve
    21- missing GC in nfeltval + better algorithm when valuation is huge
    22- rnfidealup(, non-integral ideal) -> division by 0
    23- memory leak in ellheight
    24- memory leak in bnfinit
    25- zeta(-2 + O(x)) => division by 0
    26- nfeltdiv(nfinit(x^2+1), 0, 1+x/2) -> SEGV [#2277]
    27- numerical instability in polinterpolate [#2278]
    28- znchargauss(g,chi,0) -> oo loop
    29- bnflog(bnr, ...) -> SEGV
    30- elliptic functions: incorrect reduction of z/w1 mod [1,tau] =>
        catastrophic cancellation
    31- powcx(x, t_COMPLEX with 0 imaginary part) -> crash
    32- nfsubfields(t_POL in other var than x,,1) -> SEGV
    33- extra terms in power t_SER substitutions [#2281]
        f=1+4*t^2+36*t^4+O(t^6); g=q-4*q^3+14*q^5+O(q^7); subst(f,t,g)
        -> spurious extra term -400*q^6
    34- k=bnfinit(quadpoly(-2923,a)); bnrclassfield(k,3) -> SEGV [#2280]
BA  35- rnfdisc mishandled polynomials with denominators [#2284]
BA  36- elltamagawa(ellinit([-1456/243,93184/19683])) -> wrong result
    37- mfsearch would sometimes miss the trivial form
    38- typo in allh [affects ECPP tunings]
HC  39- mfisetaquo(mffrometaquo([1,12;193,12])) -> 0
    40- polroots(1.E-47*t^6 + 1.E-47*t^5 + 4.E-46*t^4) -> bug in type [#2286]
    41- ceil(quadgen(5)) -> 1 instead of 0 [#2288]
    42- floor(Mod(0,3)*quadgen(5)) -> crash
    43- padicappr(x^2+1, 1/3+O(3)) -> missing valuation and type checks
    44- padicappr(x^2+25,5+O(5^2)) -> [O(5),O(5)] instead of
        [2*5+O(5^2),3*5+O(5^2)]
    45- wrong ispower(t_RFRAC) and issquare(t_RFRAC, &z) [#2289]
    46- slow series substitution if valuation huge
        f=t^50000+O(t^50001); g=q*Ser(vector(50000,i,1),q); h=subst(f,t,g)
    47- 1+O(x)==O(x)
    48- cmp() would use possibly uninitialized bits in t_POL codewords
BA  49- qfauto([[1,0;0,1],[0,0;1,0]]) -> SEGV
    50- bnfsunit(...)[4] (the S-regulator) did not correspond to its
        definition in the documentation [ was using log(p) instead of
        log(Norm P)) for P in S above p ]
BA  51- rnfdisc could return corrupted result
    52- quadtofp suffered from catastrophic cancellation [#2298]
        z=66992092050551637663438906713182313772
          -47370562574818466708936539960450008968*quadgen(8); z*1. -> 0.75
BA  53- concat(List([1])[1..0]) ->SEGV (instead of error) [#2299]
BA  54- List([1])[1..0]==List() -> 0 instead of 1
    55- ZX_squff(T) did not follow its specification if T(0) = 0
    56- (-1)^(-1/2) -> I instead of -I
    57- lfuntheta inaccurate in large weight [#2305]
    58- GC error in ZX_Uspensky(, flag = 0)
BA  59- ellisomat(ell/nf not integral) -> oo-loop or wrong result
BA  60- (f(~v)=v[1]=1);(g(v) = f(~v)); my(V=[0]);g(V);V -> [1] instead of [0]
        due to missing copy on write [#2304]
    61- hypergeom([1/12,1/12],2/3,3) -> wrong result (incorrect
        limiting case of transformation formula)
    62- overflow in mulu_interval(,ULONG_MAX) [#2309]
    63- ellE(1) -> domain error [#2312]
    64- log1p(-1 + 10^-10) -> oo time
    65- bernvec entries were wrong from B_{2*4064} on [#2311]
    66- plotrecthraw for multi-curves
    67- RgXn_powu(,,1) wrong result [#2314]
    68- erfc incorrect on negative imaginary axis [#2315]
    69- mfgalpoistype bug for dihedral types (when conductor at oo is not
        stable under Galois) [#2293]
BA  70- [32bit] forfactored(n=223092868, 223092871, ) -> SEGV [#2318]
    71- Fp_issquare(0, p) would return 0
    72- For z=x+wy a t_QUAD, z.pol returned the modulus z.mod instead of the
        t_POL x+'w*y
    73- allow eulerianpol(0) (= 1)
    74- allow polylog(0,x) (was broken when eulerianpol was introduced)
BA  75- concat(t_LIST,t_LIST) was leaking memory
    76- missing type checks in ellchangepoint (SEGV)
    77- polsturm(-5500*x^4+440*x^3+21780*x^2-9680*x-29040,[-oo,-4])->corruption
    78- ellheight(E,,Q) -> SEGV
    79- besselj(80,66) -> oo loop
    80- lfun(1, 0.0) "normalizing a series with a 0 leading term" [#2329]
    81- (0. + O(x) == 1) returned 'true'
    82- lfun(1, 0., 1) -> division by 0
    83- fix lfuncost when root number is unknown (more a_n are needed)
    84- idealismaximal(nfinit(x),Mat(2)) -> 0 [#2333]
    85- O(29^(-1)) == 1 was FALSE (same for -1)
    86- Mod(0, 2*x^0)  == 1 was FALSE (same for -1)
BA  87- [X11] resizing a window could keep traces of previous drawing
BA  88- x->x+0x1 was not displayed correctly
    89- bnfinit(Q) was not using current precision [#2335]
    90- lfuncreate(x^2 + 1/2) -> internal error. Allow rational coefficients.
    91- polresultant(t_POL with t_RFRAC coefs,...) -> internal errors
    92- znchardecompose(znstar(2,1),[],2) -> SEGV [#2339]
    93- genus2red(150*x^6+180*x^5-270*x^4+2040*x^3-1350*x^2+3060*x+270)
        -> internal bug [#2331]
    94- missing roots in nfroots(t_POL,) [#2345]
    95- factorpadic: ensure leading coefs are powers of p [#2352]
    96- nfsnf: wrong results [#2353]
XR  97- rare SEGV in nfdisc. [#2356]
BA  98- factor((Mod(1,2)*((t^2+1)*x^4+(t^4+1)*x^2+1))) -> division by 0
    99- internal type errors in mfsymboleval [#2360]
   100- incorrect chargalois for trivial group [#2341]
   101- minpoly(Mod(1/(x-(t+1))*Mod(1,2),(t+1)*x^2+t*x+1)) -> error [#2363]
BA 102- factor(Mod(1,2)*x^5+a*x^3) -> div by 0
AP 103- nfgrunwaldwang: fix infinite loop [#2343]
   104- ti=thueinit(3*x^3 + 5*x^2 - 14*x + 54,1); thue(ti,1) -> error [#2365]
   105- algdep(t_POLMOD x) -> x.mod instead of correct result
   106- bnrinit(,,,cycmod) failed to delete elementary divisors equal to 1
BA 107- bnrclassfield: incorrect result when fundamental units are large, e.g.
        bnrclassfield(bnfinit(nfsplitting(a^3-a^2-202*a-3080),1),2)  [#2371]
   108- M8=mfinit([8,5/2]); mfatkininit(M8,8)[1] was 0 and shouldn't be
   109- polylogmult instability
        default(realprecision,366);a=(1+sqrt(5))/2;w=(1+sqrt(-3))/2;
        polylogmult([1,1,1,1],[1/a,a,1,w]) -> error
   110- valuation(x*(y^2-1), y+1) -> oo loop [#2381]
   111- round(t_FRAC, &e): e was always -oo
   112- FpM_center_inplace would crash for p = 3 [#2387]
BA 113- [gp interpreter] fix memory leak in pop_lex
   114- numerator(1/x+1/y, 'x) -> x*y
   115- colors = "no" (or "") handled incorrectly [#2402]
   116- thue(thueinit(x^3-3*x^2+1,1), 2187) -> domain error in mplog [#2397]
   117- Bessel function of huge order -> oo loop [e.g. besselj(220, 112)]

  Added
HC   1- new GP function eulerreal
BA   2- fplll: fast, dpe and heuristic variants
     3- dirpowerssum: allow a completely multiplicative function
     4- [libpari] atanhuu, atanhui, powcx, powcx_prec, cx_approx0
     5- new GP function lfunparams (initial implementation P. Molin)
     6- [libpari] row_Q_primpart
BA   7- [libpari] RgXQ_trace, RgX_chinese_coprime, RgXQV_factorback
     8- [libpari] FpM_intersect_i, Flm_intersect_i
HC   9- add optional argument to ramanujantau + parallelize code
HC  10- new GP functions bessljzero, besselyzero
BA  11- [libpari] Fle_ellweilpairing, Fle_elltatepairing, Flj_to_Fle
                  Fl_ellptors
BA  12- [libpari] ZC_divexactu, ZM_divexactu
HC  13- allow hypergeom(N, D, t_SER)
    14- [libpari] qfbsqr, qfbcomp, qfbpow, qfbpowraw, qfbsqr_i, qfbcomp_i,
        qfbpow_i, qfbpow, qfbpowraw, qfr3_compraw, qfr5_compraw
    15- general composition of binary quadratic forms (in different orders)
BA  16- New GP functions ellrank, ellrankinit : implement 2-descent on
        elliptic curve following a GP script by Denis Simon.
BA  17- [libpari] RgXY_derivx, RgX_recip_i
    18- [libpari] RgC_RgV_mulrealsym, RgM_to_RgXV_reverse
BA  19- New GP function ellsaturation
    20- [libpari] ZX_Z_eval
BA  21- [libpari] elltors_psylow
    22- ellinit([j]); no need to use ellfromj
    23- ideallist(nf, negative bound) to return ideals of norm |bound|
        (in factored form)
    24- rnfconductor(bnf,pol,flag): add flag=2 to only return the conductor
        and its factorization (which comes for free)
HC  25- New GP functions nflist, nfresolvent
BA  26- [libpari] Hermite_bound
    27- substvec: support t_VEC replacement values
BA  28- New GP function ell2cover
BA  29- nfsplitting: flag to get the embedding
BA  30- New GP function galoissplittinginit
HC  31- lambertw(y): support all values y > -1/e [#1472]
HC  32- lambertw: add optional 'branch' argument; support and complex, p-adic
        and power series inputs
BA  33- [libpari] ZXC_to_FlxC, ZXM_to_FlxM
BA  34- [libpari] New function families F3v, F3m
BA  35- New GP function setdebug
    36- allow shortcut \g n feat for setdebug("feat", n)
    37- New GP function poltomonic [#2200]
    38- in GPRC, support default(key,val) and setdebug(dom,val)
    39- New GP function polsubcyclofast
    40- [libpari] prV_primes, ideals_by_norm, nfV_to_scalar_or_alg, quadpoly_i
    41- new bit in nfinit flag: don't perform LLL on nf.zk
BA  42- new flag value in nfisincl
    43- [libpari] hclassno6u_from_cache, uhclassnoF_fact, hclassnoF_fact,
        vandermondeinverseinit, vandermondeinverse, trans_evalgen,
        sunits_mod_units, Qp_exp_prec
BA  44- [libpari] RgXQ_minpoly
    45- [libpari] quadclassnos, quadclassnoF, unegquadclassnoF,
        uposquadclassnoF, coredisc2_fact, coredisc2u_fact, uquadclassnoF_fact
        quadclassnoF_fact, Z_issquarefree_fact
    46- new GP functions quadunitnorm, quadunitindex
LGr 47- allow endpoints in solve() to by +oo or -oo
    48- allow Vec(t_STR, n) and Vecsmall(t_STR, n)
    49- new GP function: harmonic
    50- allow digits(integral t_PADIC)
    51- new GP function qfbcornacchia
    52- [libpari] gc_all
BA  53- [libpari] Zp_inv, Zp_invlift, Zp_div, Zp_log, Zp_exp
BA  54- [libpari] FpXn_div, Flxn_div, RgXn_div, RgXn_div_i, FpXQXn_div, F2xn_div
    55- [libpari] maxomegau, maxomegaoddu, ZV_snf_rank, ZV_snf_rank_u,
        zv_snf_rank, F3c_to_ZC, F3c_to_mod, F3m_to_mod, ZX_unscale_divpow,
        ZX_affine
    56- new GP function snfrank
HC  57- allow lngamma(t_PADIC of negative valuation)
    58- file LICENSE (for Software Heritage archiving)
BA  59- [libpari] RgXV_prod
BA  60- new GP function serdiffdep
    61- new module for hypergeometric motives, see ??hgm. GP functions
        hgmalpha     hgmbydegree     hgmcyclo          hgminit
        hgmtwist     hgmcoef         hgmeulerfactor    hgmissymmetrical
        lfunhgm      hgmcoefs        hgmgamma        hgmparams
BA  62- new GP function lfuneuler
TF  63- new GP functions subcyclohminus, subcycloiwasawa, subcyclopclgp
    64- new GP function bnrcompositum
    65- [libpari] gdivgu, gdivgunextu, divrunextu, gmulgu, gmulug
    66- [libpari] Zp_log, Zp_exp
    67- new GP function intnumosc, sumnumsidi
BA  68- [x86_64,arm64] AVX,NEON support for hyperellratpoints
BA  69- [libpari functions ZX_digits, ZXV_ZX_fromdigits
NM  70- new GP function elltrace
BA  71- [libpari] FpXQXV_red, FpXQXT_red
BA  72- [libpari] ZpXQX_ZpXQXQ_liftroot, ZqX_ZqXQ_liftroot
    73- [libpari] ZV_snfclean
    74- allow bnrchar to construct a Dirichlet character (with a znstar input)
    75- new GP functions nfeltissquare, nfeltispower
BA  76- [libpari] FlxqX_nbfact_by_degree
BA  77- [libpari] RgXY_cxevalx
    78- allow f*g and f^n for qfbcomp/qfbpow also for extended (real) forms
    79- [libpari] qfbpows
BA  80- [libpari] FlxM_to_FlxXV, FlxXC_sub
BA  81- [libpari] FlxqXC_FlxqXQ_eval, FlxqXC_FlxqXQV_eval
BA  82- new GP function qfminimize
BA  83- new GP functions hyperelldisc, hyperellminimalmodel,
        hyperellminimaldisc, hyperellred
    84- new GP function setdelta
BA  85- [libpari] RgX_homogenous_evalpow, QXQX_homogenous_evalpow
BA  86- [libpari] FpX_roots_mult
BA  87- [libpari] RgX_affine
HC  88- new GP function lerchphi, lerchzeta
BA  89- new GP function hyperellisoncurve
BA  90- [libpari] nfM_ker
    91- [libpari] Qp_zeta
BA  92- [libpari] RgX_mul2n
    93- [libpari] rfrac_to_ser_i
    94- [libpari] FlxC_FlxqV_eval_pre, FlxC_Flxq_eval_pre,
        Flx_FlxqV_eval_pre, Flx_Flxq_eval_pre, Flx_Frobenius_pre,
        Flx_div_pre, Flx_divrem_pre, Flx_extgcd_pre, Flx_gcd_pre,
        Flx_get_red_pre, Flx_halfgcd_pre, Flx_mul_pre, Flx_oneroot_pre,
        Flx_oneroot_split_pre, Flx_rem_pre, Flx_roots_pre, Flx_sqr_pre,
        Flxq_div_pre, Flxq_inv_pre, Flxq_invsafe_pre, Flxq_mul_pre,
        Flxq_powers_pre, Flxq_powu_pre, Flxq_sqr_pre,
        Flx_powu_pre, Flxn_div_pre, Flxn_mul_pre, Flxn_sqr_pre,
        FlxqX_fromNewton_pre, FlxqX_Flxq_mul_pre, FlxqX_Flxq_mul_to_monic_pre,
        FlxqX_FlxqXQV_eval_pre, FlxY_FlxqV_evalx_pre, FlxY_Flxq_evalx_pre,
        FlxqX_Newton_pre, FlxqX_get_red_pre, FlxqX_invBarrett_pre,
        FlxqX_powu_pre, FlxqXn_mul_pre, FlxqXn_sqr_pre, FlxqXn_inv_pre,
        FlxqXn_expint_pre, FlxY_eval_powers_pre, FlxY_evalx_powers_pre,
        FlxY_evalx_powers_pre, FlxqX_divrem_pre, FlxqXQ_inv_pre,
        FlxqXQ_invsafe_pre, FlxqXQ_sqr_pre, FlxqX_rem_pre, FlxqX_sqr_pre,
        FlxqXQ_pow_pre, FlxqXC_FlxqXQV_eval_pre, FlxqXQ_div_pre,
        FlxqXQ_mul_pre, FlxqX_halfgcd_pre, FlxqX_mul_pre, FlxqX_extgcd_pre,
        FlxqXQ_powers_pre, FlxqXQ_powu_pre, FlxqX_normalize_pre, FlxqX_red_pre,
        Kronecker_to_FlxqX_pre, Flx_dotproduct_pre, FlxqX_div_pre,
        FlxY_Flxq_evalx_pre, FlxqXC_FlxqXQV_eval_pre, Flx_is_smooth_pre,
        Flxq_pow_pre, Flxq_pow_init_pre, Flxq_pow_table_pre,
        Flx_matFrobenius_pre, FlxqV_dotproduct_pre, FlxqX_FlxqXQ_eval_pre,
        Flxq_auttrace_pre, Flxq_minpoly_pre, Flxq_lroot_fast_pre, Flxq_lroot_pre
        Flxq_matrix_pow_pre, Flx_ddf_pre, Flx_factor_squarefree_pre,
        Flx_nbfact_pre, Flx_nbfact_Frobenius_pre, Flx_resultant_pre,
        Flxq_autpow_pre, FlxqX_gcd_pre, FlxY_evalx_pre, FlxqXQ_autsum_pre,
        FlxqXQ_minpoly_pre, FlxqXQ_autpow_pre, FlxqXQ_auttrace_pre,
        FlxqX_Frobenius_pre, FlxqX_factor_squarefree_pre, FlxqE_weilpairing_pre
TF  95- new GP function factormodcyclo
TF  96- new libpari functions FpX_factcyclo, Flx_factcyclo
    97- new libpari functions ZV_sort_shallow, ZV_sort_uniq_shallow,
        tridiv_boundu
BA  98- rnfabelianconjgen
    99- new libpari functions abmap_kernel, abmap_subgroup_image, ZV_ZV_mod,
        ZM_ZV_mod
   100- bnr_char_sanitize, bnr_subgroup_sanitize
TF 101- GP function znsubgroupgenerators
   102- [libpari] RgV_is_prV
   103- improve idealfactorback [using ideamulpowprime]

  Changed
HC   1- faster implementation of eulervec + cache result
     2- sumnummonieninit(,1): faster algorithm (complex step)
     3- atanh(rational) now uses binary splitting
BA   4- FqV_to_FlxV, FqC_to_FlxC, FqM_to_FlxM: replaced by
        ZXC_to_FlxC, ZXM_to_FlxM
     5- FpM_intersect and Flm_intersect now guaranteed to return an
        Fp-basis; use FpM_intersect_i if you only need a generating set
     6- ZXX_to_Kronecker -> RgXX_to_Kronecker, ZXX_to_Kronecker_spec
        -> RgXX_to_Kronecker_spec
     7- [libpari] nbessel -> ybessel
     8- faster implementation of mfinit and mfbasis in weight 1
     9- ZabM_ker: replace final exact check by probabilistic check modulo a
        63-bit prime
    10- [libpari] ZC_u_divexact -> ZC_divexactu
    11- unify real and imaginary binary quadratic forms, include discriminant
        types t_QFI and t_QFR are replaced by t_QFB
    12- allow Qfb([a,b,c]) and Vec(t_QFB)
    13- qfbredsl2(q, S): change format of S: was [D,isD], is now isD
BA  14- [libpari] gp_read_stream now return NULL when EOF is reached (was gnil)
    15- elltwist now returns an ellinit, and accepts the same input formats
        as ellinit ([a1,a2,a3,a4,a6], [a4,a6], Cremona label)
    16- gen_search / vecvecsmall_search: remove flag; the result is now
        positive if the element is found else -i if element should be
        inserted at position i.
    17- allow t_COL of objects in gconcat1 / shallowconcat1
    18- [libpari] Z_smoothen now uses (and returns) t_VEC arguments.
        Use Z_lsmoothen to input small primes as a t_VECSMALL.
    19- poliscyclo: replace Bradford-Davenport's Graeffe method by their
        invphi algorithm (much faster)
BA  20- [libpari] QXX_QXQ_eval renamed to QXY_QXQ_evalx
    21- [libpari] ZX_Zp_root(f,a,p,): assume 0 <= a < p
BA  22- [libpari] gen_factorback now take an extra parameter one.
    23- [libpari] mplambertx_logx, mplambertX, mplambertxlogx_x
    24- [libpari] absZ_factor_limit_strict no longer guarantees that q is
        composite: this is useless for applications and possibly expensive
    25- default(debugfiles,) is now obsolete, use setdebug("io",)
    26- [libpari] quadclassno now has a second argument (to recover the
        attached fundamental discriminant)
    27- faster qfbclassno for non fundamental positive discriminants
        (use quadunitindex)
    28- removed appa.tex from users.dvi; inline the text in INSTALL.tex
    29- divrunu, divgunu: use a single division in all cases (faster even if
        denominator has 2 words)
    30- allow random(negative integer N) -> a random integer in [-n,n], n=|N|-1.
    31- allow sqrtint and sqrtnint for nonnegative real number argument
    32- allow logint for positive real number argument
    33- improve gamma and lngamma for t_FRAC inputs
    34- renamed normalize -> normalizeser
    35- nfinit/nfdisc/nfbasis: use lazy factorization by default [#2326]
    36- in idealtyp(ideal, fa), allow setting fa to NULL
BA  37- system now return the shell return value.
    38- allow valuation(x) when x is a t_PADIC, a t_POL or a t_SER
    39- libpari function precision() now always return a 'prec' (integer > 2).
        It used to return 2 for real 0 of non-negative exponent.
    40- grndtoi(GEN x, long *e): allow setting e = NULL
BA  41- [libpari] pari_thread_start: do not allow threads started this way to
        launch more threads.
BA  42- genus2red: 3rd component is now a pair [P,Q] such that y^2+Q*y=P is
        minimal everywhere.
    43- faster implementation of binomial

  Removed
     1- [libpari] obsolete functions qfi, qfr, qfi_1, qfr_1, redreal,
        redrealnod, rhoreal, rhorealnod, qfrcomp, qfrcompraw, qfrsqr,
        qfrsqrraw, qfisqrraw, qficompraw, qfipowraw, qfipow, qficomp,
        qfisqr, redimag
     2- [libpari] obsolete types t_QFI, t_QFR
     3- [libpari] nfinitall is now obsolete; use nfinit with the same arguments
     4- [libpari] order is now obsolete; use znorder