FyppはPython駆動のプリプロセッサです。プログラミング言語には使用できますが、その主な目的は、Fortran Preprocessorを提供することです。これは、条件付きコンパイルおよびテンプレートメタプログラム機能でFortranを拡張するのに役立ちます。独自の式の構文を導入する代わりに、メタプログラムタスクを策定する際にPythonの一貫性と汎用性を提供するプリプロセッサディレクティブにPython式を使用します。これは、堅牢性と、開発の開発へのきちんとした統合に重点を置いています。
このプロジェクトはGitHubでホストされています。
詳細なドキュメントは、readthedocs.orgで入手できます。
FyppはBSD 2-Clauseライセンスの下でリリースされます。
変数の定義、評価、削除:
#:debug> 0の場合 印刷 *、「いくつかのデバッグ情報」 #:Endif #:LogLevel = 2を設定します print *、 "loglevel:$ {loglevel} $" #:del loglevel
マクロ定義とマクロコール:
#:def assert(cond) #:debug> 0の場合 if(.not。$ {cond} $)then print *、 "assert faile file $ {_ file _} $、line $ {_ line _} $" エラー停止 ifを終了します #:Endif #:enddef assert !直接コールで呼び出されました(引用には引用が必要ありません) @:assert(size(myarray)> 0) ! Python式として呼び出されました(引数は引用が必要です) $:assert( 'size(myarray)> 0')
条件付き出力:
プログラムテスト #:定義の場合( 'with_mpi') MPIを使用します #:elif defined( 'with_openmp') OpenMPを使用します #:それ以外 シリアルを使用します #:Endif
反復出力(たとえば、Fortranテンプレートを生成するため):
インターフェイスmyfunc #:['real'、 'dreal'、 'complex'、 'dcomplex'のdtypeの場合 モジュール手順myfunc _ $ {dtype} $ #:endfor インターフェイスmyfuncを終了します
インラインディレクティブ:
logical、parameter :: hasmpi =#{defined( 'mpi')}#.true。 #{else}#.false。 #{endif}#
任意のPython式の挿入:
文字(*)、パラメーター:: comp_date = "$ {time.strftime( '%y-%m-%d')} $"
前処理中にファイルを含める:
#:「macrodefs.fypp」を含める
プリプロセッサディレクティブでFortranスタイルの連続ラインを使用します。
#:var1> var2& &またはvar2> var4 印刷 *、「ここで何かをする」 #:Endif
(引用されていない)マルチライン文字列引数を呼び出すことを渡す:
#! Callableは文字列引数のみが必要です #:def debug_code(code) #:debug> 0の場合 $:コード #:Endif #:enddef debug_code #!最初の位置引数としてコードブロックを渡します #:block debug_code if(size(array)> 100)then 印刷 *、「デバッグ:スプラルアレイアレイ」 ifを終了します #:endblock debug_code #!呼び出し可能なニーズも非弦の引数タイプもあります #:def Repeat_Code(コード、繰り返し) #:INDの範囲(繰り返し) $:コード #:endfor #:EndDef Repeat_Code #!コードブロックを位置引数として、3をキーワード引数「繰り返し」としてパスする #:repeat_codeをブロックする(繰り返し= 3) これは3回繰り返されます #:endblock Repeat_code
プリプロセッサのコメント:
#!これは出力には表示されません #!また、行の端にある新しいライン文字は抑制されます
選択した領域でのプリプロセッサ出力の抑制:
#!定義は読み取られますが、出力(newlinesなど)は作成されません #:ミュート #:「macrodefs.fypp」を含める #:EndMute
プリプロセッサを停止するための明示的な要求:
#:debuglevel <0の場合 #:「ネガティブデバッグレベルが許可されていない」を停止します!」 #:Endif
マクロパラメーターの正気を簡単に確認してください:
#:def mymacro(rank) #!マクロはランク1以上でのみ機能します #:ランク> 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
を取得します。後者は、Pythonスクリプト内からFYPPの機能に直接アクセスする場合は、インポートできます。
FYPPの最後の安定したリリースは、発行してコンドラパッケージとして簡単にインストールできます
Conda Install -C Conda -ForgeFypp
Pythonsコマンドラインインストーラーpip
使用して、PYPIのFYPPページから安定したリリースをダウンロードして、システムにインストールすることもできます。
Active Python 3インタープリターのモジュールシステムにFYPPをインストールする場合(通常、Python仮想環境を使用している場合)、問題
PIP3インストールfypp
または、fyppをユーザースペース(〜/.local)にインストールすることもできます
PIP3インストール - ユーザーfypp
Windowsでは、MSYS2ツールチェーンを使用して、MINGW端末にFYPPをインストールできます。 FYPPをインストールするには:
PACMAN -S MINGW-W64-X86_64-PYTHON-FYPP
選択したアーキテクチャが現在のMINGW端末と一致していることを確認してください。すべてのサポートMINGWアーキテクチャについては、こちらのパッケージインデックスを確認してください。
手動でインストールするには、FYPPプロジェクトWebサイトからStableリリースのソースコードをダウンロードできます。
最新の開発バージョンを取得したい場合は、プロジェクトリポジトリをクローンします。
git clone https://github.com/aradi/fypp.git
マスターブランチをご覧ください。
コマンドラインツールは、単一のスタンドアロンスクリプトです。ソースフォルダーから直接実行できます
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