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

Done for version 2.10.0 (released ??/??/??):
  Fixed
      1- subst(1+x^3+O(x^6),x,x+O(x^4)) -> SEGV [#1865]
BA    2- lfunartin was using too much stack
BA    3- fflog in char 3 or 5 was slower than intended
      4- RgX_blocks only worked for t_INT or t_POL coeffs
      5- spurious bnrdlisclist entries (with negative number of real
         places...) when modulus not a conductor
BA    6- modular algorithms could fail for very large input
BA    7- [mingw] writebin did not work
BA    8- forprime(N=2^100,oo,...) did not work
      9- mseval(W,s,p) did not check 'p' in weight 2
     10- matrixqz(m, -1 or -2) was very slow
     11- ZG_normalize destroyed its input
     12- [install] prototype code D0,U, did not work
BA   13- use of complex default function argument could lead to stack error.
     14- factorpadic(2*x^4+x^2,2,2) -> division by 0 [#1876]
     15- incgam(110, I) very inaccurate
BA   16- ellinit over number field was not compatible with generic operations.
BA   17- [breakloop] dbg_up could confuse the breakloop.
HC   18- sumnummonieninit(,,a) + sumnummonien(n = a, ...) with a > 1 gave wrong
         result
     19- sumnummonieninit([a,b], t_CLOSURE) => incorrect initialization
     20- lngamma(1+epsilon) much slower than in pari-2.7; eg. 10^-4 at \p200
BA   21- lfun(...,t_SER,n>=1) returned a wrong result
     22- lfun(,, negative derivation order) => internal bug
     23- SEGV in sumnummonieninit when accuracy too low
BA   24- ellidentify: check curve is over Q
     25- gdivgs(t_RFRAC,s) could create invalid objects
     26- chareval(G,chi,x,[[...], o]) didn't work (off-by-1)
     27- polsturm(x^2-1,[-1,1]) -> SEGV [#1884]
     28- typo in description of "call" symbolic operator [ _(_) ]
PB   29- matinverseimage could find spurious solutions [#1888]
     30- ellsea could leak variables (=> "no more variables" error)
     31- ellsea leaked clones
     32- 1/x - 1/x returned gen_0 (instead of Pol(0))
     33- printf("%d",factor(2*3*5*7)) => SEGV
     34- lfuninit: incorrect guess for root number depending on init domain
          E = ellinit([0,-a,1,157*a-27,-90*a-543], nfinit(a^2-a+1));
          lfuninit(E,[0,20,10])[2][6] -> 1 (whereas rootno is -1)
     35- bnrinit(bnf,idealfactor(bnf,1)) -> SEGV [#1890]
BA   36- lfuncreate([1,0,[0],1,1,1,1]) -> SEGV (invalid input)
     37- thue(imaginary quadratic of disc -3f^2, n) could return half-integers
BA   38- [libpari] Z_ZV_mod caused gerepile error
     39- bestappr(1+0.*I) -> 1 + 0*I instead of 1
     40- memory corruption in qfminim [#1894]
     41- polylog(x) used realprecision accuracy instead of precision(x) [#1895]
     42- exp or log(I*1.0) used realprecision accuracy instead of precision(x)
         [#1896]
PB   43- M = ffgen(2017^3)*[0, 1; 0, 0]; M^-1 -> SEGV   [#1887]
BA   44- lfun(lfungenus2(...),...) was much slower than intended
BA   45- nfsubfields(polcyclo(88), 20) -> wrong result  [#1892]
BA   46- [mpi] dynamically linking with libpari did not work
     47- sin(1 + 1.0*I) used realprecision accuracy instead of precision(x);
         same for cos, tan, arg, expm1, sinc.
     48- make idealstar(,N) an actual shortcut for ideal(nfinit(x), N) [#1900];
         it is recommended to use znstar instead.
HIL  49- polclass could access invalid memory
     50- K=bnfinit(x^2+2323);
         P=idealprimedec(K,23)[1];
         bnfisprincipal(K,P);  \\ oo loop
     51- nfvalrem() overflowed in case of negative valuation
     52- ellminimalmodel over number field fails with impossible inverse [#1899]
     53- incorrect GC in nfgcd [#1903]
     54- missing GC in rnfisabelian
     55- derivnum(x = a, ...) allowed t_POL a but not t_RFRAC
     56- missing GC in vectorsmall
BA   57- missing GC in idealramgroups
BA   58- ellweilpairing failed for supersingular curves in char. 2 [#1910]
BA   59- Mat()[1..0,1..0] -> SEGV
PB   60- galoissubcyclo(1,1,fl) ignored fl [#1914]
     61- PostScript plot: fix font scaling
EB   62- GP was incorrectly issuing fflush(NULL) [#1913]
     63- issquare(Mod(1,67)*x^4+Mod(14,67)*x^2+Mod(49,67)) -> SEGV [#1915]
     64- polroots(t_POL whose coeffs vary by a factor > 2^100000) -> SEGV
         (or stack overflow)
     65- nfisincl(nf1, nf2) didn't work [#1921]
     66- setting sopath in gprc then calling install() -> SEGV [#1922]
     67- nfislocalpower did not accept a bnf in place of a nf
     68- subst(t_SER, x, 0 t_POL) [#1925], e.g
           subst(x+O(x^2),x,0*x) -> 1 + O(x)   [ instead of 0 ]
           subst(x+O(x^2),x,Mod(0,3)*x) -> O(x^0) [ instead of Mod(0,3) ]
     69- valuation(Mod(0,3)*x,x) -> 0 [ instead of oo ]
     70- factor(x^2 * (1+O(5^2))) -> domain error
     71- for T in Q_p[X], factor (round then compute multiplicity)
         and issquarefree (assume input is separable) did not agree. Now,
         factor() repeats irreducible factors according to apparent
         multiplicity (note that the multiplicity is not well defined for
         inexact inputs, which are close to being inseparable, i.e.
         v_p( disc(T) ) is large compared to the input accuracy). On the
         other hand, factorpadic with exact input is able to compute
         multiplicities reliably.
     72- Vecsmall(t_STR with extended (8-bit) ASCII) -> platform dependent +
         can't be converted back with Strchr
     73- x^y: loss of accuracy when y >> 1 and x exact
BA   74- [pthread] do not use pthread when nbthreads=1
     75- sumdiv(arg. in factored form, k < 0) => error or wrong result
     76- Mod(0,1)^0 -> invalid t_INTMOD
     77- gamma and lngamma inaccurate near negative integers, e.g.
         gamma(-1+10^-16)
BA   78- nfisisom, nfisincl and factor were still using factornf
PB   79- nfinit(t_POL of deg 1, 3) => incorrect change of variable
     80- subst(t_SER, x, x+O(x^N)) was slow [ e.g. ellj(x+O(x^10000)) ]
BA   81- setrand(2);polclass(-5032,27) -> wrong result
     82- polredabs(non-monic t_POL, 1) => potentially wrong transformation map
     83- if 'a < 'b < 'c, charpoly(Mod(a, a^2 + Mod(b,b^2+1)), c) => 1
         [ now error: the result can't be repreѕented as a t_POL in 'c, only
         as a t_POLMOD modulo b^2 whose coefficients are t_POL in 'c ]
     84- mathouseholder: missing sanity checks (SEGV, didn't accept t_COL)
     85- bestapprPade did not handle positive valuation correctly [#1945]
PB   86- subst(Mod(1/z, y), z, x) -> wrong answer [#1949]
     87- subst(1+x^2+O(x^3),x,y) -> 1 + y^2 + O(y^4) [#1950]
BA   88- [pthread] thread stacks could silently overflow
BA   89- iferr(1/0,E,1,break()) -> SEGV
     90- missing reduction in mathnfmodid(M, t_INT)
     91- missing roots in nfroots (when r2>0) [#1956,#1957]
BA   92- factormod(...,p,1) was incorrect for large p
BA   93- foo = vectorsmall(1);for(i=1,1, foo[1]); -> error [#1958]
BA   94- v=Vecsmall([2]); Fl_neg(v[1],3) when Fl_neg is installed [#1958]
     95- fincke_pohst with stockmax = -1 and non-zero CHECK (infinite
         capacity + selection criterion) could lose some vectors
         Affected polredabs [#1963]
     96- ellwp(,,1) returned \wp'/2 instead of \wp'
     97- inaccuracy in ellL1 / ellanalyticrank (usually last digit)

  Added
      1- [libari] ZM_isidentity
      2- [libpari] rename buchnarrow -> bnfnarrow
      3- [libpari] ZX_radical
BA    4- [gmp] support for mpn_divexact_1
BA    5- parallel fflog in characteristic at most 5
BA    6- parallel znlog for large characteristic
      7- [libpari] u_chinese_coprime
BA    8- new GP function elltamagawa
      9- [libpari] RgX_rescale_to_int, RgM_rescale_to_int
BA   10- [libpari] Flx_digits/FlxV_Flx_fromdigits
     11- new argument (multiple derivation) in GP function derivnum
     12- allow matrix(n) for n x n matrices
     13- new GP functions nfeltsign, nfeltembed
HC   14- new GP functions sumnumap, sumnumapinit (Abel-Plana summation)
HC   15- new GP functions zetamultall, zetamultconvert
     16- allow t_VECSMALL for vecsort [already there but undocumented] and
         vecsearch [already there but prevented by a typo]
CG   17- new GP function matpermanent [#1860]
     18- [libpari] hammingl, RgM_is_QM, vecsmall_prod, zm_permanent,
         ZM_permanent
     19- lfuncreate: no longer assume Ramanujan-Petersson, allow specifying
         an arbitrary growth rate a_n = O(n^(k_1 + eps))
BA   20- new GP function vecprod
     21- new GP function znchar
VD   22- new GP functions forperm, forsubset
PB   23- [libpari] F2xqM_F2xqC_gauss F2xqM_F2xqC_invimage F2xqM_gauss F2xqM_invimage
         FlxqM_FlxqC_invimage FlxqM_invimage
         FqM_FqC_invimage FqM_invimage
         gen_matcolinvimage gen_matinvimage
         FFM_FFC_invimage FFM_FFC_gauss FFM_gauss FFM_invimage
     24- new GP function polrootsbound
HC   25- new GP functions prodeulerrat, sumeulerrat, sumaltrat, sumnumrat,
         prodnumrat
HC   26- new GP function zetahurwitz
     27- libpari function sqrtnr_abs
     28- binomial(x,k): allow omitting k [ => vecbinomial ]
VD   29- [libpari] forperm_init, forperm_next, forperm, forallsubset_init,
         forallsubset_next, forksubset_init, forksubset_next, forsubset
     30- [libpari] lindep_bit
BA   31- new GP function ellbsd
     32- new GP function poldiscfactors
     33- [libpari] FpX_gcd_check
     34- [libpari] str_init, str_printf, str_putc, str_puts
     35- new GP function printp [ used to exist with a slightly different
         meaning: pretty format vs prettymatrix ]
     36- new GP function sumnumlagrange, sumnulagrangeinit
     37- [libpari] int2um1 (for 2^n - 1)
     38- Fl_powu: special purpose code when base is 2
     39- [libpari] vecpowuu, vecpowug
     40- [libpari] zerovec_block
     41- [libpari] Z_ZV_mod_tree
     42- [libpari] vecvecsmall_max, vecsmall_to_vec_inplace
     43- new GP function zetamultinit
BA   44- new GP functions permorder, permsign
BA   45- new GP function galoisconjclasses
AP   46- new GP functions galoischartable, alggroupcenter, algmakeintegral
     47- [libpari] Flxn_inv
     48- new GP function znchargalois
     49- [libpari] expose znstar internal interface: znstar_get_N,
      znstar_get_conreycyc, znstar_get_conreygen, znstar_get_faN, znstar_get_no,
      znstar_get_pe, znstar_get_Ui, checkznstar_i
     50- [libpari] coreu_fact, moebiusu_fact
     51- [libpari] ZabM_ker, ZabM_indexrank, ZabM_inv, ZabM_pseudoinv,
BA   52- [libpari] stack_malloc_align
PB   53- [libpari] FFM_deplin, FFM_indexrank, FFM_suppl F2xqM_deplin,
         F2xqM_indexrank, F2xqM_suppl FlxqM_deplin, FlxqM_indexrank, FlxqM_suppl
         FqM_indexrank
JD   54- [plot] SVG support
     55- [libpari] upper_to_cx, cxredsl2
     56- new GP function charpow
     57- [libpari] ZM_pseudoinv
     58- [libpari] ulogintall, ulogint, umuluu_or_0, QXQV_to_FpM, ZM_ZX_mul,
         RgM_RgX_mul
     59- new GP function ellminimaldisc
     60- [libpari] rfracrecip_to_ser_absolute
     61- new GP function znchardecompose, zncharconductor, znchartoprimitive
PB   62- perm_sign
PB   63- [libpari] FlxC_neg FlxC_sub FlxM_neg FlxM_sub FlxqC_Flxq_mul
                   FlxqM_Flxq_mul zero_FlxC zero_FlxM
PB   64- asymptotically fast linear algebra using CUP decomposition
     65- [libpari] nf_get_zkden, nf_get_zkprimpart
     66- [libpari] idealprimedec_galois, idealprimedec_degrees
     67- [libpari] idealaddtoone_raw, ZM_hnfmodprime, pr_hnf
BA   68- new GP functions hyperellratpoints and ellratpoints based on
         Michael Stoll ratpoints code.
     69- [libpari] Z_pollardbrent, Z_ECM
     70- [libpari] RgX_mulhigh_i
     71- GP function znchargauss
     72- Configure --graphic=svg
     73- GP function divisorslenstra (divisors in residue classes)
     74- [libpari] lg_increase, vecfactoru, vecfactoru_i
BA   75- ellheight for curves over number fields
     76- new GP function forfactored
     77- [libpari] ZV_sort_inplace
BA   78- ellrootno for curves over number fields
     79- optional flag to 'divisors' (add factorization)
     80- GP functions fordivfactored
BA   81- [libpari] ZXQM_mul, ZXQM_sqr
     82- [libpari] ZX_z_unscale
     83- [libpari] Flxn_mul
BA   84- [libpari] FlxqX_is_squarefree, FlxqX_nbfact, RgX_to_FlxqX
     85- [libpari] RgX_addmulXn, RgX_addmulXn_shallow, RgX_addspec,
         RgX_addspec_shallow
BA   86- GP functions galoischardet, galoischarpoly
     87- [libpari] mulcxpowIs
BA   88- [libpari] function RgXn_sqrt
KB+HC89- new package 'mf' for modular forms; new GP functions
     getcache           mfDelta            mfEk               mfatkin
     mfatkineigenvalues mfbasis            mfbd               mfcoef
     mfcoefs            mfconductor        mfcreate           mfcuspexpansion
     mfcuspisregular    mfcusps            mfcuspwidth        mfderiv
     mfderivE2          mfdim              mfdiv              mfeigenbasis
     mfeisen            mfembed            mfetaquo           mfeval
     mffields           mffromell          mffromlfun         mffromqf
     mfgaloistype       mfhecke            mfinit             mfinteg
     mfisCM             mfiscuspidal       mfisequal          mfisselfdual
     mflfuncreate       mflinear           mfmatatkin         mfmathecke
     mfmul              mfmulRC            mfnumcusps         mfparams
     mfperiodpol        mfperiodpolbasis   mfpow              mfsearch
     mfshift            mfspace            mfsplit            mfsturm
     mftaylor           mftobasis          mftonew            mftraceform
     mftwist            mfval
     90- [libpari] ZV_cba, Z_cba_extend
     91- [libpari] RgV_is_ZVpos, RgV_is_ZVnon0
JA   92- GP functions ecpp, ecppexport, ecppisvalid.
     93- [libpari] ncharvecexpo
     94- [libpari] rootsof1q_cx, rootsof1powinit, rootsof1pow
BA   95- [libpari] RgX_digits
     96- [libpari] Q_content_safe
BA   97- ellisomat: support for curve over finite field without CM
     98- GP function: bestapprnf
     99- [libpari] vec_prepend, lindepfull_bit
BA  100- [libpari] QX_mul/QX_sqr, FFX_mul/FFX_sqr, RgX_mul_i/RgX_sqr_i,
         ZXQX_mul/ZXQX_sqr
BA  101- [libpari] RgX_type2
BA  102- RgX_mul/RgX_sqr: support for coefficient ring detection
BA  103- [libpari] FlxqXQ_auttrace
BA  104- [libpari] F2xX_F2x_add, FlxX_Flx_sub, FqX_Fq_sub
BA  105- [libpari] F2x_get_red, get_F2x_mod, get_F2x_var, get_F2x_degree,
         F2xqX_get_red, get_F2xqX_mod, get_F2xqX_var, get_F2xqX_degree
    106- [libpari] vecmoduu, quadclassno, mkfracss, sstoQ, Qtoss
    107- [libpari] znchar_quad

  Changed
      1- rewrite bnfnarrow
      2- the bid struct from idealstar has been changed, the new format is
         not compatible with pari-2.9
      3- bnrdisclist output is now an ordinary vector (not a vector of vectors)
      4- made nfsign() / nfsign_arch() reliable [ use algebraic method
         besides floating point approximation to real embeddings ]
      5- support ??refcard-ell  (or mf/nf/lfun)
      6- [libpari internals] bnrinit(,,1) [with generators] is no longer
         necessary for bnrsurjection()
      7- bnrinit(,,1) is no longer necessary for bnrL1, bnrconductor,
         bnrrootnumber, bnrstark, rnfkummer, galoissubcyclo
      8- msfromell: use a (much faster) modular algorithm, allow a vector
         of isogenous curves
      9- mseval(W,s,p): allow 2x2 matrix for the path 'p' argument
     10- allow mseval(W, t_MAT, p) to evaluate many symbols simultaneously
     11- allow polrootsreal() and polsturm() with non-rational real polynomials
         (input is rounded first)
BA   12- FlxX_shift did not support negative (left) shift.
BA   13- [libpari] rename FpX_fromdigits -> FpXV_FpX_fromdigits,
         FpXQX_fromdigits -> FpXQXV_FpXQX_fromdigits
     14- made lngamma(t_COMPLEX) faster
     15- made sumnummonieninit(,1) faster
HC   16- sumnummonieninit(a) for [a,a] did not conform to documentation.
         Change to sumnummonieninit(b) for [1,b]
     17- improve prime() and primepi() by adding more checkpoints [#1878]
     18- lfun(Dirichlet character): switch automatically to lfunchiquad
         (Kronecker) if char has order <= 2
     19- nfchecksigns: replace by rigorous algorithm
     20- asympnum: better tunings => usually finds more terms
     21- extended help: make ?? op work for ALL operators (=> GP operators@2)
     22- idealstar(,N) : always include generators, for all values of flag
         [ this is cheap, allowing not to compute it doesn't make much sense;
         and G.gen is now always defined. ]
     23- let ellsea call the generic algorithm when q <= 523 to avoid an oo-loop
     24- sqrtnr algorithm (Newton iteration instead of exp(log(x)/n)
BA   25- quadgen/quadunit: allow to specify the variable name instead of w.
     26- [libpari] rename vecbinome -> vecbinomial
     27- [libpari] rename padic_lindep -> lindep_padic, Xadic_lindep ->
         lindep_Xadic
     28- x^(t_FRAC) use sqrtnr if possible
BA   29- keri replaced by ZM_ker (use modular algorithm)
     30- lfuncreate() change of format for (p,d)->Lp closure:
         - Lp here and in bad primes [p,Lp] must now use the actual local
           factor and not its inverse
         - d is now the exact number of terms needed (was 1 less), i.e.
           one need only return Lp + O(x^d)
         - bad primes are given as a separate 2nd component:
           [Lp, [[p1,L1],...[pk,Lk]]], not as [Lp, [p1,L1],...[pk,Lk]]
     31- faster nfgaloismatrix / nfgaloisapply(nf,s, ideal)
     32- nf struct:  nf[7] now stores nf.zk / content(nf.zk). Old format is
         still supported (to read in data involving old-style nf generated by
         gp version < 2.10) but incurs a small speed penalty.
JD   33- move plotport.c to libpari
     34- default window size for hi-res plots using --graphic=X
     35- component(t_POL T, n) used to return polcoeff(T, n-1) for all n >= 1
         [ undocumented compatibility behaviour, deprecated since the
         introduction of polcoeff ], and raised an exception for n <= 0.
         Now returns a true GEN component whenever it exists and raises an
         exception when it does not [ n <= 0 or n > polcoeff(T)+1 ].
BA   36- Fl_addmul_pre: change arguments order to follow Fp_addmul convention
     37- issquarefree / isfundamental with integer argument: allow factored form
     38- change polred-type algorithm to return 'x' (no longer 'x-1') for
         the field of rational numbers (make it consistent with polredabs)
BA   39- ellisomat(E,{fl}) is now ellisomat(E,{p},{fl}) (p degree of isogenies)
     40- the definition used in polred / polredbest / polredabs to decide
         what is the "best" polynomial to return
     41- removed resultant_all, use RgX_resultant_all
     42- polresultant: no longer compute the content of arguments
         (potentially very expensive for a generically small gain)
     43- support Q(i) in Q_denom / Q_remove_denom
BA   44-[libpari] rename {FpXQXQ,FlxqXQ,F2xqXQ}V_aut{sum,trace,pow} to
                         {FpXQXQ,FlxqXQ,F2xqXQ}_aut{sum,trace,pow}
BA   45-[libpari] FpXQXQ_auttrace now identical to FpXQ_auttrace

  Removed
      1- file 'MACHINES' (no longer maintained)
      2- useless argument nf in ZC_nfval, ZC_nfvalrem, pr_equal, ZC_prdvd
