Karim Belabas on Fri, 26 Nov 2004 18:33:52 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

pari-2.2.8 released


Dear PARI enthousiast,

I would like to announce the release of pari-2.2.8.ALPHA. The sources can be
obtained through the address

  http://pari.math.u-bordeaux.fr/download.html

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Features:
=========

  -- the documentation has been cleaned up, in particular the Tutorial and
chapter 4 & 5 of the User's manual. The latter was split in two parts,
devoted to GP and libpari repectively. Chapter 5 has been completely
reorganized and scores of internal functions documented (to be continued).

  -- tighter integration with gmp [ if "Configure --with-gmp" ]. In
particular the floating point kernel and "transcendental" functions have been
much improved. Have a look at

  http://www.math.u-psud.fr/~belabas/pari/benchs/timings-mpfr.html

for a comparison between pari-2.1.5 and 2.2.8 (with both native and GMP
kernel) in this respect.

  -- new assembler kernels for x86_64 (Opteron), hppa 32 and 64 bit
     support in Configure for GNU/Hurd, sparc64, x86_64 and ppc64

  -- support for forvec() in GP2C


Compatibility warning:
======================

  -- ellheight now uses the standard normalization [ twice the value it used
to return ]

  -- [internal] lgef / setlgef /  evallgef removed from the library [ was used
to code the degree of t_POL types ]

  -- ':' is no longer allowed as a substitute for the separator ';' [ for
GP2C extensions ]


Have fun,

    Karim.


P.S: The Changelog:

Done for version 2.2.8 (released 25/11/2004):
  Fixed
    1- gp --version: stack overflow
    2- overflow (in C long multiplication) in zeta(4.45+292532.0*I)
    3- setrand(1);
       bnr = bnrinit(bnfinit(quadpoly(1020,y)), 31,1);
       rnfkummer(bnr, matdiagonal([5,1,1]));
       --> SEGV ( typo in FpXQX_from_Kronecker )
    4- make -j4 bench could start the bench before the binary was built
    5- matkerint had stopped working [from 2.2.7]
