| Karim Belabas on Wed, 02 Nov 2016 10:57:57 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| pari-2.9.0 (STABLE) released ! |
Dear PARI lovers,
I am pleased to announce the release of pari-2.9.0 (STABLE) !
The sources can be obtained through the address
http://pari.math.u-bordeaux.fr/download.html
This is a major STABLE release, ending a development cycle which started in
march 2014. For those still using pari-2.7.*, it is time to upgrade.
Binary distributions for Windows and Android are available at the same
address.
Have fun !
K.B.
HIGHLIGHTS for PARI-2.9: see below for COMPATIBILITY ISSUES.
========================
A new set of reference cards was prepared for an overview of 2.9.* GP
functions, see doc/refcard*.dvi or http://pari.math.u-bordeaux.fr/doc#refcard
[Systems]
- Mingw64 support (Windows 64 bit)
- Unify 32/64 bit random generators. Probabilistic algorithms should now
behave identically on all architecture, provided they do not involve
the floating point kernel
[The GP language]
- Support for variadic GP functions (having any number of arguments), e.g.
? f(v[..]) = sum(i = 1, #v, v[i])
? f(1, 2, 3, 4, 5)
%2 = 15
- New constant "oo" (for +/- infinity)
- Simpler handling of polynomial variables: polynomial variables no longer
spring into existence whenever a new identifier occurs in the parser,
only if a polynomial is explicitly created; e.g. t = 0 no longer creates
the "polynomial variable" t thereby messing up variable ordering.
Functions varhigher() and varlower() allow to define
variables of arbitrary priority independently of the session history;
variables() returns the list of variables occuring in an object:
? variable(x + y*z / t)
%1 = x
? variables(x + y*z / t)
%2 = [x, y, z, t]
- Hashtables/dictionaries in GP via functions Map, mapget, mapput,
mapisdefined, mapdelete
? M = Map(); \\ empty dictionary
? mapput(M, "a", 23); \\ insert key/value: "a" maps to 23
? mapput(M, "b", 43); \\ "b" maps to 43
? mapget(M, "a") \\ retrieve value attached to key "a"
%3 = 23
? M = Map(["a", 23; "b", 43]); \\ fast initialization
- New functions allow setting precision at the bit-level (instead of the
word-level = 64 bits); new default 'realbitprecision' and \pb shortcut,
and a function bitprecision()
- Warn when coercing quotient rings when 'debug' is non-zero
? \g1
? Mod(1,2)+Mod(1,3)
*** _+_: Warning: coercing quotient rings; moduli 2 and 3 -> 1.
- More versatile closures: function self() for recursive anonymous
functions, call() to apply a function of unspecified arity to arbitrary
arguments), fold() such that fold(f,v) = f(...(f(v[1], v[2]), ...,) v[#v])
- Miscellaneous new GP functions: serprec, powers, parforvec
[Multiprecision Kernel]
- incgam, incgamc, eint1 more reliable
- new functions sinc(x) = sin(x) / x and cotanh = 1 / tanh
- improved p-adic log at high accuracy
- improved gamma, lngamma and psi at power series arguments
[Numerical sumation and integration]
- rewrote numerical integration routines, which can of course
directly use the new oo symbol:
? intnum(t = -oo, oo, 1/(1+t^2)) - Pi
%1 = 0.E-37
- Gauss-Legendre quadrature: intnumgauss()
- Rewrote numerical sumation (replace Abel-Plana by Euler-Mac Laurin).
This changed the sumnum() interface !
- Monien summation: sumnummonien()
- Numerical extrapolation: limitnum(), asympnum()
? limitnum(n -> (1+1/n)^n) - exp(1)
%1 = 0.E-37
? asympnum(n -> n! / (sqrt(2*Pi) * n^(n+1/2) * exp(-n)))
%2 = [1, 1/12, 1/288, -139/51840, -571/2488320, 163879/209018880,
5246819/75246796800, -534703531/902961561600]
- Continued fractions for numerical approximation via Pade approximants:
contfracinit() and contfraceval()
- Inverse Mellin transforms of Gamma products: gammamellininv()
- Multiple Zeta Values: zetamult()
? zetamult([2,1]) - zeta(3) \\ Euler's identity
%1 = 0.E-38
- zeta(odd integer): use Borwein's "sumalt" algorithm (10 times faster
than previous at \p1000)
[Elementary Number Theory]
- Bounded factorization factor(n,lim) now always respects the 'lim'
argument (was ignored when n fit into a long integer)
- sumdigits() now allows to specify the base; new function fromdigits()
- Allow ffgen([p,f]) in addition to ffgen(p^f) and ffgen(T*Mod(1,p))
- New functions for generic characters: charker, charorder, charconj,
charmul, chardiv, chareval
- New functions for Dirichlet characters: znconreychar, znconreyexp,
znconreylog, znconreyconductor, zncharinduce, zncharisodd,
znchartokronecker. See ??Dirichlet
The functions idealstar / ideallog now allow omitting 'nf' argument for
nf = Q allowing to handle efficiently Dirichlet characters as Hecke
characters.
- Miscellaneous new functions: qfbredsl2(), ispseudoprimepower(),
ramanujantau()
[Polynomials]
- Real root finder: new function polrootsreal(T, [a,b])
- factorcantor now uses Shoup-Kaltofen algorithm (much faster)
- padicfields(p, d) much faster for huge prime p
[Linear Algebra]
- faster matrix multiplication over Z (Strassen) and finite fields (better
handling of modular kernel)
- matsolve(a,b) and a^(-1) could give wrong results [or SEGV] when t_MAT
'a' was non-square
- faster implementation of matfrobenius/minpoly
- matkerint: replace underlying LLL algorithm by mathnf
Simple bench: M=matrix(50,55,i,j,random(10^5)); \\ 200 times faster
[Elliptic curves]
- Twists and Isogenies: elltwist, ellisogeny, ellisogenyapply, ellxn.
- Modular polynomial attached to various class invariants: polmodular();
attached class polynomials defining Hilbert class fields: polclass().
- Formal groups: ellformalw, ellformalpoint, ellformaldifferential,
ellformallog, ellformalexp
- Elliptic curves over finite fields: ellissupersingular(), fast ellcard()
over fields of small, medium or large characteristic (SEA, Kedlaya, Satoh),
ellsea() for ellcard with early abort (almost prime cardinality);
elltatepairing() now reliable for self-pairings
- Elliptic curves over Q: ellrootno(e, 2 or 3) for non-minimal e is now
properly supported; more robust and much faster ellL1() and
ellanalyticrank() (the condition ord(L_E,s=1) <= r in ellL1(E,r) is no
longer necessary; r is now optional, 0 by default); p-adic heights:
ellpadics2, ellpadicheight, ellpadicheightmatrix; p-adic L function:
ellpadicL (see also mspadicL);
Q-isogenous curves and matrix of isogeny degrees: ellisomat; minimal
quadratic twist: ellminimaltwist; smallest multiple having good reduction
everywhere: ellnonsingularmultiple; new optional flag to forell to loop
over isogeny classes.
- Elliptic curves over number fields: ellinit([a1,...,a5], nf);
support elltors, ellorder, elisdivisible, elllocalred, ellminimalmodel,
ellan, ellap(E,P), ellcard(E,P) for P a maximal ideal
- Elliptic curves over p-adic fields: Q_2 is now properly supported,
ellpointtoz(E / Qp) has been fixed and the converse ellztopoint
implemented, added Mazur-Tate-Teitelbaum's L invariant to E.tate;
new function ellpadiclog.
[Other Curves of small genus]
- Rational points on conics/Q : qfsolve, qfparam [ adapted from Denis Simon's
qfsolve.gp ]
- General cubic/binary quartic to Weierstrass model: ellfromeqn()
- genus2red: allow rational non integral models + change input so that either
genus2red(P) for y^2 = P and genus2red([P,Q]) for y^2 + x*Q = P are
recognized; the output is now normalized + many bug fixes.
- new functions ellpadicfrobenius, hyperellpadicfrobenius, hyperellcharpoly
[Modular symbols & p-adic L functions] New package; see ??8
- Modular symbols for Gamma_0(N):
msatkinlehner msfromell mshecke mspathlog
mscuspidal msfromhecke msinit msqexpansion
mseisenstein msgetlevel msissymbol mssplit
mseval msgetsign msnew msstar
msfromcusp msgetweight mspathgens
- Attached overconvergent symbols, p-adic distributions and L-functions:
mstooms, msomseval, mspadicL, mspadicinit, mspadicmoments, mspadicseries
[Complex L-functions] New package; see ??6 and ??Ldata
lfun lfundiv lfunmfspec
lfunabelianrelinit lfunetaquo lfunmul lfuntheta
lfunan lfunhardy lfunorderzero lfunthetainit
lfuncheckfeq lfuninit lfunqf lfunzeros
lfunconductor lfunlambda lfunrootres lfunartin
lfuncreate
[Associative and central simple algebras] New package, see the tutorial !
algabsdim algdisc algisramified algrandom
algadd algdivl algissemisimple algrelmultable
algalgtobasis algdivr algissimple algsimpledec
algaut alghasse algissplit algsplittingdata
algb alghassef algleftmultable algsplittingfield
algbasis alghassei algmul algsplittingmatrix
algbasistoalg algindex algmultable algsqr
algcenter alginit algneg algsub
algcentralproj alginv algnorm algsubalg
algchar alginvbasis algpoleval algtableinit
algcharpoly algisassociative algpow algtensor
algdecomposition algiscommutative algprimesubalg algtrace
algdegree algisdivision algquotient algtype
algdim algisdivl algradical
algisinv algramifiedplaces
[Number Fields]
- New "compositum" functions. nfcompositum(): over number fields;
new binary flag to polcompositum() to assume fields are linearly disjoint;
nfsplitting: equation for splitting field / Q
- Class groups and units: use GRH-guaranteed bounds in bnfinit for residue
estimate; made qfbclassno more reliable: correct for |D| < 2.10^10 and no
known counter example; of course you can double check with quadclassunit()
(rigorous under GRH but much slower up to |D| ~ 10^18 or so).
- Class field theory: bnrisgalois, bnrgaloismatrix, bnrgaloisapply;
faster and more reliable rnfkummer; bnrconductor(bnr, chi) as a shortcut
for bnrconductor(bnr, Ker chi), same for bnrisconductor, bnrdisc and
bnrclassno; bnrchar to define classes of Hecke characters, e.g. trivial on
some congruence subgroup. Faster bnfcertify when the field has
Q-automorphisms. New function nfislocalpower.
Logarithmic class groups: new functions bnflog, bnflogdegree, bnflogef,
rnfislocalcyclo.
- Relative number fields: rnf structures may now contain a full absolute nf
struct, attached to rnf.polabs; nfinit(rnf) returns it. This allows rnf
functions to return objects in standard notation (e.g. ideals in HNF
instead of as a vector of t_POLMOD generators); add optional flag to
that effect in rnfeltabstorel, rnfeltdown, rnfeltup, rnfidealreltoabs,
rnfinit. New functions rnfidealprimedec, rnfidealfactor. Add optional
flag to nfhnf and nfsnf to return transformation matrices.
- Projection to / lift from residue field: nfmodpr, nfmodprlift. (Functions
nfeltdivmodpr, nfeltmulmodpr, nfeltpowmodpr, nfeltreducemodpr, nfkermodpr,
nfsolvemodpr are now obsolete: use nfmodpr, work in the finite field,
then lift back using nfmodprlift.)
Faster idealchinese and allow sign conditions at specified real places
- idealprimedec now allows an optional 3rd argument, to limit f(P/p)
- Improvements in thue(), whose solutions are now canonically ordered
(lexsort); support (powers of) imaginary quadratic equations.
COMPATIBILITY ISSUES BETWEEN 2.7.* and 2.9.*
============================================
- [libpari] function names obsoleted during the 2.3.* cycle
(deprecated before 2007) have been commented out. See PARI_OLD_NAMES.
- t_STR used to compare as larger than any real number via < or >
operators. Such a comparison now raises an exception.
- valuation(0,p), nfeltval(nf,0,pr), idealval(nf,0) precision(0),
padicprec(0,p) now all return +oo
infinite slopes of newtonpoly replaced by +oo (instead of 2^63-1)
poldegree(0) now returns -oo
- default 'compatible' and 'strictmatch' have been obsoleted. They are now
no-ops.
- GP: polynomial variable 'y' is now always defined on startup,
with priority lower than 'x'; variables of arbitrary priority can now be
created: 'x' is no longer guaranteed to have maximal priority,
nor MAXVARN to have minimal priority.
- the meaning of precision(x, n) no longer depends on the type of x: it now
always refers to floating point precision. Before the change:
precision([O(2),O(3),O(x)], 10) -> [O(2^10),O(3^10),O(x^10)]
- no longer print a 0 t_POLMOD as "0", e.g. output explicitly Mod(0,x)
instead of '0'.
- content([]) -> 0 [ was 1 ]
- polsturm(T, a, b) is still supported but deprecated, use
polsturm(T, [a,b])
- nfdisc() and nfbasis() no longer support the old (T,flag,factorization)
arguments. Use the generic [T,listP] syntax
- ellbil(E,P,Q) is now deprecated, use ellheight(E,P,Q)
- rnfconductor now returns [cond, bnr, H] instead of [cond, bnr.clgp, H]
- The sumnum interface has changed, see ??sumnum
- The broken implementation of Dedekind zeta function zetakinit / zetak
has been removed, use the new Lfun package ! E.g.
\\ ~ zetakinit(x^3-2) on the critical line up to height 100
? L = lfuninit(x^3 - 2, [100]);
\\ ~ zetak
? lfun(L, 1/2 + 10*I) \\ value at this point
- polredabs(T) now internally uses the polredabs([T,listP]) strategy,
making it much faster in favourable cases, while still always returning
a canonical defining polynomial; polredabs([T,listP]) no longer returns 0
if the attached order cannot be proven to be maximal: it computes the
expected canonical polynomial in all cases, which can be slow. Always use
polredbest() if you do not require a canonical output.
--
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]
`