[Matrix-SIG] Needed extensions to Numerical Python to make a complete system.

Travis Oliphant Oliphant.Travis@mayo.edu
Tue, 6 Apr 1999 01:59:03 -0500

Over the next two years while I'm writing my thesis I plan on turning
Numerical Python into something that will let me replace MATLAB forever.
Hopefully with help it will become a system that will let others
also use this system instead of another proprietary and closed
interactive environment.

This has been talked about before, but apparently nobody has a lot of time
to really make it happen.  I really don't either but it's important
enough to me that I'm going to make sure it does happen.  In other words
I'm pretty committed.

I've been hesitant to actually claim that I'm going to do this since I
didn't know what kinds of tools were out there and I'm not a big expert on
the biggest hole in the sytem and that is a graphical output + User
interface builder combination that could replace MATLAB's featureful
design (What's available now is useful but the closest thing to what I
envision is Konrad's TkPlotCanvas and David's SNOW system -- something
to allow you to build a user interface to a graphically-interactive

I've also not formally volunteered to head up a project like this because
I didn't know what kind of response it would receive.  After several
months of wishful-discussion on this topic, I have a pretty good idea of
how much coordination would be involved.  My idea is to simply do it and
let anyone interested know what I'm doing so they can offer welcome
suggestions or offer even more welcome contributions.  But, I'm not going
to let philosophical debates about what we should do deter me from
actually doing something.  I think the debates are useful and I've learned
from participating in them.  I will try to make the packages as
Python-neutral as possible, but I won't sacrifice ease of use for that

As far as licensing goes, any wrappers to public domain code I produce
will be LGPL and any code I write will be GPL or LGPL.  I know this will
make some unhappy, but the reasons I've heard not to use variants of the
GPL have not been compelling for me given what I'm giving up by not using
the (L)GPL.  Of course if more people contribute to the code base then
those who contribute will have to discuss this issue with me.

What I envision is something like OCTAVE except built on a general scripting
language like Python (which is why I'm even bothering to
do this at all and not just using OCTAVE).  For this to happen I have made
a list of general areas that need to be addressed.  The code for most of
these items already exits.  What we need is Python interfaces.  These can
be generated by SWIG --- but only provided it does not produce a "clunky"
interface.  This may mean python code around the SWIG calls or else
hand-crafted C-wrappers.  

Areas for which I (we) need functions in my preference order.  I'm open
to the question of whether this should be in compiled code or in Python
code. Right now I'm leaning toward compiled code (since the code already
exists for the most part.)

1) root-finding of systems of non-linear equations
2) sparse matrices and methods (iterative)
3) iterative methods in linear algebra (conjugate gradient, etc.)
4) ordinary differential equations
5) optimization 
6) integration routines
7) signal/image processing (filter design, math morphology, volume

8) Plotting + User interface building  (I know only a little here--just
minimal features I want in the end product.  David's Snow package
looks like it's headed in the right direction.)

9) Parallel solvers.

I'm keeping a list.  This is pretty generic so far which is what I'm
after at this point.  Code that is used in a variety of situations and
could be used as building blocks to solve larger problems. If you have
ideas send them. I'll be working on wrapping root finding code for the
next little while as it's what I need right now.   If you'd like to break
off a chunk let me know and I'll coordinate your efforts.  

If you are sitting on code that is involved in any of the above areas 
and would like it to be a part of a general package then send it my way or
post it here and it can become part of the package.

The time line I envision right now is about two years if I'm the only one
who works on it.  With help that could become significantly lower.  

Best to all of your endeavors.

Travis Oliphant