Saltar al contenido

¿Para qué se usa f2py al construir una fuente numpy?

Bienvenido a nuestra comunidad, en este sitio vas a encontrar la resolución a lo que andabas buscando.

Solución:

Bien, después de investigar un poco, creo que he confirmado algunas de mis sospechas iniciales.

Primero:

Así que nada menos que f2py sí mismo utiliza Fortran.

Como mencioné en los comentarios, todos los archivos fuente de Fortran a los que se refiere el OP están en /test/ o /doc/ directorios, y por lo tanto sospecho que son para probar y documentar f2py (y numpy.distutilsque utiliza f2py). Un vistazo a algunos de los archivos fuente parece confirmar esta impresión. f2py en sí parece que está escrito en Python y C.

Miré en los módulos de álgebra lineal. Para LAPACK, hay un archivo make_lite.py que extrae solo las subrutinas necesarias de un árbol fuente de LAPACK y las convierte en C usando f2c

Esto me pareció extraño, ya que en realidad no tengo f2c instalado (o Plexque es otra biblioteca que parece ser requerida por make_lite.py). Decidí pegar una línea extra en main() para mostrar si make_lite.py en realidad se usa durante una instalación normal:

...
def main():

    # let's see if you're actually doing anything
    import subprocess; subprocess.call(['touch', '/tmp/hello_from_make_lite'])
...

Efectivamente, después de instalar numpy en un virtualenv limpio no hay hello_from_make_lite archivo en mi /tmp/Indicando que make_lite.main() nunca ejecutado. Echa un vistazo a numpy/linalg/lapack_lite/README:

Él numpy/linalg/blas_lite.c, numpy/linalg/dlapack_lite.cy
numpy/linalg/zlapack_lite.c son f2c‘d versiones de las rutinas LAPACK requeridas por el LinearAlgebra módulo, y envuelto por el lapack_lite
módulo. Los scripts en este directorio se pueden usar para crear estos archivos automáticamente desde un directorio de archivos fuente LAPACK.

Entonces numpy ya está distribuido con estos f2c‘d C archivos fuente – no hay necesidad de usar make_lite.py a menos que sea un desarrollador que desee actualizar estas funciones desde una nueva versión de la biblioteca LAPACK.

Entonces, ¿cuándo exactamente durante la creación de NumPy fue conveniente crear f2py?

Por lo que yo puedo decir, f2py no se acostumbra en absoluto durante una instalación numpy normal. De nuevo, metí una línea extra en f2py2e.main():

...
def main():
    import subprocess; subprocess.call(['touch', '/tmp/hello_from_f2py2e'])
...

Y otra vez, /tmp/hello_from_f2py2e no existe después de una instalación normal de numpy.

Entonces que es f2py en realidad se utiliza para? Echa un vistazo al árbol de fuentes de scipy y desde su llamada raíz

$ find . -iname *.f*

Verá montones y montones de archivos Fortran de aspecto importante, incluidos fftpack, odepack, arpack, fitpacketc. Sospecho que f2py se requiere principalmente para envolver las extensiones de Fortran para scipy en lugar de numpy.

Sin embargo, podría estar equivocado, tal vez uno de los desarrolladores numpy o scipy me aclarará.

Actualizar

En realidad, creo f2py ¡tampoco se requiere durante una instalación normal de scipy! Si echa un vistazo en el directorio de origen de uno de los módulos de Fortran, por ejemplo fftpackverás que ya contiene .pyf archivos, que normalmente serían generados automáticamente por f2py y definir las interfaces para las funciones de Fortran (ver aquí).

Creo que el trato es ese f2py se utilizó para generar inicialmente el .pyf envoltorios para las funciones de Fortran, pero estos .pyf los archivos se distribuyen junto con el resto del árbol fuente para que no sea necesario ejecutar f2py de nuevo durante el proceso de construcción normal.

Comentarios y valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *