yarr-1.4.0.2: Yet another array library

Safe HaskellNone
LanguageHaskell98

Data.Yarr.Repr.Separate

Contents

Synopsis

Separate representation

data SE r Source #

SEparate meta array representation. Internally SEparate arrays hold vector of it's slices (so, slices is just getter for them).

Mostly useful for:

  • Separate in memory manifest Foreign arrays ("Unboxed" arrays in vector/repa libraries terms).
  • Element-wise vector array fusion (see group of dmapElems functions).

Instances

(DefaultFusion r D l sh, Fusion (SE r) D l sh) => DefaultFusion (SE r) D l sh Source # 

Methods

dmap :: (USource (SE r) l sh a, USource D l sh b) => (a -> b) -> UArray (SE r) l sh a -> UArray D l sh b Source #

dmapM :: (USource (SE r) l sh a, USource D l sh b) => (a -> IO b) -> UArray (SE r) l sh a -> UArray D l sh b Source #

dzip2 :: (USource (SE r) l sh a, USource (SE r) l sh b, USource D l sh c) => (a -> b -> c) -> UArray (SE r) l sh a -> UArray (SE r) l sh b -> UArray D l sh c Source #

dzip2M :: (USource (SE r) l sh a, USource (SE r) l sh b, USource D l sh c) => (a -> b -> IO c) -> UArray (SE r) l sh a -> UArray (SE r) l sh b -> UArray D l sh c Source #

dzip3 :: (USource (SE r) l sh a, USource (SE r) l sh b, USource (SE r) l sh c, USource D l sh d) => (a -> b -> c -> d) -> UArray (SE r) l sh a -> UArray (SE r) l sh b -> UArray (SE r) l sh c -> UArray D l sh d Source #

dzip3M :: (USource (SE r) l sh a, USource (SE r) l sh b, USource (SE r) l sh c, USource D l sh d) => (a -> b -> c -> IO d) -> UArray (SE r) l sh a -> UArray (SE r) l sh b -> UArray (SE r) l sh c -> UArray D l sh d Source #

dzip :: (USource (SE r) l sh a, USource D l sh b, Arity n, (* ~ n) (S n0)) => Fun n a b -> VecList n (UArray (SE r) l sh a) -> UArray D l sh b Source #

dzipM :: (USource (SE r) l sh a, USource D l sh b, Arity n, (* ~ n) (S n0)) => Fun n a (IO b) -> VecList n (UArray (SE r) l sh a) -> UArray D l sh b Source #

(DefaultIFusion r l D SH sh, IFusion (SE r) l D SH sh) => DefaultIFusion (SE r) l D SH sh Source # 

Methods

imap :: (USource (SE r) l sh a, USource D SH sh b) => (sh -> a -> b) -> UArray (SE r) l sh a -> UArray D SH sh b Source #

imapM :: (USource (SE r) l sh a, USource D SH sh b) => (sh -> a -> IO b) -> UArray (SE r) l sh a -> UArray D SH sh b Source #

izip2 :: (USource (SE r) l sh a, USource (SE r) l sh b, USource D SH sh c) => (sh -> a -> b -> c) -> UArray (SE r) l sh a -> UArray (SE r) l sh b -> UArray D SH sh c Source #

izip2M :: (USource (SE r) l sh a, USource (SE r) l sh b, USource D SH sh c) => (sh -> a -> b -> IO c) -> UArray (SE r) l sh a -> UArray (SE r) l sh b -> UArray D SH sh c Source #

izip3 :: (USource (SE r) l sh a, USource (SE r) l sh b, USource (SE r) l sh c, USource D SH sh d) => (sh -> a -> b -> c -> d) -> UArray (SE r) l sh a -> UArray (SE r) l sh b -> UArray (SE r) l sh c -> UArray D SH sh d Source #

izip3M :: (USource (SE r) l sh a, USource (SE r) l sh b, USource (SE r) l sh c, USource D SH sh d) => (sh -> a -> b -> c -> IO d) -> UArray (SE r) l sh a -> UArray (SE r) l sh b -> UArray (SE r) l sh c -> UArray D SH sh d Source #

