[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     ! 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>