| 4 use std::marker::PhantomData; |
4 use std::marker::PhantomData; |
| 5 use std::sync::Arc; |
5 use std::sync::Arc; |
| 6 use crate::types::Float; |
6 use crate::types::Float; |
| 7 use crate::mapping::{ |
7 use crate::mapping::{ |
| 8 Instance, Mapping, DifferentiableImpl, DifferentiableMapping, Space, |
8 Instance, Mapping, DifferentiableImpl, DifferentiableMapping, Space, |
| 9 BasicDecomposition, |
9 BasicDecomposition, ArithmeticFalse, |
| 10 }; |
10 }; |
| 11 //use crate::linops::{Apply, Linear}; |
11 //use crate::linops::{Apply, Linear}; |
| 12 use crate::sets::Set; |
12 use crate::sets::Set; |
| 13 use crate::sets::Cube; |
13 use crate::sets::Cube; |
| 14 use crate::loc::Loc; |
14 use crate::loc::Loc; |
| 413 G::SupportType : LocalAnalysis<F, BT::Agg, N> + Mapping<Loc<F, N>, Codomain = V>, |
413 G::SupportType : LocalAnalysis<F, BT::Agg, N> + Mapping<Loc<F, N>, Codomain = V>, |
| 414 V : Sum + Space, |
414 V : Sum + Space, |
| 415 { |
415 { |
| 416 |
416 |
| 417 type Codomain = V; |
417 type Codomain = V; |
| |
418 type ArithmeticOptIn = ArithmeticFalse; |
| 418 |
419 |
| 419 fn apply<I : Instance<Loc<F,N>>>(&self, x : I) -> Self::Codomain { |
420 fn apply<I : Instance<Loc<F,N>>>(&self, x : I) -> Self::Codomain { |
| 420 let xc = x.cow(); |
421 let xc = x.cow(); |
| 421 self.bt.iter_at(&*xc) |
422 self.bt.iter_at(&*xc) |
| 422 .map(|&d| self.generator.support_for(d).apply(&*xc)).sum() |
423 .map(|&d| self.generator.support_for(d).apply(&*xc)).sum() |