izip :: (USource (SE r) l sh a, USource D SH sh b, Arity n, (* ~ n) (S n0)) => (sh -> Fun n a b) -> VecList n (UArray (SE r) l sh a) -> UArray D SH sh b Source #

izipM :: (USource (SE r) l sh a, USource D SH sh b, Arity n, (* ~ n) (S n0)) => (sh -> Fun n a (IO b)) -> VecList n (UArray (SE r) l sh a) -> UArray D SH sh b Source #

(UTarget tr tl sh e, Vector v e) => UVecTarget (SE tr) tr tl sh v e Source # 
(USource r l sh e, Vector v e) => UVecSource (SE r) r l sh v e Source # 
(Shape sh, Vector v e, Storable e) => UVecSource (SE F) F L sh v e Source # 
(Shape sh, Vector v e, NFData e) => UVecSource (SE MB) MB L sh v e Source # 
(Shape sh, Vector v e, NFData e) => UVecSource (SE B) B L sh v e Source # 
(Regular r l sh e, Shape sh, Vector v e) => VecRegular (SE r) r l sh v e Source # 

Methods

slices :: UArray (SE r) l sh (v e) -> VecList (Dim v) (UArray r l sh e) Source #

(UTarget tr tl sh e, Vector v e) => UTarget (SE tr) tl sh (v e) Source # 

Methods

write :: UArray (SE tr) tl sh (v e) -> sh -> v e -> IO () Source #

linearWrite :: UArray (SE tr) tl sh (v e) -> Int -> v e -> IO () Source #

(USource r l sh e, Vector v e) => USource (SE r) l sh (v e) Source # 

Methods

index :: UArray (SE r) l sh (v e) -> sh -> IO (v e) Source #

linearIndex :: UArray (SE r) l sh (v e) -> Int -> IO (v e) Source #

(Regular r l sh e, Vector v e) => Regular (SE r) l sh (v e) Source # 

Associated Types

data UArray (SE r) l sh (v e) :: * Source #

Methods

extent :: UArray (SE r) l sh (v e) -> sh Source #

touchArray :: UArray (SE r) l sh (v e) -> IO () Source #

force :: UArray (SE r) l sh (v e) -> IO () Source #

(Manifest r mr l sh e, Vector v e) => Manifest (SE r) (SE mr) l sh (v e) Source # 

Methods

new :: sh -> IO (UArray (SE mr) l sh (v e)) Source #

freeze :: UArray (SE mr) l sh (v e) -> IO (UArray (SE r) l sh (v e)) Source #

thaw :: UArray (SE r) l sh (v e) -> IO (UArray (SE mr) l sh (v e)) Source #

(NFData (UArray r l sh e), Shape sh, Vector v e) => NFData (UArray (SE r) l sh (v e)) Source # 

Methods

rnf :: UArray (SE r) l sh (v e) -> () #

data UArray (SE r) l sh (v e) Source # 
data UArray (SE r) l sh (v e) = Separate !sh (VecList (Dim v) (UArray r l sh e))

There is also Separate UArray family constructor, which isn't presented in the docs because Haddock doesn't support associated family constructors.

See source of Data.Yarr.Repr.Separate module.

fromSlices :: (Regular r l sh e, Vector v e, Dim v ~ S n0) => VecList (Dim v) (UArray r l sh e) -> UArray (SE r) l sh (v e) Source #

O(1) Glues several arrays of the same type into one separate array of vectors. All source arrays must be of the same extent.

Example:

let separateCoords = fromSlices (vl_3 xs ys zs)

unsafeMapSlices Source #

Arguments

:: (USource r l sh a, Vector v a, USource r2 l2 sh2 b, Vector v b, Dim v ~ S n0) 
=> (UArray r l sh a -> UArray r2 l2 sh2 b)

Slice mapper without restrictions

-> UArray (SE r) l sh (v a)

Source separate array

-> UArray (SE r2) l2 sh2 (v b)

Result separate array

O(depends on mapper function) Maps slices of separate array "entirely".

This function is useful when operation over slices is not element-wise (in that case you should use mapElems):

let blurredImage = unsafeMapSlices blur image

