Annotation of OpenXM_contrib/pari/TODO, Revision 1.1
1.1 ! maekawa 1: For PARI/GP version 2.0.17
! 2:
! 3: This file lists the things that ought to be implemented / fixed. It is
! 4: hopelessly incomplete right now, but it's a start. Most items require major
! 5: work, and may not be that desireable after all. If you intend to work on
! 6: any of these things, have a look at CVS.DOC and drop an email to pari-dev.
! 7:
! 8: Priority classification (first column): [subjective and debatable!]
! 9: 5 as soon as possible
! 10: 4 should be done
! 11: 3 nice to have
! 12: 2 maybe not
! 13: 1 probably not
! 14: - unclassified
! 15:
! 16: *************************** DOCUMENTATION ****************************
! 17:
! 18: 5 complete/update the tutorial (esp. section 11 and 12)
! 19:
! 20: 4 add examples for all functions in Chapter 3
! 21:
! 22: 4 separate chapter 4 and 5 and document the innards of PARI (entree,
! 23: pariFILE, bloc ...)
! 24:
! 25: 3 clean up gphelp / TeX macros
! 26:
! 27: 2 HTML version (pod ? SGML ? yodl ???)
! 28:
! 29: *************************** BUGS ****************************
! 30:
! 31: - sum(i=1,3000, exp(-i^2)) --> overflow in R*R
! 32: The "negligible" terms should be neglegted, not overflow because of the
! 33: way the computation is done. Tough to correct, even with a way to trap
! 34: exceptions
! 35:
! 36: 5 nfgaloisconj still misses some conjugates. Symptom: try it on
! 37: polcompositum(quadpoly(11321), x^15-3*x^14-46*x^13+69*x^12+794*x^11-50*x^10-5226*x^9-4559*x^8+9682*x^7+15656*x^6+3342*x^5-5950*x^4-4386*x^3-1136*x^2-100*x+1)
! 38: [Hilbert class field extension]
! 39:
! 40: 5 silent overflows in codeword-handling macros: O(2^50000) --> O(2^-15535)
! 41:
! 42: 5 some doubles can overflow in rootpol.c, should use t_REAL everywhere
! 43: ? polroots(x^3 + 2^1024*x + 1)
! 44: *** underflow or overflow in a R->dbl conversion
! 45:
! 46: 4 gcmp is not transitive: [] == 0, [0] == 0, but [0] != []
! 47:
! 48: 4 mateigen([1,1;1,2]) won't succeed at default precision (28 digits).
! 49: Should use iterative methods.
! 50:
! 51: 3 polgalois should handle precision problems. Symptom: applied to
! 52: polzagier(11,0)/polzagier(1,0), gives wrong result with 38 digits
! 53:
! 54: 3 after allocatemem() / default(parisize, ...), the rest of the command is
! 55: discarded (ends by a longjmp).
! 56:
! 57: 3 recursive plot easily fooled. One could split intervals in 3 + make sure
! 58: size of neighbouring intervals don't differ too much.
! 59:
! 60: *************************** DEVELOPMENT ****************************
! 61:
! 62: 5 write decent (specialized) benches
! 63:
! 64: 3 switch to autoconf
! 65:
! 66: *************************** ALGORITHMS ****************************
! 67:
! 68: Kernel:
! 69: =======
! 70: 5 check NaN in dbltor and related routines
! 71:
! 72: 4 benchmark / profile basic functions and see what needs to be done
! 73:
! 74: 4 finish t_REAL Karatsuba and diviiexact
! 75:
! 76: 4 inline level0 routines should operate on _limbs_, not on words.
! 77:
! 78: 3 FFT for basic types and polynomials (say in A[X], for A = Z, F_q, ...)
! 79:
! 80: 2 add support for different multiprecision kernels (a la LiDIA)
! 81:
! 82: Misc:
! 83: =====
! 84: 5 (easy) modify invmod to get Jebelean extended gcd
! 85:
! 86: 4 decent finite field package (remove all the nfxxxmodpr functions)
! 87:
! 88: 4 round 4 (too slow, use modular techniques)
! 89:
! 90: 4 rnfkummer (doesn't work)
! 91:
! 92: 4 nfsubfields [use known subfields to discard blocs right away] (current uses
! 93: far too much memory)
! 94:
! 95: 4 LLL over R (not stable). Clean up bibli1.c (remove duplicate code)
! 96:
! 97: 4 rethink the element_mul type of functions: multiplication table is O(n^3),
! 98: polynomial multiplication + remainder is O(n^2) [+ can use Karatsuba/FFT]
! 99:
! 100: 3 have quadclassunit return bnf structure
! 101:
! 102: 3 have quadclassunit treat reliably non fundamental discriminants (at
! 103: least, make relevant checks before entering infinite loops)
! 104:
! 105: 3 2-adic initell
! 106:
! 107: *************************** LIBRARY DESIGN ****************************
! 108:
! 109: 4 a way to trap PARI errors, esp. all kinds of overflows (exponent, degree,
! 110: stack, ...). Something like:
! 111: trap(errpile, &stack_overflow_handler)
! 112:
! 113: 4 allow generic functions to process and produce t_SMALL's
! 114:
! 115: 4 remove all dependences on types ordering [if (typ(x) < t_POL) ...]
! 116:
! 117: 3 integrate Ilya's code for yet bigger prime tables. Unify functions using
! 118: diffptr
! 119:
! 120: 3 remove global variables gpi, geuler: their precision is unpredictable
! 121: (at least as much as requested in last const[pi|euler](), possibly much more).
! 122: Explicit call to mp[pi|euler] should be required. Will break existing code...
! 123:
! 124: 3 rename library functions following GP names
! 125:
! 126: 3 rewrite the generic functions (gadd/gmul/gdiv plus a couple of others) to
! 127: use (two-dimensional) table lookups instead of switches
! 128:
! 129: 3 introduce "special" types for objects which are really containers and
! 130: should be defined by a secondary type (e.g number fields, finite fields,
! 131: p-adic fields, elliptic curves, ...). Would keep list of types small (and fast)
! 132:
! 133: 3 better representations for multivariate polynomials
! 134:
! 135: 3 type "element in" ([number|finite] field...), "point" on elliptic curve
! 136:
! 137: 3 find a way to deal (generically) with "integral object + its content"
! 138: Application (e.g): fractional ideals much more efficient.
! 139:
! 140: 2 "mute" variables for t_POLMOD. Should have Mod(x,x^2+1) == Mod(y,y^2+1).
! 141:
! 142: 2 have some header magic (transparently) prepend some prefix (e.g "pari_")
! 143: before all exported functions to prevent name conflicts. Build alias files
! 144: for debuggers
! 145:
! 146: 2 should use vsnprintf instead of vsprintf in pariputsf. Requires GNU libio.
! 147: [paripusf uses static buffer which should be ok for "most" purposes]
! 148:
! 149: *************************** GP DESIGN ****************************
! 150:
! 151: 5 remove limitation to 8 arguments for static functions (argvec[9])
! 152:
! 153: 4 use divide & conquer approach in string / integer conversions
! 154:
! 155: 4 a way to trap PARI errors (esp. stack overflow). Something like:
! 156: trap(errpile, "GP_command_to_be_executed_when_stack_overflows")
! 157:
! 158: 3 split matrix_block in 2 parts: exploration + assignment. Would allow
! 159: Math::Pari to use complicated x[][][][] constructs
! 160:
! 161: 3 changevar with explicit (incomplete) permutation. E.g
! 162: changevar(p, [x,y], [a,b]) for x -> a, y -> b
! 163: add a flag to substitute in succession or in parallel (e.g if a involves y)
! 164:
! 165: 3 possibility to save and load a session (variables, functions, defaults)
! 166:
! 167: 3 a type t_FILE [current: stream re-opened/flushed/closed after every single
! 168: write(): disaster when one wants to write often to the same file]
! 169:
! 170: *************************** TOOLS ****************************
! 171:
! 172: 4 a script converting prototype to parser code (e.g GEN f(GEN,GEN) --> "GG")
! 173:
! 174: 3 a script to translate "legacy" GP code into something using GP2 function
! 175: names
! 176:
! 177: 3 write a gp-to-C compiler (adding #defines in anal.c + modifying the
! 178: table of functions in init.c, etc, to include the explicit function name).
! 179: Should be easy: the code is mostly there.
! 180:
! 181: 2 write a GP scripts debugger (cf above)
! 182:
! 183: 2 write a GP scripts profiler (cf above)
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>