[BACK]Return to TODO CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / pari-2.2

Annotation of OpenXM_contrib/pari-2.2/TODO, Revision 1.1.1.1

1.1       noro        1: This file lists the things that ought to be implemented / fixed. It is
                      2: hopelessly incomplete right now, but it's a start. Most items require major
                      3: work, and may not be that desireable after all. If you intend to work on
                      4: any of these things, have a look at CVS.txt and drop an email to pari-dev.
                      5:
                      6: Priority classification (first column): [subjective and debatable!]
                      7: 5    as soon as possible
                      8: 4    should be done
                      9: 3    nice to have
                     10: 2    maybe not
                     11: 1    probably not
                     12: -    unclassified
                     13:
                     14: ***************************   BUGS (general)     ****************************
                     15: Unless specified otherwise, examples assume 32bit machine and default precision
                     16:
                     17: 5  setrand(5);thueinit(x^3 + x^2 - 43690*x - 3529208)
                     18:    ***   non positive argument in mplog. \\ precision problem
                     19:
                     20: 4  precision problems in polgalois:
                     21:    setrand(7);
                     22:    polgalois(x^8+162644002617632464507038884216211529274267271168000002)
                     23:    gives wrong result at \p28 [32,-1,17], correct at \p38 [32,-1,15]
                     24:
                     25: 4  gcmp/gegal not transitive: [] == 0, [0] == 0, but [0] != []
                     26:
                     27: 4  rnfpolred is numerically unstable:
                     28:    ? rnfpolred(nfinit(quadpoly(904,y)),quadray(904,1))
                     29:      ***   division by zero in gdiv, gdivgs or ginv
                     30:
                     31: 4  qfbclassno(x < 0) may give a wrong result [e.g x = -2878367]
                     32:
                     33: 4  t_SER computations much too slow when number of terms increase, even
                     34:    when applying a trivial formula, e.g cos(x) at \ps 10000
                     35:
                     36: 3  many functions assume MAXVARN is a free variable, yielding bogus
                     37:    results if the input involve it (only affect library programming).
                     38:
                     39: 3  quadclassunit not reliable when fed non fundamental discriminants
                     40:    (infinite loop [e.g quadclassunit(-352)], wrong result)
                     41:
                     42: 3  ellinit over Q_2 doesn't work (AGM loses too much precision)
                     43:
                     44: 3  ellpointtoz over Q_p makes no difference between P and -P (corrected over
                     45:    C by a cheap trick)
                     46:
                     47: 3  recursive plot easily fooled. One could split intervals in 3 + make sure
                     48:    size of neighbouring intervals don't differ too much.
                     49:
                     50: ***************************   BUGS (GP specific) ****************************
                     51:
                     52: 5  life of GP variables too short in pathological cases:
                     53:    v = concat(v, [v=1,v=2]); concat(v, [v=1,v=2]) --> SEGV
                     54:
                     55: 4  changing primelimit from within forprime loop yields unpredictable results
                     56:
                     57: 3  after allocatemem() / default(parisize, ...), the rest of the command is
                     58: discarded (ends by a longjmp).
                     59:
                     60: 2  under GP after an error, memory is only recovered from "entire variables".
                     61:    Individual components of lists/vectors/matrices are left alone if the
                     62:    GLOBAL object wasn't modified during the last cycle (i.e only v[x] = ...
                     63:    occured)
                     64:
                     65: 1  sum(i=1,3000, exp(-i^2)) --> overflow in R*R
                     66:    The "negligible" terms should be neglegted, not overflow because of the
                     67:    way the computation is done. [ Tough to correct! ]
                     68:
                     69: ***************************  DOCUMENTATION    ****************************
                     70:
                     71: 5  complete/update the tutorial (esp. section 11 and 12)
                     72:
                     73: 4  add examples for all functions in Chapter 3
                     74:
                     75: 4  separate chapter 4 and 5 and document the innards of PARI (entree,
                     76:    pariFILE, bloc ...)
                     77:
                     78: 2  HTML version (pod ? SGML ? yodl ???)
                     79:
                     80: ***************************   DEVELOPMENT     ****************************
                     81:
                     82: 5  write decent (specialized) benches
                     83:
                     84: 3  switch to autoconf
                     85:
                     86: ***************************   ALGORITHMS      ****************************
                     87:
                     88: Kernel:
                     89: =======
                     90: 5  check NaN in dbltor and related routines
                     91:
                     92: 4  benchmark / profile basic functions and see what needs to be done
                     93:
                     94: 4  finish t_REAL Karatsuba and diviiexact
                     95:
                     96: 4  inline level0 routines should operate on _limbs_, not on words.
                     97:
                     98: 3  inline more assembler kernels, alpha in particular (ix86 and sparc are
                     99:    already inline).
                    100:
                    101: 3  FFT for basic types and polynomials (say in A[X], for A = Z, F_q, ...)
                    102:
                    103: 2  add support for different multiprecision kernels (a la LiDIA)
                    104:
                    105: Misc:
                    106: =====
                    107: 5  don't assume that nf.zk is HNF. Allow using LLL-T2-reduced bases (with
                    108:    first element 1) --> huge improvement to all idealred computations (esp.
                    109:    bnfisprincipal, bnfinit)
                    110:
                    111: 4  graphics: allow FIG output (besides PostScript) [easier to edit!]
                    112:
                    113: 4  decent finite field package (remove all the nfxxxmodpr functions)
                    114:
                    115: 4  rnfkummer (doesn't work)
                    116:
                    117: 4  nfsubfields [use known subfields to discard blocs right away] (current uses
                    118:    far too much memory)
                    119:
                    120: 4  LLL over R (not stable). Clean up bibli1.c (remove duplicate code)
                    121:
                    122: 4  rethink the element_mul type of functions: multiplication table is O(n^3),
                    123:    polynomial multiplication + remainder is O(n^2) [+ can use Karatsuba/FFT]
                    124:
                    125: 3  \ and % (euclidean division) could accept more arguments (e.g t_REAL)
                    126:    x \ y := floor(x/y) if y > 0 and floor(x/y) + 1 if y < 0
                    127:    x % y := x - y(x\y) [ hence 0 <= x%y < |y| ]
                    128:
                    129: 3  zetak is very inefficient and unable to handle most fields of degree > 6
                    130:
                    131: 3  have quadclassunit return bnf structure
                    132:
                    133: 3  2-adic initell
                    134:
                    135: 3  p-adic ellztopoint
                    136:
                    137: ***************************   LIBRARY DESIGN   ****************************
                    138:
                    139: 4  a system of DEBUGLEVEL classes [e.g \g 5 "LLL" ] (such that the user can
                    140:    easily define new ones)
                    141:
                    142: 4  allow generic functions to process and produce t_SMALL's
                    143:
                    144: 4  remove all dependences on types ordering [if (typ(x) < t_POL) ...]
                    145:
                    146: 3  integrate Ilya's code for yet bigger prime tables (pari-dev-435). Unify
                    147:    functions using diffptr (if possible correcting the forprime bug above)
                    148:
                    149: 3  remove global variables gpi, geuler: their precision is unpredictable
                    150:    (at least as much as requested in last const[pi|euler](), possibly much
                    151:    more). Explicit call to mp[pi|euler] should be required. Will break
                    152:    existing code...
                    153:
                    154: 3  rename library functions following GP names
                    155:
                    156: 3  rewrite the generic functions (gadd/gmul/gdiv plus a couple of others) to
                    157:    use (two-dimensional) table lookups instead of switches
                    158:
                    159: 3  introduce "special" types for objects which are really containers and
                    160:    should be defined by a secondary type (e.g number fields, finite fields,
                    161:    p-adic fields, elliptic curves, ...). Would keep list of types small
                    162:    (and fast)
                    163:
                    164: 3  better representations for multivariate polynomials
                    165:
                    166: 3  type "element in" ([number|finite] field...), "point" on elliptic curve
                    167:
                    168: 3  find a way to deal (generically) with "integral object + its content"
                    169:    Application (e.g): fractional ideals much more efficient.
                    170:
                    171: 2  "mute" variables for t_POLMOD. Should have Mod(x,x^2+1) == Mod(y,y^2+1).
                    172:
                    173: 2  have some header magic (transparently) prepend some prefix (e.g "pari_")
                    174:    before all exported functions to prevent name conflicts. Build alias
                    175:    files for debuggers
                    176:
                    177: 2  should use vsnprintf instead of vsprintf in pariputsf. Requires GNU libio.
                    178:    [paripusf uses static buffer which should be ok for "most" purposes]
                    179:
                    180: ***************************   GP DESIGN       ****************************
                    181:
                    182: 5  remove limitation to 8 arguments for static functions (argvec[9])
                    183:
                    184: 4  use divide & conquer approach in string / integer conversions
                    185:
                    186: 4  let forprime(n=a, b, ...) work even if a,b above primelimit
                    187:    (maybe with a Warning), via simple sieve + pseudo primality test
                    188:
                    189: 3  split matrix_block in 2 parts: exploration + assignment. Would allow
                    190:    Math::Pari to use complicated x[][][][] constructs
                    191:
                    192: 3  changevar with explicit (incomplete) permutation. E.g
                    193:    changevar(p, [x,y], [a,b]) for x -> a, y -> b
                    194:    add a flag to substitute in succession or in parallel (e.g if a involves y)
                    195:
                    196: 3  possibility to save and load a session (variables, functions, defaults)
                    197:
                    198: 3  a type t_FILE [current: stream re-opened/flushed/closed after every single
                    199:    write(): disaster when one wants to write often to the same file]
                    200:
                    201: 3  add a possibility to increase the maximal recursion depth (need to
                    202:    increase the GP process stack: use setrlimit(RLIMIT_STACK,) + fork)
                    203:
                    204: ***************************   TOOLS           ****************************
                    205:
                    206: 4  a script converting prototype to parser code (e.g GEN f(GEN,GEN) --> "GG")
                    207:
                    208: 3  a script to translate "legacy" GP code into something using GP2 function
                    209:    names
                    210:
                    211: 3  write a gp-to-C compiler (adding #defines in anal.c + modifying the
                    212:    table of functions in init.c, etc, to include the explicit function name).
                    213:    Should be easy: the code is mostly there.
                    214:
                    215: 3  write an analog of the 'echo' default which would print code as it is
                    216:    executed, not as it is read
                    217:
                    218: 2  write a GP scripts debugger (cf above)
                    219:
                    220: 2  write a GP scripts profiler (cf above)

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>