FYPP est un préprocesseur alimenté par Python. Il peut être utilisé pour tous les langages de programmation, mais son objectif principal est d'offrir un préprocesseur FORTRAN, qui aide à étendre Fortran avec des capacités de métaprogrammation de compilation et de modèle. Au lieu d'introduire sa propre syntaxe d'expression, il utilise des expressions Python dans ses directives de préprocesseur, offrant la cohérence et la polyvalence de Python lors de la formulation de tâches de métaprogrammation. Il met fortement l'accent sur la robustesse et sur l'intégration nette dans le développement de chaînes d'outils.
Le projet est hébergé sur GitHub.
Une documentation détaillée est disponible sur ReadTheDocs.org.
FYPP est libéré sous la licence BSD 2 clause .
Définition, évaluation et élimination des variables:
#: Si debug> 0 Imprimer *, "quelques informations de débogage" #: endif #: Définissez LoGlevel = 2 Print *, "LoGlevel: $ {loglevel} $" #: Del LoGlevel
Définitions de macro et appels macro:
#: Def Assert (cond) #: Si debug> 0 if (.not. $ {cond} $) alors Imprimer *, "Affirmer l'échec dans le fichier $ {_ fichier _} $, ligne $ {_ line _} $" arrêt d'erreur terminer si #: endif #: EndDef Assert ! Invoqué par appel direct (l'argument n'a pas besoin de devis) @: Affirmer (taille (MyArray)> 0) ! Invoqué comme l'expression de Python (l'argument a besoin de citation) $: Assert ('size (myarray)> 0')
Sortie conditionnelle:
test de programme #: si défini ('with_mpi') Utiliser MPI #: elif défini ('with_openmp') Utiliser OpenMP #:autre Utiliser la série #: endif
Sortie itérée (par exemple pour générer des modèles FORTRAN):
interface myfunc #: pour dtype dans ['réel', 'dreal', 'complex', 'dcomplex'] Procédure du module MyFunc _ $ {dtype} $ #: fin pour Interface finale myfunc
Directives en ligne:
logique, paramètre :: Hasmpi = # {si défini ('mpi')} # .true. # {else} # .false. # {endif} #
Insertion d'expressions arbitraires python:
caractère (*), paramètre :: comp_date = "$ {time.strftime ('% y-% m-% d')} $"
Inclusion de fichiers lors du prétraitement:
#: inclure "macrodefs.fypp"
Utilisation de lignes de continuation de style Fortran dans les directives du préprocesseur:
#: si var1> var2 & & ou var2> var4 Imprimer *, "faire quelque chose ici" #: endif
Passer des arguments de chaîne multiline (non ciblé) aux callables:
#! Les besoins appelés ne doivent que l'argument de la chaîne #: def debug_code (code) #: Si debug> 0 $: code #: endif #: enddef debug_code #! Passer le bloc de code comme premier argument positionnel #: Bloquer Debug_code si (taille (tableau)> 100) puis Imprimer *, "Debug: Array grossièrement grand" terminer si #: endoblock debug_code #! Besoins appelables #: def repeat_code (code, répéter) #: pour Ind dans la gamme (répéter) $: code #: fin pour #: EndDef Repeat_code #! Passer le bloc de code comme argument positionnel et 3 comme argument de mot-clé "répéter" #: Block Repeat_code (répéter = 3) Ce sera répété 3 fois #: EndBlock Repeat_code
Commentaires du préprocesseur:
#! Cela n'apparaîtra pas dans la sortie #! Les personnages de Newline à la fin des lignes seront également supprimés
Suppression de la sortie du préprocesseur dans les régions sélectionnées:
#! Les définitions ne sont lues, mais aucune sortie (par exemple, newlines) ne sera produite #:muet #: inclure "macrodefs.fypp" #: fin
Demande explicite pour arrêter le préprocesseur:
#: Si debuglevel <0 #: Arrêtez «Niveau de débogage négatif non autorisé! #: endif
Vérification facile pour la santé mentale des paramètres macro:
#: def mymacro (rang) #! La macro ne fonctionne que pour le rang 1 et plus #: Affirmer le rang> 0 : #: enddef mymacro
Directives de numérotation des lignes en sortie:
test de programme #: Si défini ('MPI') Utiliser MPI #: endif :
transformé en
# 1 "test.fypp" 1 test de programme # 3 "test.fypp" Utiliser MPI # 5 "test.fypp" :
Lorsque la variable MPI
est définie et que FYPP a été invité à générer des marqueurs de ligne.
Pliage automatique des lignes générées dépassant la limite de longueur de ligne
FYPP a besoin d'un interprète Python 3 fonctionnel (Python 3.5 ou plus).
Lorsque vous installez FYPP, vous obtenez l'outil de ligne de commande fypp
et le module Python fypp.py
Ce dernier, vous pouvez importer si vous souhaitez accéder aux fonctionnalités de FYPP directement à partir de vos scripts Python.
La dernière version stable de FYPP peut être facilement installée comme package conda en émettant
Conda Install -c conda-forge fypp
Vous pouvez également utiliser Pythons Command Line Installer pip
afin de télécharger la version stable de la page FYPP sur PYPI et de l'installer sur votre système.
Si vous souhaitez installer FYPP dans le système de module de l'interprète actif Python 3 (généralement le cas lorsque vous utilisez un environnement virtuel Python), problème
PIP3 Installer FYPP
Alternativement, vous pouvez installer FYPP dans l'espace utilisateur (sous ~ / .local) avec
Pip3 Install - User Fypp
Sur Windows, vous pouvez utiliser la chaîne d'outils MSYS2 pour installer FYPP dans un terminal Mingw. Pour installer FYPP Utilisation:
Pacman -s mingw-w64-x86_64-python-fypp
Assurez-vous que l'architecture sélectionnée correspond à votre terminal Mingw actuel. Pour toutes les architectures MINGW supportées, visitez l'index du package ici.
Pour une installation manuelle, vous pouvez télécharger le code source des versions stables du site Web du projet FYPP.
Si vous souhaitez obtenir la dernière version de développement , clonez le référentiel des projets:
git clone https://github.com/aradi/fypp.git
et consultez la branche principale.
L'outil de ligne de commande est un seul script autonome. Vous pouvez l'exécuter directement à partir du dossier source
Fypp_source_folder / bin / fypp
ou après l'avoir copié du dossier bin à n'importe quel emplacement répertorié dans votre variable d'environnement de chemin, en émettant simplement
fypp
Le module Python fypp.py
peut être trouvé dans FYP_SOURCE_FOLDER/src
.
L'outil de ligne de commande FYPP lit un fichier, le prépare et l'écrit dans un autre fichier, donc vous l'invoqueriez généralement comme:
fypp source.fpp source.f90
qui traiterait Source.fpp et écrire le résultat à Source.f90. Si les fichiers d'entrée et de sortie ne sont pas spécifiés, les informations sont lues à partir de STDIN et écrites à STDOUT.
Le comportement du FYPP peut être influencé par diverses options de ligne de commande. Un résumé de toutes les options de ligne de commande peut être obtenu par:
fypp -h