O FYPP é um pré -processador alimentado por Python. Ele pode ser usado para qualquer linguagem de programação, mas seu objetivo principal é oferecer um pré -processador fortran, que ajuda a estender o Fortran com recursos de metaprogramação de compilação e modelo conditicionais. Em vez de introduzir sua própria sintaxe de expressão, ele usa expressões Python em suas diretivas de pré -processador, oferecendo a consistência e a versatilidade do Python ao formular tarefas de metaprogramação. Isso coloca forte ênfase na robustez e na integração pura no desenvolvimento de cadeias de ferramentas.
O projeto está hospedado no Github.
A documentação detalhada está disponível no ReadThedocs.org.
O FYPP é liberado sob a licença BSD 2-cláusula .
Definição, avaliação e remoção de variáveis:
#: se depuração> 0 Imprimir *, "Algumas informações de depuração" #: endif #: defina loglevel = 2 Print *, "Loglevel: $ {Loglevel} $" #: del Loglevel
Definições de macro e chamadas de macro:
#: def assert (cond) #: se depuração> 0 if (.not. $ {cond} $) então Print *, "Assert falhou no arquivo $ {_ arquivo _} $, linha $ {_ line _} $" Erro pare final se #: endif #: enddef assert ! Invocado por chamada direta (argumento não precisa de cotação) @: Assert (tamanho (MyArray)> 0) ! Invocado como expressão de python (argumento precisa de citação) $: Assert ('tamanho (myarray)> 0')
Saída condicional:
teste de programa #: se definido ('com_mpi') Use MPI #: elif definido ('com_openmp') Use OpenMP #:outro use serial #: endif
Saída iterada (por exemplo, para gerar modelos fortran):
Interface myfunc #: para dtype in ['real', 'dreal', 'complexo', 'dComplex'] Procedimento do módulo myfunc _ $ {dtype} $ #: endfor interface final myfunc
Diretivas em linha:
Lógico, parâmetro :: hasmpi = # {se definido ('mpi')} # .tue. # {else}# .false. #{endif}#
Inserção de expressões arbitrárias de python:
caractere (*), parâmetro :: comp_date = "$ {time.strftime ('%y-%m-%d')} $"
Inclusão de arquivos durante o pré -processamento:
#: inclua "macrodefs.fypp"
Usando linhas de continuão no estilo fortran nas diretivas pré-processador:
#: se var1> var2 & & ou var2> var4 Imprima *, "Fazendo algo aqui" #: endif
Passagem (não cotada) Argumentos de cordas multilina para callables:
#! Necessável apenas argumento da string #: def DEBUG_CODE (código) #: se depuração> 0 $: código #: endif #: enddef debug_code #! Passe o bloco de código como argumento primeiro posicional #: bloco debug_code se (tamanho (matriz)> 100) então Imprima *, "Debug: Suriosamente Grande Array" final se #: endblock debug_code #! Necessidades chamáveis também tipos de argumento sem cordas #: def repetir_code (código, repita) #: para IND no intervalo (repetir) $: código #: endfor #: enddef repetir_code #! Passe o bloco de código como argumento posicional e 3 como argumento da palavra -chave "repita" #: bloco repeat_code (repeat = 3) Isso será repetido 3 vezes #: endblock repeat_code
Comentários do pré -processador:
#! Isso não aparecerá na saída #! Além disso, os caracteres da nova linha no final das linhas serão suprimidos
Suprimindo a saída do pré -processador em regiões selecionadas:
#! As definições são lidas, mas nenhuma saída (por exemplo, novas linhas) será produzida #:mudo #: inclua "macrodefs.fypp" #: endmute
Solicitação explícita para interromper o pré -processador:
#: se Debuglevel <0 #: pare 'nível de depuração negativa não é permitido!' #: endif
Fácil verificação para a sanidade do parâmetro macro:
#: def mymacro (classificação) #! Macro funciona apenas para a classificação 1 e acima #: afirme classificação> 0 : #: enddef mymacro
Diretivas de numeração de linha na saída:
teste de programa #: se definido ('mpi') Use MPI #: endif :
transformado em
# 1 "test.fypp" 1 teste de programa # 3 "test.fypp" Use MPI # 5 "test.fypp" :
Quando MPI
variável é definido e o FYPP foi instruído a gerar marcadores de linha.
Dobragem automática de linhas geradas que excedem o limite de comprimento da linha
O FYPP precisa de um intérprete Python 3 em funcionamento (Python 3.5 ou superior).
Ao instalar o FYPP, você obtém a ferramenta de comando fypp
e o módulo Python fypp.py
Por último, você pode importar se quiser acessar a funcionalidade do FYPP diretamente de seus scripts Python.
A última liberação estável do FYPP pode ser facilmente instalada como pacote do CONDA, emitindo
CONDA Instale -C Conde -Forge Fypp
Você também pode usar o instalador de linhas de comando do Python pip
para fazer o download da versão estável da página FYPP no Pypi e instalá -la no seu sistema.
Se você deseja instalar o fypp no sistema de módulos do intérprete ativo do Python 3 (normalmente o caso quando você está usando um ambiente virtual do Python), emitida
PIP3 Instale o fypp
Como alternativa, você pode instalar o fypp no espaço do usuário (em ~/.local) com
PIP3 Instale -Fypp
No Windows, você pode usar a cadeia de ferramentas MSYS2 para instalar o FYPP em um terminal Mingw. Para instalar o uso do FYPP:
Pacman -S Mingw-W64-X86_64-Python-Fypp
Verifique se a arquitetura selecionada está correspondendo ao seu terminal Mingw atual. Para todos os arquiteturas Mingw de suporte, visite o índice de embalagem aqui.
Para uma instalação manual, você pode baixar o código -fonte dos lançamentos estáveis no site do projeto FYPP.
Se você deseja obter a versão mais recente de desenvolvimento , clone o Repositório de Projetos:
Git clone https://github.com/aradi/fypp.git
e confira o ramo principal.
A ferramenta de linha de comando é um único script independente. Você pode executá -lo diretamente da pasta de origem
Fypp_source_folder/bin/fypp
ou depois de copiá -lo da pasta Bin para qualquer local listado em sua variável de ambiente de caminho, apenas emitindo
fypp
O módulo python fypp.py
pode ser encontrado no FYP_SOURCE_FOLDER/src
.
A ferramenta de linha de comando do FYPP lê um arquivo, pré -processa e grava em outro arquivo, para que você normalmente o invocaria como:
fypp fonte.fpp fonte.f90
que processaria fonte.fpp e gravaria o resultado para fonte.f90. Se os arquivos de entrada e saída não forem especificados, as informações serão lidas no stdin e gravadas para stdout.
O comportamento do FYPP pode ser influenciado com várias opções de linha de comando. Um resumo de todas as opções da linha de comando pode ser obtido por:
fypp -h