module Data.Array.Repa
( module Data.Array.Repa.Shape
, module Data.Array.Repa.Index
, module Data.Array.Repa.Slice
, Elt(..)
, Array(..)
, Region(..)
, Range(..)
, Rect(..)
, Generator(..)
, deepSeqArray, deepSeqArrays
, singleton, toScalar
, extent, delay
, withManifest, withManifest'
, (!), index
, (!?), safeIndex
, unsafeIndex
, fromFunction
, fromVector
, fromList
, force, force2
, toVector
, toList
, reshape
, append, (++)
, transpose
, extend
, slice
, backpermute
, backpermuteDft
, map
, zipWith
, (+^), (-^), (*^), (/^)
, (//)
, fold, foldAll
, sum, sumAll
, traverse
, traverse2
, traverse3
, traverse4
, unsafeTraverse
, unsafeTraverse2
, unsafeTraverse3
, unsafeTraverse4
, interleave2
, interleave3
, interleave4
, select)
where
import Data.Array.Repa.Index
import Data.Array.Repa.Slice
import Data.Array.Repa.Shape
import Data.Array.Repa.Internals.Elt
import Data.Array.Repa.Internals.Base
import Data.Array.Repa.Internals.Forcing
import Data.Array.Repa.Operators.Traverse
import Data.Array.Repa.Operators.IndexSpace
import Data.Array.Repa.Operators.Interleave
import Data.Array.Repa.Operators.Mapping
import Data.Array.Repa.Operators.Modify
import Data.Array.Repa.Operators.Reduction
import Data.Array.Repa.Operators.Select
import qualified Data.Array.Repa.Shape as S
import Prelude hiding (sum, map, zipWith, (++))
import qualified Prelude as P
stage = "Data.Array.Repa"
instance (Shape sh, Elt a, Show a) => Show (Array sh a) where
show arr =
let shape = showShape (extent arr)
elems = show (toList arr)
in
"Array (" P.++ shape P.++ ") " P.++ elems
instance (Shape sh, Elt a, Eq a) => Eq (Array sh a) where
(==) arr1 arr2
= foldAll (&&) True
$ reshape (Z :. (S.size $ extent arr1))
$ zipWith (==) arr1 arr2
(/=) a1 a2
= not $ (==) a1 a2
instance (Shape sh, Elt a, Num a) => Num (Array sh a) where
(+) = zipWith (+)
() = zipWith ()
(*) = zipWith (*)
negate = map negate
abs = map abs
signum = map signum
fromInteger n = fromFunction failShape (\_ -> fromInteger n)
where failShape = error $ stage P.++ ".fromInteger: Constructed array has no shape."
withManifest
:: (Shape sh, Elt a)
=> (Array sh a -> b) -> Array sh a -> b
withManifest f arr
= case arr of
Array sh [Region RangeAll (GenManifest vec)]
-> vec `seq` f (Array sh [Region RangeAll (GenManifest vec)])
_ -> f (force arr)
withManifest'
:: (Shape sh, Elt a)
=> Array sh a -> (Array sh a -> b) -> b
withManifest' arr f
= case arr of
Array sh [Region RangeAll (GenManifest vec)]
-> vec `seq` f (Array sh [Region RangeAll (GenManifest vec)])
_ -> f (force arr)