Happy Christmas everybody.

As it's now the anniversary of the start of the move to having pari
2.4.* in Sage, perhaps it's about time it actually happened?  (Or
maybe it did, I forget...)

John


---------- Forwarded message ----------
From: Karim Belabas <karim.bela...@math.u-bordeaux1.fr>
Date: Wed, Jun 22, 2011 at 3:54 PM
Subject: pari-2.5.0 (STABLE) released !
To: pari-announce list <pari-annou...@list.cr.yp.to>


Dear PARI lovers,

I am pleasted to announce the release of pari-2.5.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 the 2.4.* development cycle, which
started 4 years and a half ago. For those still using pari-2.3.*, it is time
to upgrade.

Note (Windows users): we regret that we can no longer release a full-fledged
pre-compiled Windows binary. The gp calculator itself works, and so does the
installer; but, with Vista and Windows 7, configuration problems arose which
we do not know how to fix: broken GNU readline, broken external help, initial
GPRC not properly written to disk, etc. A bare-bones binary can still be
downloaded on the above page.

Have fun !

 K.B.

HIGHLIGHTS :
============

[The GP language]
 - One can declare true private variables (lexically-scoped) anywhere using
   the construct my(x, y, z), possibly with initializations:
   my(x = 1, y = x). The old "local" keyword keeps the same semantic
   (dynamic scoping) and is mostly obsolete, outside of very specific
   situations beyond the scope of these release notes.

 - In GP-2.3, it was not possible to use the same identifier for
   variables and functions; in GP-2.5 there is nothing wrong with defining
     f(y) = y^2
   then setting f = 1 (thereby deleting the user function). In fact, the
   distinction between variables and functions has been abolished: an
   anonymous functions (closure), say y->y^2, may be defined and assigned to
   variables. In fact, the old f(y) = y^2 is now an alias for f = y -> y^2.

 - The introduction of anonymous functions had a number of useful side effects;
 for instance, it made possible two new functions select() and apply(), as
 well as arbitrary comparisons in vecsort():

  \\ primes in { i^2+1 : i <= 50 }
  ? select(x->isprime(x), vector(50,i,i^2+1))
  %1 = [2, 5, 17, 37, 101, 197, 257, 401, 577, 677, 1297, 1601]

  ? apply(x->x^2, [1,2,3,4])
  %2 = [1, 4, 9, 16]

  \\ sorts a vector of polynomials by increasing discriminant
  ? vecsort( v, (x,y) -> sign(poldisc(x) - poldisc(y)) )

[The GP calculator]
 - the debugger, or "break loop", is now enabled by default
   [ set breakloop = 0 in your gprc to disable it ], and no longer
   controlled by trap(). The debugger is more verbose:
   ? f(x) = g(x);
   ? g(y) = 1/y;
   ? f(0)
     ***   at top-level: f(0)
     ***                 ^----
     ***   in function f: g(x)
     ***                  ^----
     ***   in function g: 1/y
     ***                   ^--
     *** _/_: division by zero
     ***   Break loop: type 'break' to go back to GP
   break> y
   0

 - all GP functions are now understood by GP2C

 - formatted printing : printf(), Strprintf()

 - alarm(n) to abort a lengthy computation after n seconds.

 - === "isidentical" operator, much stricter than ==

 - Lists now grow as needed, without imposing an awkward maximal length.
   v = List()  is now sufficient to initialize an empty list, instead of
   v = listcreate(100) to initialize a list which wouldn't grow past 100
   elements.

 - New GP type to handle non-prime finite fields in a reasonably efficient
   way. E.g:
   ? T = ffinit(7,5); \\ irreducible of degree 5 in F_7[x]
   ? t = ffgen(T); \\ The element x mod (T,p) in Fp[x] / (T) ~ F_{7^5}
   %2 = x  \\ this has type t_FFELT
   ? t^10 \\ handled like Mod(x, T) but faster, and less cumbersome
   %3 = 5*x^4 + 5*x^2 + 5*x + 6
   ? fforder(t)
   %4 = 5602  \\ multiplicative order
   ? g = ffprimroot(t); \\ primitive element
   ? fflog(g^1000,g)
   %6 = 1000

 - new default "factor_proven" to guarantee that all integer factorizations
   outputs proven primes (the default is to be happy with strong pseudoprimes).

 - new defaults "graphcolormap" and "graphcolors" to allow arbitrary
   colormaps in hi-res plots.

 - new default 'histfile', to save your typing history in between sessions.

