FYPP - это препроцессор с питоном. Его можно использовать для любых языков программирования, но его основная цель - предложить препроцессор Fortran, который помогает расширить возможности Fortran с помощью способности к сожалему компиляции и матрицам метапрограммирования. Вместо того, чтобы ввести свой собственный синтаксис выражения, он использует экспрессии Python в своих директивах препроцессора, предлагая последовательность и универсальность Python при формулировании задач метапрограммирования. Это уделяет упор на надежность и аккуратную интеграцию в разработку инструментов.
Проект размещен на GitHub.
Подробная документация доступна на readthedocs.org.
FYPP выпускается по лицензии BSD 2-CLAUSE .
Определение, оценка и удаление переменных:
#: если отладка> 0 Печать *, «Некоторая информация отладки» #: endif #: установить loglevel = 2 print *, "loglevel: $ {loglevel} $" #: del loglevel
Определения макросов и макро -вызовы:
#: def Assert (cond) #: если отладка> 0 if (.not. $ {cond} $) тогда print *, "Assert не удастся в файле $ {_ file _} $, строка $ {_ line _} $" Ошибка остановки конец, если #: endif #: enddef Assert ! Вызывается через прямой вызов (аргумент не нуждается в цитате) @: Assert (size (myarray)> 0) ! Вызывается как выражение Python (аргумент нуждается в цитате) $: Assert ('size (myarray)> 0')
Условный выход:
Программный тест #: если определено ('with_mpi') Используйте MPI #: Элиф определил ('with_openmp') Используйте OpenMP #:еще Используйте сериал #: endif
Итерационный выход (например, для генерации шаблонов Fortran):
Интерфейс myfunc #: для dtype в ['Real', 'drial', 'Complex', 'dcomplex'] Процедура модуля myfunc _ $ {dtype} $ #: endfor конечный интерфейс myfunc
Встроенные директивы:
Logical, Parameter :: hasmpi = # {если определено ('mpi')} # .true. # {else}# .false. #{endif}#
Вставка произвольных выражений питона:
символ (*), параметр :: comp_date = "$ {time.strftime ('%y-%m-%d')} $"
Включение файлов во время предварительной обработки:
#: Включите "macrodefs.fypp"
Использование линий продолжения в стиле Фортрана в предварительных директивах:
#: if var1> var2 & & или var2> var4 Печать *, "Делать что -то здесь" #: endif
Прохождение (некватурные) многослойные строковые аргументы к Callables:
#! Каллируемый нужен только строковый аргумент #: def debug_code (код) #: если отладка> 0 $: код #: endif #: enddef debug_code #! Пройти кодовый блок как первый позиционный аргумент #: block debug_code if (размер (массив)> 100), тогда Печать *, "DEBUG: Spresy Girl Array" конец, если #: endblock Debug_code #! Каллируемые потребности также не строгие типы аргументов #: def repeat_code (код, повторить) #: для Ind в диапазоне (повтор) $: код #: endfor #: enddef repeat_code #! Пройти кодовый блок как позиционный аргумент и 3 как аргумент ключевого слова «повторение» #: block repeat_code (repeat = 3) это будет повторен 3 раза #: endblock repeat_code
Комментарии препроцессора:
#! Это не будет отображаться в результате #! Также будут подавлены персонажи Newline в конце строк
Подавление вывода препроцессора в выбранных регионах:
#! Определения читаются, но вывод (например, новеньши) не будет произведен. #:немой #: Включите "macrodefs.fypp" #: endmute
Явный запрос о прекращении препроцессора:
#: если отладка <0 #: Остановите «Отрицательный уровень отладки не разрешен!» #: endif
Легкая проверка на макро -параметры здравомыслие:
#: def Mymacro (Rank) #! Макро работает только на звание 1 и выше #: assert rank> 0 : #: enddef mymacro
Директивы нумерации строки в выводе:
Программный тест #: если определено ('mpi') Используйте MPI #: endif :
трансформирован в
# 1 "test.fypp" 1 Программный тест # 3 "test.fypp" Используйте MPI # 5 "test.fypp" :
Когда переменная MPI
определяется, и FYPP был проинструктирован генерировать линейные маркеры.
Автоматическое складывание сгенерированных линий, превышающих предел длины линии
FYPP нужен работающий интерпретатор Python 3 (Python 3.5 или выше).
Когда вы устанавливаете FYPP, вы получаете инструмент командной строки fypp
и модуль Python fypp.py
Последнее вы можете импортировать, если вы хотите получить доступ к функциональности FYPP непосредственно из сценария Python.
Последний стабильный выпуск FYPP можно легко установить в качестве пакета Conda, выпустив
Установка Conda -c conda -forge fypp
Вы также можете использовать установщик командной строки Pythons pip
, чтобы загрузить стабильный релиз со страницы FYPP на PYPI и установить его в вашей системе.
Если вы хотите установить FYPP в модульную систему интерпретатора Active Python 3 (обычно, когда вы используете виртуальную среду Python), проблема
PIP3 Установить FYPP
В качестве альтернативы, вы можете установить FYPP в пространство пользователя (под ~/.local) с
Установка PIP3 -USER FYPP
В Windows вы можете использовать инструмент MSYS2 для установки FYPP в терминале Mingw. Чтобы установить использование FYPP:
PACMAN -S MINGW-W64-X86_64-Python-Fypp
Убедитесь, что выбранная архитектура соответствует вашему текущему терминалу Mingw. Для всех поддерживающих архитектур Mingw посетите индекс пакета здесь.
Для ручной установки вы можете загрузить исходный код стабильных выпусков с веб -сайта Project FYPP.
Если вы хотите получить последнюю версию разработки , клонируйте репозиторий проектов:
git clone https://github.com/aradi/fypp.git
И проверьте главную ветвь.
Инструмент командной строки-это единственный автономный сценарий. Вы можете запустить его непосредственно из папки Source
Fypp_source_folder/bin/fypp
или после копирования его из папки BIN в любое место, перечисленное в вашей переменной среды вашего пути, только что выпустив
Fypp
Модуль Python fypp.py
можно найти в FYP_SOURCE_FOLDER/src
.
Инструмент командной строки FYPP считывает файл, предварительно обрабатывает его и записывает в другой файл, так что вы обычно вызываете его как:
FYPP Source.fpp Source.f90
который будет обрабатывать source.fpp и написать результат в Source.f90. Если входные и выходные файлы не указаны, информация считывается из Stdin и записывается в STDOUT.
На поведение FYPP можно влиять различные параметры командной строки. Сводка всех параметров командной строки может быть получена с помощью:
fypp -h