Annotation of OpenXM_contrib/pari-2.2/TODO, Revision 1.2
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
1.2 ! noro 12: 0 no
1.1 noro 13: - unclassified
14:
15: *************************** BUGS (general) ****************************
16: Unless specified otherwise, examples assume 32bit machine and default precision
17:
1.2 ! noro 18: 5 bnfinit sometimes gives wrong answers because we cheat on the value of
! 19: Bach's bound, using 0.3 log^2 D by default, where 0.3 should really be 12
! 20: (under GRH). If it's not enough, we compute a subquotient of the classgroup,
! 21: i.e junk. Ex:
! 22: * setrand(3); bnfinit(y^4 + 1190*y^2 + 1416100).cyc --> [8,2,2,2].
! 23: Wrong. The correct structure is [8,4,2].
! 24:
! 25: * setrand(1414185642); bnf = bnfinit(y^4 + 635*y^2 + 403225).reg is twice
! 26: the correct value.
! 27:
! 28: 5 polgalois(x^8-1864259299553450972214799899167226732549697977945716*x^6+331143259018657601105207922631212331088735421305543663274125986698777318014979969*x^4-2225286541902342283500014249183311190477390*x^2+5);
! 29: *** degree too large in tschirn.
1.1 noro 30:
31: 4 precision problems in polgalois:
32: setrand(7);
33: polgalois(x^8+162644002617632464507038884216211529274267271168000002)
34: gives wrong result at \p28 [32,-1,17], correct at \p38 [32,-1,15]
35:
36: 4 gcmp/gegal not transitive: [] == 0, [0] == 0, but [0] != []
37:
38: 4 rnfpolred is numerically unstable:
39: ? rnfpolred(nfinit(quadpoly(904,y)),quadray(904,1))
40: *** division by zero in gdiv, gdivgs or ginv
41:
42: 4 qfbclassno(x < 0) may give a wrong result [e.g x = -2878367]
43:
44: 3 many functions assume MAXVARN is a free variable, yielding bogus
1.2 ! noro 45: results if the input involves it (only affects library programming).
1.1 noro 46:
47: 3 quadclassunit not reliable when fed non fundamental discriminants
48: (infinite loop [e.g quadclassunit(-352)], wrong result)
49:
50: 3 ellinit over Q_2 doesn't work (AGM loses too much precision)
51:
52: 3 ellpointtoz over Q_p makes no difference between P and -P (corrected over
53: C by a cheap trick)
54:
55: 3 recursive plot easily fooled. One could split intervals in 3 + make sure
56: size of neighbouring intervals don't differ too much.
57:
58: *************************** BUGS (GP specific) ****************************
59:
1.2 ! noro 60: 5 readline: assume a file 'foo' exists, \rf<TAB> --> \foo [\r f<TAB> is OK]
1.1 noro 61:
62: 4 changing primelimit from within forprime loop yields unpredictable results
63:
64: 3 after allocatemem() / default(parisize, ...), the rest of the command is
1.2 ! noro 65: discarded (ends by a longjmp).
1.1 noro 66:
67: 2 under GP after an error, memory is only recovered from "entire variables".
68: Individual components of lists/vectors/matrices are left alone if the
69: GLOBAL object wasn't modified during the last cycle (i.e only v[x] = ...
70: occured)
71:
72: 1 sum(i=1,3000, exp(-i^2)) --> overflow in R*R
73: The "negligible" terms should be neglegted, not overflow because of the
74: way the computation is done. [ Tough to correct! ]
75:
76: *************************** DOCUMENTATION ****************************
77:
78: 5 complete/update the tutorial (esp. section 11 and 12)
79:
80: 4 add examples for all functions in Chapter 3
81:
82: 4 separate chapter 4 and 5 and document the innards of PARI (entree,
83: pariFILE, bloc ...)
84:
85: 2 HTML version (pod ? SGML ? yodl ???)
86:
1.2 ! noro 87: *************************** MISCELLANEOUS ****************************
1.1 noro 88:
89: 5 write decent (specialized) benches
90:
91: 3 switch to autoconf
92:
1.2 ! noro 93: 3 use stat() instead of opendir() to check if a file is a directory.
! 94:
1.1 noro 95: *************************** ALGORITHMS ****************************
96:
97: Kernel:
98: =======
99: 5 check NaN in dbltor and related routines
100:
101: 4 benchmark / profile basic functions and see what needs to be done
102:
103: 4 finish t_REAL Karatsuba and diviiexact
104:
105: 4 inline level0 routines should operate on _limbs_, not on words.
106:
107: 3 FFT for basic types and polynomials (say in A[X], for A = Z, F_q, ...)
108:
109: 2 add support for different multiprecision kernels (a la LiDIA)
110:
111: Misc:
112: =====
113: 4 decent finite field package (remove all the nfxxxmodpr functions)
114:
1.2 ! noro 115: 4 rnfkummer (very slow)
1.1 noro 116:
117: 4 nfsubfields [use known subfields to discard blocs right away] (current uses
118: far too much memory)
119:
1.2 ! noro 120: 3 zetak is very inefficient and unable to handle most fields of degree > 8
1.1 noro 121:
122: 3 have quadclassunit return bnf structure
123:
124: 3 2-adic initell
125:
126: 3 p-adic ellztopoint
127:
1.2 ! noro 128: 0 graphics: allow FIG output (besides PostScript) [easier to edit!]
! 129: [ No: use pstoedit ]
! 130:
1.1 noro 131: *************************** LIBRARY DESIGN ****************************
132:
133: 4 a system of DEBUGLEVEL classes [e.g \g 5 "LLL" ] (such that the user can
134: easily define new ones)
135:
136: 4 allow generic functions to process and produce t_SMALL's
137:
138: 4 remove all dependences on types ordering [if (typ(x) < t_POL) ...]
139:
140: 3 remove global variables gpi, geuler: their precision is unpredictable
141: (at least as much as requested in last const[pi|euler](), possibly much
142: more). Explicit call to mp[pi|euler] should be required. Will break
143: existing code...
144:
145: 3 rename library functions following GP names
146:
147: 3 rewrite the generic functions (gadd/gmul/gdiv plus a couple of others) to
148: use (two-dimensional) table lookups instead of switches
149:
150: 3 introduce "special" types for objects which are really containers and
151: should be defined by a secondary type (e.g number fields, finite fields,
152: p-adic fields, elliptic curves, ...). Would keep list of types small
153: (and fast)
154:
155: 3 better representations for multivariate polynomials
156:
157: 3 type "element in" ([number|finite] field...), "point" on elliptic curve
158:
159: 3 find a way to deal (generically) with "integral object + its content"
160: Application (e.g): fractional ideals much more efficient.
161:
162: 2 "mute" variables for t_POLMOD. Should have Mod(x,x^2+1) == Mod(y,y^2+1).
163:
164: 2 have some header magic (transparently) prepend some prefix (e.g "pari_")
165: before all exported functions to prevent name conflicts. Build alias
166: files for debuggers
167:
168: *************************** GP DESIGN ****************************
169:
170: 5 remove limitation to 8 arguments for static functions (argvec[9])
171:
172: 4 use divide & conquer approach in string / integer conversions
173:
1.2 ! noro 174: 4 extend forprime(n=a,b,...) so that b can go over primelimit [cut [a,b]
! 175: in large intervals, sieve out multiple of small primes there, then use
! 176: isprime() on the rest]
1.1 noro 177:
178: 3 changevar with explicit (incomplete) permutation. E.g
179: changevar(p, [x,y], [a,b]) for x -> a, y -> b
180: add a flag to substitute in succession or in parallel (e.g if a involves y)
181:
182: 3 possibility to save and load a session (variables, functions, defaults)
183:
184: 3 a type t_FILE [current: stream re-opened/flushed/closed after every single
185: write(): disaster when one wants to write often to the same file]
186:
187: 3 add a possibility to increase the maximal recursion depth (need to
188: increase the GP process stack: use setrlimit(RLIMIT_STACK,) + fork)
189:
190: *************************** TOOLS ****************************
191:
192: 4 a script converting prototype to parser code (e.g GEN f(GEN,GEN) --> "GG")
193:
194: 3 a script to translate "legacy" GP code into something using GP2 function
195: names
196:
197: 3 write an analog of the 'echo' default which would print code as it is
198: executed, not as it is read
199:
1.2 ! noro 200: 2 write a GP scripts debugger
1.1 noro 201:
1.2 ! noro 202: 2 write a GP scripts profiler
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>