GN  6- [Solaris + cc:] fix linker warnings (missing object types in
       src/kernel/*.S)
    7- listsort(List([]), 1) --> SEGV
    8- setrand(1582268146);
       bnr=bnrinit(bnfinit(y^12+6*y^10+31*y^8+84*y^6+159*y^4+166*y^2+1),4,1);
       rnfkummer(bnr,[1,0,0,0,0,0;0,1,0,0,0,0;0,0,1,0,0,0;0,0,0,1,0,0;0,0,0,0,2,1;0,0,0,0,0,1]);
        --> bug in gadd [ typo in FqX_split ]
       Smaller test-case:
         setrand(1701015992)
         factorff(x^2+y+2, 3, y^3+y^2+2)
MSo 9- bug in print_version() --> SEGV on startup if cc version number too long
   10- subst(O(x),x,x+O(x^2)) --> SEGV [ substituting in 0 t_SER ]
MSo11- various bugs in anal.c: uninitialized reads in get_op_fun(), double_op()
       memory possibly freed twice because ep->args was not reset to NULL
       after being freed
   12- (10^100 + 0.) / (10^100 + 1.)  --> 0.  [ display bug from 2.2.6 ]
   13- rnfnormgroup(): restrict to primes of degree 1 [ much faster ]
   14- gamma(351/2) --> 1.235874058265488750143951998 E740  [ = gamma(351) ]
   15- gammah was much slower than gamma [ contrary to docs ]
   16- problems with 0 t_SERs:
       O(y^5)/(1+x) + O(x^3)  --> O(x^3)
       O(y^5)/(1+x+O(x^3))    --> O(y^5) + O(y^5)*x + O(y^5)*x^2 + O(x^3)
       O(y) / (1+x)           --> O(y)
       O(y) * 1/(1+x)         --> O(y)
       subst(x+O(b),x,a)      --> a
   17- (0. * x) / x --> 0.E-28 * x
   18- content(0.*x) --> 0
   19- nfinit([x^2+1, y]) --> SEGV (bad input)
   20- lngamma(10^50*I) returned many more digits than were significant
   21- bnfinit(x^4-768*x^3+220032*x^2-27869184*x+1316749312) --> recent oo loop
   22- elllseries(large t_REAL) --> 0 [ instead of ~ 1 ]
   23- erfc(0) --> error  [ instead of 1 ]
   24- bnfinit(,1) could return without giving fundamental units (if the
       computation is unfeasible). Raise an error instead.
IS 25- config/get_head would not work only if one invoked $PWD/Configure
   26- obscure simplification bug:
          x;s;t;u;
          a = -9*u*x^3+3*u*s*x^2-3*u*s^2*x+u*s^3+u^4
          b = 9*u*x^3+3*u*s*x^2+3*u*s^2*x+u*s^3+u^4
          bezout(a,b) * (2*u^4*s^3+2*u^7)
       --> involves terms like u^5/u^2
   27- matrixqz(matrix(2,1,i,j,i-1),-2) --> [;] instead of [0;1]
   28- possible SEGV in bnrinit [ when ray class group is trivial ]
   29- negative definite forms allowed by Qfb() while most qfb* routines
       can only cope with positive definite forms. Explicitly disallow
       negative definite forms.
   30- \p 38
       ellinit([1,0,0,-19959260,-34323045317]) -> precision too low in initell
   31- {p = x^36 - 252*x^34 + 27504*x^32 - 1723392*x^30 + 69300198*x^28 -
      1894026456*x^2    6 + 36355251492*x^24 - 499350803616*x^22 +
      4953373719489*x^20 - 355510821425 40*x^18 + 183790369965636*x^16 -
      677399199594048*x^14 + 1751507793357696*x^1    2 - 3105079104411648*x^10
      + 3651333353058816*x^8 - 2698458969378816*x^6 + 11 30370773667840*x^4 -
      207898980728832*x^2 + 2879456034816; nfroots(nfinit(subst(p,x,y)), p); }
      --> loop forever in lllintpartial()
      Fix: abort lllintpartial if progress negligible (was: if _no_ progress)
   32- some permanent structs not freed in freeall()
   33- [--with-gmp] round(-4294967296.1) --> '-0' [ typo in mpent ]
   34- polredabs(x^4-x^3-31*x^2-12*x+144) was not reduced [ typo in subfield
       detection algorithm ]
   35- nffactor(nfinit(a^2+1),x^2+[]) --> SEGV
GH 36- lngamma was not even continuous : its argument was reduced mod 2Pi
   37- contfrac(sqrt(2)/2,,2) --> trying to overwrite a universal object
   38- nfroots(nfinit(a^2+a+1),x^2-a/4) --> []  (leading coeff not properly
       taken into account in nf_DDF_roots)
   39- Y=Mod(y,y+1);Mod(Y*x,x-1)^2 --> bug in FpX_divrem, p == NULL
   40- return type for nffactormod was not a factorization (had become t_VEC)
   41- Pol(Ser(1+x)) != 1+x  [ bitmask not cleared properly in gconvsp() ]
   42- default(datadir,"...") --> SEGV [ attempt to free a static string ]
   43- Configure was missing log2/exp2 on systems that had it
   44- typo in base2.c:init_norm() [ wrong result in idealprimedec for huge
       fields ]
   45- matsnf([x,1; 0,x],6) --> incorrect type
   46- qfgaussred(a) did not work if coefficients of a did not support the
       "sign" operation [ signature was computed internally ]
BA 47- bitneg(1,0) --> SEGV (caused by 2.2.5 A10).
   48- factorback([;]) didn't work [ should be 1 ]
   49- f = factor(n); divisors(f) destroyed the factorization stored in f
   50- add missing GC in hess()
   51- [Configure:] runpathprefix was computed only in terms of $osname
       (assuming standard vendor supplied linker). At least check whether
       it's GNU ld first.
   52- misleading error message rtodber "overflow or underflow in R->dbl"
       (in fact, only overflow)
   53- quadgen(-8) * 0. --> SEGV
   54- I + O(2^10) --> error
   55- ((x + quadgen(-8))*Mod(1, i))/(x^2+1) --> SEGV [ from randomgen ]
   56- Mod(a^0,i^0) --> Mod(1,1)  [ should be Mod(0,1) ]
   57- factor(HUGE, 100000) --> "pointers lost in gerepile" in random GC in
       ifac_realloc() [ missing copy() for (*partial)[2] ]
   58- incorrect gerepile() behaviour on t_LIST [ would try to update
       non-existing components if list not full ]
BA 59- quoted strings were not displayed properly quoted.
   60- bestappr(0.1, 8) --> 0 [ should be 1/8 ]
   61- rare bugs in copying routines [ clone bit sometimes not unset ]
   62- SEGV in qfminim when integer entries and precision error occured
BA 63- galoisidentify() could fail on WSS group with S4 residue.
   64- t_POLMOD + t_MAT was incorrect. E.g Mat(1) + Mod(1,x) --> Mod(Mat(1),x)
       instead of Mat(Mod(1,x)) as for other scalars.
   65- Mod(1,8) + O(2^2) --> Mod(1,8) [ should be error ]
   66- lngamma(1.) returned a t_REAL of length 'realprecision' (instead of 3)
BA 67- matsnf(Mat([])) was returning a matrix instead of a vector.
   68- ellap(ellinit([0,1,0,1,0]), 100) --> FPE  [ BIB: 100 is not prime, but
       make the routine more robust ]
   69- give meaningful error messages (with context) for 1<<(1<<32), 1<<Pi
       (1<<32)! allocatement(1<<32)  [ was: "impossible assignment I-->S" ]
   70- memory possibly freed twice in pop_val_if_newer() [ race condition on
       interrupt (<C-C>) during new_val_cell() ]
   71- ellap(ellinit([0,1,0,1,0]),100) --> SEGV  [ 100 is not prime ! ]
MS 72- recover from readline history corruption [ don't trust history_length
       in history_is_new() ]
   73- obscure bug in thue() [ unit of norm -1 not found due
       to interface inconsistencies ]
          t = thueinit(x^6 - 2); thue(t, 2638)  --> []
JD 74- [Configure:] detection of times()
   75- Forbid t_POL + t_VEC: useless and inconsistent [ we had: 1 + [] -->
       error, x + [] --> OK but x * [] --> [] instead of '[]*x' , etc. ]
   76- obscure bugs wrt polynomials with t_MAT coefficients created via Pol()
       [ e.g content(x*[;]) --> [;], primitive_part(x*[;]) --> [;] ]
   77- incorrect behaviour in scalarpol()/scalarser() for exact 0 argument
   78- typo in ellap: e defined over Fp didn't work any more
   79- t_SER ^ t_QUAD --> SEGV
   80- nffactor(non-monic t_POL) --> SEGV due to FpX_red interface change
       [ don't allow t_INT argument, t_POL is mandatory ]
   81- ZX_incremental_CRT: wrong handling of degree increase (--> oo loop)
   82- SEGV in Karatsuba multiplication for polynomials, when high product
       was 0 (over a ring which is not an integral domain!)
   83- 1 / Mod((a^2-a)*x^2-1,Mod(2,6)*x^3+Mod(1,2)*x^2+1) --> SEGV
   84- ellap(e defined over F2, 2) gave wrong results [ assumed e defined
       over Q and reduced relevant data modulo 8 ]
   85- matcompanion(degree 0 polynomial) --> stack corruption
   86- incorrect handling of inexact polynomials in matsnf(,2)  [ inexact
       leading 0 coefficients ]
   87- writebin(file, 0) saved a "corrupted" object (0 couldn't be read back)
   88- wrong prototype used in rnfdet()  [ accepted 3 arguments instead of 2 ]
   89- typo in to_Kronecker [ when at least 3 variables involved ]
   90- typo in x = sqrt(t_PADIC)  [ returned either x or -x ]
   91- rare stack corruption in RgX_mul(t_POL, t_POL) [ when product of
       leading coefficient cancel, valuation is non-zero _and_ we use an
       "unsafe" gerepile right afterwards ]
   92- component(Ser(x),2^31-1) --> SEGV
   93- typos in krosi(), kronecker() [ e.g krosi(-4,1), kronecker(0,2^32+1) ]
   94- agm(-1,2) --> oo loop
   95- tanh(10^10) --> exponent overflow [ should be 1 ! ]
   96- gamma(exp(-373)) --> exponent overflow
   97- readline: assume a file 'foo' exists, \rf<TAB> --> \foo [ r deleted! ]
       [\r f<TAB> was OK]. Solution: just expand to '\r f'; hitting <TAB>
       again completes properly --> \r foo.
BA 98- Reduce stack consumption in ffinit and polsubcyclo.
   99- (p/q)' wasn't simplified if q wasn't squarefree
  100- polylog(n, x < 0) had a (small) non-zero imaginary part
  101- 3 + O((-1)) --> oo loop
  102- creating t_PADIC/t_SERs via x + O(...) eventually blew up the heap
  103- fix memory leaks related to GP pointers and clones

  Changed
    1- lgef / setlgef / evallgef removed. One may safely use lg for t_POLs.
       As a result maximal degree jumps to ~ 2^24 on 32bit machines
    2- renamed *res(te) routines to *rem(ainder). Eg poldivres --> poldivrem,
       nfdivres --> nfdivrem
BA  3- Internal u_Fp* routines now are renamed Fl* and made public.
BA  4- [GMP kernel] Library soname changed to libpari-gmp[-2.2].so.N.
BA  5- Library .so link changed to libpari.so for all versions.
       Static library changed to libpari.a for all versions.
    6- COMPAT: ellheight now uses the standard normalization: twice the value
    it used to return. The values returned by ellbil() and ellheightmatrix are
    unaffected. In particular, ellheightmatrix() is the polar form of
    elleight(), and ellbil now satisfies the proper identity for B(P, Q) =
    (h(P+Q)-h(P)-h(Q)) / 2
    7- renamed and declared gmul_mat_smallvec --> RM_zc_mul
                            gmul_mati_smallvec--> ZM_zc_mul
    8- move functions in highlvl.c to libpari, excluding install().
    9- bnfinit: use approximate integral LLL reduction (much faster than fp)
   10- bnfinit: cache multiplication table by prime ideal anti-uniformizers
       (faster valuations)
BA 11- improve binomial (use divide_conquer_prod)
   12- improve bnrinit & idealstart when finite part of conductor is 1 (+
       improve stability)
   13- subgrouplist(bnr,...) does not require bnr to contain generators anymore
       ( bnrinit(,,1) ). Also much faster.
   14- allow zetakinit() to use a bnf argument [ would be recomputed before,
       making it impossible to certify the result since bnfcertify could not be
       applied ]
BA 15- error messages now mention the GP function when the error occured.
   16- intro message [ no point in displaying "realprecision",
       "seriesprecision" and "format" on startup. One can query them
       individually, or ask for all defaults ]
BA 17- macro varncmp(vx,vy) should now be used to compare variable numbers.
BA 18- split substpol from subst ( reverse [ 2.2.1 C24 ] ). Use substpol
       for non-trivial algebraic substitution.
   19- remove t_FRACN / t_RFRACN from \t output, add t_VECSMALL
BA 20- bittest() now handle negative operand as 2-adic.
BA 21- type() does not allow to change object types anymore.
   22- internal routines setloop()/incloop() allocated 2 chunks of memory,
       then assumed they were connected [ true for the current allocation
       model ]. Remove that unecessary assumption.
   23- more informative error messages in concat()
   24- in affsi / affui (s, z) : do not check that lg(z) >= 3
   25- replace gexpo(t_QUAD) by a rough aproximation (as t_COMPLEX): faster
   26- made Mat(t_VEC of w t_COLs of the same length h) return a h x w matrix
       Used to be a 1 x w matrix whose elements were t_COLs. Obsoletes such
       hacks as: v = vector(...); v[1] = Mat(v[1]); concat(v). Now Mat(v) is
       enough.
   27- move BEGINEXTERN / ENDEXTERN pairs out of kernel headers into pari.h
   28- split the User's manual in two: PARI/GP and libpari.
   29- updated and completed the tutorial
   30- faster basic transcendental functions on small inputs (sqrt, log, exp)
   31- rewrote basic generic kernel (add,mul,div) [ faster, less obfuscated ]
   32- macroified gop1z, gop2z, gops2gsz, gops2sgz, gops2ssz
   33- diviiz(x,y,z), divisz, divsiz and divssz always assign the euclidean
       quotient [ used to  depend on the type of z: if t_REAL computed exact
       quotient ]. Use rdivii, rdivis, rdivsi, rdivss for analogous
       functionality (no "z" variant);
   34- ensure proper rounding in divrs
   35- renamed padiczero --> zeropadic [ as in zero[pol|ser|vec|col|mat] ]
   36- macroified gcosz, gsinz, gexpz, etc + cleanup transcendental functions
   37- macroified mulssz, addssz
   38- rename mpent --> mpfloor
   39- rename divise --> dvdii, gdivise --> gdvd, mpdivis --> dvdiiz,
       mpdivisis --> dvdisz
   40- rename mpppcm --> lcmii, remove mppgcd [ use gcdii ]
   41- rename resss --> remss, ressi --> remsi, resis --> remis,
       resii --> remii, gres --> grem
   42- rename krogs --> krois, krosg --> krosi
   43- rename FpXQX_FpXQ_mul -> FqX_Fq_mul, FpXQX_normalize -> FqX_normalize
   44- rename adduumod, subuumod, muluumod, divuumod --> Fl_[add,sub,mul,div]
       invumod --> Fl_inv, invsmod --> Fl_inv_signed, powuumod --> Fl_pow
       powiumod --> Fp_powu, mpsqrtmod --> Fp_sqrt, mpsqrtnmod --> Fp_sqrtn
   45- rename mpsqrt --> sqrtr, mpsqrtn --> sqrtnr
   46- don't copy arguments of user functions for types which have no
       modifiable components (anything but VEC, COL, MAT, LIST, VECSMALL):
       much faster.
   47- ':' no longer allowed as a substitute for ';' if compatible = 0. Use
       GP2C semantics [ x:int, v:vec ]. For the time being the type
       information is discarded.
   48- modulargcd() was very inefficient for non-monic t_POLs
       [ e.g (poltchebi(x) - 1) / (x-1) ]
JD 49- [timer: ] use sysconf(_SC_CLK_TCK) instead of CLK_TCK
       if available, and make sure one of these is available before choosing
       times() in Configure
JD 50- check for 'exuberant-ctags' before 'ctags' in make_vi_tags [ and fail
       gracefully if neither is found ]
BA 51- support for gp2c-run on Darwin
   52- remove blanks in "raw" outputs ( default(output,0) )
   53- made .fu and .tu return t_POLMOD, not t_POL
BA 54- [GMP kernel] use mpn_sqrtrem for sqrtr_abs
   55- nfsubfields (use much less memory)
GH 56- more robust thue(): faster enumeration of small solution, don't assume
       that the full unit group is known, warn when conditional result is
       obtained.
   57- remove log() flag: decide alone whether to use AGM or not.
       Rewrote logagm and mpexp1
   58- make ??? index search ignore case [ ???bernoulli will find Bernoulli ]
   59- renamed svaluation --> u_lvalrem, pvaluation --> Z_pvalrem
   60- change semantics of sqrtn to catch easily non-residues from the
       user's side
   61- rewrote the 'tune' utility, add one tune.h file for each kernel,
       support for user override still needs to be rethought (or documented).

  Added
    1- make test-all [ all available test suites (SLOW !)]
BA  2- add support for GNU/Hurd.
    3- conversion routines zv_to_ZC, zv_to_ZV, zm_to_ZM, and matrix
    multiplication: RgM_zm_mul, ZM_zm_mul.
    4- output support for zm / Flm matrices (t_MAT with t_VECSMALLs instead
       of t_COLs)
    5- FpM_rank
    6- allow factor( an elt in Z[i] )
    7- put back bruteall [ used by Math::Pari ]
BA  8- Configure support for sparc64, x86_64 and ppc64
BA  9- x86_64 level0 inline assembly kernel
BA 10- add POSIX-style long options --fast, --quiet, --primelimit and
       --stacksize.
   11- new internal library routine itos_or_0
   12- new member function .index
   13- rdivii, rdivis, rdivsi, rdivss to replace diviiz & co.
   14- new routine mpround, mpfloor, mpceil, mptrunc, roundr, floorr, ceilr,
       truncr
BA 15- galoisisabelian, galoisexport, galoisidentify and galoissubgroups now
       also accept subgroups returned by galoissubgroups.
   16- new routine Fl_sqrt
   17- new routines FpX_factor, FqX_factor, FpX_degfact, FqX_red
   18- private header file pari-priv.h
   19- new function ispower
   20- forvec iterator
GH 21- new function zncoppersmith
   22- public interface to forvec() [ forvec_start + forvec_data, for GP2C ]
   23- routine sqrtremi() [ Karatsuba square root ]
   24- internal routine int2n() [ = 2^n ]
   25- new functions Z_pval, Z_lval, u_lval
   26- new function primepi
BA 27- new default factor_add_primes
BA 28- HPPA 32bit and 64bit level0 inline assembly kernel

  Removed
    1- obsolete macro leadingcoeff [kept for backward compatibility but
       removed from the documentation]. Use leading_term.
    2- obsolete undocumented type t_SMALL
BA  3- revert 2.2.1 A14 and A17 (broken with GMP kernel, unmaintainable).
BA  4- cornacchia, in favour of qfbsolve.
    5- useless inefficient types FRACN / RFRACN
    6- routines gred [useless] / gredz [ useless did not work ]. Define
       gred --> gcopy for backward compatibility
    7- many obsolete error codes [ for err(...) ]
    8- smodsi()  [ useless, not well defined ]
    9- buggy macros mppiz, mpeulerz [ undocumented, useless, broke
       compilation to use them ]
   10- inconsistently named macros mpinv[sir]r [ were "z" functions ].
   11- public macros refering to static transcendental routines (e.g mpatanz)
   12- undocumented, inconsistently named, useless, mulsii, addsii, divisii
   13- useless routine umuluu [ use mulll ]
   14- undocumented [macro] constants pariC1, pariC2, pariC3, pariK,
       pariK2, pariK4
-- 
Karim Belabas                     Tel: (+33) (0)1 69 15 57 48
Dep. de Mathematiques, Bat. 425   Fax: (+33) (0)1 69 15 60 19
Universite Paris-Sud              http://www.math.u-psud.fr/~belabas/
F-91405 Orsay (France)            http://pari.math.u-bordeaux.fr/  [PARI/GP]