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.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 = show $ toList arr
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)