[SciPy-dev] Thoughts on weave improvements

Pat Miller pnmiller at pacbell.net
Fri Feb 8 13:38:00 CST 2002


I was talking with Eric a lot this week at Python 10
and we had some thoughts on further improvements to
the weave module.  One thing that I want to add is
to blend in some of the bytecode compiler work I
started under PyCOD (compile on demand) that
builds C++ accelerated extension functions from Python


def foo(a,b):
    return a+b+10

handle, fastFoo = pycod.compile(foo,[IntType,IntType])

This would write and wrap a C++ function of the form

long foo(long a, long b) {
    return a + b + 10;
}

and an interface function
PyObject* fooWrap(...) {
    ....
}

The compiler in PyCOD was set up sort of like weave.inline to cache
precompiled results (though Eric's scheme is much more robust).

As you can see, this had a somewhat different flavor than inline.
Whereas weave.inline inlined expressions, pyCOD accellerated functions
(given input types).

We did it because we had Python callbacks in C++ code we wanted
accellerated.  I think that these techniques are important to
bring to scipy or else many parts of it are only toys.

def f(x):
     <some hairy, expensive python code>

print integrate.quad(f,0,1)

It might be better if the integration routine, using its knowledge that
the argument to x must be a PyFloat (C++ double) could use a C++ 
accelerated function instead of slow callbacks to Python.  Not important
for a quick numeric integration, but crucial for using Python as a
true C/FORTRAN replacement.

Pat




More information about the Scipy-dev mailing list