| 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).