src/direct_product.rs

branch
dev
changeset 60
848ecc05becf
parent 59
9226980e45a7
child 62
d8305c9b6fdf
child 79
d63e40672dd6
--- a/src/direct_product.rs	Tue Dec 31 08:30:02 2024 -0500
+++ b/src/direct_product.rs	Tue Dec 31 09:02:55 2024 -0500
@@ -15,7 +15,7 @@
 use crate::mapping::Space;
 use crate::linops::AXPY;
 use crate::loc::Loc;
-use crate::norms::{Norm, PairNorm, NormExponent};
+use crate::norms::{Norm, PairNorm, NormExponent, Normed, HasDual, L2};
 
 #[derive(Debug,Clone,Copy,PartialEq,Eq,Serialize,Deserialize)]
 pub struct Pair<A, B> (pub A, pub B);
@@ -468,3 +468,29 @@
 }
 
 
+impl<F : Float, A, B> Normed<F> for Pair<A,B>
+where
+    A : Normed<F>,
+    B : Normed<F>,
+{
+    type NormExp = PairNorm<A::NormExp, B::NormExp, L2>;
+
+    #[inline]
+    fn norm_exponent(&self) -> Self::NormExp {
+        PairNorm(self.0.norm_exponent(), self.1.norm_exponent(), L2)
+    }
+
+    #[inline]
+    fn is_zero(&self) -> bool {
+        self.0.is_zero() && self.1.is_zero()
+    }
+}
+
+impl<F : Float, A, B> HasDual<F> for Pair<A,B>
+where
+    A : HasDual<F>,
+    B : HasDual<F>,
+
+{
+    type DualSpace = Pair<A::DualSpace, B::DualSpace>;
+}

mercurial