src/bisection_tree/support.rs

branch
dev
changeset 47
a0db98c16ab5
parent 30
9f2214c961cb
child 59
9226980e45a7
child 81
d2acaaddd9af
equal deleted inserted replaced
46:bd924d62d952 47:a0db98c16ab5
144 self.base_fn.apply(x - &self.shift) 144 self.base_fn.apply(x - &self.shift)
145 } 145 }
146 } 146 }
147 147
148 impl<'a, T, V, F : Float, const N : usize> Differentiable<&'a Loc<F, N>> for Shift<T,F,N> 148 impl<'a, T, V, F : Float, const N : usize> Differentiable<&'a Loc<F, N>> for Shift<T,F,N>
149 where T : Differentiable<Loc<F, N>, Output=V> { 149 where T : Differentiable<Loc<F, N>, Derivative=V> {
150 type Output = V; 150 type Derivative = V;
151 #[inline] 151 #[inline]
152 fn differential(&self, x : &'a Loc<F, N>) -> Self::Output { 152 fn differential(&self, x : &'a Loc<F, N>) -> Self::Derivative {
153 self.base_fn.differential(x - &self.shift) 153 self.base_fn.differential(x - &self.shift)
154 } 154 }
155 } 155 }
156 156
157 impl<'a, T, V, F : Float, const N : usize> Differentiable<Loc<F, N>> for Shift<T,F,N> 157 impl<'a, T, V, F : Float, const N : usize> Differentiable<Loc<F, N>> for Shift<T,F,N>
158 where T : Differentiable<Loc<F, N>, Output=V> { 158 where T : Differentiable<Loc<F, N>, Derivative=V> {
159 type Output = V; 159 type Derivative = V;
160 #[inline] 160 #[inline]
161 fn differential(&self, x : Loc<F, N>) -> Self::Output { 161 fn differential(&self, x : Loc<F, N>) -> Self::Derivative {
162 self.base_fn.differential(x - &self.shift) 162 self.base_fn.differential(x - &self.shift)
163 } 163 }
164 } 164 }
165 165
166 impl<'a, T, F : Float, const N : usize> Support<F,N> for Shift<T,F,N> 166 impl<'a, T, F : Float, const N : usize> Support<F,N> for Shift<T,F,N>
249 self.base_fn.apply(x) * self.weight.value() 249 self.base_fn.apply(x) * self.weight.value()
250 } 250 }
251 } 251 }
252 252
253 impl<'a, T, V, F : Float, C, const N : usize> Differentiable<&'a Loc<F, N>> for Weighted<T, C> 253 impl<'a, T, V, F : Float, C, const N : usize> Differentiable<&'a Loc<F, N>> for Weighted<T, C>
254 where T : for<'b> Differentiable<&'b Loc<F, N>, Output=V>, 254 where T : for<'b> Differentiable<&'b Loc<F, N>, Derivative=V>,
255 V : std::ops::Mul<F, Output=V>, 255 V : std::ops::Mul<F, Output=V>,
256 C : Constant<Type=F> { 256 C : Constant<Type=F> {
257 type Output = V; 257 type Derivative = V;
258 #[inline] 258 #[inline]
259 fn differential(&self, x : &'a Loc<F, N>) -> Self::Output { 259 fn differential(&self, x : &'a Loc<F, N>) -> Self::Derivative {
260 self.base_fn.differential(x) * self.weight.value() 260 self.base_fn.differential(x) * self.weight.value()
261 } 261 }
262 } 262 }
263 263
264 impl<'a, T, V, F : Float, C, const N : usize> Differentiable<Loc<F, N>> for Weighted<T, C> 264 impl<'a, T, V, F : Float, C, const N : usize> Differentiable<Loc<F, N>> for Weighted<T, C>
265 where T : Differentiable<Loc<F, N>, Output=V>, 265 where T : Differentiable<Loc<F, N>, Derivative=V>,
266 V : std::ops::Mul<F, Output=V>, 266 V : std::ops::Mul<F, Output=V>,
267 C : Constant<Type=F> { 267 C : Constant<Type=F> {
268 type Output = V; 268 type Derivative = V;
269 #[inline] 269 #[inline]
270 fn differential(&self, x : Loc<F, N>) -> Self::Output { 270 fn differential(&self, x : Loc<F, N>) -> Self::Derivative {
271 self.base_fn.differential(x) * self.weight.value() 271 self.base_fn.differential(x) * self.weight.value()
272 } 272 }
273 } 273 }
274 274
275 impl<'a, T, F : Float, C, const N : usize> Support<F,N> for Weighted<T, C> 275 impl<'a, T, F : Float, C, const N : usize> Support<F,N> for Weighted<T, C>

mercurial