diff -r 05089fbc0310 -r d8305c9b6fdf src/direct_product.rs --- a/src/direct_product.rs Tue Dec 31 08:30:43 2024 -0500 +++ b/src/direct_product.rs Sat Dec 21 23:32:20 2024 -0500 @@ -270,10 +270,6 @@ { type Output = PairOutput; - fn similar_origin(&self) -> PairOutput { - Pair(self.0.similar_origin(), self.1.similar_origin()) - } - fn dist2_squared(&self, Pair(ref u, ref v) : &Self) -> F { self.0.dist2_squared(u) + self.1.dist2_squared(v) } @@ -285,9 +281,14 @@ V : Space, A : AXPY, B : AXPY, - F : Num + F : Num, + Self : MulAssign, + Pair : MulAssign, + Pair : AXPY>, { + type Owned = Pair; + fn axpy>>(&mut self, α : F, x : I, β : F) { let Pair(u, v) = x.decompose(); self.0.axpy(α, u, β); @@ -305,6 +306,17 @@ self.0.scale_from(α, u); self.1.scale_from(α, v); } + + /// Return a similar zero as `self`. + fn similar_origin(&self) -> Self::Owned { + Pair(self.0.similar_origin(), self.1.similar_origin()) + } + + /// Set self to zero. + fn set_zero(&mut self) { + self.0.set_zero(); + self.1.set_zero(); + } } /// [`Decomposition`] for working with [`Pair`]s.