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 =
T a -> a
forall a. T a -> a
Complex.real T a
s a -> v -> v
forall a v. C a v => a -> v -> v
*> v
x v -> v -> T v
forall a. a -> a -> T a
+: T a -> a
forall a. T a -> a
Complex.imag T a
s a -> v -> v
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 =
(T a -> a
forall a. T a -> a
Complex.real T a
x a -> v -> v
forall a v. C a v => a -> v -> v
*> T v -> v
forall a. T a -> a
Complex.real T v
y v -> v -> v
forall a. C a => a -> a -> a
- T a -> a
forall a. T a -> a
Complex.imag T a
x a -> v -> v
forall a v. C a v => a -> v -> v
*> T v -> v
forall a. T a -> a
Complex.imag T v
y)
v -> v -> T v
forall a. a -> a -> T a
+:
(T a -> a
forall a. T a -> a
Complex.real T a
x a -> v -> v
forall a v. C a v => a -> v -> v
*> T v -> v
forall a. T a -> a
Complex.imag T v
y v -> v -> v
forall a. C a => a -> a -> a
+ T a -> a
forall a. T a -> a
Complex.imag T a
x a -> v -> v
forall a v. C a v => a -> v -> v
*> T 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 =
T a -> a
forall a. T a -> a
Complex.real T a
x a -> v -> v
forall a v. C a v => a -> v -> v
*> T v -> v
forall a. T a -> a
Complex.real T v
y v -> v -> v
forall a. C a => a -> a -> a
- T a -> a
forall a. T a -> a
Complex.imag T a
x a -> v -> v
forall a v. C a v => a -> v -> v
*> T v -> v
forall a. T a -> a
Complex.imag T v
y