![](https://secure.gravatar.com/avatar/2a726b0de1ade0be11fb5bc5a383d71d.jpg?s=120&d=mm&r=g)
On Tue, February 26, 2008 12:01 pm, dmitrey wrote:
I have seen the pyf-files appearing from time to time, but now they are absent (in the directory where I have used f2py), and do not appear after f2py using.
As for commands, I have used f2py -c -m bvls bvls.f and f2py -c -m bvls bvls.f90 --fcompiler=gnu95
Ok, thanks for the info. In general, it is recommended to use a modified .pyf when wrapping Fortran functions with longish argument list that may contain output-type arguments. See f2py users guide for more information. Below follows the content of a .pyf file that I have modified to meet the docs of bvls.f (there are some room for improvements). Then I used the following command line f2py -c bvls.pyf bvls.f to build the bvls extension module. In test_bvls.py file I changed the bvls.bvls call to xf,w,istate,loopa = bvls.bvls(a,b,bl,bu) And, most importantly, set inf=100. Now I get the correct results: using bvls.f Type: float32 ; xf= [ 15. 15.] ; type(xf[0])= <type 'numpy.float64'> Type: float64 ; xf= [ 15. 15.] ; type(xf[0])= <type 'numpy.float64'> Type: float128 ; xf= [ 15. 15.] ; type(xf[0])= <type 'numpy.float64'> Btw, I believe that your approach of not using .pyf file would also worked when not using inf as an bound parameter - obviosly the underlying Fortran code is not designed to handle float infinities. HTH, Pearu ! -*- f90 -*- ! Note: the context of this file is case sensitive. !FILE: bvls.pyf python module bvls ! in interface ! in :bvls subroutine bvls(key,m,n,a,b,bl,bu,x,w,act,zz,istate,loopa) ! in :bvls:bvls.f integer :: key = 0 integer optional,check(shape(a,0)==m),depend(a) :: m=shape(a,0) integer optional,check(shape(a,1)==n),depend(a) :: n=shape(a,1) double precision dimension(m,n) :: a double precision dimension(m),depend(m) :: b double precision dimension(n),depend(n) :: bl double precision dimension(n),depend(n) :: bu double precision dimension(n),depend(n),intent(out) :: x double precision dimension(n),depend(n),intent(out) :: w double precision dimension(m,m + 2),depend(m), intent(cache), optional :: act double precision dimension(m),depend(m), intent(cache), optional :: zz integer dimension(n + 1),depend(n),intent(out) :: istate integer intent(out) :: loopa end subroutine bvls end interface end python module bvls ! This file was auto-generated with f2py (version:2_3744). ! See http://cens.ioc.ee/projects/f2py2e/