Bill Allombert on Fri, 02 Aug 2024 17:14:02 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
PARI 2.16.2 beta released (prerelease for PARI 2.17.0) |
Dear PARI developers, I have released PARI 2.16.2-beta as a preview of PARI 2.17.0 that we will release in September. Please test! I join the provisional NEW file for PARI 2.17.0. Please report any typo! See <https://pari.math.u-bordeaux.fr/download.html> for download. On behalf of the PARI team, Bill P.S.: the changelog: Bug numbers refer to the BTS at http://pari.math.u-bordeaux.fr/Bugs/ Done for version 2.16.2 (released 02/08/2024): Fixed XR 1- rare oo-loop in nfdisc [#2510] PB 2- polcoeff(polmodular(2, 0, ffgen([7,2])^0),0).mod -> incorrect [#2533] BA 3- rnfconductor(...,[P, B]) -> wrong result [#2534] 4- vecsearch(t_LIST,) would raise a type error [#2535] 5- subcycloiwasawa(x^2+87,3) -> SEGV 6- forprimestep and variants with initial value negative [#2531] 7- when converting a t_QFB to a vector of given length, remove discriminant 8- \o3 [tex2mail]: support \* 9- rnfpolredabs didn't always return a canonical model [#2538] 10- weber(I/2+1/3,2) -> SEGV BA 11- [mpi] setting datadir or path in .gprc caused crashes 12- imprecise sqrtnr [#2543] 13- idealstar(nf,id,,MOD). Need to store MOD in the structure, otherwise exceptions may occur [#2549] BA 14- ellsaturation was leaking variable numbers 15- rnfelttrace(rnf, t_POL in rnf.pol variable): wrong [#2509] 16- rnfeltnorm(rnf, t_POL in rnf.pol variable): wrong [#2509] 17- b=9/10; hypergeom([b+2, b], 2*b, 2/3): wrong [#2551] 18- overflows not tested in subcycloiwasawa [#2552] 19- randomprime([1,2], Mod(1,2)) -> 3 BA 20- b;a;gcd(Mod(1,a^2+1),Mod(1,b^2+Mod(-a,a^2+1))) -> wrong result [#2553] 21- idealismaximal(nf, <some elt>) -> impossible inverse [#2556] 22- polynomial coefs which are exact 0 should not be printed [#2558] 23- f = Mod(Mod(1,3), Mod(a^2+2,3))*x^3; (1/f) * O(x^2) -> O(x^0) instead of Mod(Mod(0, 3), Mod(1, 3)*a^2 + Mod(2, 3))*x^-2 + O(x^-1) [#2558] BA 24- hgmeulerfactor could return wrong result [#2557] 25- (Mod(0,2)+O(x)) * (1+O(x)) -> Mod(0, 2)*x + O(x^2) [#2559] BA 26- z = ffgen(11^5)^0; fflog(z, z, 1) ->SEGV [#2562] Changed BA 1- plotell renamed to plotarc 2- lfun for degree 1 L-functions: use Riemann-Siegel when imag(s) is large 3- zetahurwitz, lerchzeta: use Tyagi's method when imag(s) is large 4- forprimestep: allow modulus not fitting in an unsigned long 5- specify how Vec(v, n) truncates v when #v > |n|. Changes previous behaviour when n < 0: Vec([1,2,3], -2) -> [2,3] (was [1,2]) Same for Vecrev, Vecsmall, Col, and Colrev. BA 6- allow abs(+oo), abs(-oo) BA 7- [libpari] gp_embedded : make interface more similar to GP BA 8- [libpari] callback cb_pari_display_hist (used by gp_embedded) 9- [libpari] the diffptr low level interface is gone (table of difference of primes), replaced by a table of 32bit primes (pari_PRIMES). The byteptr type and following functions / macros are gone: initprimes, init_primepointer_geq, init_primepointer_gt, init_primepointer_leq, init_primepointer_lt NEXT_PRIME_VIADIFF, PREC_PRIME_VIADIFF, NEXT_PRIME_VIADIFF_CHECK. 10- bnfisintnorm: add flag to return solution in factored form Added BA 1- GP function mapapply BA 2- GP function qfcholesky BA 3- [libpari] pari_err_display, gp_display_hist, str_display_hist 4- allow vecmin and vecmax to handle t_LIST 5- support 'rnf' structure in nfnewprec 6- [libpari] rnfnewprec, rnfnewprec_shallow BA 7- [examples] gp_embedded.c, like minigp.c but using gp_embedded 8- new GP default 'factorlimit' XR 9- new GP function bnrstarkunit 10- [libpari] bid_get_MOD 11- [libpari] Z_to_famat, Q_to_famat BA 12- new GP function hyperellordinate BA 13- [libpari] closure_callgen0 WvW 14- new GP function qfcvp BA 15- new GP function ellmaninconstant BA 16- new GP function nfweilheight BA 17- [libpari] Qp_psi NM 18- [libpari] FlxqX_eval 19- [libpari] Qp_zetahurwitz 20- [libpari] PRIMES_search HC 21- psi: support for derivative and t_PADIC 22- [libpari] ZM2_sqr BA 23- [libpari] FpXQX_roots_mult BA 24- [libpari] ZXX_pvalrem, ZXV_pvalrem BA 25- [libpari] pari_breakloop
This file highlights some of the novelties in PARI/GP 2.17 compared to latest stable branch 2.15.*. The detailed Changelog is in CHANGES. Incompatible changes are described in COMPAT. %%%%%%%%%%%%%%%%%%%%%%%%%%%% VERSION 2.17 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [The GP language] - A few default values have been changed to take into account modern hardware (compared to the 1990s) and unified over 32bit and 64bit architectures: default 'parisize' is now 8M on all architectures default 'realprecision' is now 38 on all architectures default 'realbitprecision' is now 128 on all architectures default 'primelimit' is now 2^20 [instead of 500000] Now support kB or KB, MB, GB and TB as units for memory sizes (2^10, 2^20, 2^30 and 2^40 bytes); in addition to the existing k or K, M, G and T (10^3, 10^6, 10^9, 10^12 bytes). - New GP default 'factorlimit' (default value is 2^20, which is the default primelimit), allowing fast trial division by all primes up to that bound. See ??factorlimit for details and examples. Be careful with this one: it involves a precomputation on startup, which is not noticeable for the default value of 2^20, but requires 5 minutes when the value is increased to 2^32. will require a few seconds a value - forvec: a new syntax is availabe to loop over representatives (with non-negative entries) of Z^n / v Z^n, where v is a vector of non-negative integers. This allows to iterate over elements of an abelian group using its .cyc vector. - New GP function mapapply, see ??mapapply for usecases - New GP function parforstep [Lattices and Quadratic Forms] - New GP function qfcvp for Closest Vector Problems (related to the existing qfminim which handles Smallest Vector Problems) - New GP function qfcholesky - New recursive implementation of the qflll and qflllgram functions using the FLATTER reduction algorithm of N. Heninger and K. Ryan. - Allow qfsolve([Q, F]) where F is the factorization of disc(Q). - Allow Qfb(a*x^2 + b*x + c) and Qfb([a,b0; b1,c]) to input t_QFB a binary quadratic form. [Elementary Number Theory] - forprimestep: allow arbitrary modulus (was limited to 2^64) - Dirichlet characters: allow t_INTMOD Mod(m,N) as a Conrey label for the character m mod N in all functions (expecting Dirichlet characters). [Elliptic Curves and Curves of Higher Genus] - New GP function ellisisom: test whether two curves defined over the same base field are isomorphic and if so return the change of coordinates. The current implementation only supports number fields. - New GP function elliscm: tests whether an elliptic curve defined over a number field has CM; if so, return the discriminant of its endomorphism ring - New GP function ellsupersingularj(p): p being a prime number return a random supersingular j-invariant defined over F_{p^2}; also allow p to be a t_FFELT in which case the j-invariant is defined over the field of definition of p. The random distribution is close to uniform except when 0 or 1728 are supersingular j-invariants (those are less likely). - New GP function polisclass(P): P being a monic irreducible polynomial in Z[X], return the discriminant D < 0 such that P = polclass(D) when P is a class polynomial for the j-invariant. Otherwise return 0. - New GP function ellmaninconstant, returns the Manin constant of a rational elliptic curve or isogeny class (from ellisomat). The algorithm is slow but unconditional. - New GP function hyperellordinate(H, x) return the y-coordinates of all affine points on the hyperelliptic curve H avec x as x-coordinate. - New GP function genus2igusa(H): returns the Igusa invariants [J2,J4,J6,J8,J10] of the hyperelliptic curve H of genus 2 (defined over a field of characteristic different from 2). An optional flag allows to compute a single invariant. - ellisomat: when E/nf has CM by an quadratic order included in nf, return the discriminant of the order instead of an error [L-functions] - dirpowerssum: allow functions with t_VEC output; add optional flag 'both' to simultaneously compute sum f(n) n^s and sum \bar{f}(n) n^(-1-s) - lfun for degree 1 L-functions (zeta and Dirichlet L-functions) at complex s = c + I * t : use O(sqrt(|t|)) Riemann-Siegel formula instead of O(t) Euler-Maclaurin. Values of |t| up to 10^16 or so become feasible in about 1 minute, where Euler-Maclaurin ran out of stack after hours of computation. ? zeta(1/2 + 10^12*I) \\ a few hours before running out of stack in 2.15 time = 311 ms. %1 = 2.87796... - 3.20677...*I ? zeta(1/2+10^14*I) time = 2,564 ms. %2 = 7.33484... + 3.24237...*I ? zeta(1/2+10^16*I) time = 22,097 ms. %3 = 0.404494... + 3.67403...*I ? lfun(-4, 1/2+10^10*I) \\ Dirichlet L-function for quadratic char (-4/n) time = 85 ms. %4 = 0.0012889... + 0.006625758...*I ? lfun(Mod(2,23), 1/2+10^10*I) \\ General character, Conrey notation time = 197 ms. %5 = 0.0327006... + 0.1640295...*I Same for zetahurwitz and lerchzeta: use Tyagi's method when |t| is large - allow lfuncreate([bnr, subg]) to (efficiently) describe Dedekind zeta for an Abelian number field [Number Fields and Central Simple Algebras] - faster qfbsolve when RHS is prime and disc < 0 (use qfbcornacchia whenever possible). - bnfisintnorm: allow returning the results in factored form which helps a lot when fundamental units are huge, see example in ??bnfisintnorm - rnfnewprec: also support 'rnf' structures from rnfinit - alginit: optional flag supports new values (was used to avoid computing a maximal order; now also allows to use lazy factorization of discriminants producing an order which is maximal at the known prime factors) - New GP function bnrstarkunit: returns the characteristic polynomial of the (conjectural) Stark unit used in the bnrstark() function to construct class fields of totally real bases. - New GP function nfweilheight to compute the absolute logarithmic Weil height of an element in P^n(K), where K is a number field. [Transcendental functions] - allow erfc(t_SER). - add an optional argument to psi() to compute derivatives and allow psi(t_PADIC). - allow hypergeom(N,D,t_PADIC). [Miscellaneous] - allow n# for the primorial of n (product of primes <= n) - allow vecmin and vecmax to handle t_LIST inputs - allow abs(+oo), abs(-oo) (= +oo) - allow fromdigits(t_COL or t_VECSMALL, B) - digits: also support negative bases (but stick with non-negative digits). - New GP function polfromroots - New GP function plotarc(w, x2, y2): draw an ellipse (possibly filled) that fits in a box defined by current cursor position and point (x2,y2) [Kernel] - new riscv64 assembly kernel. COMPATIBILITY ISSUES BETWEEN 2.15.* and 2.17.* ============================================ 0) Obsoleted functions and interfaces: - Qt4 graphing engine is no longer supported - removed lfunabelianrelinit. Use lfunfinit([bnr, subgroup]) instead. - [libpari] t_SER type: valser, evalvalser, setvalser need to be used instead of valp, evalvalp, setvalp (which become specific to p-adic numbers) - [libpari] the diffptr low level interface is gone (table of difference of primes), replaced by a table of 32bit primes (pari_PRIMES). The byteptr type and following functions / macros are gone: initprimes, init_primepointer_geq, init_primepointer_gt, init_primepointer_leq, init_primepointer_lt NEXT_PRIME_VIADIFF, PREC_PRIME_VIADIFF, NEXT_PRIME_VIADIFF_CHECK. 1) Output changes: - specify how Vec(v, n) truncates v when #v > |n|. Changes previous behaviour when n < 0: Vec([1,2,3], -2) -> [2,3] (was [1,2]) Same for Vecrev, Vecsmall, Col, and Colrev. - changed qfbred to use the same (standard) normalization as qfbredsl2 in all cases (was different for real forms) - binomial(negative t_INT, t_INT): use D. Loeb's definition which ensures (a + b)^n = sum_{k >= 0} binomial(n, k) a^(n-k) b^k for all complex numbers a, b, n with |b| < |a|. Beware that this extension is incompatible with the other traditional extension binomial(n, k) := 0 if k < 0. - printf: numerical conversions now also apply (recursively) to complex numbers 2) Input changes: - [libpari] major change in libpari's handling of "transcendental" functions: 'prec' arguments now represent a number of significant 'bits' (instead of an 'lg' counting words). Programs written using the proper interface (prec2nbits/nbits2prec macros and constants such as DEFAULTPREC) should not need an update. On the other hand, low-level code comparing directly 'lg' and 'prec' operands or using hardcoded precision (such as '3' as in a [deprecated for 20 years] cgetr(3) initialization) must be updated (a priori using new macros prec2lg / lg2prec and proper symbolic constants).