--- a/src/nalgebra_support.rs Sat Dec 21 14:27:14 2024 -0500 +++ b/src/nalgebra_support.rs Fri Dec 20 16:14:17 2024 -0500 @@ -61,11 +61,13 @@ DefaultAllocator : Allocator<N,K>, DefaultAllocator : Allocator<M,K>, DefaultAllocator : Allocator<N,M>, - DefaultAllocator : Allocator<M,N> { + DefaultAllocator : Allocator<M,N> +{ + type LinCodomain = OMatrix<E,N,K>; } -impl<SM,SV1,SV2,N,M,K,E> GEMV<E, Matrix<E,M,K,SV1>, Matrix<E,N,K,SV2>> for Matrix<E,N,M,SM> -where SM: Storage<E,N,M>, SV1: Storage<E,M,K> + Clone, SV2: StorageMut<E,N,K>, +impl<SM,SV1,N,M,K,E> GEMV<Matrix<E,M,K,SV1>> for Matrix<E,N,M,SM> +where SM: Storage<E,N,M>, SV1: Storage<E,M,K> + Clone, N : Dim, M : Dim, K : Dim, E : Scalar + Zero + One + Float, DefaultAllocator : Allocator<N,K>, DefaultAllocator : Allocator<M,K>, @@ -85,18 +87,19 @@ } } -impl<SM,SV1,M,E> AXPY<E, Vector<E,M,SV1>> for Vector<E,M,SM> -where SM: StorageMut<E,M> + Clone, SV1: Storage<E,M> + Clone, +impl<SM,M,E> AXPY for Vector<E,M,SM> +where SM: StorageMut<E,M> + Clone, M : Dim, E : Scalar + Zero + One + Float, DefaultAllocator : Allocator<M> { + type Field = E; #[inline] - fn axpy<I : Instance<Vector<E,M,SV1>>>(&mut self, α : E, x : I, β : E) { + fn axpy<I : Instance<Vector<E,M,SM>>>(&mut self, α : E, x : I, β : E) { x.eval(|x̃| Matrix::axpy(self, α, x̃, β)) } #[inline] - fn copy_from<I : Instance<Vector<E,M,SV1>>>(&mut self, y : I) { + fn copy_from<I : Instance<Vector<E,M,SM>>>(&mut self, y : I) { y.eval(|ỹ| Matrix::copy_from(self, ỹ)) } }