--- a/src/loc.rs Sat Dec 21 23:32:20 2024 -0500 +++ b/src/loc.rs Sun Dec 22 14:54:46 2024 -0500 @@ -429,19 +429,17 @@ domination!(Linfinity, L2); domination!(L2, L1); -impl<F : Num,const N : usize> Dot<Loc<F, N>,F> for Loc<F, N> { +impl<F : Float,const N : usize> Euclidean<F> for Loc<F, N> { + type Output = Self; + /// This implementation is not stabilised as it's meant to be used for very small vectors. /// Use [`nalgebra`] for larger vectors. #[inline] - fn dot(&self, other : &Loc<F, N>) -> F { + fn dot<I : Instance<Self>>(&self, other : I) -> F { self.0.iter() - .zip(other.0.iter()) + .zip(other.ref_instance().0.iter()) .fold(F::ZERO, |m, (&v, &w)| m + v * w) } -} - -impl<F : Float,const N : usize> Euclidean<F> for Loc<F, N> { - type Output = Self; /// This implementation is not stabilised as it's meant to be used for very small vectors. /// Use [`nalgebra`] for larger vectors. @@ -696,7 +694,7 @@ type Decomp = BasicDecomposition; } -impl<F : Num, const N : usize> Mapping<Loc<F, N>> for Loc<F, N> { +impl<F : Float, const N : usize> Mapping<Loc<F, N>> for Loc<F, N> { type Codomain = F; fn apply<I : Instance<Loc<F, N>>>(&self, x : I) -> Self::Codomain { @@ -704,9 +702,9 @@ } } -impl<F : Num, const N : usize> Linear<Loc<F, N>> for Loc<F, N> { } +impl<F : Float, const N : usize> Linear<Loc<F, N>> for Loc<F, N> { } -impl<F : Num, const N : usize> AXPY<F, Loc<F, N>> for Loc<F, N> { +impl<F : Float, const N : usize> AXPY<F, Loc<F, N>> for Loc<F, N> { type Owned = Self; #[inline]