Rust and python bindings

I – Install pip package


pip install maturin
pip install maturin
pip install maturin

Enter fullscreen mode Exit fullscreen mode

II – Create project


maturin new --bindings pyo3 --mixed name_project
maturin new --bindings pyo3 --mixed name_project
maturin new --bindings pyo3 --mixed name_project

Enter fullscreen mode Exit fullscreen mode

III – Create rust lib


Create in src matrix.rs with your code like this

<span>use</span> <span>rand</span><span>::</span><span>Rng</span><span>;</span>
<span>pub</span> <span>fn</span> <span>generate_matrix</span><span>()</span> <span>-></span> <span>Vec</span><span><</span><span>Vec</span><span><</span><span>i32</span><span>>></span> <span>{</span>
<span>let</span> <span>mut</span> <span>matrix</span> <span>=</span> <span>vec!</span><span>[];</span>
<span>for</span> <span>_</span> <span>in</span> <span>0</span><span>..</span><span>10</span> <span>{</span>
<span>let</span> <span>mut</span> <span>row</span> <span>=</span> <span>vec!</span><span>[];</span>
<span>for</span> <span>_</span> <span>in</span> <span>0</span><span>..</span><span>10</span> <span>{</span>
<span>row</span><span>.push</span><span>(</span><span>rand</span><span>::</span><span>thread_rng</span><span>()</span><span>.gen_range</span><span>(</span><span>0</span><span>..</span><span>100</span><span>));</span>
<span>}</span>
<span>matrix</span><span>.push</span><span>(</span><span>row</span><span>);</span>
<span>}</span>
<span>matrix</span>
<span>}</span>
<span>use</span> <span>rand</span><span>::</span><span>Rng</span><span>;</span>
<span>pub</span> <span>fn</span> <span>generate_matrix</span><span>()</span> <span>-></span> <span>Vec</span><span><</span><span>Vec</span><span><</span><span>i32</span><span>>></span> <span>{</span>
    <span>let</span> <span>mut</span> <span>matrix</span> <span>=</span> <span>vec!</span><span>[];</span>
    <span>for</span> <span>_</span> <span>in</span> <span>0</span><span>..</span><span>10</span> <span>{</span>
        <span>let</span> <span>mut</span> <span>row</span> <span>=</span> <span>vec!</span><span>[];</span>
        <span>for</span> <span>_</span> <span>in</span> <span>0</span><span>..</span><span>10</span> <span>{</span>
            <span>row</span><span>.push</span><span>(</span><span>rand</span><span>::</span><span>thread_rng</span><span>()</span><span>.gen_range</span><span>(</span><span>0</span><span>..</span><span>100</span><span>));</span>
        <span>}</span>
        <span>matrix</span><span>.push</span><span>(</span><span>row</span><span>);</span>
    <span>}</span>
    <span>matrix</span>
<span>}</span>
use rand::Rng; pub fn generate_matrix() -> Vec<Vec<i32>> { let mut matrix = vec![]; for _ in 0..10 { let mut row = vec![]; for _ in 0..10 { row.push(rand::thread_rng().gen_range(0..100)); } matrix.push(row); } matrix }

Enter fullscreen mode Exit fullscreen mode

In src/lib.rs add your code like this :

<span>mod</span> <span>matrix</span><span>;</span>
<span>#[pyfunction]</span>
<span>fn</span> <span>random_matrix</span><span>()</span> <span>-></span> <span>Vec</span><span><</span><span>Vec</span><span><</span><span>i32</span><span>>></span> <span>{</span>
<span>matrix</span><span>::</span><span>generate_matrix</span><span>()</span>
<span>}</span>
<span>mod</span> <span>matrix</span><span>;</span>
<span>#[pyfunction]</span>
<span>fn</span> <span>random_matrix</span><span>()</span> <span>-></span> <span>Vec</span><span><</span><span>Vec</span><span><</span><span>i32</span><span>>></span> <span>{</span>
    <span>matrix</span><span>::</span><span>generate_matrix</span><span>()</span>
<span>}</span>
mod matrix; #[pyfunction] fn random_matrix() -> Vec<Vec<i32>> { matrix::generate_matrix() }

Enter fullscreen mode Exit fullscreen mode

And functions in the python module like this :

<span>#[pymodule]</span>
<span>fn</span> <span>my_project</span><span>(</span><span>m</span><span>:</span> <span>&</span><span>Bound</span><span><</span><span>'_</span><span>,</span> <span>PyModule</span><span>></span><span>)</span> <span>-></span> <span>PyResult</span><span><</span><span>()</span><span>></span> <span>{</span>
<span>m</span><span>.add_function</span><span>(</span><span>wrap_pyfunction!</span><span>(</span><span>random_matrix</span><span>,</span> <span>m</span><span>)</span><span>?</span><span>)</span><span>?</span><span>;</span>
<span>Ok</span><span>(())</span>
<span>}</span>
<span>#[pymodule]</span>
<span>fn</span> <span>my_project</span><span>(</span><span>m</span><span>:</span> <span>&</span><span>Bound</span><span><</span><span>'_</span><span>,</span> <span>PyModule</span><span>></span><span>)</span> <span>-></span> <span>PyResult</span><span><</span><span>()</span><span>></span> <span>{</span>
    <span>m</span><span>.add_function</span><span>(</span><span>wrap_pyfunction!</span><span>(</span><span>random_matrix</span><span>,</span> <span>m</span><span>)</span><span>?</span><span>)</span><span>?</span><span>;</span>
    <span>Ok</span><span>(())</span>
<span>}</span>
#[pymodule] fn my_project(m: &Bound<'_, PyModule>) -> PyResult<()> { m.add_function(wrap_pyfunction!(random_matrix, m)?)?; Ok(()) }

Enter fullscreen mode Exit fullscreen mode

IV – Compile


maturin build && pip install .
maturin build && pip install .
maturin build && pip install .

Enter fullscreen mode Exit fullscreen mode

V – Test


In python/name_project/test/ for exemple, create one file with this and run it.

<span>import</span> <span>my_project</span>
<span>matrix</span> <span>=</span> <span>my_project</span><span>.</span><span>random_matrix</span><span>()</span>
<span>print</span><span>(</span><span>matrix</span><span>)</span>
<span>import</span> <span>my_project</span>

<span>matrix</span> <span>=</span> <span>my_project</span><span>.</span><span>random_matrix</span><span>()</span>
<span>print</span><span>(</span><span>matrix</span><span>)</span>
import my_project matrix = my_project.random_matrix() print(matrix)

Enter fullscreen mode Exit fullscreen mode

原文链接:Rust and python bindings

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
A man's best friends are his ten fingers.
人最好的朋友是自己的十个手指
评论 抢沙发

请登录后发表评论

    暂无评论内容