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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top