src/linops.rs

branch
dev
changeset 171
fa8df5a14486
parent 168
93daa824c04a
child 177
b071a1b484f8
equal deleted inserted replaced
170:221728aeeb7e 171:fa8df5a14486
614 T: Mapping<A>, 614 T: Mapping<A>,
615 { 615 {
616 type Codomain = Pair<S::Codomain, T::Codomain>; 616 type Codomain = Pair<S::Codomain, T::Codomain>;
617 617
618 fn apply<I: Instance<A>>(&self, a: I) -> Self::Codomain { 618 fn apply<I: Instance<A>>(&self, a: I) -> Self::Codomain {
619 Pair(a.eval_ref_decompose(|r| self.0.apply(r)), self.1.apply(a)) 619 Pair(a.eval_ref(|r| self.0.apply(r)), self.1.apply(a))
620 } 620 }
621 } 621 }
622 622
623 impl<A, S, T> Linear<A> for ColOp<S, T> 623 impl<A, S, T> Linear<A> for ColOp<S, T>
624 where 624 where
635 T: GEMV<F, X, B>, 635 T: GEMV<F, X, B>,
636 F: Num, 636 F: Num,
637 Self: Linear<X, Codomain = Pair<A, B>>, 637 Self: Linear<X, Codomain = Pair<A, B>>,
638 { 638 {
639 fn gemv<I: Instance<X>>(&self, y: &mut Pair<A, B>, α: F, x: I, β: F) { 639 fn gemv<I: Instance<X>>(&self, y: &mut Pair<A, B>, α: F, x: I, β: F) {
640 x.eval_ref_decompose(|r| self.0.gemv(&mut y.0, α, r, β)); 640 x.eval_ref(|r| self.0.gemv(&mut y.0, α, r, β));
641 self.1.gemv(&mut y.1, α, x, β); 641 self.1.gemv(&mut y.1, α, x, β);
642 } 642 }
643 643
644 fn apply_mut<I: Instance<X>>(&self, y: &mut Pair<A, B>, x: I) { 644 fn apply_mut<I: Instance<X>>(&self, y: &mut Pair<A, B>, x: I) {
645 x.eval_ref_decompose(|r| self.0.apply_mut(&mut y.0, r)); 645 x.eval_ref(|r| self.0.apply_mut(&mut y.0, r));
646 self.1.apply_mut(&mut y.1, x); 646 self.1.apply_mut(&mut y.1, x);
647 } 647 }
648 648
649 /// Computes `y += Ax`, where `A` is `Self` 649 /// Computes `y += Ax`, where `A` is `Self`
650 fn apply_add<I: Instance<X>>(&self, y: &mut Pair<A, B>, x: I) { 650 fn apply_add<I: Instance<X>>(&self, y: &mut Pair<A, B>, x: I) {
651 x.eval_ref_decompose(|r| self.0.apply_add(&mut y.0, r)); 651 x.eval_ref(|r| self.0.apply_add(&mut y.0, r));
652 self.1.apply_add(&mut y.1, x); 652 self.1.apply_add(&mut y.1, x);
653 } 653 }
654 } 654 }
655 655
656 impl<A, B, Yʹ, S, T> Adjointable<Pair<A, B>, Yʹ> for RowOp<S, T> 656 impl<A, B, Yʹ, S, T> Adjointable<Pair<A, B>, Yʹ> for RowOp<S, T>

mercurial