[Numpy-discussion] f2py NotImplementedError
Aronne Merrelli
aronne.merrelli at gmail.com
Tue Jul 26 09:19:02 EDT 2016
Hello Andy,
I'm not an expert on f2py, but I've used it in a few cases. I can
recreate a NotImplementedError by copying your commands. The problem
is that you are using -l (lower case L), which I think is supposed to
specify the library name, not a path. The NotImplementedError is not
really what the code should produce in this case, but I don't know
what is going on there.
I think you normally want to use the typical flags, like "-lfoo
-L/path/to/foo" or similar. In any case for this simple example, you
don't really need to use those flags. I can get your code to compile
with this command (I have to specify fcompiler here, otherwise it uses
ifort on my system):
$ gfortran -fPIC -c othermodule.f90 -o othermodule.o
$ f2py --fcompiler=gfortran -m mainmodule -c mainmodule.f90 othermodule.o
This compiles, but then the shared object has no functions in it when
you import it in python. I think that's because your main file is a
program, and I do not think f2py wraps fortran programs, rather only
subroutines/functions. If you change the mainmodule file slightly,
replacing the 'program mains' with:
module mains
use moderator
contains
subroutine foo
...
end subroutine foo
end module mains
Compile it similarly, then it looks to work:
$ python -c "import mainmodule ; mainmodule.mains.foo()"
here's your 1 st number: 2.7182817459106445
here's your 2 nd number: 3.6945281028747559
here's your 3 rd number: 3.3475894927978516
here's your 4 th number: 2.2749228477478027
here's your 5 th number: 1.2367763519287109
here's your 6 th number: 0.56031775474548340
here's your 7 th number: 0.21758595108985901
here's your 8 th number: 7.3932491242885590E-002
here's your 9 th number: 2.2329926490783691E-002
here's your 10 th number: 6.0699032619595528E-003
On Sun, Jul 24, 2016 at 2:54 PM, andy buzza <asbuzza at gmail.com> wrote:
> Hello all,
>
> I have been trying to compile a relatively simple pair of Fortran files, one
> referencing a subroutine from another file (mainmodule.f90 references
> othermodule.f90). I have been able to compile them using a Fortran
> compiler, but receive a NotImplementedError when using f2py.
>
> Steps I use for f2py:
>
> $gfortran -shared -o othermodule.so othermodule.f90 -fPIC
>
> $f2py -c -l/path/othermodule -m mainmodule mainmodule.f90
>
> I am running this on linux and wasn't sure how to correct the error.
>
> othermodule.f90
>
> module moderator
>
> implicit none
> integer*1 :: i
> integer*8 :: fact,len
> real*8,dimension(:),allocatable :: ex
>
> contains
>
> subroutine submarine(ii,ff,exex)
>
> implicit none
> integer*1 :: ii
> integer*8 :: ff
> real*8 :: exex
>
> exex=exp(real(ii))/ff
>
> end subroutine submarine
>
> end module moderator
>
>
> mainmodule.f90
>
> program mains
>
> use moderator
>
> implicit none
>
> len=10
> allocate(ex(len))
> fact=1
> do i=1,len
> fact=fact*i
> call submarine(i,fact,ex(i))
> if (i==1) then
> print*,"here's your ",i,"st number: ",ex(i)
> elseif (i==2) then
> print*,"here's your ",i,"nd number: ",ex(i)
> elseif (i==3) then
> print*,"here's your ",i,"rd number: ",ex(i)
> else
> print*,"here's your ",i,"th number: ",ex(i)
> endif
> enddo
> deallocate(ex)
>
> end program
>
>
> Thanks for the help,
> Andy
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> https://mail.scipy.org/mailman/listinfo/numpy-discussion
>
More information about the NumPy-Discussion
mailing list