Karim Belabas on Thu, 30 Jan 2014 12:26:03 +0100

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

pari-2.6.2 (BETA) released

Dear PARI lovers,

I would like to announce the release of pari-2.6.2-BETA, which is a 
release candidate for pari-2.7 (stable). As usual, the sources and a
Windows binary can be obtained through the address


We expect to release pari-2.7 in about one month, please test and report
problems ! (see http://pari.math.u-bordeaux.fr/Bugs/ for the latter)

Have fun !



  - Configure --mt=pthread or --mt=mpi: GP now supports POSIX threads and MPI.
    See doc/parallel.dvi for an introduction, and have a look at the new
    parxxx GP functions.

  - Configure -gcov: support for gcov/lcov. As a result, the regression suite
    (make test-all) has been much expanded and lots of obscure bugs fixed. See
    for current coverage test reports.

[The GP interpreter]
  - parallel GP support: parapply, pareval, parfor, parforprime, parselect,
    parsum, parvector. E.g.
        ? parapply(factor, [2^256 + 1, 2^193 - 1])
    will factor these two integers in parallel.

  - liftall(), liftint(), liftpol() give more flexibility than lift() in
    complicated situations

  - characteristic(x) returns the "characteristic" of the base ring over which
    x is defined.

  - ffgen(p^f), as an alias for ffgen(ffinit(p,f))

  - vecsum(v), as an alias for sum(i=1,#v,v[i])

  - variable() no longer raise exceptions, but returns 0 if the object
    has no main variable.

  - getabstime() returns the CPU time elapsed since gp startup, providing a
    reentrant version of gettime()
  - %#n returns the time it took to compute history result %n

[Linear algebra]

  - linear algebra routines now try to convert generic GP constructions
    involving t_INTMODs or t_FFELTs to appropriate (faster, more memory
    efficient) representations, then call routines in the libpari modular
    kernel (FpM, Flm, F2m, FqM, FlxqM, F2xqM).

  - normlp(): true L^p norm [ N.B. the old norml2() is still available, 
    and returns the *square* of the L^2 norm ].

  - clean generalizations of current norml2: qfnorm(), qfbil()

  - mathnfmodid(x,D), where D = [d1,...,dn] compute the HNF of
    concat(x,matdiagonal(D)); in a more efficient way

  - Colrev, analogous to Vecrev 

[Number fields]

  - rnfpolredbest: relative version of polredbest(), making rnfpolredabs()

  - idealprincipalunits: structure of the multiplicative group
    (1 + pr) / (1 + pr^k), for a prime ideal pr
    [ special case of idealstar, faster ]

[Transcendental functions]

  - logint(x,b) for floor(log(x) / log(b)),  avoiding rounding problems

  - expm1(x) for exp(x) - 1, but also accurate for x ~ 0

  - lift(x,'v) / centerlift(x,'v) now only lift t_POLMODs in variable v,
    no longer (most) t_INTMOD / t_PADICs met along the way

  - rnf.pol (absolute defining polynomial / Q) has been renamed rnf.polabs.
    rnf.pol is now the relative polynomial, defining the relative extension
    over the base.

  - as a side effect of the new %#n construction, all GP results are now stored 
    as history entries,  including the "void" object returned by functions
    such as print() or for().

P.S. The Changelog :

Done for version 2.6.2 (released 30/01/2014):

    1- eulerphi(t_INT factorization) corrupted the input
BA  2- 8bit chars were interpreted as end of input
    3- Bernoulli numbers were no longer cached [2.6.0]
    4- typo in Brillhart, Lehmer, Selfridge primality test [#1467]
    5- [Configure] confusing error messages when C compiler doesn't work
    6- scalar + t_SER = 0 => wrong valuation (1+O(x)-1 => O(x^2))
BA  7- squaring of t_REAL was not faster than multiply
    8- 1+O(2^(2^18)) => O(2^0) (silent overflow)
PB  9- Mod(1, 2) - Mod(2, 4) => Mod(-1,2) [#1469]
   10- memory corruption in subgrouplist: e.g. subgrouplist([53835600, 29], 5)
   11- SEGV in zncoppersmith (when auxilliary polynomial was non-monic)
   12- division by 0 in Fl_ellcard_Shanks [2.6.1, #1474]
   13- ellwp([1,I]) -> stack overflow [2.6.0]
   14- sumdedekind(h < 0, k < 0) wrong result; if gcd(h,k) > 0 as well
   15- galoisexport(G, 1) -> SEGV
   16- ??default(log) no longer worked
   17- rnfalgtobasis, rnfbasistoalg, rnfeltup, rnfeltdown, rnfeltabstorel,
       rnfeltreltoabs were not treating their inputs consistently, and
       accepted (or crashed on) too many incorrect inputs.
   18- rnfideal* did not handle correctly the 0 ideal
   19- rnfidealtwoelt(non integral ideal) => crash
   20- nfeltreducemodpr(K, non invertible elt mod pr,...) => wrong result
       (now an e_INV error)
   21- rnfbasis: wrong result due to a mistake in gen_if_principal
       [2.6.0, revert d62f0de01]
   22- nfsolvemodpr(nf,a,b,P): a must be invertible, as in matsolve
       (was not documented, used to SEGV). Raise an error if not.
   23- various bnrdisclist crashes
   24- bnrclassno(bnf, prime ideal) -> SEGV
   25- forpart(x=k,) raised an exception if k < 0 [ now empty loop ]
   26- deriv(constant) now returns 0 in the base ring (not gen_0).
   27- inconsistencies and mistakes in deriv / intformal of t_POLMOD: forbid
       integration wrt the main variable of x.mod, deriv(Mod(x, x^2),x) was
       Mod(1,x^2) and deriv(Mod(y,x^2),y) was 0 instead of respectively 0 and
   28- idealchinese with t_POLMOD inputs -> input error
   29- idealchinese with denominators -> SEGV
   30- qflll(Mat(0)) returned Mat(1)
   31- infinite loop in sumpos: sumpos(n=1,-log(cos(1/n))) [#1481]
BA 32- doing allocatemem in the break loop would corrupt the new break loop
   33- relative error in eint1 was larger than expected
   34- select(t_LIST,,1) [ indirect select ] didn't work
   35- vecsort(List(),,4) -> SEGV
   36- factorpadic / polrootspadic lost accuracy when converting output from
       integers to t_PADICs (factorpadic(t^2 + 3^5, 3, 5) -> irreducible factor
       (1 + O(3^5))*t^2 + O(3^5)*t + O(3^0)
   37- Mod(0,0) is no longer valid => division by 0 (as Mod(x,0) for x != 0)
   38- RgX_to_RgV no longer accepts other types than t_POL. Use Rg_to_RgV for
       a more permissive function
   39- broken Fq_sqrt when T != NULL and t_INT input
   40- ispower(1009^11) -> 0 [2.6.0]
   41- ellinit([0,1,1,0,1],2).group -> SEGV
   42- nfroots(nf, deg 1 polynomial) -> wrong result
   43- Configure --time=ftime: wrong reported timings
   44- mateigen(rational matrix): inconsistent concatenation [#1489,2.6.0]
   45- polroots(): wrong accuracy of (real) 0 components
   46- randomprime(2) -> SEGV [#1493, 2.6.0]
   47- forqfvec(v,[;],0,) -> SEGV [#1495]
   48- poliscyclo(x^0) -> 2
   49- truncation (precision) errors in bnfnarrow [#1491]
   50- matadjoint assumed that n! is invertible. If this is not the case, now
       use a safe algorithm
   51- leading coefficient of elldivpol ignored the characteristic,e.g.
       E=ellinit([a1,a2,a3,a4,a6*Mod(1,2)]); elldivpol(E,2)
   52- gcd involving a t_FFELT -> SEGV
   53- oo loop in ispower for huge arguments / oo loop in prime iterator
       in congruence classes [#1498, 2.6.0]
   54- L=[1,2,3]; apply(x->L=x,L) -> SEGV  ( idem select and [|x<-] operators )
   55- (k+1.)/k - (2*k+1.)/k -> incorrect object
   56- gcd(x,0.) -> 1 but gcd(x,Pol(0.)) -> x [ the former is correct, since 0.
       is inexact and may represent an arbitrary small non-zero real number ]
   57- eint1 misbehaved at large precision [#1499]
   58- polredbest(T,1) incorrect if T non-monic or degree 1
   59- nfcertify might miss a factor to be certified, e.g.
       nfcertify(nfinit(P, [2,3,5])) was empty
   60- polresultantext(t_POL in y, t_POL in y,y) -> U/V as t_POL in x [#1509]
   61- inconsistent handling of t_POL "divided by" scalar among the variants
       of Euclidean division (%, divrem, \, ...). E.g. x % 2 is OK, but
       x % Mod(2,3) was not. We now follow the semantic of
       grem/gdeuc/poldivrem: a scalar is understood as a t_POL of degree 0
       in the proper variable [#1510]
   62- incorrect rounding in mulur
BA 63- Configure: --includedir was ignored
   64- add GC in RgV_dotproduct / RgV_dotsquare
   65- ZX equal was checking variables, contrary to the spirit of the
       specification (and contrary to RgX_equal). Specify behaviour properly:
       none of the internal .*[xX]_equal function check variable numbers.
   66- arithmetic functions did not accept factorizations of negative integers
       (whereas most of them are defined for negetive integers)
BA 67- Configure --time=ftime actually tested times, not ftime. Remove ftime
       from the default list of timer functions (reports wallclock time, not
       CPU time) [#1523]
   68- polredabs() could (find then) forget some polynomials [#1511]
   69- poldisc(x^3 + Mod(2,3)*x^2) --> e_INV
   70- (Mod(4.,y^2+1)*(1 + O(x)))^(1/2) -> junk (= [2.0+O(x)),2.0+O(x)]~).
       Worse if other t_POLMOD coefficients. Now exception.
   71- sin(O(p)) returned 1+O(p) instead of O(p)

    1- default help text for a user function is now as in \u:
       fun =
    2- after addhelp(f,...), ?f no longer include default help text for a
       user function (function code). Type 'f' to see the function code.
    3- primes([a,b]) now returns the primes in the interval [a,b]
    4- install: add symbol name in library and GP prototype to default help
    5- the rnf structure format
    6- library functions: rename rnfelementxxx -> rnfeltxxx,
       rnfidealhermite -> rnfidealhnf
    7- allow mathnf(t_VEC) [ apply Mat() automatically ], gives acces to the
       ZV_gcdext() routine.
    8- mathnf(,2) (generic vs integral t_MAT) is deprecated: we always test
       the matrix entries and choose the appropriate routine
    9- bnrclassno: allow all standard ways to define class fiels (A,B,C),
       not only bnf + module
   10- bnrinit(bnf,f): allow using idealstar(bnf,f) in place of f
   11- Let Set(t_VECSMALL v) behave as Set(Vec(v))
   12- ffgen(T) now checks whether T is squarefree (testing for
       irreducibility is too expensive)
   13- variable() no longer raises exceptions: if no variable can be
       associated to the object, return 0. Thus "if (!variable(x), )" may be
       used to test wether x has a "variable".
JD 14- polcyclo(n, x) now works for all roots of 1
   15- quadpoly no longer accepts vector/matrix arguments, see 2.6.0,C94
   16- [libpari] renamed ZM_hnfremdiv -> ZM_hnfdivrem
   17- x t_REAL * y t_INT: either convert y to t_REAL (as before) or use
       integer multiplication (if lg(x) >> lg(y))
   18- GP: all results are now stored in GP history, together with the time
       to obtain them [ we used to only store non-gnil results, and no timings ]
   19- chinese(t_POL,t_POL): allow polynomials of different degrees
   20- deplin(): use FpM/Flm/F2m routines if possible (like all other generic
       linear algebra routines)
   21- FpM_gauss(a,b,) from modular kernel no longer allow all types of input:
       split into FpM_FpC_gauss (b t_COL) and FpM_gauss (b t_MAT). Same for
       all modular xxx_gauss functions
   22- O(1/x^2) --> error [ now equivalent to O(x^-2) ]
   23- faster evaluated polhermite/pollegendre
   24- polhensellift / ZpX_liftfact: use quasi-linear ZXX_mul_Kronecker instead
       of RgX_mul (~ Karatsuba)
   25- [libpari] renamed gcmpX -> gequalX
   26- [libpari] renamed ordred -> polredord
   27- the prid structure: the anti-uniformizer tau (pr_get_tau) is now stored
       via its multiplication table
   28- rnfpolredabs(x,3) did not conform to the documentation (which did not
       make sense). Fix documentation and function, for rnfpolredbest as well.
   29- [libpari] renamed recip -> serreverse
   30- lift(x,'v) / centerlift(x,'v) now only lift t_POLMODs in variable v,
       no longer (most) t_INTMOD / t_PADICs met along the way
   31- lift / centerlift no longer raise an exception when they encounter
       a non-arithmetic type (e.g. a t_REAL or even a t_STR) in a structure.
       They just copy the offending sub-object as-is.
   32- generic polynomial Euclidean division (grem, gmod, poldivrem): when
       result is the zero polynomial, use RgX_get_0, not gen_0 / pol_0
   33- rnf.pol (absolute defining polynomial / Q) is now called rnf.polabs,
       rnf.pol is now the relative polynomial, defining the relative extension
       over the base.
BA 34- FpXYQQ_pow: change order of moduli to be consstent with FpXQXQ_pow.
BA 35- FlxYqQ_pow: renamed to FlxYqq_pow, and moduli order changed.
   36- idealstar(K,id), allow to input 'id' as a factorization into prime
       ideals, as produced by idealfactor
   37- define eulerphi(0) = 2 [ now eulerphi(n) = znstar(n).no for all n ]
   38- allow subst(t_SER,x,exact 0): subst(2+O(x),x,Mod(0,3))->Mod(2,3) [#1513]
   39- [libpari] rename gsh -> gsinh, gch -> gcosh, gth -> gtanh,
       gash -> gasinh, gach -> gacosh, gath -> gatanh, ggamd -> ggammah
       (follow GP names)
   40- no longer naively use the Karatsuba/3M formula to multiply t_COMPLEX
       of t_REALs: loss of accuracy is too important and unpredictable from the
       user's point of view [ e.g. (1+ 1e-90*I)*(1e90+I) -> 1. E90 + 0.E52*I,
       when the definition directly yields 1. E90 + 2*I ]. Could use it when
       the exponents of real/imaginary parts are close, increasing the
       precision by the exponent difference (increasing overhead...): not done
   41- renamed mpexp1 -> mpexpm1, cxexp1 -> cxexpm1
   42- change prototye of mpsincos1 and rename -> mpsincosm1

EP  1- Configure option for gcov/lcov support
    2- libpari function FF_f, member function g.f for t_FFELT
       (definition field has p^f elements)
    3- libpari functions gprimepi_upper_bound, gprimepi_lower_bound,
       primepi_lower_bound, primes_interval, primes_interval_zv,
       primes_upto_zv, primes0
    4- libpari functions rnf_get_absdegree, rnf_get_invzk, rnf_get_map,
       rnf_get_nf, rnf_get_nfdegree, rnf_get_nfpol, rnf_get_nfvarn, rnf_get_pol,
       rnf_get_polabs, rnf_get_zk, rnf_get_nfzk, rnf_get_varn, rnf_get_disc,
       rnf_get_index, RgV_is_QV, RgX_equal_var
    5- allow rnf.disc, rnf.index
    6- functions rnfelttrace, rnfeltnorm
    7- function ZV_gcdext, based on ZM_hnflll (simplified)
    8- allow ffgen(p^f) instead of ffgen(ffinit(p,f))
    9- [libpari] Fq_sqrtn
   10- mathnfmodid(m, d): allow d an arbitrary vector of positive integers.
       The old syntax (d an integer, representing a vector of equal integers)
       is still allowed
LGr11- GP function Colrev
   12- GP operator %#n to recover time used to compute history result %n
   13- GP function getabstime()
   14- [libpari] Rg_to_F2, RgV_to_F2v, RgM_to_F2m, F2c_to_mod, F2m_to_mod,
       Flc_to_mod, Flm_to_mod, F2m_F2c_invimage, F2m_invimage, F2m_suppl,
       Flm_suppl, F2m_rank, Flm_rank, F2m_rowslice, F2v_slice, F2v_ei
BA 15- Parallel GP support (parapply, pareval, parfor, parforprime, parselect,
       parsum, parvector)
   16- [libpari] residual_characteristic
   17- GP function characteristic()
   18- [libpari] muluui, diviuuexact
   19- [libpari] Kronecker_to_ZXX, ZXX_mul_Kronecker
BA 20- conversion from matrices of FFELTs to low level (Fq/Flxq/F2xq) kernels
       for faster treatment.
   21- FqM_det, FlxqM_det, FlxqM_inv, F2xqM_det, F2xqM_inv, F2xqM_image,
       F2xqM_image, F2xqM_rank, FFM_det, FFM_image, FFM_ker, FFM_rank, FFM_inv
   22- ZM_rank, ZM_indexrank, ZM_indeximage
   23- GP function normlp
BA 24- GP function vecsum
   25- [libpari] pr_equal, ZC_nfval, ZC_nfvalrem, ZC_prdvd, ZV_Z_dvd
   26- allow .p / .e / .f / .gen for modpr structures
   27- function rnfpolredbest
   28- functions qfnorm, qfbil
   29- [libpari] ZM_multosym, RgM_multosym, RgMrow_RgC_mul, RgM_transmul,
       RgM_transmultosym, ZM_transmultosym
   30- [libpari] nf_rnfeq, nf_rnfeqsimple, eltreltoabs, eltabstorel,
       eltabstorel_lift, nf_nfzk, nfeltup, QXV_QXQ_eval, QXX_QXQ_eval
   31- [libpari] factor_pn_1_limit
   32- [libpari] get_FpXQ_star, gener_FpXQ_local
BA 33- move gpinstall to libpari
   34- liftall() lifts recursively all t_INTMOD/t_PADIC/t_POLMOD components
   35- liftint() lifts recursively all t_INTMOD/t_PADIC components
   36- liftpol() lifts recursively all t_POLMOD components
BA 37- GP function logint
PB 38- [libpari] gen_matmul, gen_matcolmul, FFM_mul, FqM_FqC_mul, FqM_mul,
       F2xqM_mul, F2xqM_F2xqC_mul, FlxqM_FlxqC_mul, FlxqM_mul.
   39- [libpari] Flx_equal, F2x_equal
BA 40- [libpari] FpM_powu/Flm_powu/F2m_powu
   41- new GP function idealprincipalunits
   42- [libpari] checkabgrp, abgrp_get_no, abgrp_get_cyc, abgrp_get_gen,
       bid_get_grp, bid_get_no
   43- [libpari] FpX_disc
   44- [libpari] retmkcomplex
   45- GP function expm1 (= exp - 1, avoiding cancellation)

    1- optional flag to factorpadic() [ enabling Buchman-Lenstra + round2 ]
       Use the default = round4
    2- useless wrappers map_proto_GG, map_proto_GL, map_proto_lGG
    3- [libpari] useless functions gand, gor
    4- [libpari] useless function ratlift [ use Fp_ratlift ]

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