| 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]
`