[SciPy-dev] Cython, f2py and GSoC
Dag Sverre Seljebotn
Thu Mar 26 09:45:13 CDT 2009
David Huard wrote:
> On Wed, Mar 25, 2009 at 6:23 PM, Dag Sverre Seljebotn
> <email@example.com <mailto:firstname.lastname@example.org>> wrote:
> This is in preparation for a GSoC project application; Kurt Smith has
> approached me about doing a project on Fortran integration in Cython
> with myself as mentor.
> Although we started out with a Fortran/Cython perspective, we think
> that this potentially affects the SciPy community and f2py as well.
> The main issues:
> 1) f2py doesn't work that well for Cython, as it requires Python
> packing/unpacking of arguments. A more direct call approach is needed.
> 2) f2py and Cython has a certain overlap in their implementation
> generate Python extension modules), and need to tackle many of the
> issues both now and especially in the future
> Could we solve this so that in getting Fortran/Cython integration, we
> also set up a development path for further development of f2py with
> Cython as a backend?
> Below is a scetch of our current plan to give you an idea. More full
> specifications etc. will come later and we can have any
> discussions then.
> 1) Add a Cython syntax and API for passing acquired PEP-3118
> buffers/NumPy arrays to external C functions (i.e. as a struct
> with the
> necesarry information (pointer, shape, strides)). This simply means
> defining a syntax for passing information that Cython already has
> to an
> external C function.
> 2) Create a new tool which uses the parser part of f2py (with any
> necesarry improvements) but adds a different backend which
> generates a C
> interface to the given Fortran module, along with a Cython pxd
> file for
> it. (Adding a C .h file target, to get "f2c" functionality, would be
> This will be done using the Fortran 2003 C bindings. So a .f90 file is
> generated which compiles to a C interface to the library. Array
> parameters will be passed as the PEP-3118-like structs we define
> in 1),
> and so the functions will be callable directly with e.g. NumPy arrays
> from Cython. Copy-in/out might be necesarry for Fortran to be able to
> work with the arrays, if so this will happen in the Fortran wrapper
> generated by this new tool.
> Do you plan to write a modified copy of the entire subroutine or just
> a wrapper subroutine accepting C types, which then calls the original
> function ?
Though we could always skip wrapping of functions which already are
declared BIND(C), that's actually a nice idea. This would make it
possible to write a wrapper manually and skip this overhead in extreme
situations (where the Fortran compiler also cannot inline the call),
while still having Python bindings generated.
More information about the Scipy-dev