Problema al utilizar f2py
Pregunta
Tengo algunas rutinas escritas en FORTRAN que me gustaría usar en mi código Python. Una búsqueda en la red rápida me informó acerca f2py, y yo decidimos probarlo. Con
f2py -c numericalMethods.f -m numericalMethods
Parece que funciona durante un tiempo hasta que una gran cantidad de errores se desovar durante la conversión. Cualquier idea de por qué el siguiente fragmento de código no funciona con f2py?
SUBROUTINE n_bezier(t, nx2, BezX, BezY)
PARAMETER (N_SEG=130)
PARAMETER (nmax=130)
DOUBLE PRECISION t(nmax)
DOUBLE PRECISION nx2(nmax)
DOUBLE PRECISION BezX(N_SEG), BezY(N_SEG)
DOUBLE PRECISION coeff(nmax)
INTEGER i, j
DOUBLE PRECISION r,fact
do i = 1, N_SEG
r = real(i) / real(N_SEG)
BezX(i) = 0
BezY(i) = 0
do j=1,nmax
coeff(j) = BICO(nmax,j) *
. (1-r)**(nmax-j) * r**j
print*, 'coeff for j= ', j, ' --> ', coeff(j)
if(coeff(j).ne.0) then
BezX(i) = BezX(i) + coeff(j)*t(j)
BezY(i) = BezY(i) + coeff(j)*nx2(j)
endif
enddo
enddo
END
function fact(n)
INTEGER n, p
DOUBLE PRECISION fact
p = 1
do i = 1, n
p = p * i
end do
fact = p
end
FUNCTION BICO(N,K)
BICO=ANINT(EXP(FACTLN(N)-FACTLN(K)-FACTLN(N-K)))
RETURN
END
FUNCTION FACTLN(N)
DIMENSION A(100)
DATA A/100*-1./
IF (N.LT.0) PAUSE 'negative factorial'
IF (N.LE.99) THEN
IF (A(N+1).LT.0.) A(N+1)=GAMMLN(N+1.)
FACTLN=A(N+1)
ELSE
FACTLN=GAMMLN(N+1.)
ENDIF
RETURN
END
FUNCTION GAMMLN(XX)
REAL*8 COF(6),STP,HALF,ONE,FPF,X,TMP,SER
DATA COF,STP/76.18009173D0,-86.50532033D0,24.01409822D0,
. -1.231739516D0,.120858003D-2,-.536382D-5,2.50662827465D0/
DATA HALF,ONE,FPF/0.5D0,1.0D0,5.5D0/
X=XX-ONE
TMP=X+FPF
TMP=(X+HALF)*LOG(TMP)-TMP
SER=ONE
DO 11 J=1,6
X=X+ONE
SER=SER+COF(J)/X
11 CONTINUE
GAMMLN=TMP+LOG(STP*SER)
RETURN
END
EDIT: Aquí es el archivo de registro que contiene los errores
Solución
Poner mi comentario de que finalmente se resolvió el problema en una respuesta:
Siguiendo un consejo encontrado en la red https: // cd34.com/blog/programming/python/mysql-python-and-snow-leopard -> comentario 37, que sustituyó a la carpeta de 10,4 por 10,5 el SDK. Y el error no es más stdarg.h
. No muy limpio y ortodoxa, pero parece que funciona. El archivo .so se crea ahora! Gracias por la ayuda de todos.