src/euclidean/wrap.rs

Sat, 06 Sep 2025 23:29:34 -0500

author
Tuomo Valkonen <tuomov@iki.fi>
date
Sat, 06 Sep 2025 23:29:34 -0500
branch
dev
changeset 183
d077dff509f1
parent 179
724413fc8d17
permissions
-rw-r--r--

wrap guard interface

146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
1 /*!
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
2 Wrappers for implemention [`Euclidean`] operations.
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
3 */
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
4
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
5 use crate::euclidean::Euclidean;
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
6 use crate::instance::Space;
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
7 use crate::types::Float;
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
8
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
9 pub trait WrapGuard<'a, F: Float> {
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
10 type View<'b>: Euclidean<F>
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
11 where
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
12 Self: 'b;
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
13 fn get_view(&self) -> Self::View<'_>;
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
14 }
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
15
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
16 pub trait WrapGuardMut<'a, F: Float> {
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
17 type ViewMut<'b>: Euclidean<F>
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
18 where
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
19 Self: 'b;
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
20 fn get_view_mut(&mut self) -> Self::ViewMut<'_>;
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
21 }
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
22
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
23 pub trait Wrapped: Space {
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
24 type WrappedField: Float;
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
25 type Guard<'a>: WrapGuard<'a, Self::WrappedField>
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
26 where
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
27 Self: 'a;
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
28 type GuardMut<'a>: WrapGuardMut<'a, Self::WrappedField>
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
29 where
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
30 Self: 'a;
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
31 type UnwrappedOutput;
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
32 type WrappedOutput;
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
33 fn get_guard(&self) -> Self::Guard<'_>;
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
34 fn get_guard_mut(&mut self) -> Self::GuardMut<'_>;
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
35 fn wrap(output: Self::UnwrappedOutput) -> Self::WrappedOutput;
147
d6009939e832 Bump pyo3
Tuomo Valkonen <tuomov@iki.fi>
parents: 146
diff changeset
36 }
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
37
147
d6009939e832 Bump pyo3
Tuomo Valkonen <tuomov@iki.fi>
parents: 146
diff changeset
38 #[macro_export]
d6009939e832 Bump pyo3
Tuomo Valkonen <tuomov@iki.fi>
parents: 146
diff changeset
39 macro_rules! wrap {
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
40 // Rust macros are totally fucked up. $trait:path does not work, have to
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
41 // manually code paths through $($trait:ident)::+.
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
42 (impl_unary $type:ty, $($trait:ident)::+, $fn:ident where $($qual:tt)*) => {
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
43 impl<$($qual)*> $($trait)::+ for $type {
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
44 type Output = <Self as $crate::euclidean::wrap::Wrapped>::WrappedOutput;
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
45 fn $fn(self) -> Self::Output {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
46 let a = self.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
47 Self::wrap(a.get_view().$fn())
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
48 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
49 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
50 };
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
51 (impl_binary $type:ty, $($trait:ident)::+, $fn:ident where $($qual:tt)*) => {
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
52 impl<$($qual)*> $($trait)::+<$type> for $type {
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
53 type Output = <Self as $crate::euclidean::wrap::Wrapped>::WrappedOutput;
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
54 fn $fn(self, other: $type) -> Self::Output {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
55 let a = self.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
56 let b = other.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
57 Self::wrap(a.get_view().$fn(b.get_view()))
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
58 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
59 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
60
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
61 impl<'a, $($qual)*> $($trait)::+<$type> for &'a $type {
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
62 type Output = <$type as $crate::euclidean::wrap::Wrapped>::WrappedOutput;
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
63 fn $fn(self, other: $type) -> Self::Output {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
64 let a = self.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
65 let b = other.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
66 <$type>::wrap(a.get_view().$fn(b.get_view()))
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
67 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
68 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
69
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
70 impl<'a, 'b, $($qual)*> $($trait)::+<&'b $type> for &'a $type {
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
71 type Output = <$type as $crate::euclidean::wrap::Wrapped>::WrappedOutput;
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
72 fn $fn(self, other: &'b $type) -> Self::Output {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
73 let a = self.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
74 let b = other.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
75 <$type>::wrap(a.get_view().$fn(b.get_view()))
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
76 }
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
77 }
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
78
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
79 impl<'b, $($qual)*> $($trait)::+<&'b $type> for $type {
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
80 type Output = <Self as $crate::euclidean::wrap::Wrapped>::WrappedOutput;
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
81 fn $fn(self, other: &'b $type) -> Self::Output {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
82 let a = self.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
83 let b = other.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
84 Self::wrap(a.get_view().$fn(b.get_view()))
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
85 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
86 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
87 };
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
88 (impl_scalar $F:ty, $type:ty, $($trait:ident)::+, $fn:ident where $($qual:tt)*) => {
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
89 impl<$($qual)*> $($trait)::+<$F> for $type
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
90 // where
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
91 // $type: $crate::euclidean::wrap::Wrapped<WrappedField = F>,
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
92 // //$type::Unwrapped: $($trait)::+<F>,
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
93 {
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
94 type Output = <Self as $crate::euclidean::wrap::Wrapped>::WrappedOutput;
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
95 fn $fn(self, t: $F) -> Self::Output {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
96 let a = self.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
97 Self::wrap(a.get_view().$fn(t))
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
98 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
99 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
100
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
101 impl<'a, $($qual)*> $($trait)::+<$F> for &'a $type
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
102 // where
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
103 // $type: $crate::euclidean::wrap::Wrapped<WrappedField = F>,
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
104 // //$type::Unwrapped: $($trait)::+<F>,
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
105 {
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
106 type Output = <$type as $crate::euclidean::wrap::Wrapped>::WrappedOutput;
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
107 fn $fn(self, t: $F) -> Self::Output {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
108 let a = self.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
109 <$type>::wrap(a.get_view().$fn(t))
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
110 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
111 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
112
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
113 };
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
114 (impl_scalar_lhs $F:ty, $type:ty, $($trait:ident)::+, $fn:ident where $($qual:tt)*) => {
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
115 impl<$($qual)*> $($trait)::+<$type> for $F
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
116 // where
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
117 // $type: $crate::euclidean::wrap::Wrapped<WrappedField = $F>,
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
118 // // where
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
119 // // $F: $($trait)::+<$type::Unwrapped>,
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
120 {
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
121 type Output = <$type as $crate::euclidean::wrap::Wrapped>::WrappedOutput;
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
122 fn $fn(self, rhs: $type) -> Self::Output {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
123 let b = rhs.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
124 <$type>::wrap(self.$fn(b.get_view()))
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
125 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
126 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
127 };
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
128 (impl_binary_mut $type:ty, $($trait:ident)::+, $fn:ident where $($qual:tt)*) => {
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
129 impl<$($qual)*> $($trait)::+<$type> for $type {
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
130 fn $fn(&mut self, rhs: $type) {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
131 let mut a = self.get_guard_mut();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
132 let b = rhs.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
133 a.get_view_mut().$fn(b.get_view())
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
134 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
135 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
136
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
137 impl<'b, $($qual)*> $($trait)::+<&'b $type> for $type {
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
138 fn $fn(&mut self, rhs: &'b $type) {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
139 let mut a = self.get_guard_mut();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
140 let b = rhs.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
141 a.get_view_mut().$fn(b.get_view())
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
142 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
143 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
144 };
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
145 (impl_scalar_mut $F:ty, $type:ty, $($trait:ident)::+, $fn:ident where $($qual:tt)*) => {
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
146 impl<$($qual)*> $($trait)::+<$F> for $type
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
147 // where
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
148 // $type: $crate::euclidean::wrap::Wrapped<WrappedField = F>,
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
149 // // where
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
150 // // $type::UnwrappedMut: $($trait)::+<$($trait)::+<F>>,
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
151 {
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
152 fn $fn(&mut self, t: $F) {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
153 let mut a = self.get_guard_mut();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
154 a.get_view_mut().$fn(t)
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
155 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
156 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
157 };
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
158 // ($type:ty) => {
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
159 // $crate::wrap!(imp<> do $type);
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
160 // };
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
161 ($F:ty; $type:ty where $($qual:tt)*) => {
176
21e51de02ab6 strides alt
Tuomo Valkonen <tuomov@iki.fi>
parents: 175
diff changeset
162
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
163 $crate::wrap!(impl_unary $type, std::ops::Neg, neg where $($qual)*);
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
164 $crate::wrap!(impl_binary $type, std::ops::Add, add where $($qual)*);
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
165 $crate::wrap!(impl_binary $type, std::ops::Sub, sub where $($qual)*);
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
166 $crate::wrap!(impl_scalar $F, $type, std::ops::Mul, mul where $($qual)*);
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
167 $crate::wrap!(impl_scalar $F, $type, std::ops::Div, div where $($qual)*);
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
168 $crate::wrap!(impl_scalar_lhs $F, $type, std::ops::Mul, mul where $($qual)*);
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
169 $crate::wrap!(impl_binary_mut $type, std::ops::AddAssign, add_assign where $($qual)*);
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
170 $crate::wrap!(impl_binary_mut $type, std::ops::SubAssign, sub_assign where $($qual)*);
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
171 $crate::wrap!(impl_scalar_mut $F, $type, std::ops::MulAssign, mul_assign where $($qual)*);
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
172 $crate::wrap!(impl_scalar_mut $F, $type, std::ops::DivAssign, div_assign where $($qual)*);
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
173
174
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
174 $crate::self_ownable!($type where $($qual)*);
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
175
175
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
176 impl<$($qual)*> $crate::norms::Norm<$crate::norms::L2, $F> for $type
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
177 {
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
178 fn norm(&self, p : $crate::norms::L2) -> $F {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
179 let a = self.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
180 $crate::norms::Norm::norm(&a.get_view(), p)
175
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
181 }
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
182 }
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
183
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
184 impl<$($qual)*> $crate::norms::Dist<$crate::norms::L2, $F> for $type
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
185 {
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
186 fn dist<I: $crate::instance::Instance<Self>>(&self, other : I, p : $crate::norms::L2) -> $F {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
187 other.eval_ref(|other| {
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
188 let a = self.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
189 let b = other.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
190 a.get_view().dist(b.get_view(), p)
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
191 })
175
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
192 }
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
193 }
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
194
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
195 impl<$($qual)*> $crate::norms::Normed<$F> for $type {
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
196 type NormExp = $crate::norms::L2;
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
197
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
198 fn norm_exponent(&self) -> Self::NormExp {
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
199 $crate::norms::L2
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
200 }
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
201 }
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
202
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
203 impl<$($qual)*> $crate::norms::HasDual<$F> for $type {
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
204 type DualSpace = Self;
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
205
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
206 fn dual_origin(&self) -> Self {
176
21e51de02ab6 strides alt
Tuomo Valkonen <tuomov@iki.fi>
parents: 175
diff changeset
207 $crate::linops::VectorSpace::similar_origin(self)
175
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
208 }
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
209 }
Tuomo Valkonen <tuomov@iki.fi>
parents: 174
diff changeset
210
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
211 impl<$($qual)*> $crate::euclidean::Euclidean<$F> for $type
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
212 // where
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
213 // Self: $crate::euclidean::wrap::Wrapped<WrappedField = $F>
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
214 // + Sized
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
215 // + std::ops::Mul<F, Output = <Self as $crate::linops::AXPY>::Owned>
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
216 // + std::ops::MulAssign<F>
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
217 // + std::ops::Div<F, Output = <Self as $crate::linops::AXPY>::Owned>
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
218 // + std::ops::DivAssign<F>
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
219 // + std::ops::Add<Self, Output = <Self as $crate::linops::AXPY>::Owned>
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
220 // + std::ops::Sub<Self, Output = <Self as $crate::linops::AXPY>::Owned>
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
221 // + for<'b> std::ops::Add<&'b Self, Output = <Self as $crate::linops::AXPY>::Owned>
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
222 // + for<'b> std::ops::Sub<&'b Self, Output = <Self as $crate::linops::AXPY>::Owned>
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
223 // + std::ops::AddAssign<Self>
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
224 // + for<'b> std::ops::AddAssign<&'b Self>
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
225 // + std::ops::SubAssign<Self>
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
226 // + for<'b> std::ops::SubAssign<&'b Self>
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
227 // + std::ops::Neg<Output = <Self as $crate::linops::AXPY>::Owned>,
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
228 {
174
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
229 type PrincipalE = Self;
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
230
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
231 fn dot<I: $crate::instance::Instance<Self>>(&self, other: I) -> $F {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
232 other.eval_decompose(|other| {
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
233 let a = self.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
234 let b = other.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
235 a.get_view().dot(&b.get_view())
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
236 })
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
237 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
238
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
239 fn norm2_squared(&self) -> $F {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
240 let a = self.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
241 a.get_view().norm2_squared()
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
242 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
243
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
244 fn dist2_squared<I: $crate::instance::Instance<Self>>(&self, other: I) -> $F {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
245 other.eval_decompose(|other| {
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
246 let a = self.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
247 let b = other.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
248 a.get_view().dist2_squared(b.get_view())
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
249 })
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
250 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
251 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
252
174
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
253 impl<$($qual)*> $crate::linops::VectorSpace for $type
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
254 // where
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
255 // Self : $crate::euclidean::wrap::Wrapped<WrappedField = $F>,
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
256 // Self::Unwrapped : $crate::linops::AXPY<Field = F>,
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
257 // Self: std::ops::MulAssign<F> + std::ops::DivAssign<F>,
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
258 // Self::Unwrapped: std::ops::MulAssign<F> + std::ops::DivAssign<F>,
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
259 {
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
260 type Field = $F;
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
261 type PrincipalV = Self;
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
262
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
263 /// Return a similar zero as `self`.
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
264 fn similar_origin(&self) -> Self::PrincipalV {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
265 let a = self.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
266 Self::wrap(a.get_view().similar_origin())
174
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
267 }
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
268 }
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
269
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
270 impl<$($qual)*> $crate::linops::AXPY for $type
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
271 // where
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
272 // Self : $crate::euclidean::wrap::Wrapped<WrappedField = $F>,
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
273 // Self::Unwrapped : $crate::linops::AXPY<Field = F>,
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
274 // Self: std::ops::MulAssign<F> + std::ops::DivAssign<F>,
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
275 // Self::Unwrapped: std::ops::MulAssign<F> + std::ops::DivAssign<F>,
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
276 {
174
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
277 fn axpy<I: $crate::instance::Instance<Self>>(&mut self, α: $F, x: I, β: $F) {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
278 x.eval_decompose(|other| {
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
279 let mut a = self.get_guard_mut();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
280 let b = other.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
281 $crate::linops::AXPY::axpy(&mut a.get_view_mut(), α, b.get_view(), β)
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
282 })
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
283 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
284
147
d6009939e832 Bump pyo3
Tuomo Valkonen <tuomov@iki.fi>
parents: 146
diff changeset
285 fn copy_from<I: $crate::instance::Instance<Self>>(&mut self, x: I) {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
286 x.eval_decompose(|other| {
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
287 let mut a = self.get_guard_mut();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
288 let b = other.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
289 $crate::linops::AXPY::copy_from(&mut a.get_view_mut(), b.get_view())
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
290 })
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
291 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
292
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
293 fn scale_from<I: $crate::instance::Instance<Self>>(&mut self, α: $F, x: I) {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
294 x.eval_decompose(|other| {
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
295 let mut a = self.get_guard_mut();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
296 let b = other.get_guard();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
297 $crate::linops::AXPY::scale_from(&mut a.get_view_mut(), α, b.get_view())
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
298 })
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
299 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
300
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
301 /// Set self to zero.
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
302 fn set_zero(&mut self) {
183
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
303 let mut a = self.get_guard_mut();
d077dff509f1 wrap guard interface
Tuomo Valkonen <tuomov@iki.fi>
parents: 179
diff changeset
304 a.get_view_mut().set_zero()
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
305 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
306 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
307
149
2f1798c65fd6 wrap hacks
Tuomo Valkonen <tuomov@iki.fi>
parents: 147
diff changeset
308 impl<$($qual)*> $crate::instance::Space for $type {
176
21e51de02ab6 strides alt
Tuomo Valkonen <tuomov@iki.fi>
parents: 175
diff changeset
309 type Decomp = $crate::instance::BasicDecomposition;
174
53ab61a41d70 nalgebra matrix distances
Tuomo Valkonen <tuomov@iki.fi>
parents: 149
diff changeset
310 type Principal = Self;
146
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
311 }
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
312 };
3f9a03f95457 wrap sketch
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
313 }

mercurial