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>