src/linops.rs

branch
dev
changeset 130
0a689881b0f1
parent 129
d2994e34a5f5
child 131
8264d72aa347
child 133
2b13f8a0c8ba
--- a/src/linops.rs	Mon May 12 15:42:48 2025 -0500
+++ b/src/linops.rs	Mon May 12 16:28:50 2025 -0500
@@ -11,7 +11,7 @@
 use numeric_literals::replace_float_literals;
 use serde::Serialize;
 use std::marker::PhantomData;
-use std::ops::Mul;
+use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Neg, Sub, SubAssign};
 
 /// Trait for linear operators on `X`.
 pub trait Linear<X: Space>: Mapping<X> {}
@@ -27,7 +27,21 @@
 
 /// Efficient in-place summation.
 #[replace_float_literals(Self::Field::cast_from(literal))]
-pub trait AXPY<X = Self>: Space + std::ops::MulAssign<Self::Field>
+pub trait AXPY<X = Self>:
+    Space
+    + MulAssign<Self::Field>
+    + DivAssign<Self::Field>
+    + AddAssign<Self>
+    + AddAssign<Self::Owned>
+    + SubAssign<Self>
+    + SubAssign<Self::Owned>
+    + Mul<Self::Field, Output = Self::Owned>
+    + Div<Self::Field, Output = Self::Owned>
+    + Add<Self, Output = Self::Owned>
+    + Add<Self::Owned, Output = Self::Owned>
+    + Sub<Self, Output = Self::Owned>
+    + Sub<Self::Owned, Output = Self::Owned>
+    + Neg
 where
     X: Space,
 {
@@ -504,8 +518,6 @@
 #[derive(Clone, Copy, Debug, Serialize, Eq, PartialEq)]
 pub struct RowOp<S, T>(pub S, pub T);
 
-use std::ops::Add;
-
 impl<A, B, S, T> Mapping<Pair<A, B>> for RowOp<S, T>
 where
     A: Space,

mercurial