module Data.Array.Accelerate.Arithmetic.Example where import qualified Data.Array.Accelerate.Arithmetic.Interpolation as Ip import qualified Data.Array.Accelerate.LinearAlgebra.Matrix.Sparse as Sparse import Data.Array.Accelerate.LinearAlgebra (Vector, ) import qualified Data.Array.Accelerate.Interpreter as AI import qualified Data.Array.Accelerate as A import Data.Array.Accelerate (Array, Z(Z), (:.)((:.)), ) exampleSparseColumnMatrix :: IO () exampleSparseColumnMatrix = do let m :: Sparse.Columns Z Double m = Sparse.Columns (A.lift (3::Int)) $ A.use $ A.fromList (Z :. 2 :. 5) $ (0,1) : (2,2) : (1,3) : (0,4) : (2,5) : (1,6) : (2,7) : (0,8) : (2,9) : (1,10) : [] v :: Vector Z Double v = A.use $ A.fromList (Z :. 5) [1,10,100,1000,10000] print $ AI.run $ Sparse.multiplyColumnsVector m v exampleSparseRowMatrix :: IO () exampleSparseRowMatrix = do let m :: Sparse.Rows Z Double m = Sparse.Rows (A.lift (5::Int)) $ A.use $ A.fromList (Z :. 3 :. 2) $ (0,1) : (0,2) : (3,3) : (1,4) : (3,5) : (4,6) : [] v :: Vector Z Double v = A.use $ A.fromList (Z :. 5) [1,10,100,1000,10000] print $ AI.run $ Sparse.multiplyRowsVector m v exampleLookup :: IO () exampleLookup = do let nodes :: Array A.DIM2 Double nodes = A.fromList (Z :. 3 :. 5) [0 ..] x :: Array A.DIM1 Double x = A.fromList (Z :. 3) [0.2, 6.7, 13.1] print $ AI.run1 (Ip.lookupInterval (A.use nodes)) x