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 http://pari.math.u-bordeaux.fr/download.html 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 ! K.B. HIGHLIGHTS FOR PARI-2.6.2-BETA: ================================ [Configure] - 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 http://pari.math.u-bordeaux1.fr/lcov-report/ 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() obsolete - 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 [COMPATIBILITY WARNING] - 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): Fixed 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 Mod(1,x^2) 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. P=polcompositum(x^4+437*x+19,x^5-571*x+27)[1]; 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) Changed 1- default help text for a user function is now as in \u: fun = (args)->body 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 yet. 41- renamed mpexp1 -> mpexpm1, cxexp1 -> cxexpm1 42- change prototye of mpsincos1 and rename -> mpsincosm1 Added 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) Removed 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] `