@@ -99,8 +99,8 @@ pub fn get_array_module(py: Python<'_>) -> PyResult<&PyModule> {
9999 PyModule :: import ( py, npyffi:: array:: MOD_NAME )
100100}
101101
102- impl < T , D > type_object:: PyObjectLayout < PyArray < T , D > > for npyffi:: PyArrayObject { }
103- impl < T , D > type_object:: PyObjectSizedLayout < PyArray < T , D > > for npyffi:: PyArrayObject { }
102+ unsafe impl < T , D > type_object:: PyLayout < PyArray < T , D > > for npyffi:: PyArrayObject { }
103+ impl < T , D > type_object:: PySizedLayout < PyArray < T , D > > for npyffi:: PyArrayObject { }
104104
105105pyobject_native_type_convert ! (
106106 PyArray <T , D >,
@@ -170,7 +170,7 @@ impl<T, D> PyArray<T, D> {
170170 /// let not_contiguous: &numpy::PyArray1<f32> = py
171171 /// .eval("np.zeros((3, 5))[::2, 4]", Some(locals), None)
172172 /// .unwrap()
173- /// .downcast_ref ()
173+ /// .downcast ()
174174 /// .unwrap();
175175 /// assert!(!not_contiguous.is_contiguous());
176176 /// # }
@@ -390,19 +390,23 @@ impl<T: TypeNum, D: Dimension> PyArray<T, D> {
390390 ID : IntoDimension < Dim = D > ,
391391 {
392392 let dims = dims. into_dimension ( ) ;
393- let container = SliceBox :: new ( py, slice) . expect ( "SliceBox creation failed" ) ;
393+ let container = SliceBox :: new ( slice) ;
394+ let data_ptr = container. data ;
395+ let cell = pyo3:: PyClassInitializer :: from ( container)
396+ . create_cell ( py)
397+ . expect ( "Object creation failed." ) ;
394398 let ptr = PY_ARRAY_API . PyArray_New (
395399 PY_ARRAY_API . get_type_object ( npyffi:: ArrayType :: PyArray_Type ) ,
396400 dims. ndim_cint ( ) ,
397401 dims. as_dims_ptr ( ) ,
398402 T :: typenum_default ( ) ,
399403 strides as * mut _ , // strides
400- ( * container ) . data as _ , // data
404+ data_ptr as _ , // data
401405 mem:: size_of :: < T > ( ) as i32 , // itemsize
402406 0 , // flag
403407 :: std:: ptr:: null_mut ( ) , //obj
404408 ) ;
405- PY_ARRAY_API . PyArray_SetBaseObject ( ptr as * mut npyffi:: PyArrayObject , container as _ ) ;
409+ PY_ARRAY_API . PyArray_SetBaseObject ( ptr as * mut npyffi:: PyArrayObject , cell as _ ) ;
406410 Self :: from_owned_ptr ( py, ptr)
407411 }
408412
@@ -455,7 +459,7 @@ impl<T: TypeNum, D: Dimension> PyArray<T, D> {
455459 /// let not_contiguous: &PyArray1<f32> = py
456460 /// .eval("np.zeros((3, 5))[[0, 2], [3, 4]]", Some(locals), None)
457461 /// .unwrap()
458- /// .downcast_ref ()
462+ /// .downcast ()
459463 /// .unwrap();
460464 /// assert!(not_contiguous.as_slice().is_err());
461465 /// # }
0 commit comments