FYPP es un preprocesador con alimentación de Python. Se puede utilizar para cualquier lenguaje de programación, pero su objetivo principal es ofrecer un preprocesador de Fortran, que ayuda a extender Fortran con la compilación de conditionamiento y las capacidades de metaprogramación de plantilla. En lugar de introducir su propia sintaxis de expresión, utiliza expresiones de Python en sus directivas preprocesadoras, ofreciendo la consistencia y versatilidad de Python al formular tareas de metaprogramación. Pone un fuerte énfasis en la robustez y en la integración ordenada en el desarrollo de cadenas de herramientas.
El proyecto está alojado en GitHub.
La documentación detallada está disponible en readthedocs.org.
FYPP se libera bajo la licencia BSD 2 Cláusula .
Definición, evaluación y eliminación de variables:
#: si debug> 0 Imprimir *, "Alguna información de depuración" #: endif #: establecer Loglevel = 2 imprimir *, "Loglevel: $ {Loglevel} $" #: del loglevel
Definiciones macro y llamadas macro:
#: Def afirman (cond) #: si debug> 0 if (.not. $ {cond} $) entonces imprimir *, "afirmar falló en el archivo $ {_ archivo _} $, línea $ {_ línea _} $" parada de error final si #: endif #: Enddef afirman ! Invocado a través de la llamada directa (el argumento no necesita cotización) @: Afirmar (tamaño (myArray)> 0) ! Invocado como expresión de Python (argumento necesita cita) $: Afirmar ('size (myArray)> 0')
Salida condicional:
prueba del programa #: si se define ('with_mpi') Use MPI #: Elif definido ('with_openmp') Usar OpenMP #:demás usar serial #: endif
Salida iterada (por ejemplo, para generar plantillas de Fortran):
interfaz myfunc #: para dtype en ['Real', 'Dreal', 'Complex', 'DComplex'] Procedimiento del módulo myFunc _ $ {dtype} $ #: EndFor interfaz final myfunc
Directivas en línea:
lógico, parámetro :: hasmpi = # {si se define ('mpi')} # .true. # {else}# .false. #{endif}#
Inserción de expresiones arbitrarias de pitón:
personaje (*), parámetro :: comp_date = "$ {time.strftime ('%y-%m-%d')} $"
Inclusión de archivos durante el preprocesamiento:
#: incluir "macRodefs.fypp"
Uso de líneas de continuidad al estilo Fortran en las directivas del preprocesador:
#: si var1> var2 & & o var2> var4 Imprimir *, "Haciendo algo aquí" #: endif
Pasar argumentos de cadena de múltiples múltiples (sin cotizar) a llamadas:
#! El argumento de cadena solo de necesidad invocable #: def debug_code (código) #: si debug> 0 $: código #: endif #: enddef debug_code #! Pase el bloque de código como primer argumento posicional #: bloque debug_code if (tamaño (matriz)> 100) entonces Imprimir *, "Depug: matriz espuriosamente grande" final si #: endblock debug_code #! Necesidades invocables también tipos de argumentos que no son de cuerda #: def repite_code (código, repetir) #: para ind en rango (repetir) $: código #: EndFor #: enddef repet_code #! Pase el bloque de código como argumento posicional y 3 como argumento de palabras clave "repite" #: Bloquee Repet_code (repetir = 3) Esto se repetirá 3 veces #: endblock repet_code
Comentarios del preprocesador:
#! Esto no aparecerá en la salida #! También se suprimirán los caracteres de Newline al final de las líneas
Suprimir la salida del preprocesador en regiones seleccionadas:
#! Se leen las definiciones, pero no se producirán salida (por ejemplo, nuevas líneas) #:silenciar #: incluir "macRodefs.fypp" #: Endmute
Solicitud explícita para detener el preprocesador:
#: si debugeLevel <0 #: Detente '¡nivel de depuración negativa no permitida!' #: endif
Fácil verificación de la cordura de los parámetros de macro:
#: def mymacro (rango) #! La macro solo funciona para el rango 1 y superior #: afirmar rango> 0 : #: enddef mymacro
Directivas de numeración de línea en la salida:
prueba del programa #: si se define ('mpi') Use MPI #: endif :
transformado
# 1 "Test.fypp" 1 prueba del programa # 3 "Test.fypp" Use MPI # 5 "Test.fypp" :
Cuando se define MPI
variable y FYPP recibió instrucciones de generar marcadores de línea.
Plegamiento automático de líneas generadas que exceden el límite de longitud de línea
FYPP necesita un intérprete Python 3 que funcione (Python 3.5 o superior).
Cuando instala FYPP, obtiene la herramienta de línea de comando fypp
y el módulo Python fypp.py
Este último, puede importar si desea acceder a la funcionalidad de FYPP directamente desde sus scripts de Python.
La última versión estable de FYPP se puede instalar fácilmente como paquete de conda mediante la emisión
conda install -c conda -forge fypp
También puede usar Pythons Command Line Installer pip
para descargar la versión estable de la página FYPP en Pypi e instalarla en su sistema.
Si desea instalar FYPP en el sistema de módulos del intérprete Python 3 Active (generalmente el caso cuando está utilizando un entorno virtual de Python), problema
PIP3 instalar fypp
Alternativamente, puede instalar FYPP en el espacio de usuario (en ~/.local) con
Instalar PIP3 -User FYPP
En Windows puede usar la cadena de herramientas MSYS2 para instalar FYPP en un terminal MINGW. Para instalar Fypp Uso:
PACMAN -S MINGW-W64-X86_64-PYTHON-FYPP
Asegúrese de que la arquitectura seleccionada coincida con su terminal MINGW actual. Para todas las arquitecturas MINGW de apoyo, visite el índice de paquetes aquí.
Para una instalación manual, puede descargar el código fuente de las versiones estables del sitio web del proyecto FYPP.
Si desea obtener la última versión de desarrollo , clone el repositorio de proyectos:
Git clon https://github.com/aradi/fypp.git
Y mira la rama maestra.
La herramienta de línea de comandos es un solo script independiente. Puede ejecutarlo directamente desde la carpeta fuente
Fypp_source_folder/bin/fypp
o después de copiarlo de la carpeta bin a cualquier ubicación enumerada en su variable de entorno de ruta, simplemente emitiendo
fypp
El módulo Python fypp.py
se puede encontrar en FYP_SOURCE_FOLDER/src
.
La herramienta de línea de comandos FYPP lee un archivo, lo preprocesa y lo escribe a otro archivo, por lo que normalmente lo invocaría como:
FYPP Source.fpp Source.f90
que procesaría fuente.fpp y escribiría el resultado a la fuente. Si no se especifican los archivos de entrada y salida, la información se lee desde Stdin y se escribe en STDOUT.
El comportamiento de FYPP puede verse influenciado con varias opciones de línea de comandos. Se puede obtener un resumen de todas las opciones de línea de comando por:
fypp -h