-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Linear algebra and interpolation using the Accelerate framework
--   
--   Linear algebra and interpolation via the <tt>accelerate</tt> package.
--   This can be used for computations on GPUs but it does not contain
--   processor optimizations or optimizations for CUDA.
@package accelerate-arithmetic
@version 1.0.0.1

module Data.Array.Accelerate.LinearAlgebra
type Scalar ix a = Acc (Array ix a)
type Vector ix a = Acc (Array (ix :. Int) a)
type Matrix ix a = Acc (Array ((ix :. Int) :. Int) a)
transpose :: (Shape ix, Slice ix, Elt a) => Matrix ix a -> Matrix ix a
numElems :: (Shape ix, Slice ix, Elt a) => Vector ix a -> Exp Int
numRows :: (Shape ix, Slice ix, Elt a) => Matrix ix a -> Exp Int
numCols :: (Shape ix, Slice ix, Elt a) => Matrix ix a -> Exp Int
vectorShape :: (Shape ix, Slice ix, Elt a) => Vector ix a -> Exp ix :. Exp Int
matrixShape :: (Shape ix, Slice ix, Elt a) => Matrix ix a -> (Exp ix :. Exp Int) :. Exp Int
withVectorIndex :: (Shape ix, Slice ix, Lift Exp a) => (Exp ix :. Exp Int -> a) -> (Exp (ix :. Int) -> Exp (Plain a))
withMatrixIndex :: (Shape ix, Slice ix, Lift Exp a) => ((Exp ix :. Exp Int) :. Exp Int -> a) -> (Exp ((ix :. Int) :. Int) -> Exp (Plain a))
outer :: (Shape ix, Slice ix, Num a) => Vector ix a -> Vector ix a -> Matrix ix a
multiplyMatrixVector :: (Shape ix, Slice ix, Num a) => Matrix ix a -> Vector ix a -> Vector ix a
multiplyMatrixMatrix :: (Shape ix, Slice ix, Num a) => Matrix ix a -> Matrix ix a -> Matrix ix a
newtonInverse :: (Shape ix, Slice ix, Num a) => Exp Int -> Matrix ix a -> Matrix ix a -> Matrix ix a
newtonInverseStep :: (Shape ix, Slice ix, Num a) => Matrix ix a -> Matrix ix a -> Matrix ix a
identity :: (Shape ix, Slice ix, Elt a, FromIntegral Int a) => Exp ((ix :. Int) :. Int) -> Matrix ix a
scaleRows :: (Slice ix, Shape ix, Num a) => Vector ix a -> Matrix ix a -> Matrix ix a
zipScalarVectorWith :: (Slice ix, Shape ix, Elt a, Elt b, Elt c) => (Exp a -> Exp b -> Exp c) -> Scalar ix a -> Vector ix b -> Vector ix c
zipScalarMatrixWith :: (Slice ix, Shape ix, Elt a, Elt b, Elt c) => (Exp a -> Exp b -> Exp c) -> Scalar ix a -> Matrix ix b -> Matrix ix c
columnFromVector :: (Shape ix, Slice ix, Elt a) => Vector ix a -> Matrix ix a

-- | input must be a matrix with exactly one column
vectorFromColumn :: (Shape ix, Slice ix, Elt a) => Matrix ix a -> Vector ix a
flattenMatrix :: (Slice ix, Shape ix, Elt a) => Matrix ix a -> Vector ix a
restoreMatrix :: (Slice ix, Shape ix, Elt a) => Exp Int -> Vector ix a -> Matrix ix a
extrudeVector :: (Shape ix, Slice ix, Elt a) => Exp ix -> Vector Z a -> Vector ix a
extrudeMatrix :: (Shape ix, Slice ix, Elt a) => Exp ix -> Matrix Z a -> Matrix ix a
zipExtrudedVectorWith :: (Slice ix, Shape ix, Elt a, Elt b, Elt c) => (Exp a -> Exp b -> Exp c) -> Vector Z a -> Vector ix b -> Vector ix c
zipExtrudedMatrixWith :: (Slice ix, Shape ix, Elt a, Elt b, Elt c) => (Exp a -> Exp b -> Exp c) -> Matrix Z a -> Matrix ix b -> Matrix ix c
gatherFromVector :: (Shape ix, Elt a) => Scalar ix Int -> Vector Z a -> Scalar ix a

module Data.Array.Accelerate.LinearAlgebra.Matrix.Banded
newtype Symmetric ix a
Symmetric :: (Matrix ix a) -> Symmetric ix a
flattenSymmetric :: (Slice ix, Shape ix, Num a) => Symmetric ix a -> Matrix ix a

module Data.Array.Accelerate.LinearAlgebra.Matrix.Sparse

-- | Sparse matrix with a definite number of non-zero entries per column.
data Columns ix a
Columns :: Exp Int -> Matrix ix (Int, a) -> Columns ix a
[numRows] :: Columns ix a -> Exp Int
[columnMatrix] :: Columns ix a -> Matrix ix (Int, a)
multiplyColumnsVector :: (Shape ix, Slice ix, Num a) => Columns ix a -> Vector ix a -> Vector ix a
transposeColumns :: (Shape ix, Slice ix, Num a) => Columns ix a -> Rows ix a

-- | Sparse matrix with a definite number of non-zero entries per row.
data Rows ix a
Rows :: Exp Int -> Matrix ix (Int, a) -> Rows ix a
[numCols] :: Rows ix a -> Exp Int
[rowMatrix] :: Rows ix a -> Matrix ix (Int, a)
multiplyRowsVector :: (Shape ix, Slice ix, Num a) => Rows ix a -> Vector ix a -> Vector ix a
transposeRows :: (Shape ix, Slice ix, Num a) => Rows ix a -> Columns ix a
multiplyColumnsRows :: (Shape ix, Slice ix, Num a) => Columns ix a -> Rows ix a -> Matrix ix a

-- | Compute x^T*x, given that it has a band structure. You must pass the
--   band-width as parameter and you must make sure that the Gramian stays
--   within this band. Otherwise you cause out-of-bounds array accesses. So
--   far, only correct for real matrices.
realBandedGramian :: (Shape ix, Slice ix, Num a) => Exp Int -> Rows ix a -> Symmetric ix a
scaleRowRows :: (Slice ix, Shape ix, Num a) => Vector ix a -> Rows ix a -> Rows ix a

module Data.Array.Accelerate.Arithmetic.Interpolation
bisect :: (Slice ix, Shape ix, Ord a, Elt a) => Vector ix a -> Scalar ix a -> Scalar ix (Int, Int) -> Scalar ix (Int, Int)
lookupInterval :: (Slice ix, Shape ix, Ord a, Elt a) => Vector ix a -> Scalar ix a -> Scalar ix Int

-- | One node before index 0 and three nodes starting from index 0.
type Interpolator13 a = (a, a) -> (a, a) -> (a, a) -> (a, a) -> a -> a
sampleBasisFunctions13 :: (Slice ix, Shape ix, Ord a, Num a) => Interpolator13 (Exp a) -> Vector Z a -> Vector ix a -> Rows ix a
