[SciPy-dev] NumPy f2py GSOC project
Dag Sverre Seljebotn
dagss at student.matnat.uio.no
Fri Mar 27 05:02:06 EDT 2009
Dag Sverre Seljebotn wrote:
> David Cournapeau wrote:
>> If you are interested in working on scipy-related projects, something
>> which could help the transition is to replace C code by cython. This
>> would be particularly helpful in scipy - there are many modules which
>> are crufty and would benefit from code cleaning, but if you don't know
>> cython, maybe that's not something that interesting for you. Cython is
>> not difficult to use, though. scipy.signal comes to mind, to take
>> something where I could definitely help you - but there are other
>> modules as well, where other people would be more qualified
>> (scipy.ndimage, etc...). One module means that it would be easier for
>> you to work on, easier for use to help/coordinate, and at least in the
>> case of scipy.signal, there is definitely some new features which are
>> needed as well (new feature is generally more fun than code cleanup/bug
>> hunting). Of course, you should choose modules which interest you.
>
> If something like this is done, one idea I have for SciPy is quick
> Cython callbacks for solvers/integrators. Perhaps Lisandro would be
> interested in being Cython-side mentor? Though the main mentor would
> need to be from SciPy.
>
> People often write on the Cython list about code like this:
>
> def f(double x): return x*x
>
> some_scipy_function(f, 0, 10)
>
> The problem here is that a Python overhead is encurred on all function
> evaluations. What one could do is add a "Cython protocol" like this:
>
> cdef class DoubleFunction:
> cpdef double eval(double x): return 0
>
> Then inside SciPy core (psuedo-code):
>
> PyObject* some_scipy_function(...) {
> PyObject* callback = parse argument...
> ...
> if (callback is instance of DoubleFunction) {
> call using quick Cython dispatch
> } else {
> call using Python API
> }
> }
>
> Then in user code:
>
> cdef class MyFunc(DoubleFunction):
> cpdef double eval(double x): return x*x
>
> some_scipy_function(MyFunc(), 0, 10)
>
> Voila!, 50x speedup of solvers from Cython.
>
That is, for algorithms where one cannot use vectorized functions.
Integration would not benefit, but Newton's method would.
--
Dag Sverre
More information about the SciPy-Dev
mailing list