[f2py] failed to create intent(cache|hide)|optional array-- must have defined dimensions but got (0, )

"Andreas H." <[email protected]> Sat, 10 Mar 2012 20:06:17 +0100
Newsgroups gmane.comp.python.f2py.user
Message-ID <[email protected]>
Hello,

I'm trying to wrap the Fortran function sphere.f from FITPACK_. However,
when I try to call the resulting function like this::

   spherfit_smth(theta,phi,r,w=None,s=None,eps=None)

I get the following error:

   ValueError: failed to create intent(cache|hide)|optional array-- must
have defined dimensions but got (0,)

Can someone point me to what's wrong? I cannot find my mistake ...

Cheers,
Andreas.

.. _FITPACK: http://www.netlib.org/dierckx/



     subroutine
spherfit_smth(iopt,m,teta,phi,r,w,s,ntest,npest,eps,nt,tt,np,&
          tp,c,fp,wrk1,lwrk1,wrk2,lwrk2,iwrk,kwrk,ier)
       !  nt,tt,np,tp,c,fp,ier = spherfit_smth(teta,phi,r,[w,s,eps])

       fortranname sphere

       integer intent(hide) :: iopt=0
       integer intent(hide),depend(teta),check(m>=2) :: m=len(teta)
       real*8 dimension(m) :: teta
       real*8 dimension(m),depend(m),check(len(phi)==m) :: phi
       real*8 dimension(m),depend(m),check(len(r)==m) :: r
       real*8 optional,dimension(m),depend(m),check(len(w)==m) :: w = 1.0
       real*8 optional,check(0.0<=s),depend(m) :: s = m
       integer intent(hide),depend(m),check(ntest>=8) :: ntest = 8+sqrt(m/2)
       integer intent(hide),depend(m),check(npest>=8) :: npest = 8+sqrt(m/2)
       real*8 optional,check(0.0<eps && eps<1.0) :: eps = 1e-16
       integer intent(out) :: nt
       real*8 dimension(nt),intent(out) :: tt
       integer intent(out) :: np
       real*8 dimension(np),intent(out) :: tp
       real*8 dimension((ntest-4)*(npest-4)),
            depend(ntest,npest),intent(out) :: c
       real*8 intent(out) :: fp
       real*8 dimension(lwrk1),intent(cache,hide),depend(lwrk1) :: wrk1
       integer intent(hide),depend(m,ntest,npest) &
            :: lwrk1=calc_spherfit_lwrk1(m,ntest,npest)
       real*8 dimension(lwrk2),intent(cache,hide),depend(lwrk2) :: wrk2
       integer intent(hide),depend(ntest,npest) &
            :: lwrk2=calc_spherfit_lwrk2(ntest,npest)
       integer dimension(kwrk),depend(kwrk),intent(cache,hide) :: iwrk
       integer intent(hide),depend(m,ntest,npest) &
            :: kwrk=m+(ntest-7)*(npest-7)
       integer intent(out) :: ier
     end subroutine spherfit_smth