module Synthesizer.Basic.ComplexModule where
import qualified Number.Complex as Complex
import qualified Algebra.Module as Module
import Number.Complex ((+:), )
import NumericPrelude.Numeric
import Prelude ()
{-# INLINE scale #-}
scale :: (Module.C a v) =>
Complex.T a -> v -> Complex.T v
scale :: forall a v. C a v => T a -> v -> T v
scale T a
s v
x =
forall a. T a -> a
Complex.real T a
s forall a v. C a v => a -> v -> v
*> v
x forall a. a -> a -> T a
+: forall a. T a -> a
Complex.imag T a
s forall a v. C a v => a -> v -> v
*> v
x
{-# INLINE mul #-}
mul :: (Module.C a v) =>
Complex.T a -> Complex.T v -> Complex.T v
mul :: forall a v. C a v => T a -> T v -> T v
mul T a
x T v
y =
(forall a. T a -> a
Complex.real T a
x forall a v. C a v => a -> v -> v
*> forall a. T a -> a
Complex.real T v
y forall a. C a => a -> a -> a
- forall a. T a -> a
Complex.imag T a
x forall a v. C a v => a -> v -> v
*> forall a. T a -> a
Complex.imag T v
y)
forall a. a -> a -> T a
+:
(forall a. T a -> a
Complex.real T a
x forall a v. C a v => a -> v -> v
*> forall a. T a -> a
Complex.imag T v
y forall a. C a => a -> a -> a
+ forall a. T a -> a
Complex.imag T a
x forall a v. C a v => a -> v -> v
*> forall a. T a -> a
Complex.real T v
y)
{-# INLINE project #-}
project :: (Module.C a v) =>
Complex.T a -> Complex.T v -> v
project :: forall a v. C a v => T a -> T v -> v
project T a
x T v
y =
forall a. T a -> a
Complex.real T a
x forall a v. C a v => a -> v -> v
*> forall a. T a -> a
Complex.real T v
y forall a. C a => a -> a -> a
- forall a. T a -> a
Complex.imag T a
x forall a v. C a v => a -> v -> v
*> forall a. T a -> a
Complex.imag T v
y