The function is unsafe because it doesn't check that slice mapper translates extents uniformly (though it is pure).

convert :: (Regular r l sh e, Vector v e, Vector v2 e, Dim v ~ Dim v2) => UArray (SE r) l sh (v e) -> UArray (SE r) l sh (v2 e) Source #

O(0) Converts separate vector between vector types of the same arity.

Example:

-- floatPairs :: UArray (SE F) Dim1 (VecList N2 Float)
let cs :: UArray (SE F) Dim1 (Complex Float)
    cs = convert floatPairs

Element-wise fusion for arrays of vectors

dmapElems Source #

Arguments

:: (VecRegular r slr l sh v a, USource slr l sh a, USource fslr l sh b, DefaultFusion slr fslr l sh, Vector v2 b, Dim v ~ Dim v2) 
=> VecList (Dim v) (a -> b)

Vector of mapper functions

-> UArray r l sh (v a)

Source array of vectors

-> UArray (SE fslr) l sh (v2 b)

Fused array

O(1) Injective element-wise fusion (mapping).

Example:

let domainHSVImage =
        dmapElems (vl_3 (* 360) (* 100) (* 100))
                  normedHSVImage

Also, used internally to define mapElems function.

dmapElemsM Source #

Arguments

:: (VecRegular r slr l sh v a, USource slr l sh a, USource fslr l sh b, DefaultFusion slr fslr l sh, Vector v2 b, Dim v ~ Dim v2) 
=> VecList (Dim v) (a -> IO b)

Elemen-wise vector of monadic mappers

-> UArray r l sh (v a)

Source array of vectors

-> UArray (SE fslr) l sh (v2 b)

Result array

O(1) Monadic vesion of dmapElems function.

dzipElems2 Source #

Arguments

:: (VecRegular r slr l sh v a, USource slr l sh a, VecRegular r slr l sh v b, USource slr l sh b, USource fslr l sh c, DefaultFusion slr fslr l sh, Vector v c) 
=> VecList (Dim v) (a -> b -> c)

.

-> UArray r l sh (v a) 
-> UArray r l sh (v b) 
-> UArray (SE fslr) l sh (v c) 

dzipElems2M Source #

Arguments

:: (VecRegular r slr l sh v a, USource slr l sh a, VecRegular r slr l sh v b, USource slr l sh b, USource fslr l sh c, DefaultFusion slr fslr l sh, Vector v c) 
=> VecList (Dim v) (a -> b -> IO c)

.

-> UArray r l sh (v a) 
-> UArray r l sh (v b) 
-> UArray (SE fslr) l sh (v c) 

dzipElems3 Source #

Arguments

:: (VecRegular r slr l sh v a, USource slr l sh a, VecRegular r slr l sh v b, USource slr l sh b, VecRegular r slr l sh v c, USource slr l sh c, USource fslr l sh d, DefaultFusion slr fslr l sh, Vector v d) 
=> VecList (Dim v) (a -> b -> c -> d)

.

-> UArray r l sh (v a) 
-> UArray r l sh (v b) 
-> UArray r l sh (v c) 
-> UArray (SE fslr) l sh (v d) 

dzipElems3M Source #

Arguments

:: (VecRegular r slr l sh v a, USource slr l sh a, VecRegular r slr l sh v b, USource slr l sh b, VecRegular r slr l sh v c, USource slr l sh c, USource fslr l sh d, DefaultFusion slr fslr l sh, Vector v d) 
=> VecList (Dim v) (a -> b -> c -> IO d)

.

-> UArray r l sh (v a) 
-> UArray r l sh (v b) 
-> UArray r l sh (v c) 
-> UArray (SE fslr) l sh (v d) 

dzipElems Source #

Arguments

:: (Vector v2 b, Arity m, m ~ S m0, VecRegular r slr l sh v a, USource slr l sh a, USource fslr l sh b, DefaultFusion slr fslr l sh) 
=> VecList (Dim v2) (Fun m a b)

Vector of wrapped m-ary element-wise zippers

-> VecList m (UArray r l sh (v a))

Vector of source arrays of vectors

-> UArray (SE fslr) l sh (v2 b)

Fused result array

O(1) Generalized element-wise zipping of several arrays of vectors.