[Libpari Build & Configuration]
 - 'Configure --tune' fine-tunes gp and the PARI library for a given host.
   On some machines this leads to noticeable performance improvements,
   esp. when using the GMP multiprecision kernel.

 - 'Configure --enable-tls' makes libpari thread-safe, for multi-threaded
   applications. See Appendix B in the "User's Guide to the PARI Library"

[Multiprecision Kernel]
 - The GMP library is now used by default if Configure can find it.

 - Schoenhage-Strassen big integers multiplication to native kernel
   (very useful if GMP not available)

[Polynomial Arithmetic]
 - faster multiplication of integer polynomials (Kronecker's trick)

 - subquadratic gcd over prime finite fields

 - special polynomials (polcyclo, polchebyshev, pollegendre...) are orders
 of magnitude faster ( polcyclo(10^6): 1min 30s (2.3) -> 4ms (2.5) ) and
 directly allow evaluation at a given point, e.g. polcyclo(n, 2) for Phi_n(2).

 - issquare(t_POL) now works reliably over prime finite fields ( we used
 to have  issquare(Mod(1,2)*(x^2+1)) -> 0, or error messages in more
 complicated cases ).

 - charpoly no longer assumes that the characteristic is 0 or large enough
   (Berkowitz division-free algorithm).

[Linear Algebra]
 - all LLL variants use an implementation of NGuyen & Stehle's L^2
   algorithm : stabler, much faster

 - better resultants

[Elliptic curves]
 - ellap() now uses the SEA algorithm (port of GP's ellsea package).
 - discrete logarithm [ elllog() ], group structure of E(Fp) [ ellgroup() ],
 - division polynomials [ elldivpol() ]
 - Tate and Weil pairings [ elltatepairing() / ellweilpairing() ]

[Number Fields]
 - Class-field theoretic functions (e.g. bnfinit) no longer cheat on Bach's
   constant. They now use safe bounds by default, correct under GRH, and no
   slowdown has been observed.
 - bnfinit: huge improvements for fields of large degree or admitting
   non-trivial automorphisms (series of patches by Loic Grenie).
 - faster quadhilbert(D < 0) [ Hilbert class field via CM ]
 - Frobenius elements [ idealfrobenius() ]
 - ramification groups [ idealramgroups() ]


MAIN BACKWARD COMPATIBILITY ISSUES: see the 'COMPAT' file for the full list.
===================================
 - The main issue with existing GP scripts has to do with the scope of
   private variables (my vs. local), see section 2.6 in User's Manual.
   Indeed, variables implicitly scoped to loop or function bodies are now
   lexically scoped. From GP-2.5 on, in constructs like
     for(i = 1, 10, g())
     f(i) = g()
   the index i is truly local to the loop/function body. It is no longer seen
   by the function g(), as used to be the case in GP-2.3.

 - function calls *must* include parentheses. I.e. typing 'f()' calls the
   function f without arguments as expected, typing 'f' returns an anonymous
   function with the same definition as f; for instance, v[1] = f is valid,
   assigning the closure f to the first entry of vector v.

 - private "prime table" (addprimes) must now contain primes only: its
   entries are now used in all arithmetic functions [new function
   addpseudoprimes to cover old usage: in factorint() only]

 - The pseudo-random number generator has been changed. The old linear
   congruential generator has been replaced by Brent's XORGEN, which uses
   a Linear Feedback Shift Register: pseudo-random sequences are much
   better behaved, e.g. matdet(matrix(5,5,i,j, random())) is no longer
   guaranteed to be divisible by 2^90 or so. There is no simple way to
   emulate GP-2.3 pseudo-random sequences in GP-2.5.

 - PariEmacs is no longer distributed with PARI/GP. The "PARI Emacs shell"
   is available as a separate package, to be downloaded once if at all.

 - | and & were accepted as aliases for || and && respectively. This
   construction still works in GP-2.5, but is scheduled to disappear. We
   strongly advise to update scripts to use the proper '||' and '&&'
   constructions.

--
Karim Belabas, IMB (UMR 5251)  Tel: (+33) (0)5 40 00 26 17
Universite Bordeaux 1          Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation    http://www.math.u-bordeaux1.fr/~belabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux1.fr/  [PARI/GP]
`

-- 
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org

Reply via email to