問題タブ [f2py]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - F2Py モジュールのインポート中にセグ フォールトを「キャッチ」するにはどうすればよいですか?
関連性が変動する可能性があるいくつかの背景:
私は現在、いくつかの F2Py ライブラリ (Fortran コードから F2Py によってコンパイルされた Python モジュール) を所有しています。すべての意図と目的において、これらのモジュールを「サードパーティ」と見なすことができます。現在、私は Fortran のソース コードにアクセスできず、コンパイル プロセスも担当していません。
モジュール自体は、私が開発を手伝っている、Python スクリプトをサポートし、複数のプラットフォームで実行されるプログラムにインポートされます。
私は、コンパイル マシン上のライブラリ バージョンとユーザーのマシンが同期しなくなることによって引き起こされる互換性の問題から生じる将来のクラッシュを防止しようとしています。ユーザーのマシンの 1 つが互換性のないバージョンの numpy に変更されたという問題が既に発生しており、これにより、モジュールがインポートされたときに起動時に許容できないセグ フォールトが発生しました。
質問:
F2Py モジュールをインポートする方法を探していますが、モジュールが依存する可能性のある互換性のないライブラリ バージョンが原因で発生する可能性のあるセグ フォールトに対処できるようにする方法です。現在、インポートを呼び出す前にnumpyバージョンをチェックしていますが、最初にインポートしてから、後で問題を「キャッチ」したいと思います。
特にインポートの結果として、セグメント障害をキャッチすることは可能ですか?
python - サブルーチン引数が Python から Fortran に正しく渡されない
f2py を使用して、Python スクリプトで使用する数値モジュールをコンパイルしています。コードを以下の最小限の例に減らしました。
fd.f:
itimes.f:
再実行.py:
コンパイルと実行に使用されるコマンドは次のとおりです ( cmd
Windows で使用していることに注意してください)。
出力は次のとおりです。
私の最初の推測は、それがどういうわけかsubroutine にth
正しく渡されていないということです。ただし、コードの完全なバージョンには他の入力が含まれており、それらはすべて正しく渡されるため、この動作がわかりません。Fortran から itimes を呼び出したときに同じことを行うことができなかったので、Python/Fortran インターフェースと関係があると思います。この動作が発生する理由について、誰かが洞察を提供できますか?reprun.py
itimes
編集:th = 200
reprun.py を置き換えるth = 200.0
と、次の出力が得られます。
python - f2pyが「「foo」の再定義...以前の定義はここにありました」
これは私の最初の質問です。
numpy 1.6.1 から f2py を使用しています。私は、問題なくコンパイル (および動作) するいくつかのサブルーチンを含む fortran モジュールを持っています。ただし、そのうちの 1 つは GNU 拡張である erf(x) 関数を使用します。私の目的には十分な精度ではないため、外部の erf 実装を使用しようとしています。
Fortran 77 の Numerical Recipes の 1 つを使用しようとしています。関連するすべての関数を、モジュールと同じフォルダーにある 'erf.f' という 1 つのファイルにコピーしました。include 'erf.f'
モジュールファイルの先頭で使用します。erf 関数の実際の名前を「derf」に変更したので、gfortran erf 拡張機能と競合しません。
ただし、f2py 経由でコンパイルしようとするとfoo
、「erf.f」内のすべての関数にエラーが表示されます。
エラー: 'foo' の再定義 エラー: 'foo' の以前の定義がここにありました
再定義と以前の定義を含むと言及されているcファイルを見ると、関数が2回あるようです。理由がわからないだけですか?
これを修正する方法を知っている人はいますか?乾杯。
編集: f2py が拡張機能を作成するために numpy distutils によって使用されていることについて言及しませんでした (不要な追加情報だと思ったので)。ここで言及する理由は、拡張機能を で問題なく作成できることがわかったからですf2py -c my_module.f90 -m mod
が、実行するpython setup.py install
と上記で詳述したエラーが発生します。では、f2py は distutils を介して実行すると何が違うのでしょうか?
編集 #2: 外部 erf 関数ファイルのすべての内容をモジュールと同じファイルに入れると、すべてが機能します。私は本当にこれをしたくありません。将来的にはファイルの怪物が現れるからです。しかし、この質問に対する答えが得られるまでは、今のところうまくいきます。
python - numpy distutils 経由で FORTRAN ライブラリにリンクする方法
FORTRAN ライブラリにリンクするときに、setup.py スクリプトを正しく動作させるのに問題があります。
私はライブラリの経験がほとんどないため、間違った用語を使用している可能性があります。FMLIB fortran パッケージを使用する fortran モジュールがあります。FMLIB パッケージには、.o ファイルにコンパイルした 3 つの f95 ファイルが含まれています。このモジュールは、Python モジュールによって使用されます。setup.py ファイルでは、拡張機能を使用します。
しかし、インストールしようとすると、.mod ファイルが見つからないため、FMZM を使用できないと表示されます。Extension で別のキーワードを使用してライブラリにリンクするか、代わりに mod ファイルにリンクする必要がありますか? それとも他にやるべきことがありますか?distutils のドキュメントは比較的まばらです。
python - f2py -- 配列の並べ替えを防ぐ
f2pyを介して1D配列としてfortranサブルーチンから読み取られる配列があります。次に、Python では、その配列が再形成されます。
次に、その配列を 3D 配列として fortran に戻したいと思います。
問題は、f2py が fortran_routine に渡す前に a を転置しようとし続けることです。fortran ルーチンは次のようになります。
すべての転置を前後に防ぐにはどうすればよいですか? (私は、2 つの言語で異なる配列のインデックス付け規則を使用できることを非常に嬉しく思います)。
編集
解決策の一部であるように思われますが、それがどの部分であるかを理解できないようです(または、の後np.asfortranarray
に? が続く可能性があります)。np.flags.f_contiguous
ravel
reshape(shape,order='F')
編集
この投稿は混乱を招いたようです。ここでの問題は、メモリ レイアウトではなくインデックス スキームf2py
を保持しようとすることです。そのため、 shape を持つ numpy 配列 (C オーダー) がある場合、f2py は fortran でも配列に shape を持たせようとします。f2py がメモリ レイアウトを保持していた場合、配列はPython とFortran で形状を持つことになります。メモリ レイアウトを保持したい。(nz, ny, nx)
(nz, ny, nx)
(nz, ny, nx)
(nx, ny ,nz)
python - f2py を使用してオブジェクト配列を Fortran に渡す
Fortran サブルーチンは、引数として別のサブルーチンを取ることができます。
しかし、python からのオブジェクトの配列はどうですか? どうすれば言うことができますか
arr=[yht,yht,yht]
フォートランに。やってみたけどダメだったのですが何か方法はありますか?
python - Pythonコードでf2pyモジュールを使用する際の問題
次のコンパイルコマンドを必要とするFORTRANコードがあります
Pythonでf2pyモジュールを使用して同じものをコンパイルしました
モジュールをコンパイルできません。'-ffized-format'で無効なファイル形式''と言ってエラーが発生します
助けてください
python - Python拡張機能のデバッグ/プロファイリング
私は、素晴らしいf2pyツールを使用して、ほとんどのコードをPythonのFortran拡張機能として記述しています。ただし、メモリリークをキャッチし、プログラムのプロファイルを作成することが難しい場合があります(最も多くの時間が費やされている場合)。
問題は、Pythonの拡張機能(特にf2pyで生成されたもの)をデバッグおよび/またはプロファイルする簡単な方法はありますか?valgrindの使用は複雑なようです(私はMacOsXを使用しており、インタープリターを再コンパイルしたくありません)。私が今持っている唯一のオプションは、印刷-デバッグ+印刷-プロファイルであり、これには時間がかかります。
python - f2py ラッパー コンパイル エラー: 配列の形状の設定
f2py 経由でのコンパイルに問題があります。いくつかのサブルーチンを含む f90 モジュールがあります。Pythonスクリプトで使用するために、この時点までうまくコンパイルされています。ただし、コンパイルしてビルドしようとすると、次のエラーが表示されます。
他にも 2 つのエラーがありますが、これらd()
はここで正しく割り当てられていないことが原因です。コンパイルしているファイルが f2py ラッパーであることがわかります。さらに奇妙なことに、それが指すラッパー ファイルを実際に見ると、実際には 355 行目は次のようになっています。
そのため、コンパイラが割り当てステートメントに形状指定子がないと言っている理由がわかりません。そのため、私はそれを修正する方法がわかりません!
モジュールを最後に正しくコンパイルしてから少し変更しましたが、このエラーが発生した配列にはまったく触れておらず、それが存在する特定のサブルーチンにも触れていないことに注意してください。
python - f2py の問題: サブルーチン内のモジュールへの未定義の参照
Pythonで使用するために、f2pyでFortran f90ファイルをコンパイルしようとしています。ファイルは、別のファイルからモジュールを呼び出すサブルーチンです。モジュールは基本的に割り当て用です。コマンド ウィンドウで「gfortran my_dec.f90」を使用してモジュールをコンパイルできますが、サブルーチン ファイルをコンパイルしようとするとエラーが発生します。私は Fortran をほとんど使用したことがなく、これは他人のコードであるため、特に困難です。
モジュールとサブルーチンのセクションを次に示します。これは、開始と終了を含めて非常に長いためです。
サブルーチン:
サブルーチン my_init
「f2py -c my_init.f90 -m my_init_m」を使用してサブルーチン ファイル「my_init.f90」をコンパイルしようとすると、サブルーチン内のモジュールからの変数への参照に関するメッセージが大量に表示されます。
そして、私にはあまり明らかにならないエラー:
インターネットを検索するなど、数日間これを解決しようとしましたが、役に立ちませんでした。誰にもアイデアはありますか?それは非常に単純な問題かもしれません。助けてくれてありがとう。
編集:モジュールをコピーしてサブルーチンと同じファイルに貼り付ければ動作しますが、別のファイルとして動作させるとよいでしょう。