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