dzipElemsM Source #

Arguments

:: (Vector v2 b, Arity m, m ~ S m0, VecRegular r slr l sh v a, USource slr l sh a, USource fslr l sh b, DefaultFusion slr fslr l sh) 
=> VecList (Dim v2) (Fun m a (IO b))

Vector of wrapped m-ary element-wise monadic zippers

-> VecList m (UArray r l sh (v a))

Vector of source arrays of vectors

-> UArray (SE fslr) l sh (v2 b)

Result array

O(1) Generalized monadic element-wise zipping of several arrays of vectors

Non-injective element-wise fusion

fmapElems Source #

Arguments

:: (VecRegular r slr l sh v a, USource slr l sh a, USource fslr l sh b, Fusion slr fslr l sh, Vector v2 b, Dim v ~ Dim v2) 
=> VecList (Dim v) (a -> b)

.

-> UArray r l sh (v a) 
-> UArray (SE fslr) l sh (v2 b) 

Group of f-...-Elems- functions is used internally to define d-...-Elems- functions.

fmapElemsM Source #

Arguments

:: (VecRegular r slr l sh v a, USource slr l sh a, USource fslr l sh b, Fusion slr fslr l sh, Vector v2 b, Dim v ~ Dim v2) 
=> VecList (Dim v) (a -> IO b)

.

-> UArray r l sh (v a) 
-> UArray (SE fslr) l sh (v2 b) 

fzipElems2 Source #

Arguments

:: (VecRegular r slr l sh v a, USource slr l sh a, VecRegular r slr l sh v b, USource slr l sh b, USource fslr l sh c, Fusion slr fslr l sh, Vector v c) 
=> VecList (Dim v) (a -> b -> c)

.

-> UArray r l sh (v a) 
-> UArray r l sh (v b) 
-> UArray (SE fslr) l sh (v c) 

fzipElems2M Source #

Arguments

:: (VecRegular r slr l sh v a, USource slr l sh a, VecRegular r slr l sh v b, USource slr l sh b, USource fslr l sh c, Fusion slr fslr l sh, Vector v c) 
=> VecList (Dim v) (a -> b -> IO c)

.

-> UArray r l sh (v a) 
-> UArray r l sh (v b) 
-> UArray (SE fslr) l sh (v c) 

fzipElems3 Source #

Arguments

:: (VecRegular r slr l sh v a, USource slr l sh a, VecRegular r slr l sh v b, USource slr l sh b, VecRegular r slr l sh v c, USource slr l sh c, USource fslr l sh d, Fusion slr fslr l sh, Vector v d) 
=> VecList (Dim v) (a -> b -> c -> d)

.

-> UArray r l sh (v a) 
-> UArray r l sh (v b) 
-> UArray r l sh (v c) 
-> UArray (SE fslr) l sh (v d) 

fzipElems3M Source #

Arguments

:: (VecRegular r slr l sh v a, USource slr l sh a, VecRegular r slr l sh v b, USource slr l sh b, VecRegular r slr l sh v c, USource slr l sh c, USource fslr l sh d, Fusion slr fslr l sh, Vector v d) 
=> VecList (Dim v) (a -> b -> c -> IO d)

.

-> UArray r l sh (v a) 
-> UArray r l sh (v b) 
-> UArray r l sh (v c) 
-> UArray (SE fslr) l sh (v d) 

fzipElems Source #

Arguments

:: (Vector v2 b, Arity m, m ~ S m0, VecRegular r slr l sh v a, USource slr l sh a, USource fslr l sh b, Fusion slr fslr l sh) 
=> VecList (Dim v2) (Fun m a b)

.

-> VecList m (UArray r l sh (v a)) 
-> UArray (SE fslr) l sh (v2 b) 

fzipElemsM Source #

Arguments

:: (Vector v2 b, Arity m, m ~ S m0, VecRegular r slr l sh v a, USource slr l sh a, USource fslr l sh b, Fusion slr fslr l sh) 
=> VecList (Dim v2) (Fun m a (IO b))

.

-> VecList m (UArray r l sh (v a)) 
-> UArray (SE fslr) l sh (v2 b)