@@ -83,7 +83,8 @@ fn main_<'py>(py: Python<'py>) -> PyResult<()> {
8383 let pyarray : & PyArray1 <i32 > = py
8484 . eval (" np.absolute(np.array([-1, -2, -3], dtype='int32'))" , Some (& dict ), None )?
8585 . extract ()? ;
86- let slice = pyarray . as_slice ()? ;
86+ let readonly = pyarray . readonly ();
87+ let slice = readonly . as_slice (). unwrap ();
8788 assert_eq! (slice , & [1 , 2 , 3 ]);
8889 Ok (())
8990}
@@ -109,37 +110,37 @@ features = ["extension-module"]
109110
110111``` rust
111112use ndarray :: {ArrayD , ArrayViewD , ArrayViewMutD };
112- use numpy :: {IntoPyArray , PyArrayDyn };
113- use pyo3 :: prelude :: {pymodule, Py , PyModule , PyResult , Python };
113+ use numpy :: {IntoPyArray , PyArrayDyn , PyReadonlyArrayDyn };
114+ use pyo3 :: prelude :: {pymodule, PyModule , PyResult , Python };
114115
115116#[pymodule]
116- fn rust_ext (_py : Python , m : & PyModule ) -> PyResult <()> {
117+ fn rust_ext (_py : Python <' _ > , m : & PyModule ) -> PyResult <()> {
117118 // immutable example
118- fn axpy (a : f64 , x : ArrayViewD <f64 >, y : ArrayViewD <f64 >) -> ArrayD <f64 > {
119+ fn axpy (a : f64 , x : ArrayViewD <' _ , f64 >, y : ArrayViewD <' _ , f64 >) -> ArrayD <f64 > {
119120 a * & x + & y
120121 }
121122
122123 // mutable example (no return)
123- fn mult (a : f64 , mut x : ArrayViewMutD <f64 >) {
124+ fn mult (a : f64 , mut x : ArrayViewMutD <' _ , f64 >) {
124125 x *= a ;
125126 }
126127
127128 // wrapper of `axpy`
128129 #[pyfn(m, " axpy" )]
129- fn axpy_py (
130- py : Python ,
130+ fn axpy_py <' py > (
131+ py : Python <' py > ,
131132 a : f64 ,
132- x : & PyArrayDyn <f64 >,
133- y : & PyArrayDyn <f64 >,
134- ) -> Py < PyArrayDyn <f64 > > {
133+ x : PyReadonlyArrayDyn <f64 >,
134+ y : PyReadonlyArrayDyn <f64 >,
135+ ) -> & ' py PyArrayDyn <f64 > {
135136 let x = x . as_array ();
136137 let y = y . as_array ();
137- axpy (a , x , y ). into_pyarray (py ). to_owned ()
138+ axpy (a , x , y ). into_pyarray (py )
138139 }
139140
140141 // wrapper of `mult`
141142 #[pyfn(m, " mult" )]
142- fn mult_py (_py : Python , a : f64 , x : & PyArrayDyn <f64 >) -> PyResult <()> {
143+ fn mult_py (_py : Python <' _ > , a : f64 , x : & PyArrayDyn <f64 >) -> PyResult <()> {
143144 let x = unsafe { x . as_array_mut () };
144145 mult (a , x );
145146 Ok (())
0 commit comments