module Data.Array.Accelerate.Linear.Matrix (
M22, M23, M24, M32, M33, M34, M42, M43, M44,
(!*!), (!+!), (!-!), (!*), (*!), (!!*), (*!!), (!!/),
transpose,
identity,
Trace(..),
) where
import Data.Array.Accelerate as A hiding ( transpose )
import Data.Array.Accelerate.Data.Complex
import Data.Array.Accelerate.Linear.Lift
import Data.Array.Accelerate.Linear.Plucker
import Data.Array.Accelerate.Linear.Quaternion
import Data.Array.Accelerate.Linear.Type
import Data.Array.Accelerate.Linear.V0
import Data.Array.Accelerate.Linear.V1
import Data.Array.Accelerate.Linear.V2
import Data.Array.Accelerate.Linear.V3
import Data.Array.Accelerate.Linear.V4
import Data.Array.Accelerate.Linear.Vector
import Linear.Matrix ( M22, M23, M24, M32, M33, M34, M42, M43, M44 )
import qualified Linear.Matrix as L
import Data.Distributive
import Data.Foldable
import Data.Traversable
import Control.Applicative
import Prelude as P
infixl 7 !*!
(!*!) :: (Functor m, Foldable t, Additive t, Additive n, A.Num a, Box2 m t a, Box2 t n a, Box2 m n a)
=> Exp (m (t a))
-> Exp (t (n a))
-> Exp (m (n a))
f !*! g = lift (unlift' f L.!*! unlift' g)
infixl 6 !+!
(!+!) :: (Additive m, Additive n, A.Num a, Box2 m n a)
=> Exp (m (n a))
-> Exp (m (n a))
-> Exp (m (n a))
f !+! g = lift (unlift' f L.!+! unlift' g)
infixl 6 !-!
(!-!) :: (Additive m, Additive n, A.Num a, Box2 m n a)
=> Exp (m (n a))
-> Exp (m (n a))
-> Exp (m (n a))
f !-! g = lift (unlift' f L.!-! unlift' g)
infixl 7 !*
(!*) :: (Functor m, Foldable r, Additive r, A.Num a, Box2 m r a, Box m a)
=> Exp (m (r a))
-> Exp (r a)
-> Exp (m a)
m !* v = lift (unlift' m L.!* unlift v)
infixl 7 *!
(*!) :: (Foldable t, Additive f, Additive t, A.Num a, Box t a, Box f a, Box2 t f a)
=> Exp (t a)
-> Exp (t (f a))
-> Exp (f a)
f *! g = lift (unlift f L.*! unlift' g)
infixl 7 *!!
(*!!) :: (Functor m, Functor r, A.Num a, Box2 m r a)
=> Exp a
-> Exp (m (r a))
-> Exp (m (r a))
s *!! m = lift (unlift s L.*!! unlift' m)
infixl 7 !!*
(!!*) :: (Functor m, Functor r, A.Num a, Box2 m r a)
=> Exp (m (r a))
-> Exp a
-> Exp (m (r a))
(!!*) = flip (*!!)
infixl 7 !!/
(!!/) :: (Functor m, Functor r, A.Floating a, Box2 m r a)
=> Exp (m (r a))
-> Exp a
-> Exp (m (r a))
m !!/ s = lift (unlift' m L.!!/ unlift s)
identity :: forall t a. (Traversable t, Applicative t, A.Num a, Box2 t t a) => Exp (t (t a))
identity = lift (L.identity :: t (t (Exp a)))
transpose
:: (Distributive g, Functor f, Box2 f g a, Box2 g f a)
=> Exp (f (g a))
-> Exp (g (f a))
transpose = lift . L.transpose . unlift'
class L.Trace m => Trace m where
trace :: (A.Num a, Box2 m m a) => Exp (m (m a)) -> Exp a
trace = lift . L.trace . unlift'
diagonal :: Box2 m m a => Exp (m (m a)) -> Exp (m a)
diagonal = lift . L.diagonal . unlift'
instance Trace Complex
instance Trace V0
instance Trace V1
instance Trace V2
instance Trace V3
instance Trace V4
instance Trace Plucker
instance Trace Quaternion