Karim Belabas on Wed, 16 Sep 2020 16:11:35 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
pari-2.12.1 released [BETA] |
Dear PARI lovers, I would like to announce the release of pari-2.12.1-BETA ! It contains major improvements to the Number Fields module and lots of cool new functions and features. And bug fixes. Sources and binaries for Windows or MacOS can be obtained through the address http://pari.math.u-bordeaux.fr/download.html See http://pari.math.u-bordeaux.fr/Bugs/ for how to report problems or submit wishlist items. Have fun ! K.B. HIGHLIGHTS FOR PARI-2.12.1-BETA: see below for COMPATIBILITY ISSUES. ================================ [Number Fields] - Number fields functions now allow compact representations of algebraic numbers, as factorization matrices: products of "small" elements possibly raised to huge powers. This is very useful for units and S-units or principal ideals generators, which may be huge in expanded form. Functions transparently process such objects but, for compatibility reasons, they are not created by default, this must be specified as follows: * bnf = bnfinit(pol, 1) now constructs an algebraic bnf structure containing all data (including units) in exact compact form. This is the critical step. Class field theoretic functions involving bnf will process units in compact form, allowing them to succeed independently of their size or the working precision. * new GP function bnfunits(bnf, optional S) returns the fundamental S-units in compact form [ bnf.fu returns the units in expanded form which can be expensive ]. * bnfisprincipal(bnf,id,4) or bnrisprincipal(bnr,id,4) return the principal part of the discrete logarithm in compact form. Without optional flags, nothing changes: old programs should run without modification and fail when units are large. New programs should use the new flags. - The old bnrinit(, 1) flag [ include explicit bnr generators in the output ] was mandatory in many class field theoretic functions. Not anymore: their internal compact representation is always sufficient. You can still use them for debugging but they are expensive and no longer needed elsewhere. - The bnrinit function computes general ray class groups G = Cl_f(K) but we are often interested in simpler quotients G/H, e.g., G/G^N for abelian extensions of exponent N. The function bnrinit now accepts an optional argument to specify N; later calls to bnrisprincipal solve the discrete logarithm in this quotient group and are now only correct modulo N, which is adequate if we actually want to work in G/H for any congruence subgroup of index dividing N. This trick avoids expensive discrete logarithms if the modulus f is large. This is used intensively in PARI internals, speeding up all class field theoretic functions. The rnfconductor function, which computes a pair (f,H) attached to an abelian extension K[X]/(T) of the base field K together with a bnr structure for G = Cl_f(K), now accepts a new flag to return G / G^deg(T), which is less expensive and usually sufficient. The same trick is available in idealstar for the group G = (Z_K/f)^*, allowing to compute in G/G^N; ideallog then returns results which are correct modulo N. - new GP function bnrmap to map ray class groups Cl_A -> Cl_B when B | A. This also works with ray class groups modulo N provided the exponent of Cl_A divides N - nfsubfields: add van Hoeij-Klueners-Novocin algorithm to the existing algorithms of Klueners (doesn't run in polynomial time) and Allombert (not always applicable). The running time is polynomial in the output size. New GP functions nfsubfieldsmax (maximal subfields) and nfsubfieldscm (maximal CM subfield), both of which always run in polynomial time because their output is provably small. - new GP member function nf.p returning rational ramified primes; rnf.p returns rational primes dividing the norm of the relative discriminant ideal. - allow nfinit([T, Z_K basis, ramified primes]) when all arithmetic invariants are known. - galoisinit: the definition of "weakly super-solvable" groups, supported by the function, is less restrictive. For instance, there are no exceptions in order < 48 and 23 exceptions in order < 144, 40% of them in order 96. There were 29 such exceptions in 2.12.0. [Transcendental functions] - faster exp(small rational number) using binary splitting. E.g, at 10^6 decimal digits of accuracy, exp(1/3) is now computed in 0.2s, about 50 times faster than in pari-2.11. - faster formulas for Catalan() and log(2) - x^s: faster and more precise when s is a t_COMPLEX - add optional argument to sqrtint to obtain the remainder as well - gammamellininvinit(A): allow A to be an L-function; this also allowed in gammamellininv and gammamellininvasymp. [Multiple Zeta Values] - new GP function polylogmult for multiple polylogarithm values and their Yamamoto interpolation. - new GP function zetamultdual: zetamultdual([4]) -> [2,1,1] (the corresponding Muliple Zeta Value is the same). - zetamult now accepts an optional parameter t for Yamamoto's interpolation; in particular for t = 1, we obtain star MZVs and for t = 'x, Yamamoto's polynomial. - zetamultall: add optional flag to compute only values of given weight, and/or up to duality, and/or star values. [Elementary Number Theory] - new GP function eulerianpol (eulerian polynomials), eulerpol (Euler polynomials), eulerfrac (Euler numbers), eulervec (vector [E_0, ..., E_2n]). - new GP function halfgcd: given polynomials or integers [x,y], compute an invertible matrix M such that M * [x,y]~ = [a,b]~ with b small (half the "size" of [x,y]). - qfbsolve: new optional flag to ask for all solutions modulo units (vs. a single solution) or to allow non-primitive solutions. - randomprime: new optional argument to specify a congruence class. E.g. randomprime([2^31, 2^32-1], 7) -> a 32-bit prime congruent to 1 mod 7. randomprime([a, b], Mod(2,3)) -> a prime = 2 mod 3 in [a,b] [Polynomials and Power series] - polrootsreal: faster due to asymptotically fast P(X) -> P(X+a) algorithm - power series and truncated polynomials: systematic use of Newton division - polrootspadic: allow computing roots in unramified extensions of Q_p E.g. T = y^2+y+1; p = 2; polrootspadic(x^3-x^2+64*y, [T,p], 5); - new GP function rootsof1(N): complex roots of unity of order N. - new GP functions fft, fftinv: Fast Fourier Transform of order 2^n and its inverse, given roots of unity. Supports general base rings, e.g., finite rings. [Linear Algebra] - matsnf(integral matrix): now uses a modular algorithm. - matrixqz(,-1 or -2): faster implementation. - matrank, matker over the integers: faster implementation for large rectangular matrices. - qflll(x, 3) in place reduction: return x * qflll(x) [faster]. [Curves] - new GP function ellpadiclambdamu: Iwasawa invariants lambda and mu for the p-adic L function L_p(E), where p is a prime of good or bad multiplicative reduction for the elliptic curve E/Q. - hyperellpadicfrobenius: allow X defined over a number field and compute Frobenius over unramified extension of Q_p. E.g., M = hyperellpadicfrobenius(x^5 + 'a * x + 1, ['a^2+1,3], 10); (over Q_9, to 10 3-adic digits of accuracy) [L-functions and Modular Forms] - new GP function lfundual (to manipulate the dual L-function) and lfunshift (to manipulate L(s + a)) - new GP function mfisetaquo(f): can f be represented as a meromorphic eta quotient ? - new GP function dirpowerssum for fast computation of 1^s + 2^s + ... + N^s - exact (fast!) rational formulas for quadratic Dirichlet L-functions at non-positive integers. E.g. lfun(1, -7) -> 1/240 [ = zeta(-7) ] lfun(-691, -2) -> -175118 [ = L(chi_{-691}, -2) ] - lfuncreate(v) can now correctly handle non-rational data: instead of v = [a, asta, Vga, k, N, eps, poles], v can now be a closure (without arguments) evaluating to such a vector at current working precision. - lfuncreate([G,v]): where G is (Z/NZ)^* or a ray class group and v a vector of characters with the same conductor. This vector-valued L-function allows fast simultaneous evaluation for multiple characters. E.g., F = [Mat(160), [1]]; G = bnrinit(bnfinit(x), F); \\ ray class group \\ vector of all primitive characters v = [ c | c <- bnrchar(G, [1]), bnrconductor(G, c) == F ]; L = lfuncreate([G, v]); lfun(L,1); \\ evaluate all L(chi, 1) simultaneously - improved zetahurwitz: faster & use less memory. - parallel support for lfuninit. [Miscellaneous] - new GP function asympnumraw: extrapolate the first terms of the asymptotic expansion of some expression; more robust and versatile than asympnum (which only supports rational expansions). E.g., f(n) = n! / (sqrt(n) * (n/exp(1))^n); \p100 v = asympnumraw(f, 10); bestappr(v/v[1]) returns 10 terms of Stirling's expansion without needing to identify v[1] = sqrt(2*Pi); asympnum would fail because of the v[1] 'period'. - new GP function permcycles to return the decomposition of a permutation as a product of disjoint cycles. - new GP function mscosets to construct H\G given generators for a group G and a description of a subgroup H ? PSL2 = [[0,1;-1,0], [1,1;0,1]]; \\ S and T \\ G = PSL2, H = Gamma0(2) ? [C] = mscosets(PSL2, g -> g[2,1] % 2 == 0); ? C \\ three cosets %3 = [[1, 0; 0, 1], [0, 1; -1, 0], [0, 1; -1, -1]] The function also returns the right action of G on H\G. - new GP function msfarey to build subgroups H of G = PSL_2(Z) (as Farey symbols) given an oracle deciding whether an element of G belongs to H. \\ Gamma_0(N) is built-in G0(N) = mspolygon(N); \\ Gamma_1(N) via Gamma_0(N) G1(N) = msfarey(G0(N), g -> my(a = g[1,1] % N); a == 1 || a == N-1); \\ Gamma(N) G(N) = msfarey(G1(N), g -> g[1,2] % N == 0); [The GP language] - new GP function matreduce, to convert a multiset to a vector of distinct elements together with their multiplicities: ? matreduce([x,y,z,x,x,y]) %2 = [x 3] [y 2] [z 1] Can also be used to merge factorizations: F1 = factor(12); F2 = factor(20); matreduce(matconcat([F1,F2]~)) -> factor(12 * 20) - lexical variables names can now reuse builtin functions names as in f(theta) = my(gamma=1/3); sum(omega=1,10, exp(2*I*Pi*gamma*theta*omega); - GP closures improvement: no longer copy the full context, only the variables actually accessed by the function. - allow holes in multi-assignements: [a,,c]=[1,2,3]. - support plotinit/plotexport even when no graphic engine is available (Configure --graphic=none). - new parallel GP function parplothexport, parforprimestep, parforeach. COMPATIBILITY ISSUES BETWEEN 2.12.0 and 2.12.1 ============================================ 0) Obsoleted functions and interfaces: - removed obsolete functions 'bnfcompress' and 'zetamultinit' - 'bnfissunit' is obsolete, use bnfisunit - 'rnfkummer' is obsolete, use bnrclassfield! - bnf.fu returns fundamental units in expanded form and can be very expensive. Use bnfunits ! - bnfsunit()[1] returns fundamental S-units (without units) in expanded form and can be very expensive. More generally, bnfsunit contains mostly useless information in an expensive form and is now mostly obsolete. Use bnfunits ! 1) Output changes: - qfbsolve (revert 2-12-0 C18); we had changed the interface to return all solutions modulo units instead of a single solution in 2.11. For compatibility reasons, we restored the old behaviour by default, an optional flag allows to get more diverse data (all solutions, all primitive solutions, a single solution). - matrixqz(,-1 or -2): no longer return result in HNF (very expensive now that the functions have been sped up and often not needed). - bnfisunit and bnfissunit: the torsion unit exponent is now a t_INT (used to be a t_INTMOD, requiring awkward conversions). 2) Input changes: - zetamult: the optional 'zetamultinit' argument is gone (the implemented algorithm is uniformly faster than the old one which made use of this precomputation) - parsum: removed optional argument initializing the sum to the given value [this wasn't very useful and removing it allows grouping subsums => faster] - mfshimura: disallow the discriminant D argument (not well defined); only allow squarefree positive t - disallow mfeisenstein(k,chi1,chi2) when Q(chi1 chi2) is not its field of definition: the resulting modular form would violate asumptions made in almost all mf routines, preventing those routines from accepting the form. ------------------------------------------------------------------------------- P.S. The Changelog Bug numbers refer to the BTS at http://pari.math.u-bordeaux.fr/Bugs/ Done for version 2.12.1 (released 14/09/2020): Fixed BA 1- plotlines flag was ignored 2- fileopen(,"w" or "a") was bypassing the check for 'secure' default 3- bug in idealismaximal: K=nfinit(y^2+7); idealismaximal(K,[11,7;0,1])->0 4- bnfcertify did not certify correctly its argument when DEBUGLEVEL > 1 (\g 2 and above) and the computed class group was trivial (introduced in 2002, commit d3d44841). The code was correct at \g1 or \g0, and in all cases if the computed class group was non-trivial. 5- nfdiscfactors(nfinit([x^2+1, [1,x]])) -> wrong result (didn't support inputs from nfinit([T, integer basis])) 6- nfinit(rnf) would produce a broken nf (not supporting nf_get_ramified_primes) 7- [mf,F] = mffromqf([2,0;0,2]); L=lfunmf(mf,F) => wrong values 8- t=mfTheta();mfslashexpansion(mfinit(t),t,[0,1;-1,0],1,1) -> error 9- poldisc(x^4 + 8/y*x) -> type error in Q_divi_to_int [#2157] 10- T=mfTheta(); mfeval(mfinit(T),T,I/10) -> wrong sign 11- mfslashexpansion(mf,F,huge matrix,...) -> overflow 12- mf=mfinit([470,2],0);F=mfeigenbasis(mf)[7]; mfcuspval(mf,F,1/5) -> division by 0 13- quadtofp(quadgen(-3)) -> t_FRAC component [#2158] 14- [from 2.12.0] nfgcd wouldn't terminate [#2159] 15- conjvec(t_FFELT of characteristic 2) was missing a conjugate 16- nf2 = nfnewprec(nf) could return incompatible nf2 [#2154] 17- [from 2.12.0] u_forprime_next around 2^63 could return primes larger than upper bound 18- [from 2.12.0] gcd(2*x, 2*x+1) -> 2 [instead of 1] 19- [from 2.12.0] deriv(2/(4*x^2+1),x)->inconsistent exact division [#2162] 20- issquare(non square t_FFELT, &x) -> SEGV [#2163] 21- rdivii / rdiviiz imprecise, e.g. a=28088408347805994933529600180306266460976; b=10333147966386144929666651337523200000000; rdivii(a, b) 22- typo in QM_inv (wrong result) 23- modular symbols package: better type checks 24- division by 0 in Flx_extresultant when one input is 0 25- [from 2.12.0] lfunconductor(1,[]) -> SEGV 26- internal error in isprime(,1) after addprime() [#2166] 27- ZM_gauss returned incorrect result for t_MAT RHS and 0 input BA 28- lfunhardy(..., t) with t<0 -> error BA 29- ellweilpairing(E,P,P, odd m) -> wrong result [#2172] PB 30- FlxqM_mul could return wrong result [#2174] 31- p = 4*vecprod(primes([3,373]))*587-1; quadclassunit(-p) -> SEGV [#2175] BA 32- Using local in export()ed functions could crash GP 33- Flx_div_by_X_x(A, x) didn't handle deg(A) <= 0 34- M=mfinit([11,2,Mod(3,11)]); f=mfbasis(M)[1]; lfuncheckfeq(lfunmf(M,f)) -> type error 35- rare random SEGV in nfbasis [#2178] 36- missing type checks in lfunthetacheckinit [#2179] 37- idealispower(x,n,&y): y could be incorrect [#2181] 38- SEGV in idealispower [#2183] 39- inconsistencies in subst for constant polynomials: e.g., type(subst('u^0,u,x)) -> t_POL (was t_INT) subst('u^0,u,Mat(Mod(1,2))) -> [Mod(1,2)] (was [1]) XR 40- factorpadic: incorrect factors (might not lift to Qp) E.g. T=polsubcyclo(271,9); factorpadic(T,3,7)[4,1] BA 41- polcompositum(x^2+x/3+1,x^2+x/3+1) -> SEGV 42- p=nextprime(2^20);q=nextprime(2*p);n=q*p;v=n+1;P=x^2-1; zncoppersmith(v*P,v*n,p,p*v) --> oo loop 43- missing reduction of pr.gen in idealprimedec [ slowdown ] + nfmodprinit [ division by 0 ] JR 44- polylog(-m, tiny z): catastrophic cancellation, e.g. polylog(-100,.5) 45- prodeulerrat((p-2)/(p-1)+(p-1)^(m-1)/p^m,1,3) slow and imprecise [#2192] 46- Mod(1,5) * O(x) -> O(x) [instead of Mod(0,5) + O(x)] 47- lfuninit: lfunrootres calls too expensive if rootno and polar part known 48- incorrect rounding in divrr(realprec = 3) 49- polrootsreal(x+0.) -> SEGV DB 50- mspolygon(1,2): incorrect drawing 51- qflllgram([2,2,3;4,5,6]) -> SEGV 52- printf("%10.6f\n",2^-100) -> SEGV [#2198] 53- mfsturm: off-by-1 error BA 54- ((x^7+x^3+x+1)*Mod(1,Mod(1,2)*d))%(x^4+x^3+x^2+1)->x^3+x instead of Mod(1,2)*x^3+Mod(1,2)*x [#2199] 55- tan(-127336279536511925./2^49) -> completely wrong at \pb64 56- ellocalred / K != Q: wrong encoding for I0 (kod = 1 instead of 0) 57- atanh near -1: large relative error 58- acosh near 1 or -1: large relative error 59- type(subst('x^0,'y,0)) -> t_INT (instead of t_POL) 60- bnfisprincipal: overflow when h >> 1 61- lfun: Pi^s or (2Pi)^s imprecise when Im(s) >> 1 BA 62- factor((x-1)*(x-y)^2) --> oo-loop BA 63- ellap could fail with division by 0 64- wrong results in bnfsunit [#2207] 65- problems with gequal(t_SER or t_POL with inexact coefs or constant wrt. some variables). E.g. S=x+O(x^2);T=S+O(y); S == T -> 0 [#2188] 66- mfkohnenbijection failure [#2211] MW 67- mateigen would sometime return eigenvalues instead of eigenvectors AE 68- [libpari] FpX_oneroot_split could fail for deg 2 and 3. BA 69- [pthread] Fix potential crashes when cancelling threads. 70- derivnum: add sanity checks for 'ind' [#2216] NM 71- nfisincl(x^2-2^5,nfinit(x^4-2)) -> wrong result [#2213, #2214] 72- nfeltsign: wrong results for non-primitive elements in presence of ramification at infinity [#2217] HC 73- F=mfbracket(mfbd(mfEk(4),4),mfTheta(),1); mfcoefs(F,0) -> SEGV 74- gammamellininv([0, 10^-38], 3/10) -> junk 75- mfshimura, mfkohnenbijection: could create mf spaces with inconsistent character. BA 76- [mpi] sending t_LIST to remote nodes did not work. BA 77- my(a,b); parvector(1,i,self()) --> SEGV AP 78- bnrclassfield(,,2) --> sometimes relative polynomial AP 79- nfgrunwaldwang could modify its arguments 80- ldata_vecan(an, N, prec): make sure the function returns N coefficients 81- T=Pol([1,0,6748,-750056,45535504,-2530688944,140646000784]); bnfinit(T,1).cyc -> [240, 12, 4, 2, 2, 2] (instead of [120, 4, 4, 2]) BA 82- [mt] variable priorities in threads could be incorrect. 83- galoissubcyclo: wrong result with bnr input [#2232] 84- subgrouplist(bnr) != [] when modulus is not the conductor 85- incorrect type checks in ideallist BA 86- polmodular(p,,q) incorrect for large q BA 87- [pthread] polgalois(deg>7) could crash 88- forqfvec or qfminim with negative bound => crash [#2237] 89- Z_issmooth_fact: incorrectly include 1 among prime factors 90- Rg[MX]_rescale_to_int: result had a large power-of-2 content DJ 91- sqrtn(Mod(13,112),6) -> o loop [instead of 'bad input' error] 92- addprimes() creates issues with nfdisc [wrong results], because it breaks the assumption that a potential composite in a "bounded factorization" has to come last. 93- addprimes() creates issues with thue [wrong results]. addprimes(360000000029); #thue(x^2+1,500009*500029* 360000000029* 2^100) -> 0 [instead of 32] 94- factor(257377849,100) -> [61,2; 69169,1] instead of [61,2; 263,2] 95- addprimes() creates issues with nffactor [wrong results]. 96- gmulsg(0, t_REAL) followed mulsr semantic (t_REAL) instead of gmul's (t_INT). Analogous problem for gmulsg(0, t_COMPLEX) Changed 1- [libpari] rename rootsof1 -> nfrootsof1 2- [libpari] rename isirreducible -> polisirreducible 3- hyperellpadicfrobenius: allow X defined over a number field and compute Frobenius over unramified extension of Q_p 4- matsnf(integral matrix): use modular algorithm 5- rnf structure now contains the list of relative ramified primes 6- use the documented semantic for Euclidean division involving real t_QUAD e.g. x % y is x - floor(x/y)*y; for a t_QUAD x and t_INT y, we used to mod out y in "real" and "imaginary" part independently. 7- [libpari] rename rootpadic -> polrootspadic 8- polrootspadic: allow computing roots in unramified extension of Q_p 9- definition of lfunhardy for non-self-dual functions: remove rootnumber, which is not well defined since it depends on the choice of dual sequence a^*(n) 10- improved RgXn_powu / RgXn_powu_i for large valuations 11- improved ZM_ker for wide rectangular matrices 12- lfun(t_INT D): allow arbitrary non-0 D encoding the attached primitive character coredisc(D) (as for other character formats) 13- exp(small rational number): use binary splitting 14- parsum: removed optional argument [allows grouping of subsums => faster] BA 15- old gen_ZpM_Dixon renamed to gen_ZpM_Dixon_Wiedemann, new gen_ZpM_Dixon with simpler interface 16- better formula for Catalan BA 17- QXQ_div_ratlift renamed to QXQ_div 18- disallow mfeisenstein(k,chi1,chi2) when Q(chi1 chi2) is not its field of definition 19- improved ZM_rank for rectangular matrices 20- asymptotically fast variant for RgX_translate algorithms 21- ZX_Uspensky(flag = 0) is now guaranteed to find all rational roots 22- lfunzeros: allow intervals not contained in R^+ 23- removed obsolete function 'bnfcompress' 24- [libpari] rename perf -> qfperfection 25- format of bnf structure, to allow compact representations BA 26- [libpari] Z_to_F2x(s,v): v is now a shifted variable number AP 27- matrixqz(,-1 or -2): faster code + no longer return result in HNF AP 28- allow nfsubfields([nf,fa],): van Hoeij-Klueners-Novocin algorithm 29- nfsubfields: retune to avoid huge inertia degrees BA 30- qfbsolve new flag: bit 1: 1 solution, bit 2: add imprimitive solutions BA 31- revert 2-12-0 C18: qfbsolve with default flag = previous behaviour 32- division/inversion power series: use Newton 33- deprecate LLL_COMPATIBLE (now implicitly always set) 34- bnfissunit is obsolete, use bnfisunit 35- bnfsunit is mostly obsolete, use bnfunits 36- bnfisunit and bnfissunit: torsion unit exponent is now a t_INT (used to be a t_INTMOD) 37- support compact representation in nfeltmul, nfeltpow, nfeltdiv, nfmodpr, nfeltsign 38- elldivpol for negative n: define f_{-n} = -f_n [ was f_n ] 39- support plotinit/plotexport even when the graphic engine is disabled (Configure --graphic=none) 40- gpow(x,n): faster and more precise when n is a t_COMPLEX 41- faster formula for log(2) BA 42- nfgaloisconj(deg 2 pol): swap result to follow nfroots. BA 43- lexical variables names can now reuse builtin functions names as in fun(theta)=my(gamma=1/3);sum(omega=1,10,exp(2*I*Pi*gamma*theta*omega) 44- mfshimura: disallow the discriminant D argument, only allow squarefree positive t BA 45- closures: do not copy the full context, only the accessible part 46- add optional argument to randomprime [select congruence class] 47- add optional argument to sqrtint [set remainder] [#2229] 48- gammamellininv*(A,...): allow A to be an L-function 49- bnrinit: optional argument to compute Cl_f/n, avoid tough discrete logs 50- rnfkummer: removed "all" flag, function now obsolete. Use bnrclassfield! 51- rnfconductor: flag to compute Cl_f/[K:Q] instead of Cl_f 52- bnrconductor_i is now obsolete, use bnrconductor_raw or bnrconductormod 53- dvdxxx(x,y) allow y = 0 [and return 0 unless x = 0] 54- [libpari] bnrsurjection now returns [matrix, cyc(F), cyc(f)] 55- idealstar: optional argument to compute G/G^n, avoid tough discrete logs HC 56- zetamultall: add flag 57- subgrouplist: allow any object affording a .cyc method 58- remove zetamultinit and corresponding optional argument in zetamult 59- [libpari] ZM_lll: flags LLL_INPLACE and LLL_GRAM are now incompatible (reducing a Gram matrix in place without returning the base change matrix is not useful; supporting it would complicate the code) AP 60- improve bnfisprincipal in fields of large degree (test more small elements) 61- bnrgaloismatrix(bnr) no longer needs a bnr with generators (from bnrinit(,1)) 62- bnrisprincipal(bnr,1) no longer needs a bnr with generators (from bnrinit(,1)). Added flag 4 analogous to bnfisprincipal (compact representation of principal part) 63- added sanity checks when parsing default args in 'install' prototypes 64- improved zetahurwitz: faster & use less memory Added 1- new GP function rootsof1 BA 2- [libpari] F2xqX_halfgcd, FFX_halfgcd 3- [libpari] uis2psp, uispsp 4- [libpari] ZV_lcm 5- [libpari] nfhyperellpadicfrobenius 6- [libpari] rnf_get_ramified_primes 7- allow nfinit([T, basis, ramified primes]) 8- allow nf.p, rnf.p [rational ramified primes] 9- [libpari] idealfactor_partial 10- add flag bit to ZM_snfall_i 11- allow real t_QUAD in floor, ceil, divrem, %, \, \/ 12- [libpari] ff_parse_Tp 13- new GP function mfisetaquo 14- [libpari] Qab_tracerel, QabV_tracerel, QabM_tracerel BA 15- [libpari] RgXV_to_FlxV, FlxV_Flv_multieval, F2v_and_inplace, F2v_negimply_inplace, F2v_or_inplace, F2v_hamming 16- [libpari] ZpX_primedec BA 17- [libpari] QM_sqr, FqC_to_mod, ZXQX_gcd, QXQX_gcd 18- [libpari] radicalu 19- parallel support for lfuninit 20- new GP function parplothexport BA 21- [libpari] gen_ZpM_Newton, ZpM_invlift BA 22- [libpari] F2xn_red, F2xn_inv, F2xX_to_F2xC, F2xXV_to_F2xM HC 23- direct formulas for quadratic Dirichlet L-functions at integers 24- new GP functions: eulerfrac, eulerpol, eulervec 25- [libpari] lfunquadneg BA 26- [libpari] vecvecsmall_sort_inplace, vecsmall_isconst, vecsmall_is1to1 BA 27- [libpari] groupelts_quotient, quotient_groupelts, groupelts_to_group 28- new GP functions mscosets, msfarey 29- new GP function ellpadiclambdamu BA 30- [libpari] Flx_Fl_sub, Flx_is_totally_split, Flxq_autpowers 31- [libpari] Flx_translate1_basecase 32- [libpari] Vgaeasytheta BA 33- [libpari] RgV_type, RgV_type2, closure_callgen0prec BA 34- lfuncreate: support for closures of arity 0 35- [libpari] ZX_sturm_irred, ZX_realroots_irred 36- [libpari] QM_image, QM_image_shallow 37- new GP function asympnumraw 38- [libpari] QM_gauss_i, SL2_inv_shallow 39- [libpari] checkfarey_i 40- [libpari] mspadic_parse_chi, mspadic_unit_eigenvalue 41- [libpari] ellQtwist_bsdperiod 42- [libpari] mseval2_ooQ 43- [libpari] etaquotype 44- new GP functions fft, fftinv BA 45- [libpari] init_Flxq 46- compact representation of units in bnf (bnfinit(pol,1)) and of principal ideal generators (bnfisprincipal(bnf,id,4)) 47- [libpari] Flv_factorback, FlxqV_factorback, famatV_zv_factorback, famatV_factorback, FqV_factorback 48- [libpari] nflogembed, nf_cxlog, nfV_cxlog, ZMrow_equal0, ZC_u_divexact BA 49- [libpari] FpXn_expint, Flxn_expint, Flx_blocks, FlxX_blocks 50- [libpari] bnf_get_sunits, nfsign_tu, nfsign_fu, ideallog_units, sunits_makecoprime, famat_remove_trivial, bnf_build_cheapfu, bnf_compactfu, bnf_compactfu_mat, bnf_has_fu, famat_idealfactor, famat_div, famat_nfvalrem BA 51- [libpari] factorial_Fl, factorial_Fp, FpV_prod BA 52- [libpari] ZX_compositum BA 53- [libpari] FlxXn_red, FlxqXn_mul, FlxqXn_sqr, FlxqXn_inv, FlxqXn_expint BA 54- [libpari] FlxX_Laplace, FlxX_invLaplace, FlxqX_Newton, FlxqX_fromNewton 55- [libpari] RgV_count, RgV_equiv 56- lfuncreate(znstar or bnr,): allow a vector of characters => vector-valued L-function 57- [libpari] gc_const AP 58- [libpari] QM_ImZ, QM_ImZ_all, QM_ImQ, QM_ImQ_all BA 59- [libpari] RgXn_expint, FpXQXn_expint, FqX_expint AP 60- new GP functions nfsubfieldscm, nfsubfieldsmax BA 61- new GP function lfunshift 62- [libpari] Q_lval, Q_lvalrem BA 63- [libpari] ZXX_evalx0, zx_z_divexact, zx_lval, upowers 64- [libpari] is_qfb_t 65- new GP function eulerianpol BA 66- [libpari] FlxX_translate1, zlx_translate1, zlxX_translate1 67- [libpari] rfracrecip 68- [libpari] ZXQ_minpoly 69- [libpari] bnrchar_primitive_raw 70- new GP functions matreduce, bnfunits BA 71- [libpari] QXQ_to_mod_shallow 72- [libpari] nf_cxlog_normalize BA 73- [libpari] cmpss, cmpuu BA 74- [libpari] FpX_Fp_div, FpX_divu BA 75- holes in multi-assignement: [a,,c]=[1,2,3] 76- [libpari] expIPiR, expIPiC BA 77- [libpari] forqfvec1, pariplot, sumdivmultexpr 78- [libpari] powPis, pow2Pis BA 79- nfisincl: new flag: return a single embedding BA 80- [libpari] FpXC_to_mod, FpXM_to_mod, FqXC_to_mod, FqXM_to_mod BA 81- [libpari] FFX_add, FpXY_FpXQ_evaly BA 82- [libpari] halfgcdii, RgX_halfgcd BA 83- new GP function halfgcd BA 84- [libpari] pari_realloc_ip BA 85- [libpari] random_zv, F2m_transpose, F2m_row BA 86- [libpari] F2Ms_ker, F2Ms_colelim, F2Ms_to_F2m, F2m_to_F2Ms 87- [libpari] Qdivis, Qdiviu 88- [libpari] bnr_subgroup_check 89- [libpari] pow2Pis, powPis AP 90- [libpari] bnrisprincipalmod, ideallogmod 91- [libpari] bnrconductor_raw, bnrconductor_factored 92- [libpari] cyc_get_expo 93- new GP function bnrmap HC 94- new GP function polylogmult 95- new GP function zetamultdual 96- [libpari] checkbnr_i 97- [libpari] absZ_factor_limit_strict 98- [libpari] Idealstarmod, ZV_snf_gcd, ideallog_units0 BA 99- [libpari] FqC_FqV_mul 100- [libpari] gen_sort_shallow, vecvecsmall_sort_shallow BA 101- new GP functions parforprimestep, parforeach BA 102- [libpari] ZXQ_powers, ZXX_Q_mul, QXQX_mul, QXQX_sqr, QXQX_powers BA 103- [libpari] Kronecker_to_ZXQX, QXQX_QXQ_mul, ZXQX_ZXQ_mul 104- [libpari] zv_sumpart, div_content, hash_zv BA 105- [libpari] groupelts_conj_set, group_subgroup_is_faithful 106- qflll(x,3) in place reduction: return x * qflll(x) [faster] 107- [libpari] idealpseudominvec 108- [libpari] galoismatrixapply BA 109- new GP function permcycles BA 110- [libpari] FpX_FpXV_multirem, FpXV_chinese BA 111- galoisinit: support for group (3x3):4 (GAP4(36,9)) BA 112- [libpari] minim_zm 113- new GP function dirpowerssum 114- [libpari] vecfactorsquarefreeu_coprime BA 115- [libpari] nfX_disc, nfX_resultant BA 116- new GP function lfundual Removed 1- obsolete function rootsof1_kannan: use nfrootsof1 2- obsolete function checkbnrgen: use bnr_get_gen Done for version 2.12.0 (released 01/06/2019): Fixed 1- memory leaks due to the use of varhigher/varlower 2- memory leak on error in plots 3- memory leak on error in newtoncharpoly 4- heap-buffer-overflow in init_prefix [readline] 5- mfsplit(mf,,flag) could return uninitialized objects => SEGV 6- mfeisenstein(k,,chi) was treated as E(k,chi) instead of E(k,1,chi) 7- poldegree(y/x) -> 0 [ instead of -1 ] 8- sumeulerrat(y/x^2,1) -> junk HC 9- incgam(-1000.4,2) -> SEGV 10- mfatkininit(mfinit([366,2]),2) -> precision error 11- forprimestep: wrong when wrapping word boundary (2^32 or 64) [#2071] 12- mfbracket: [f,g]_m was multiplied by (-1)^m 13- wrong results in mfatkininit / mfatkineigenvalues due to insufficient precision [#2073/#2074] 14- issquare(Mod(x,ffinit(3,2))) -> wrong result [broken Fq_ispower] 15- possible SEGV in rnfpseudobasis(, [pol,lim]) 16- wrong result in elllog over F_p, p in [2^63,2^64[ p=13824553909862352061; A=8953655473130154624; B=9775907253961339458; P=[6444058885176327583,7963649599850249187]; E=ellinit([A,B],p); Q=ellmul(E,P,2); elllog(E,Q,P) -> 0 [ Flj_mulu_pre would not accept n >= 2^63 ] 17- wrong result in mfsymboleval when path extremities are close to real axis (cusps were OK) [#2075] 18- mfcoefs(mfDelta(),0) -> SEGV [#2078] 19- GC error in lfuncreate(elliptic curve over number field) [#2080] 20- X11 and Qt graphic engine: pari_close called too soon => crash 21- pariold.h: mix up with obsoleted taille / taille2 BA 22- foo(n)=vector(n)[1..n];123; would corrupt the GP interpreter [#2081] 23- Pol(0)/'x -> t_INT 0 (instead of 0*x^0) Pol(0)/(Mod(1,2)*'x) -> t_INT 0 (instead of Mod(0,2)*x^0) 24- missing typecheck in nfalgtobasis [#2084] 25- dbllog2(t_COMPLEX of t_FRAC) => junk 26- nffactor(t_POL, t_POL) => bug in LLL_cmbf [#2083] 27- ideallog(pure archimedean conductor, t_FRAC) -> log(0) error 28- lfunrootres: avoid oo-loop 29- mfgaloistype: dihedral forms possibly incorrect for N > 3000 30- mfgaloistype: error on mf=mfinit([1159,1,Mod(930,1159)],0); 31- incorrect accuracy in limitnum / asympnum for alpha != 1 32- missing GC in polint_i 33- hash_GEN(x) returned different values depending on whether x was a clone BA 34- [mpi] setting nbthreads in .gprc could lead to crashes. 35- accuracy too large in derivnum => slowdown 36- nfisincl(x^5-x^4+x^3-2*x^2+3*x-1,x^20+x^15+x^10+x^5+1) -> SEGV 37- stack corruption in addsub_frac AP 38- segfault in rnfidealup [#2093] 39- Ser(x,x,0) -> error instead of O(x) [#2092] 40- fix mspolygon(,2) [add 1/3rd hyperbolic triangles + fix labels] 41- factor(3/(x^5+3*y*x^4+3*y^2*x^3+y^3*x^2)) -> SEGV 42- output from bnfcompress() mistaken for rnf and vice-versa 43- catastrophic cancellation in acosh / asinh for large t_COMPLEX 44- zeta(1/2 + I*t) => internal error 45- cos(z) and sin(z) imprecise when Im(z) is nonzero but tiny BA 46- hyperellcharpoly: wrong results over Z/3Z 47- gmp kernel: off-by-1 error in red_mongomery [read uninitialized memory, then ignores result] 48- intnuminit([-1,-1/2],[1,-1/2]) twice slower than it should 49- forcomposite(n=2,4,print(n)) -> empty [#2096] 50- relative extension of degree 1 was not properly supported in rnfidealprimedec and rnfidealup 51- mfmul(f,g) created invalid forms when f (resp. g) had Nebentypus chi (resp. chi') and Q(chi * chi') != Q(chi) or != Q(chi') [analogously for mfpow, mfdiv, mfbracket] 52- let [N,k,chi] = mfparams(f); f had coefficients in Q(chi) [or an extension thereof for eigenforms] but the values obtained from znchar(chi) and chareval were incompatible with mfcoefs when order(chi) = 2 (mod 4) [same cyclotomic field but different cyclotomic polynomial] FB 53- [Configure] library not found despite --with-readline-lib [#2097] 54- besseli, besselj, besselk, besseln(nu, z): use asymptotic expansion for large z [#2006] 55- minpoly(Mod(1,t^2)) -> SEGV [#2102] 56- a=ffgen(3^2,'a);poldisc(x^6+a*x+y) -> division by 0 [ positive characteristic with a few t_INT coefficients ] 57- intnumgaussinit(n) actually used 2*ceil(max(4,n/2)) quadrature points BA 58- [pthread] parapply could crash BA 59- ffinvmap(m) could SEGV on bad input 60- ellisdivisible(E/K number field in 'x) -> incorrect priority[#2106] 61- idealispower(nf, t_INT n) possibly wrong if (n, nf.disc) > 1 62- zeta''(0): all precision lost [more generally f'...'(n quotes) imprecise in the neighbourhood of 0, while derivnum(,n) was OK] 63- sumdigits(negative number, B) sometimes negative 64- poldiscfactors(x^0) -> division by 0 65- factormod(x^3+1,[y^2+1,2]) -> SEGV 66- factormod(x^3+1,[y^2+1,5]) -> weird error message 67- besseljh(huge n, z) -> junk BA 68- [pthread] localbitprec was not exported to threads BA 69- fix inefficiency in fplll not present in original code 70- polrootsreal(x^4+2*x^3+x^2/3+x/100-1/2000,[1/100,oo]): no root [#2112] 71- polrootsreal(x^4+2*x^3+x^2/3+x/100-1/1000,[1/10,oo]): extra root [#2112] 72- lfun may crash on lfuncreate input with too short an vector [#2118] BA 73- incorrect use of graphcolors -> SEGV 74- forcomposite(..., oo, ) was not supported BA 75- lfunartin with poles: incorrect result JD 76- factor: significant pointers lost [#2125] BA 77- matdet/matrank over large fields was inefficient 78- poldisc(y^2/x + 1, y) -> error [also affects polresultant] 79- poldisc(x^2/y + 1, y) -> 0 [also affects polresultant] 80- ispower(2, 2^64) -> error 81- (f(x) = x*'y); f'(1) -> error BA 82- sqrtn(Mod(3,19),4) -> no error [#2127] 83- nfhnfmod: wrong result 84- matdet(mat with t_RFRAC entries): wrong result [#2128] 85- n-th derivative of zetahurwitz used 'seriesprecision' instead of n + imprecise value when n large [#2130] 86- lfunzeros(f, [0, b]) wasn't allowed 87- mateigen(): typo causing wrong results when correct results were achievable [#2131] 88- intnum(x=-oo,[0,-1/2],1/sqrt(-x*(x^4+1))) -> division by 0 89- eint1(large x > 0) didn't use asymptotic expansion [#2129] 90- printtex(quadgen(-3,'z)) ==> w BA 91- [a,b]=a could lead to memory corruption 92- memory leak in cgetalloc when lg overflows 93- possible SEGV in padicappr [#2133] 94- zeta(small even integer) was very slow at large accuracy 95- core() could destroy its input, if stored in a GP variable BA 96- (f(x, y = 1) = x*y); f'(1) returned 0 97- quadgen(2^64+1) * 1. => junk (stack corruption in quad_disc). 98- ellmoddegree: infinite loop and stack corruption (e.g on 52a2) 99- ellmoddegree(ellinit("10890ba6")) -> wrong result 100- nfgcd called ZX_resultant(a,T) with typ(a) == t_INT 101- random SEGVs in bnfinit with large fundamental units [#2139] (due to fundamental units computed via floating point approximations rounding to 1 or -1) 102- qfisom([16,6;6,10],[4,3;3,10]) was not 0. [#2140] 103- mfeval: wrong result when level of form and space didn't match [#2134] BA 104- nfisincl(x^3+9,x^6+2187): wrong result [#2144] 105- ispower(27,2^60) -> SEGV [#2145] BA 106- matsolve(M,vector(n)) could return result of wrong dimension 107- [Windows] no longer crash on deep recursion [#2105] 108- factor(Mod(x^3 + x + y^2,2)) -> oo loop [#2148] Changed 1- [libpari] gp_filter return value is now allocated on the stack [was undocumented, malloc'ed and resulted in memory leaks] 2- improved n!, factorial(n), lngamma(n) and psi(n) for integral n 3- improved bernvec: no longer Obsolete 4- [libpari] mpbern is now obsolete: use constbern 5- rewrote the Bernoulli number cache (using zeta(2n) = * B_{2n}) and power recycling for zeta(2n) + additive Clausen von Staudt): orders of magnitude faster and always store Bernoulli in rational form BA 6- [libpari] ZpX_ZpXQ_liftroot_ea: change interface for 'early' 7- bnf.fu: return '0' if bnf does not contain the fundamental units (was an error) 8- support ?? _+_ and friends [extended help for specific operators instead of redirecting to "GP operators"] 9- support ?? _op=_ and ?? op=; support ?? _++ and friends 10- x ^ t_FRAC: return an exact result if possible; e.g. 4^(1/2) is now 2 HC 11- gamma(t_FRAC) and lngamma: use direct formula when denom | 24 12- serlaplace(scalar) -> return the scalar (understood as a constant polynomial) instead of raising an exception [#2082] 13- implement hyperu for arbitrary complex parameters 14- extend lex() to allow complex numbers 15- lfunconductor(L, [a,b]) no longer supported to look for conductor in interval [a,b]; implement lfunconductor(L, list of potential N) instead 16- renamed GP functions Strchr -> strchr (pari_strchr in libpari), Strexpand -> strexpand, Strprintf -> strprintf, Strtex -> strtex 17- [help] move str* functions from "conversions" to "programming" section BA 18- qfbsolve now returns a vector of solutions. 19- limitnum / asympnum: remove useless optional parameter 'muli/k' [now implicitly set to 1, not to 20]: just extrapolate u(muli*n). 20- improve rdivii / rdiviiz [ use divri which may use divri_with_gmp ] 21- mfparams now returns [N,k,CHI,space or P, Phi] where Phi is the cyclotomic polynomials defining the field of values of CHI 22- inline / uninline are now obsolete, use export/unexport 23- let localprec(p) accept non integral real p [replace by ceil(p)]; same for localbitprec. 24- let precision(x,p) accept non integral real p [replace by ceil(p)]; same for bitprecision. 25- besseln is now obsolete, use bessely 26- [libpari] precision0 / bitprecision0 (meant to implement GP-specific commands, not for library use) are now obsolete. The new equivalent commands (still not meant for library use) are precision00 and bitprecision00. 27- improve intnumgaussinit (use direct Newton instead of polrootsreal) 28- improve sumeulerrat / prodeulerrat 29- factor(x, D), D now encodes the domain over which to factor 30- allow listinsert(L, x, n) for n > #L, like listput 31- allow forsquarefree(n = a, b) with a*b < 0 32- allow L[a..b] and L[^i] for t_LISTs BA 33- gen_factorback: change argument order to match other functions 34- polinterpolate(X,Y,t,&e): e is now more precisely defined and the error estimate is given as a binary exponent; compared to the value dy returned up to this change, we have e = exponent(dy). 35- suminf is now sensitive to bit precision. In library mode, use suminf_bitprec (precision in bits) rather than the historical suminf (precision in words) 36- RgV_polint: use (asymptotically fast) FpV_polint over Fp BA 37- [libpari] pari_add_hist now take 3 arguments (data, cputime, realtime) BA 38- # and ## now also display the realtime when nbthreads is not 1 39- gp_format_time: remove trailing ".\n" from formatted string BA 40- GP: arguments of the parser code W can start with ~ for clarity, e.g. listput(~L,x), mapput(~M,x) BA 41- GP: the argument of a user member function is now a reference 42- make ellheight(E, torsion point) return an exact 0 [#2109] 43- allow rnfdisc(k, polynomial with non-integral coeffs) 44- allow rnfconductor(k, non-monic polynomial) 45- poldisc(t_COMPLEX) now raises an exception (used to return -4) 46- rnfdisc(nf, [T,B]) allow B a list of primes and maximal ideals (same for rnfbasis, rnfinit, rnfconductor, rnfpseudobasis) 47- ??? include double quotes when needed (e.g. ???conductor) [#2122] 48- improved the prime() function 49- mpeint1: support all t_REAL x != 0 (was x > 0) LGr 50- nffactor now supports rational functions 51- improve QM_gauss [treat contents sensibly] 52- lngamma and psi near 1: cache values of zeta(odd integers) 53- [libpari] nfbasis prototype changed: 3rd argument listP is gone, use nfbasis(mkvec2(T,listP), &disc). Note that the documentation was incorrect: it is not guaranteed that nfbasis([T, listP]) returns the maximal order even if listP contains all prime divisors of the field discriminant. See ??nfbasis 54- nfbasis now accepts an optional argument &dK [order discriminant] 55- mffromlfun: support forms of half-integral weight (e.g. from lfunqf) BA 56- [libpari] FF_Frobenius: return the image of the standard generator 57- faster poldiscfactors() 58- when 'log' is turned on, explicitly output the logfile name Added 1- [libpari] nonsquare_Fl 2- [libpari] set_avma BA 3- [libpari] FpXC_FpXQ_eval 4- [libpari] mulu_interval_step 5- new file src/basemath/bern.c 6- [libpari] divisorsu_moebius 7- [libpari] ZXQ_powu 8- new GP functions hypergeom, airy 9- [libpari] gc_bool, gc_double, gc_int, gc_long, gc_ulong, gc_NULL 10- new GP functions strsplit, strjoin 11- new file src/basemath/str.c 12- [libpari] has_str_len BA 13- qfbsolve(Q,n) now support arbitrary integer n. 14- [libpari] divisorsu_fact_factored 15- [libpari] qfiseven 16- [libpari] zv_cyc_minimize, zv_cyc_minimal 17- limitnum/asympnum: allow closures of the form N->[u(1),...,u(N)], which allows to handle efficiently sums, recursions, continued fractions, etc. BA 18- new GP function polteichmuller BA 19- [libpari] Flx_Teichmuller, F2x_Teichmuller 20- [libpari] mpsinhcosh 21- new GP function dirpowers BA 22- [libpari] F2xqX_resultant, F2xqX_disc, FlxqX_resultant, FlxqX_disc, FpXQX_resultant, FpXQX_disc, FFX_resultant, FFX_disc BA 23- FFX_gcd, FFX_extgcd 24- optional flag to pollegendre and polhermite 25- new GP function pollaguerre BA 26- [libpari] Flxn_red, Flxn_sqr, Flx_integ BA 27- new GP functions export, unexport, exportall, unexportall 28- [libpari] Fp_divu BA 29- [libpari] ZpXQX_liftroots 30- new GP functions getlocalprec, getlocalbitprec 31- [libpari] guncloneNULL, gluncloneNULL_deep 32- allow subst(e, x, vector v) for vector(subst(e, x, v[i])) 33- [libpari] pollegendre_reduced AP 34- new GP function mfgaloisprojrep 35- optional v argument to nfmodprinit 36- [libpari] rfrac_deflate, rfrac_deflate_order, rfrac_deflate_max 37- [libpari] identity_zv, identity_ZV 38- [libpari] polintspec, polint_i BA 39- [libpari] FF_var, FF_preimagerel BA 40- new GP function ffmaprel BA 41- [libpari] closure_derivn BA 42- [libpari] walltimer_start, walltimer_delay, pari_get_histrtime BA 43- new GP function strtime BA 44- [libpari] Flxn_exp, Flx_Newton, Flx_fromNewton, Flx_Laplace, Flx_invLaplace BA 45- Support call by reference in GP function: f(~L,x)=listput(~L,x+1) BA 46- Generic fast linear algebra using CUP decomposition 47- [libpari] nfX_to_monic BA 48- new GP function derivn BA 49- new GP function arity 50- new GP functions idealdown, idealismaximal 51- [libpari] bid_get_fact2 AP 52- new GP function bnrclassfield HC 53- implement lfunmfspec in odd weight HC 54- new GP functions ellE and ellK 55- [libpari] maxprimeN BA 56- support for rational model in ellratpoints and hyperellratpoints 57- [libpari] psi1series 58- [libpari] constzeta 59- new GP function nfdiscfactors 60- [libpari] RgV_is_arithprog 61- fast algorithm for zeta([a + b*n | n<-[0..N]]) BA 62- ellheight(E) now returns the Faltings height of E BA 63- lfun now allows non-integral weights OB 64- example/parigp.sty to re-enable PARI's \pmatrix with amsmath [#2110] IZ 65- [win32+gp-sta] support for install() 66- [libpari] setunion_i BA 67- [libpari] hash_init, hash_init_ulong BA 68- [libpari] FFXQ_minpoly BA 69- [libpari] F2x_recip 70- [libpari] RgV_isin_i Removed 1- member functions .futu and .tufu [deprecated since 2.2] 2- inferior hash function hash_str2: use hash_str 3- matsnf: remove obsolete binary flag '2' [make it a no no-op] (cf mathnf) K.B. -- Karim Belabas, IMB (UMR 5251) Tel: (+33) (0)5 40 00 26 17 Universite de Bordeaux Fax: (+33) (0)5 40 00 21 23 351, cours de la Liberation http://www.math.u-bordeaux.fr/~kbelabas/ F-33405 Talence (France) http://pari.math.u-bordeaux.fr/ [PARI/GP] `