feldspar-language-0.4.0.2: Examples/Simple/Complex.hs
module Examples.Simple.Complex where
import qualified Prelude
import Feldspar
import Feldspar.Vector
import Feldspar.Compiler
-- | Creation of complex values, addition and conjugation.
complex1 :: Data (Complex Float)
complex1 = conjugate $ value (3 :+ 4) + value (0 :+ 9)
-- | Constant vector containing complex values.
complex2 :: Data [Complex Float]
complex2 = wrap $ vector
[ 3 :+ 4 :: Complex Float, 0 :+ 9, (-13) :+ (-4), 32 :+ 22
, 0 :+ 0, 10 :+ 9, 3 :+ (-2), 21 :+ 3
, 10 :+ 4, 2 :+ 2, 0 :+ 1, 0 :+ (-10)
, (-1) :+ 0, 3 :+ (-3), 5 :+ 55
]
-- | Sum of a complex vector.
complex3 :: Data' D256 [Complex Float] -> Data (Complex Float)
complex3 = wrap (sum :: DVector (Complex Float) -> Data (Complex Float))
-- | Generic (not compilable) pairwise multiplication of vectors.
complex4 :: (Syntactic a, Num a) => Vector a -> Vector a -> Vector a
complex4 = zipWith (*)
-- | Instance of the generic algorithm for complex values and fixed length arrays.
complex4' :: Data' D256 [Complex Float] -> Data' D256 [Complex Float] -> Data [Complex Float]
complex4' = wrap (complex4 :: DVector (Complex Float) -> DVector (Complex Float) -> DVector (Complex Float))
-- | Real parts of a complex vector.
complex5 :: Data' D256 [Complex Float] -> Data [Float]
complex5 = wrap $ map (realPart :: Data (Complex Float) -> Data Float)