Top 8
Outer WildsストーリーMODを色々やってみた
June 18, 2023, 10:04 a.m.表面符号と戯れる【量子コンピューター Advent Calendar 2023 23 日目】
Dec. 23, 2023, 3:28 a.m.位数発見アルゴリズム ~Quantum Zooやっていく【特別編】~
Jan. 27, 2023, 2:50 p.m.ストーリー追加 Mod: The Outsider やっていく日記【Outer Wilds】
Feb. 19, 2023, 6:33 a.m.意識が量子効果で生じることを示す実験結果についてちょっと調べただけのメモ
April 21, 2022, 3:09 p.m.ストーリー追加 MOD: Astral Codec やっていく日記【Outer Wilds】
Feb. 25, 2024, 8:47 a.m.Outer Wilds の量子は計算能力が(ある程度)すごいのではという話
Jan. 15, 2022, 8:35 a.m.MacでAge of Empires 2 DE (AoE2DE)をCrossOverで動かす
May 31, 2021, 11:52 a.m.PyO3でPythonからRustで作ったライブラリを呼ぶ
Feb. 16, 2019, 8:08 a.m. edited Dec. 21, 2019, 5:22 a.m.Python,手軽で便利ライブラリたくさんあって良いですね.
Rust,厳格で素早くて良いですね.
一緒に使えれば素晴らしいですね1.
ということで,これを実現するライブラリであるPyO3を使ってみました2.他にもrust-cpythonも有名ですが,更新頻度やスター数からPyO3に勢いが出ているので,今回はPyO3を選びました.
Rustのバージョンはrustc 1.34.0-nightly
で試しました.nightly3じゃないとPyo3は動かないようです.なぜならspecializationを使ってるから.(この点rust-cpythonはstableで動くんですけどねー.それでもPyO3の方がスターが多くなるのはこの界隈が良い意味で発展中ということなのかな)
まずは
cargo new python_rust_example --lib
でライブラリ用のプロジェクトを作ります.
それから,Cargo.toml
に
[package]
name = "python_rust_example"
version = "0.1.0"
[lib]
name = "python_rust_example"
crate-type = ["cdylib"]
[dependencies.pyo3]
version = "0.5.2"
features = ["extension-module"]
と記述します.ここで,バージョン0.5.2を指定したのは次の記事でNumPyと一緒に使うためのバージョン合わせです(あと,最新バージョンのReadme.mdのサンプルが動かなかったのも理由としてある)
そして,試しに値を2つ渡して和を返す関数として,
#![feature(proc_macro)]
extern crate pyo3;
use pyo3::prelude::*;
#[pymodinit]
fn python_rust_example(_py: Python, m: &PyModule) -> PyResult<()> {
#[pyfn(m, "add_double")]
fn add_double_py(_py: Python, a: f64, b: f64) -> PyResult<f64> {
Ok(a + b)
}
Ok(())
}
のようにadd_double()
を作ります.pyfn()
に渡す文字列引数がpythonから呼ぶときの関数名となります.
次にビルドします.
ここで,Macユーザーは.cargo/config
(.cargo
がなければmkdirする)に
[target.x86_64-apple-darwin]
rustflags = [
"-C", "link-arg=-undefined",
"-C", "link-arg=dynamic_lookup",
]
としてコンパイル時のパラメータを渡してやる必要がある模様.
そして,cargo build --release
でビルド!
ビルド完了したら,Macユーザーは
cp targets/release/libpython_rust_example.dylib python_rust_example.so
Linuxユーザーは
cp targets/release/libpython_rust_example.so python_rust_example.so
Windowsユーザーはtargets/release/libpython_rust_example.dll
をstring_sum.pyd
へコピー.
あとは最後にPythonシェルで
>>> from python_rust_example import add_double
>>> add_double(3, 5)
8.0
>>> add_double('hoge', 2)
Traceback (most recent call last):
File "<input>", line 1, in <module>
add_double('hoge', 2)
TypeError: must be real number, not str
と確認して完了.ちゃんと他の型を渡すとエラーを出してくれますね.
次: PyO3とrust-numpyを使ってPythonからNumPyをRustに渡して操作する
-
Rustで素早くシミュレーションして結果をPythonに返してパラメータ探索,とかとりあえず思いついた ↩
-
実はPyO3のReadmeとドキュメントと数時間格闘して全くビルドできず,なぜだろうと思ったらみんなalpha版で,https://crates.io/crates/pyo3を見てやっと動くものを得た,という経緯.もっともrust-numpyと合わせたかったので,結局バージョン0.5.2のガイドを見つけて参考にして書いた ↩
Top 8
Outer WildsストーリーMODを色々やってみた
June 18, 2023, 10:04 a.m.表面符号と戯れる【量子コンピューター Advent Calendar 2023 23 日目】
Dec. 23, 2023, 3:28 a.m.位数発見アルゴリズム ~Quantum Zooやっていく【特別編】~
Jan. 27, 2023, 2:50 p.m.ストーリー追加 Mod: The Outsider やっていく日記【Outer Wilds】
Feb. 19, 2023, 6:33 a.m.意識が量子効果で生じることを示す実験結果についてちょっと調べただけのメモ
April 21, 2022, 3:09 p.m.ストーリー追加 MOD: Astral Codec やっていく日記【Outer Wilds】
Feb. 25, 2024, 8:47 a.m.Outer Wilds の量子は計算能力が(ある程度)すごいのではという話
Jan. 15, 2022, 8:35 a.m.MacでAge of Empires 2 DE (AoE2DE)をCrossOverで動かす
May 31, 2021, 11:52 a.m.Tags
- #Python (26)
- #量子力学 (25)
- #量子情報 (23)
- #Unity (11)
- #Outer Wilds (11)
- #数学 (9)
- #Mac (9)
- #AoE2 (8)
- #Linux (7)
- #Quantum Zoo (6)
- #意識 (5)
- #シミュレーション (5)
- #NumPy (5)
- #Bash (5)
- #相対論 (4)
- #Docker (4)
- #Android (4)
- #Qiskit (4)
- #Rust (3)
- #PyO3 (3)
- #GitHub (3)
- #Django (2)
- #情報理論 (2)
- #LaTeX (2)
- #AR (2)
- #Git (2)
- #iOS (2)
- #C++ (2)
- #正規表現 (2)
- #論文 (2)
- #電磁気学 (1)
- #Google Drive (1)
- #Overleaf (1)
- #Let's Encrypt (1)
- #ポケモン (1)
- #AdMob (1)
- #Autoya (1)
- #docopt (1)
- #SymPy (1)
- #AWS (1)
- #Twitter (1)
- #URP (1)
- #iMovie (1)
- #PyTorch (1)
- #C# (1)
- #Vim (1)