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