--- a/src/nalgebra_support.rs Mon Sep 01 13:51:03 2025 -0500 +++ b/src/nalgebra_support.rs Mon Sep 01 20:55:34 2025 -0500 @@ -273,10 +273,12 @@ impl<E, M, S> Euclidean<E> for Vector<E, M, S> where M: Dim, - S: StorageMut<E, M> + Clone, + S: Storage<E, M>, E: Float + Scalar + Zero + One + RealField, DefaultAllocator: Allocator<M>, { + type OwnedEuclidean = OVector<E, M>; + #[inline] fn dot<I: Instance<Self>>(&self, other: I) -> E { other.eval_ref_decompose(|r| Vector::<E, M, S>::dot(self, r)) @@ -296,7 +298,7 @@ impl<E, M, S> StaticEuclidean<E> for Vector<E, M, S> where M: DimName, - S: StorageMut<E, M> + Clone, + S: Storage<E, M>, E: Float + Scalar + Zero + One + RealField, DefaultAllocator: Allocator<M>, { @@ -310,7 +312,7 @@ impl<E, M, S> Normed<E> for Vector<E, M, S> where M: Dim, - S: Storage<E, M> + Clone, + S: Storage<E, M>, E: Float + Scalar + Zero + One + RealField, DefaultAllocator: Allocator<M>, { @@ -330,12 +332,11 @@ impl<E, M, S> HasDual<E> for Vector<E, M, S> where M: Dim, - S: StorageMut<E, M> + Clone, + S: Storage<E, M>, E: Float + Scalar + Zero + One + RealField, DefaultAllocator: Allocator<M>, { - // TODO: Doesn't work with different storage formats. - type DualSpace = Vector<E, M, S>; + type DualSpace = OVector<E, M>; fn dual_origin(&self) -> OVector<E, M> { OVector::zeros_generic(M::from_usize(self.len()), Const)