-
Notifications
You must be signed in to change notification settings - Fork 338
Closed
Description
I am trying to migrate ndarray-linalg
away from the use of ArrayBase::uninitialized
to ArrayBase::uninit
. I do not see how to do the conversion in the following case (simplified from ndarray_linalg::convert::clone_with_layout
:
fn foo<A, Si, So>(a: &ArrayBase<Si, Ix2>) -> ArrayBase<So, Ix2>
where
A: Copy,
Si: Data<Elem = A>,
So: DataOwned<Elem = A> + DataMut,
{
let layout: (usize, usize) = (1, 1); // simplified from the original
let mut b = ArrayBase::uninitialized(layout);
b.assign(a);
b
}
My best attempt is:
fn foo<A, Si, So>(l: MatrixLayout, a: &ArrayBase<Si, Ix2>) -> ArrayBase<So, Ix2>
where
A: Copy,
Si: Data<Elem = A>,
So: DataOwned<Elem = A> + DataMut,
{
let layout: (usize, usize) = (1, 1); // simplified from the original
let mut b: ArrayBase<<So as DataOwned>::MaybeUninit, Ix2> = ArrayBase::uninit(layout);
a.assign_to(&mut);
unsafe { b.assume_init() }
}
which does not work because the storage for b
does not impl DataMut
.
Is the use of DataOwned::MaybeUninit::uninit
the way to go ? Then how can I initialize it, since it doesn't implement DataMut
?
Metadata
Metadata
Assignees
Labels
No labels