module Language.Paraiso.Optimization.Graph (
Optimization, OptimizationEx,
OptimizationOf, Ready,
gmap
) where
import qualified Algebra.Additive as Additive
import qualified Algebra.Ring as Ring
import qualified Data.Tensor.TypeLevel as Tensor
import Data.Typeable
import qualified Data.Vector as V
import Language.Paraiso.Annotation (Annotation)
import Language.Paraiso.OM.Graph
import Language.Paraiso.OM
import Language.Paraiso.Prelude
class (Tensor.Vector v,
Num g,
Ord g,
Ring.C g,
Show g,
Typeable g,
Additive.C (v g),
Ord (v g),
Show (v g))
=> Ready (v :: * -> *) (g :: *)
instance (Tensor.Vector v,
Num g,
Ord g,
Ring.C g,
Show g,
Typeable g,
Additive.C (v g),
Ord (v g),
Show (v g))
=> Ready (v :: * -> *) (g :: *)
type Optimization = forall (v :: * -> *) (g :: *). Graph v g Annotation -> Graph v g Annotation
type OptimizationEx = forall (v :: * -> *) (g :: *) (a :: *). OM v g a -> OM v g a
type OptimizationOf (v :: * -> *) (g :: *) = Graph v g Annotation -> Graph v g Annotation
gmap :: (Graph v g a -> Graph v g a) -> OM v g a -> OM v g a
gmap f om =
om{ kernels = V.map (\k -> k{ dataflow = f $ dataflow k}) $ kernels om}