Rust binding of NumPy C-API
pip install numpy
)Note From 0.3, we migrated from rust-cpython to pyo3. If you want to use rust-cpython, use version 0.2.1 from crates.io.
Please see example directory for a complete example
``` [lib] name = "rust_ext" crate-type = ["cdylib"]
[dependencies] numpy = "0.3" pyo3 = "^0.3.1" ndarray = "0.11" ```
```rust
extern crate ndarray; extern crate numpy; extern crate pyo3;
use ndarray::; use numpy::; use pyo3::prelude::*;
fn rust_ext(py: Python, m: &PyModule) -> PyResult<()> { // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // You must write this sentence for PyArray type checker working correctly // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! let _np = PyArrayModule::import(py)?;
// immutable example
fn axpy(a: f64, x: ArrayViewD<f64>, y: ArrayViewD<f64>) -> ArrayD<f64> {
a * &x + &y
}
// mutable example (no return)
fn mult(a: f64, mut x: ArrayViewMutD<f64>) {
x *= a;
}
// wrapper of `axpy`
#[pyfn(m, "axpy")]
fn axpy_py(py: Python, a: f64, x: &PyArray, y: &PyArray) -> PyResult<PyArray> {
let np = PyArrayModule::import(py)?;
let x = x.as_array().into_pyresult("x must be f64 array")?;
let y = y.as_array().into_pyresult("y must be f64 array")?;
Ok(axpy(a, x, y).into_pyarray(py, &np))
}
// wrapper of `mult`
#[pyfn(m, "mult")]
fn mult_py(_py: Python, a: f64, x: &PyArray) -> PyResult<()> {
let x = x.as_array_mut().into_pyresult("x must be f64 array")?;
mult(a, x);
Ok(())
}
Ok(())
} ```
This project is in pre-alpha version. We need your feedback. Don't hesitate to open issues!
v0.3.0
v0.2.1
IntoPyErr
, IntoPyResult
for error translationv0.2.0
IntoPyArray
, ToPyArray
PyArray
creation functions are changedv0.1.1
v0.1.0