Blame TODO

Packit 67cb25
# -*- org -*-
Packit 67cb25
#+TITLE: GSL TODO File
Packit 67cb25
Packit 67cb25
* Main Todo Items
Packit 67cb25
Packit 67cb25
We are looking for volunteers to do the following tasks.
Packit 67cb25
Consult the TODO files in each directory first for specific
Packit 67cb25
requirements.
Packit 67cb25
Packit 67cb25
** Document LQ linalg functions
Packit 67cb25
** 1st-line support on the mailing lists (e.g. checking that bugs are
Packit 67cb25
reproducible, and that all relevant information is supplied)
Packit 67cb25
Packit 67cb25
** Modified Ei(x) function (see specfunc/TODO)
Packit 67cb25
Packit 67cb25
** Quasi-random number distributions 
Packit 67cb25
Packit 67cb25
** ODE algorithms from RKSUITE
Packit 67cb25
Packit 67cb25
** Incomplete Fermi-Dirac functions
Packit 67cb25
Packit 67cb25
** Spheroidal wave functions
Packit 67cb25
Packit 67cb25
** Weierstrass elliptic functions
Packit 67cb25
Packit 67cb25
** Complex Bessel Functions
Packit 67cb25
Packit 67cb25
** Additional volunteers with access to a good library to get copies of
Packit 67cb25
papers for other developers.
Packit 67cb25
Packit 67cb25
** Estimates of condition numbers for linear solvers
Packit 67cb25
Packit 67cb25
** Sine and Cosine Transforms from FFTPACK  (Alok Singhal <as8ca@virginia.edu>)
Packit 67cb25
Packit 67cb25
** Cubature, e.g as provided by Cubpack. (Gert Van den Eynde
Packit 67cb25
<gvdeynde@sckcen.be> ?)
Packit 67cb25
Packit 67cb25
** Fresnel Integrals ("Juergen J. Zach" <jjzach@pacific.mps.ohio-state.edu>)
Packit 67cb25
Packit 67cb25
** Cumulative Distribution functions for discrete random distributions
Packit 67cb25
Packit 67cb25
* Changes for Release 2.0
Packit 67cb25
Packit 67cb25
Break binary compatibility, but keep source compatibility.
Packit 67cb25
Packit 67cb25
** Add a 'void *' to all workspaces, to allow for future changes.
Packit 67cb25
Packit 67cb25
** Disable deprecated functions
Packit 67cb25
Packit 67cb25
** Fix up the workspace_alloc functions so they have consistent names
Packit 67cb25
  (add functions where needed, don't remove)
Packit 67cb25
Packit 67cb25
** Standardize function names, in particular VERB vs NOUN (e.g. _invert
Packit 67cb25
vs _inverse). Also adopt a convection for functions which can operate
Packit 67cb25
in place vs use of workspace (e.g linalg_solve functions).
Packit 67cb25
Packit 67cb25
** gsl_roots doesn't store function value, so testing the residual requires function to be recomputed
Packit 67cb25
Generally all the iterative routines should follow a consistent approach
Packit 67cb25
to outputting everything that is necessary for the next iteration 
Packit 67cb25
Packit 67cb25
** gsl_roots - consider having two returns from solvers - GSL_SUCCESS
Packit 67cb25
if a root has been found or GSL_CONTINUE if further iterations may
Packit 67cb25
be needed.
Packit 67cb25
Packit 67cb25
** mathieu functions - bring functional interfaces into line with GSL
Packit 67cb25
conventions for special functions.
Packit 67cb25
Packit 67cb25
** rewriting the spherical Bessel routines (there are
Packit 67cb25
around 3 separate bug reports for these)
Packit 67cb25
Packit 67cb25
** the nonlinear least squares Levenberg-Marquardt solver should be 
Packit 67cb25
rewritten from scratch - the current version is filled with goto 
Packit 67cb25
statements, and while its supposed to be based on MINPACK, I've found 
Packit 67cb25
numerous examples where GSL fails to converge when MINPACK succeeds, so 
Packit 67cb25
something was not implemented correctly.
Packit 67cb25
Packit 67cb25
** import 2D interpolation code; 3d or nd linear interpolation?
Packit 67cb25
Packit 67cb25
* Other tasks
Packit 67cb25
Packit 67cb25
** Remove use of long double internally, e.g. as an accumulator in
Packit 67cb25
loops. It introduces variation between platforms which is undesirable.
Packit 67cb25
It should be replaced with a preprocessor variable ACC_DOUBLE so
Packit 67cb25
that the user can compile the library with the old long double
Packit 67cb25
behavior if desired.
Packit 67cb25
Packit 67cb25
** Use BLAS internally as much as possible, to take advantage of 
Packit 67cb25
speed improvements on large-scale systems.  There may be some
Packit 67cb25
instances where a simple for() loop is preferred since there's a
Packit 67cb25
function-call overhead in calling BLAS routines.
Packit 67cb25
Packit 67cb25
** More tests. We should (at least) have a test for every error
Packit 67cb25
condition.  Use GCOV to improve coverage.
Packit 67cb25
Packit 67cb25
** Annotate the header files with GAMS classifications.  See if they
Packit 67cb25
can be included in the GAMs website.
Packit 67cb25
Packit 67cb25
** Make the return value EINVAL vs EDOM consistent for invalid
Packit 67cb25
parameters. EDOM means a domain error (i.e. float or mathematically
Packit 67cb25
undefined), EINVAL means invalid (i.e. zero length)
Packit 67cb25
Packit 67cb25
** Change return 0 to return GSL_SUCCESS, and return -1 to GSL_FAILURE
Packit 67cb25
throughout, where appropriate. Similarly change any if(...) checks of
Packit 67cb25
return values to use == GSL_SUCCESS, if they are checking for zero.
Packit 67cb25
N.B. want to be careful about accidentally omitting error conditions
Packit 67cb25
if using something like == GSL_FAILURE when function returns a
Packit 67cb25
different error code.
Packit 67cb25
Packit 67cb25
** Make sure that all #defines are fully wrapped in ()'s, especially
Packit 67cb25
the outermost layer which may have been missed. Everything should be
Packit 67cb25
of the form #define foo(x) (....) so there is no possibility of bad
Packit 67cb25
parsing.  Need a perl script to check this!
Packit 67cb25
Packit 67cb25
** Eliminate use of volatile where it has been used to force rounding
Packit 67cb25
(integration/). It is better to write the code to avoid dependence on
Packit 67cb25
rounding.
Packit 67cb25
Packit 67cb25
** Constant objects (like gsl_roots_fsolver_brent) ought to have
Packit 67cb25
constant pointers (const gsl_roots_fsolver_type * const
Packit 67cb25
gsl_roots_fsolver_brent)
Packit 67cb25
Packit 67cb25
** PyGSL -- python bindings for GSL, see http://pygsl.sf.net/
Packit 67cb25
Packit 67cb25
Packit 67cb25
** From Goose
Packit 67cb25
        ASCII import
Packit 67cb25
        Categorical Sets
Packit 67cb25
        Kernel Density Estimation
Packit 67cb25
        Shampine Polynomial Regression
Packit 67cb25
        Bootstrapping, Jacknife
Packit 67cb25
        Descriptive: Range, Trimmed Mean, Winsorized Mean, Moments
Packit 67cb25
                Harmonic mean, RMS, Durbin-Watson, AR1 independence
Packit 67cb25
                Autocorr, Autocorr_z, Cramer vos Mises, Anderson-Darling
Packit 67cb25
                Spearman-rho, Kendall-tau, EDF_D_both EDF_D_plus,
Packit 67cb25
                EDF_D_minus, EDF_D, EDF_kuiper_V, pooled mean
Packit 67cb25
                pooled var, 
Packit 67cb25
        Tests: kolmogorov_smirnov
Packit 67cb25
        Moving average, Exponential moving average
Packit 67cb25
        wilcoxon_statistic, wilcoxon_noties_cdf, wilcoxon_general_cdf
Packit 67cb25
        Cochran Q test, KruskalWallis, McNemar, spearman_Rocc
Packit 67cb25
        
Packit 67cb25
Packit 67cb25
* Wishlist or vague ideas
Packit 67cb25
Packit 67cb25
** An example chapter on how to link GSL code with GNU Guile, and Python
Packit 67cb25
Packit 67cb25
We could also provide g-wrap wrappers for guile, or swig.i files and
Packit 67cb25
swig demos so that swig can be run more easily.
Packit 67cb25
Packit 67cb25
** Provide an interface to LAPACK, as for BLAS?  Clarify the license
Packit 67cb25
for LAPACK first, their web page is vague on what the license terms
Packit 67cb25
are.  Some parts of LAPACK are included in octave so maybe the Octave
Packit 67cb25
maintainers will know more.
Packit 67cb25
Packit 67cb25
** Public domain or free texts which could be distributed with GSL:
Packit 67cb25
     
Packit 67cb25
Abramowitz and Stegun, "Handbook of Mathematical Functions" appears to
Packit 67cb25
be public domain.
Packit 67cb25
Packit 67cb25
SEPT/02: See online images at http://members.fortunecity.com/aands/
Packit 67cb25
Packit 67cb25
Devroye's book on Random Variates (1st ed) is/was in the public
Packit 67cb25
domain.  
Packit 67cb25
Packit 67cb25
Packit 67cb25
** Investigate complex support in GCC: Operations like sin(z) silently
Packit 67cb25
convert argument to double, losing the imaginary part. This is
Packit 67cb25
mentioned in CEPHES documentation in 1998 with a patch to generate a
Packit 67cb25
warning.  What happened? (Does it now work with gcc-3.0?)
Packit 67cb25
Packit 67cb25
** Go through the matrix and vector functions systematically and decide
Packit 67cb25
what should be provided outside of BLAS.
Packit 67cb25
Packit 67cb25
** Change from gsl-ref.texi to gsl.texi since it is the main file?
Packit 67cb25
Also, put under dir section "Math" (which seems to be the appropriate
Packit 67cb25
one for Debian, as Octave, Gnuplot etc are in that)
Packit 67cb25
Packit 67cb25
** Remove error stream stuff?? It is hardly used.
Packit 67cb25
Packit 67cb25
** Extend histogram routines as described in recent discussion
Packit 67cb25
Packit 67cb25
** Check that there are no conflicts when linking with Lapack. CBLAS, ATLAS
Packit 67cb25
Packit 67cb25
** Make a sorted datatype for the median and quantile functions so that
Packit 67cb25
the user can be prevented from passing unsorted data, which is not
Packit 67cb25
checked for.
Packit 67cb25
Packit 67cb25
** Optimization/error for dest == src as appropriate
Packit 67cb25
Packit 67cb25
** Provide a run-time expression evaluator for interactive programs
Packit 67cb25
where the user can provide formulas as strings.  Keith Briggs
Packit 67cb25
recommended formulc2.22 which he had found useful in several projects.
Packit 67cb25
http://www.cs.brandeis.edu/~hhelf/formu/formulc.html. It is LGPL.
Packit 67cb25
Alternatively, the source code for GDB contains yacc grammars and
Packit 67cb25
evaluators for expressions in various languages, so that would be
Packit 67cb25
another way to go.  It would have the advantage of following the
Packit 67cb25
language standards.  If I was going to write something from scratch I
Packit 67cb25
would think about using that as a base, as the full set of operators
Packit 67cb25
are already included with the correct precedence rules. Being able to
Packit 67cb25
evaluate C and Fortran expressions could be useful.
Packit 67cb25
Packit 67cb25
** We should have an index mapping type object which handles elements
Packit 67cb25
of size_t for vectors and matrices, or at least vectors and matrices
Packit 67cb25
of size_t in addition to long, int, etc.
Packit 67cb25
Packit 67cb25
Packit 67cb25