![](https://secure.gravatar.com/avatar/ed67aeb99f1f467f5c8bd8f23741b6ce.jpg?s=120&d=mm&r=g)
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
![](https://secure.gravatar.com/avatar/242ff9f31f6fd94d69a65573c45e04ac.jpg?s=120&d=mm&r=g)
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@gmail.com> wrote:
![](https://secure.gravatar.com/avatar/242ff9f31f6fd94d69a65573c45e04ac.jpg?s=120&d=mm&r=g)
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@gmail.com> wrote:
participants (2)
-
andy buzza
-
Aronne Merrelli