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() |