PythonでModern Fortranコードをラップするには、どのパッケージを使用すればよいですか?


27

私は知っていて、f2py2eを使用して古いFortran 77コードをラップしましたが、私の理解では、新しいFortran 95コードでは機能しません。私は何を使うべきかを研究しましたが、fwrapとG3 f2pyに出会いましたが、どちらも現在の状態や基本的な使用法を超えた使用方法については説明していません。

また、f2pyのバージョンには第3世代のf2pyを使用するオプションがあることも確認しましたが、機能しないとコメントされています。これを考えると、私はどのプロジェクトをuniプロジェクトに使用すべきかわかりません。新しいコードにはどれを使うべきですか?

PSこれは基本的にhttps://stackoverflow.com/questions/10665717/current-best-method-for-wrapping-modern-fortran-code-with-pythonと同じ質問であり、ここで尋ねるとより良い答えが得られることが示唆されました。


2
「モダンFortran」
-meawoppl

回答:


19

fortran90.orgで説明されているように、Python組み込みのctypesモジュールを使用できます。それは非常に簡単で、外部の依存関係を必要としません。また、ndpointer arg型ヘルパーは非常に便利です。


8
そのとおり。または、fortran90.orgページで説明されているように、ctypesの代わりにCythonを使用します。
オンドレジ・セティク

@OndřejČertík、素晴らしいウェブサイト!そこインターネット上の近代的なFortranのには、いくつかの貴重な資源がありますが、これはfortranwiki.orgと一緒に間違いなく私のお気に入りの一つである
astrojuanlu

6

私は個人的にf2pyを使用しています。ただし、f2py用に作成したFortranは、実際には最新のFortranではなく、モジュールを備えた自由形式のF90です。想定形状またはカスタムタイプは使用しません。この方法は、まだ私にとって非常にうまく機能します。

ラッピングの一部としてのCの使用に関して共有したいリソースがあります。このページの残りの部分もお勧めです。


1
2015年の更新:かなり前から、FortranのすべてのインターフェイスはCythonとiso_c_bindingを介して行われます。これにより、Cython / Cに本当に必要なものだけを公開しながら、Fortranコード自体を最新に保つことができます。
AlexE

2016更新:iso_c_bindingオプションは、cythonコマンドを使用して.pyxファイルをコンパイルするよりも簡単になり、Fortranコードまたはpythonコードのいずれかを変更してすべてをすぐに動作させる間のオーバーラップを削減します。
cbcoutinho

5

f2pyのドキュメントは、実際にはそれほど素晴らしいものではありません。私は自分のプロジェクトをf2pyからCythonに移行中です。CythonはCコードをラップするために使用できますが、新しい高性能コードを作成するのに最も役立つことがわかりました。新しいFortranコードを作成してラップし、Pythonで呼び出すことが目的の場合は、代わりにCythonを使用することをお勧めします。そうすれば、Pythonコードを書くことができ、パフォーマンスのボトルネックがある場合は、わずかな変更を加えてCythonに転送します。


それでは、Fortranを使用するのではなく、Cythonを使用してコードの低速ビットを使用しますか?
ジェームズトックネル

2
まさに!Cythonコードは、PythonオブジェクトやNumpy配列と自然に対話できるため(追加の変換レイヤーなしで)、はるかに簡単であることがわかりました。これは、独自のデータ構造を使用する場合に特に役立ちます。FortranまたはCでf2pyのPythonクラスを使用することは、それほど単純な作業ではありません。
レオウエダ

3

f90wrapf2pyの上に構築され、派生型へのアクセスを含む、基礎となるFortranコードベースのPythonラッパーを自動的に生成します。一連の簡単なが、その仕組みを示しています。


2

FortWrapを使用して、途中まで行くことができます。これにより、Fortranコードに対するC ++インターフェイスが作成され、SWIGでラップしてPythonインターフェイスを取得できます。Fortranコードのある程度大きなベースでこれを行い、非常にうまく機能します(実際、FortWrapはこの目的のためにチームのメンバーによって開発されました)。


1

fwrap具体的にはFortran90 / 95を対象とし、と同じソフトウェアスタックの一部を使用しますf2py


3
このプロジェクトのGitHubリポジトリへの最後のコミットは2010
でした。-ジェフオックスベリー

1
それはがっかりさせることに同意しますが、私はまだそれでかなりの成功を収めています。箱から出してすぐに、それf2pyはF90 よりも機能的です。また、侵入障壁が非常に低くなっています。見つけてよかったです。
MRocklin

1

f2py最新のfortran(想定される形状の配列など)をサポートします。サンプルスクリプトを参照してください。

また、Fortranコードの実験には、インストールが簡単で非常に便利なIPython magicをお勧めします(f2pyにも依存しています)。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.