fortran66のブログ

fortran について書きます。

【メモ帳】Jupyter Fortran Kernel

Fortran Kernel

せんべいを齧りながら考えた結果、結局どの道何らかのワーク・ファイルを経由しないと図は出せないので、Fortran の中から図を描くのは諦めて、素直にいったん結果を出力し、それを matplotlib で読み込むことにした。

ただ、いちいちカーネルを切り替えたりするのは面倒なので、オプションでセルの入力を python の eval/exec コマンドで実行することにした。しかし、困ったことに fig = plt.figure() や imgdata = BytesIO() のような、ポインタを取ってくるような命令は eval/exec ではうまく機能しなかったので、これらはカーネルにべた書きすることにした。したがって matplotlib.pyplot と numpy は、それぞれ慣例にのっとって plt, np で import しておくことにし、fig という変数は予約変数として、これで plt.figure のポインタを取っておくことにする。

ポインタを取ってこれない理由はよく分からないが、さもありなんという感じはする。ただ、PIL (pillow) の im = Image.open(fn) は機能するので、区分がよく分からないが、Python 自体が全く分からないので、分からなくてもしょうがないw

f:id:fortran66:20180916224208p:plain


ついでなので、コンパイラを選べるようにしてみた。単に、名前を変えるだけだけなので、拡張子とセットで変えれば、一定の規約下のコンパイラなら何でも行ける気もする。

f:id:fortran66:20180916224230p:plain

TAB と Space が混在してしまったせいで、蛇にむちゃくちゃ怒られた。インタープリタだから、その行が実行されるまでエラーを黙っているので、ゲス蛇ホントむかつくw

以下の記事は、大変ためになりました。感謝感激雨あられ
ipython-books.github.io

[追記] gcc 可能

FORTRAN77 形式を可能にするには拡張子を .f / .for にしなければならないので、拡張子も変えられるようにした。結果的に gcc + .c の組み合わせでも実行できることが確認できた。

%fig: オプションの場合、fig 等の内部変数が、eval/exec で書き換え可能になっているので、python の慣例に従ってアンダースコアを手前につけておくことにした。

もう少し debug したら、うpしてみたい。
f:id:fortran66:20180917022444p:plain

Ipython Interactive Computing and Visualization Cookbook - Second Edition

Ipython Interactive Computing and Visualization Cookbook - Second Edition