[SciPy-Dev] f2py, the fortran integer type, and npy_intp

Charles R Harris charlesr.harris@gmail....
Sat Jul 10 12:31:44 CDT 2010

I note that some c programs try to call f2py generated fortran interfaces
using the npy_intp type for the array dimension. There are two problems
here, first the prototype for the generated wrapper uses int causing
compiler warnings on a 64 bit os, and second, the fortran subroutines
themselves use integer types. So some questions. What precision are fortran
integers? Should we be using npy_intp for array dimensions at all? Is there
any transparent way to have 64 bit support?

Example code

(from scipy/interpolate/src/__fitpack.h)

void SPLEV(double*,int*,double*,int*,double*,double*,int*,int*,int*);

static char doc_spl_[] = " [y,ier] = _spl_(x,nu,t,c,k,e)";
static PyObject *fitpack_spl_(PyObject *dummy, PyObject *args)
    int n, nu, ier, k, e=0;
    npy_intp m;


    if (nu) {
        SPLDER(t, &n, c, &k, &nu, x, y, &m, &e, wrk, &ier);
    else {
        SPLEV(t, &n, c, &k, x, y, &m, &e, &ier);


(from scipy/interpolate/src/fitpack.pyf

     subroutine splev(t,n,c,k,x,y,m,e,ier)
       ! y = splev(t,c,k,x,[e])
       real*8 dimension(n),intent(in) :: t
       integer intent(hide),depend(t) :: n=len(t)
       real*8 dimension(n),depend(n,k),check(len(c)==n),intent(in) :: c
       integer :: k
       real*8 dimension(m),intent(in) :: x
       real*8 dimension(m),depend(m),intent(out) :: y
       integer intent(hide),depend(x) :: m=len(x)
       integer check(0<=e && e<=2) :: e=0
       integer intent(hide) :: ier
     end subroutine splev

(from scipy/interpolate/fitpack/splev.f)

      subroutine splev(t,n,c,k,x,y,m,e,ier)


c  ..scalar arguments..
      integer n, k, m, e, ier


Note also that the checks generated by f2py -- and they are generated --
don't seem to work.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.scipy.org/pipermail/scipy-dev/attachments/20100710/fdf0e828/attachment.html 

More information about the SciPy-Dev mailing list