@@ -1066,7 +1066,7 @@ impl<T: Element> PyArray<T, Ix1> {
1066
1066
unsafe {
1067
1067
let array = PyArray :: new_bound ( py, [ slice. len ( ) ] , false ) ;
1068
1068
let mut data_ptr = array. data ( ) ;
1069
- clone_elements ( slice, & mut data_ptr) ;
1069
+ clone_elements ( py , slice, & mut data_ptr) ;
1070
1070
array
1071
1071
}
1072
1072
}
@@ -1180,7 +1180,7 @@ impl<T: Element> PyArray<T, Ix2> {
1180
1180
cold ( ) ;
1181
1181
return Err ( FromVecError :: new ( v. len ( ) , len2) ) ;
1182
1182
}
1183
- clone_elements ( v, & mut data_ptr) ;
1183
+ clone_elements ( py , v, & mut data_ptr) ;
1184
1184
}
1185
1185
Ok ( array)
1186
1186
}
@@ -1245,7 +1245,7 @@ impl<T: Element> PyArray<T, Ix3> {
1245
1245
cold ( ) ;
1246
1246
return Err ( FromVecError :: new ( v. len ( ) , len3) ) ;
1247
1247
}
1248
- clone_elements ( v, & mut data_ptr) ;
1248
+ clone_elements ( py , v, & mut data_ptr) ;
1249
1249
}
1250
1250
}
1251
1251
Ok ( array)
@@ -1466,13 +1466,13 @@ impl<T: Element + AsPrimitive<f64>> PyArray<T, Ix1> {
1466
1466
}
1467
1467
}
1468
1468
1469
- unsafe fn clone_elements < T : Element > ( elems : & [ T ] , data_ptr : & mut * mut T ) {
1469
+ unsafe fn clone_elements < T : Element > ( py : Python < ' _ > , elems : & [ T ] , data_ptr : & mut * mut T ) {
1470
1470
if T :: IS_COPY {
1471
1471
ptr:: copy_nonoverlapping ( elems. as_ptr ( ) , * data_ptr, elems. len ( ) ) ;
1472
1472
* data_ptr = data_ptr. add ( elems. len ( ) ) ;
1473
1473
} else {
1474
1474
for elem in elems {
1475
- data_ptr. write ( elem. clone ( ) ) ;
1475
+ data_ptr. write ( elem. py_clone ( py ) ) ;
1476
1476
* data_ptr = data_ptr. add ( 1 ) ;
1477
1477
}
1478
1478
}
0 commit comments