{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleContexts #-}
module Synthesizer.Generic.Analysis where
import qualified Synthesizer.Plain.Analysis as Ana
import qualified Synthesizer.State.Analysis as AnaS
import qualified Synthesizer.Generic.Signal as SigG
import qualified Algebra.Algebraic as Algebraic
import qualified Algebra.Field as Field
import qualified Algebra.RealRing as RealRing
import qualified Algebra.Ring as Ring
import qualified Algebra.NormedSpace.Maximum as NormedMax
import qualified Algebra.NormedSpace.Euclidean as NormedEuc
import qualified Algebra.NormedSpace.Sum as NormedSum
import NumericPrelude.Numeric
import NumericPrelude.Base
volumeMaximum :: (RealRing.C y, SigG.Read sig y) => sig y -> y
volumeMaximum :: forall y (sig :: * -> *). (C y, Read sig y) => sig y -> y
volumeMaximum =
T y -> y
forall y. C y => T y -> y
AnaS.volumeMaximum (T y -> y) -> (sig y -> T y) -> sig y -> y
forall b c a. (b -> c) -> (a -> b) -> a -> c
. sig y -> T y
forall y. Storage (sig y) => sig y -> T y
forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
volumeEuclidean :: (Algebraic.C y, SigG.Read sig y) => sig y -> y
volumeEuclidean :: forall y (sig :: * -> *). (C y, Read sig y) => sig y -> y
volumeEuclidean =
T y -> y
forall y. C y => T y -> y
AnaS.volumeEuclidean (T y -> y) -> (sig y -> T y) -> sig y -> y
forall b c a. (b -> c) -> (a -> b) -> a -> c
. sig y -> T y
forall y. Storage (sig y) => sig y -> T y
forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
volumeEuclideanSqr :: (Field.C y, SigG.Read sig y) => sig y -> y
volumeEuclideanSqr :: forall y (sig :: * -> *). (C y, Read sig y) => sig y -> y
volumeEuclideanSqr =
T y -> y
forall y. C y => T y -> y
AnaS.volumeEuclideanSqr (T y -> y) -> (sig y -> T y) -> sig y -> y
forall b c a. (b -> c) -> (a -> b) -> a -> c
. sig y -> T y
forall y. Storage (sig y) => sig y -> T y
forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
volumeSum :: (Field.C y, RealRing.C y, SigG.Read sig y) => sig y -> y
volumeSum :: forall y (sig :: * -> *). (C y, C y, Read sig y) => sig y -> y
volumeSum =
T y -> y
forall y. (C y, C y) => T y -> y
AnaS.volumeSum (T y -> y) -> (sig y -> T y) -> sig y -> y
forall b c a. (b -> c) -> (a -> b) -> a -> c
. sig y -> T y
forall y. Storage (sig y) => sig y -> T y
forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
volumeVectorMaximum ::
(NormedMax.C y yv, Ord y, SigG.Read sig yv) =>
sig yv -> y
volumeVectorMaximum :: forall y yv (sig :: * -> *).
(C y yv, Ord y, Read sig yv) =>
sig yv -> y
volumeVectorMaximum =
T yv -> y
forall y yv. (C y yv, Ord y) => T yv -> y
AnaS.volumeVectorMaximum (T yv -> y) -> (sig yv -> T yv) -> sig yv -> y
forall b c a. (b -> c) -> (a -> b) -> a -> c
. sig yv -> T yv
forall y. Storage (sig y) => sig y -> T y
forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
volumeVectorEuclidean ::
(Algebraic.C y, NormedEuc.C y yv, SigG.Read sig yv) =>
sig yv -> y
volumeVectorEuclidean :: forall y yv (sig :: * -> *).
(C y, C y yv, Read sig yv) =>
sig yv -> y
volumeVectorEuclidean =
T yv -> y
forall y yv. (C y, C y yv) => T yv -> y
AnaS.volumeVectorEuclidean (T yv -> y) -> (sig yv -> T yv) -> sig yv -> y
forall b c a. (b -> c) -> (a -> b) -> a -> c
. sig yv -> T yv
forall y. Storage (sig y) => sig y -> T y
forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
volumeVectorEuclideanSqr ::
(Field.C y, NormedEuc.Sqr y yv, SigG.Read sig yv) =>
sig yv -> y
volumeVectorEuclideanSqr :: forall y yv (sig :: * -> *).
(C y, Sqr y yv, Read sig yv) =>
sig yv -> y
volumeVectorEuclideanSqr =
T yv -> y
forall y yv. (C y, Sqr y yv) => T yv -> y
AnaS.volumeVectorEuclideanSqr (T yv -> y) -> (sig yv -> T yv) -> sig yv -> y
forall b c a. (b -> c) -> (a -> b) -> a -> c
. sig yv -> T yv
forall y. Storage (sig y) => sig y -> T y
forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
volumeVectorSum ::
(NormedSum.C y yv, Field.C y, SigG.Read sig yv) =>
sig yv -> y
volumeVectorSum :: forall y yv (sig :: * -> *).
(C y yv, C y, Read sig yv) =>
sig yv -> y
volumeVectorSum =
T yv -> y
forall y yv. (C y yv, C y) => T yv -> y
AnaS.volumeVectorSum (T yv -> y) -> (sig yv -> T yv) -> sig yv -> y
forall b c a. (b -> c) -> (a -> b) -> a -> c
. sig yv -> T yv
forall y. Storage (sig y) => sig y -> T y
forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
bounds :: (Ord y, SigG.Read sig y) => sig y -> (y,y)
bounds :: forall y (sig :: * -> *). (Ord y, Read sig y) => sig y -> (y, y)
bounds =
T y -> (y, y)
forall y. Ord y => T y -> (y, y)
AnaS.bounds (T y -> (y, y)) -> (sig y -> T y) -> sig y -> (y, y)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. sig y -> T y
forall y. Storage (sig y) => sig y -> T y
forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
directCurrentOffset ::
(Field.C y, SigG.Read sig y) => sig y -> y
directCurrentOffset :: forall y (sig :: * -> *). (C y, Read sig y) => sig y -> y
directCurrentOffset = sig y -> y
forall y (sig :: * -> *). (C y, Read sig y) => sig y -> y
average
scalarProduct ::
(Ring.C y, SigG.Read sig y) => sig y -> sig y -> y
scalarProduct :: forall y (sig :: * -> *). (C y, Read sig y) => sig y -> sig y -> y
scalarProduct sig y
xs sig y
ys =
T y -> T y -> y
forall y. C y => T y -> T y -> y
AnaS.scalarProduct (sig y -> T y
forall y. Storage (sig y) => sig y -> T y
forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState sig y
xs) (sig y -> T y
forall y. Storage (sig y) => sig y -> T y
forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState sig y
ys)
centroid :: (Field.C y, SigG.Read sig y) => sig y -> y
centroid :: forall y (sig :: * -> *). (C y, Read sig y) => sig y -> y
centroid =
T y -> y
forall y. C y => T y -> y
AnaS.centroid (T y -> y) -> (sig y -> T y) -> sig y -> y
forall b c a. (b -> c) -> (a -> b) -> a -> c
. sig y -> T y
forall y. Storage (sig y) => sig y -> T y
forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
average :: (Field.C y, SigG.Read sig y) => sig y -> y
average :: forall y (sig :: * -> *). (C y, Read sig y) => sig y -> y
average =
T y -> y
forall y. C y => T y -> y
AnaS.average (T y -> y) -> (sig y -> T y) -> sig y -> y
forall b c a. (b -> c) -> (a -> b) -> a -> c
. sig y -> T y
forall y. Storage (sig y) => sig y -> T y
forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState
rectify :: (RealRing.C y, SigG.Transform sig y) => sig y -> sig y
rectify :: forall y (sig :: * -> *). (C y, Transform sig y) => sig y -> sig y
rectify = (y -> y) -> sig y -> sig y
forall y0 y1.
(Storage (sig y0), Storage (sig y1)) =>
(y0 -> y1) -> sig y0 -> sig y1
forall (sig :: * -> *) y0 y1.
(Transform0 sig, Storage (sig y0), Storage (sig y1)) =>
(y0 -> y1) -> sig y0 -> sig y1
SigG.map y -> y
forall a. C a => a -> a
abs
zeros :: (Ord y, Ring.C y, SigG.Transform sig y, SigG.Transform sig Bool) =>
sig y -> sig Bool
zeros :: forall y (sig :: * -> *).
(Ord y, C y, Transform sig y, Transform sig Bool) =>
sig y -> sig Bool
zeros =
(Bool -> Bool -> Bool) -> sig Bool -> sig Bool
forall (sig :: * -> *) a.
(Read sig a, Transform sig a) =>
(a -> a -> a) -> sig a -> sig a
SigG.mapAdjacent Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
(/=) (sig Bool -> sig Bool) -> (sig y -> sig Bool) -> sig y -> sig Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (y -> Bool) -> sig y -> sig Bool
forall y0 y1.
(Storage (sig y0), Storage (sig y1)) =>
(y0 -> y1) -> sig y0 -> sig y1
forall (sig :: * -> *) y0 y1.
(Transform0 sig, Storage (sig y0), Storage (sig y1)) =>
(y0 -> y1) -> sig y0 -> sig y1
SigG.map (y -> y -> Bool
forall a. Ord a => a -> a -> Bool
>=y
forall a. C a => a
zero)
flipFlopHysteresis ::
(Ord y, SigG.Transform sig y, SigG.Transform sig Ana.BinaryLevel) =>
(y,y) -> Ana.BinaryLevel -> sig y -> sig Ana.BinaryLevel
flipFlopHysteresis :: forall y (sig :: * -> *).
(Ord y, Transform sig y, Transform sig BinaryLevel) =>
(y, y) -> BinaryLevel -> sig y -> sig BinaryLevel
flipFlopHysteresis (y, y)
bnds = (BinaryLevel -> y -> BinaryLevel)
-> BinaryLevel -> sig y -> sig BinaryLevel
forall y0 y1.
(Storage (sig y0), Storage (sig y1)) =>
(y1 -> y0 -> y1) -> y1 -> sig y0 -> sig y1
forall (sig :: * -> *) y0 y1.
(Transform0 sig, Storage (sig y0), Storage (sig y1)) =>
(y1 -> y0 -> y1) -> y1 -> sig y0 -> sig y1
SigG.scanL ((y, y) -> BinaryLevel -> y -> BinaryLevel
forall a. Ord a => (a, a) -> BinaryLevel -> a -> BinaryLevel
Ana.flipFlopHysteresisStep (y, y)
bnds)
chirpTransform ::
(SigG.Write sig y, Ring.C y) =>
SigG.LazySize -> y -> sig y -> sig y
chirpTransform :: forall (sig :: * -> *) y.
(Write sig y, C y) =>
LazySize -> y -> sig y -> sig y
chirpTransform LazySize
size y
z =
LazySize -> T y -> sig y
forall (sig :: * -> *) y. Write sig y => LazySize -> T y -> sig y
SigG.fromState LazySize
size (T y -> sig y) -> (sig y -> T y) -> sig y -> sig y
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
y -> T y -> T y
forall y. C y => y -> T y -> T y
AnaS.chirpTransform y
z (T y -> T y) -> (sig y -> T y) -> sig y -> T y
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
sig y -> T y
forall y. Storage (sig y) => sig y -> T y
forall (sig :: * -> *) y.
(Read0 sig, Storage (sig y)) =>
sig y -> T y
SigG.toState