src/direct_product.rs

branch
dev
changeset 85
f2fc6115b897
parent 82
981069ef919b
equal deleted inserted replaced
84:4c2e5e65d510 85:f2fc6115b897
280 A : AXPY<F, U>, 280 A : AXPY<F, U>,
281 B : AXPY<F, V>, 281 B : AXPY<F, V>,
282 F : Num, 282 F : Num,
283 Self : MulAssign<F>, 283 Self : MulAssign<F>,
284 Pair<A, B> : MulAssign<F>, 284 Pair<A, B> : MulAssign<F>,
285 Pair<A::Owned, B::Owned> : AXPY<F, Pair<U, V>>, 285 {
286 { 286
287 287 fn add_mul<I : Instance<Pair<U,V>>>(self, α : F, x : I, β : F) -> Pair<U, V> {
288 type Owned = Pair<A::Owned, B::Owned>;
289
290 fn add_mul<I : Instance<Pair<U,V>>>(self, α : F, x : I, β : F) -> Self::Owned {
291 let Pair(u, v) = x.decompose(); 288 let Pair(u, v) = x.decompose();
292 Pair(self.0.add_mul(α, u, β), self.1.add_mul(α, v, β)) 289 Pair(self.0.add_mul(α, u, β), self.1.add_mul(α, v, β))
293 } 290 }
294 291
295 fn axpy<I : Instance<Pair<U,V>>>(&mut self, α : F, x : I, β : F) { 292 fn axpy<I : Instance<Pair<U,V>>>(&mut self, α : F, x : I, β : F) {
309 self.0.scale_from(α, u); 306 self.0.scale_from(α, u);
310 self.1.scale_from(α, v); 307 self.1.scale_from(α, v);
311 } 308 }
312 309
313 /// Return a similar zero as `self`. 310 /// Return a similar zero as `self`.
314 fn similar_origin(&self) -> Self::Owned { 311 fn similar_origin(&self) -> Pair<U, V> {
315 Pair(self.0.similar_origin(), self.1.similar_origin()) 312 Pair(self.0.similar_origin(), self.1.similar_origin())
316 } 313 }
317 314
318 /// Set self to zero. 315 /// Set self to zero.
319 fn set_zero(&mut self) { 316 fn set_zero(&mut self) {

mercurial