[SciPy-User] Fwd: f2py segfault

Dag Sverre Seljebotn dagss at student.matnat.uio.no
Mon Jan 18 10:56:42 EST 2010


Dag Sverre Seljebotn wrote:
> Juan wrote:
>> Hi, thanks for the advice. I did not notice that the integer division 
>> could be a
>> source for trouble. Now I changed all the routines. However, I still 
>> have the
>> same segmentation fault.
>>
>>
>> debug-capi:Python C/API function
>> mymod.sub0(state,ndim=shape(state,0),ntrajectories=shape(state,1))
>> debug-capi:double
>> state=:inoutput,required,array,dims(ndim|ndim,ntrajectories|ntrajectories) 
>>
>> debug-capi:int ndim=shape(state,0):input,optional,scalar
>> debug-capi:ndim=24
>> debug-capi:Checking `shape(state,0)==ndim'
>> debug-capi:int ntrajectories=shape(state,1):input,optional,scalar
>> debug-capi:ntrajectories=100
>> debug-capi:Checking `shape(state,1)==ntrajectories'
>> debug-capi:Fortran subroutine `sub0(state,&ndim,&ntrajectories)'
>> debug-capi:ndim=24
>> debug-capi:ntrajectories=100
>> debug-capi:Building return value.
>> debug-capi:Python C/API function mymod.sub0: successful.
>> debug-capi:Freeing memory.
>> debug-capi:Python C/API function
>> mymod.sub1(state,d_i,d_f,ndim=shape(state,0),ntrajectories=shape(state,1)) 
>>
>> debug-capi:double
>> state=:inoutput,required,array,dims(ndim|ndim,ntrajectories|ntrajectories) 
>>
>> Segmentation fault
>>
>> The working sub1 has two other arguments d_i and d_f which are real 
>> scalars, the
>> full signatures are:
>>
>>   subroutine sub0(state, Ndim, Ntrajectories)
>>     integer(I32), intent(IN) :: Ndim
>>     integer(I32), intent(IN) :: Ntrajectories
>>     real(R64), intent(INOUT), dimension(Ndim,Ntrajectories) :: state
>>     ...
>>   end subroutine sub0
>>
>>   subroutine sub1(state,d_i,d_f, Ndim,Ntrajectories)
>>     integer(4), intent(IN) :: Ndim
>>     integer(4), intent(IN) :: Ntrajectories
>>     real(8), intent(INOUT), dimension(Ndim, Ntrajectories) :: state
>>     real(8), intent(IN) :: d_i
>>     real(8), intent(IN) :: d_f
>>     print *, shape(state), Ndim, Ntrajectories
>>     ...
>>   end subroutine sub1
>>
>> and I am calling from my script as:
>>
>> import mymod
>> Ndim=24
>> Ntrajectories=10
>> di=0., df=10.
>> r= np.zeros((Ndim,Ntrajectories),dtype=np.float64, order='Fortran')
>>
>> mymod.sub0(r)
>> mymod.sub1(r, di, df)
>>
>> As it can be seen from the debug output, f2py is checking the 
>> arguments for sub0
>> but it segfault before checking the args in sub1 (with no very 
>> informative
>> messages).
>>
>> It may well be a problem related to theworkings of the routines but 
>> they work
>> when I use them in tests on pure fortran code. Additionally I get a 
>> very similar
>> error message if I call sub0 (mymod.sub0(r)) instead of sub1 
>> (mymod.sub1(r, di,
>> df)) the second time in the python script.
>>
>> Any ideas? Thanks again. Juan
>>   
> Did you say which Fortran compiler you were using? f2py makes some 
> blatant assumptions about the Fortran compiler which is nowhere in any 
> standard. If you don't use gfortran you may get problems.
>
> Dag Sverre
>
Actually, other compilers may work very well -- I just don't know 
myself, but know that that is a possible source of problems...

Dag Sverre




More information about the SciPy-User mailing list