yarr-1.4.0.2: Yet another array library

Safe HaskellNone
LanguageHaskell98

Data.Yarr.Eval

Contents

Description

Loading and computing arrays

Synopsis

Aliases for common parameters

type Threads = IO Int Source #

There are 2 common ways to parameterize parallelism: a) to say "split this work between n threads" or b) to say "split this work between maximum reasonable number of threads", that is capabilities. Since getNumCapabilities function is monadic, we need always pass IO Int as thread number parameter in order not to multiply number of functions in this module (there are already too many).

threads :: Int -> Threads Source #

Alias to return.

type Fill sh a Source #

Arguments

 = (sh -> IO a)

Indexing function

-> (sh -> a -> IO ())

Writing function

-> Work sh ()

Curried result function -- worker

Alias to frequently used get-write-from-to arguments combo.

To be passed as 1st parameter of all Loading functions from Data.Yarr.Eval module.

Load classes

class (USource r l sh a, UTarget tr tl sh a, WorkIndex sh (LoadIndex l tl sh)) => Load r l tr tl sh a where Source #

This class abstracts pair of array types, which could be loaded one to another.

Parameters:

  • r - source representation. Instance of USource class. Typically one of fused representations: D, (SE D) or CV.
  • l - source load type
  • tr - target representation. Instance of UTarget class.
  • tl - target load type
  • sh - shape of arrays
  • a - array element type

Counterpart for arrays of vectors: VecLoad.

TODO: this class seems to be overengineered, normally it should have only 3 parameters: Load l tl sh. But Convoluted (CV) representation is tightly connected with it's load type.

Associated Types

type LoadIndex l tl sh Source #

Used in fill parameter function. There are two options for this type to be: sh itself or Int. Don't confuse this type with load type indexes: r and l. There are 2 different meanings of word "index": data type index (haskell term) and array index (linear, shape).

Methods

loadP :: Fill (LoadIndex l tl sh) a -> Threads -> UArray r l sh a -> UArray tr tl sh a -> IO () Source #

O(n) Entirely loads source to target in parallel.

First parameter is used to parameterize loop unrolling to maximize performance. Default choice is fill -- vanilla not unrolled looping.

Examples:

tarr <- new (extent arr)
loadP fill caps arr tarr
loadP (dim2BlockFill n2 n2 touch) (threads 2) arr tarr

loadS :: Fill (LoadIndex l tl sh) a -> UArray r l sh a -> UArray tr tl sh a -> IO () Source #

O(n) Sequential analog of loadP function. Loads source to target entirely.

Example:

loadS (unrolledFill n4 noTouch) caps arr tarr

Instances

(USource r SH sh a, UTarget tr SH sh a) => Load r SH tr SH sh a Source # 

Associated Types

type LoadIndex SH SH sh :: * Source #

Methods

loadP :: Fill (LoadIndex SH SH sh) a -> Threads -> UArray r SH sh a -> UArray tr SH sh a -> IO () Source #

loadS :: Fill (LoadIndex SH SH sh) a -> UArray r SH sh a -> UArray tr SH sh a -> IO () Source #

(USource r L sh a, UTarget tr SH sh a) => Load r L tr SH sh a Source # 

Associated Types

type LoadIndex L SH sh :: * Source #

Methods

loadP :: Fill (LoadIndex L SH sh) a -> Threads -> UArray r L sh a -> UArray tr SH sh a -> IO () Source #

loadS :: Fill (LoadIndex L SH sh) a -> UArray r L sh a -> UArray tr SH sh a -> IO () Source #

(USource r SH sh a, UTarget tr L sh a) => Load r SH tr L sh a Source # 

Associated Types

type LoadIndex SH L sh :: * Source #

Methods

loadP :: Fill (LoadIndex SH L sh) a -> Threads -> UArray r SH sh a -> UArray tr L sh a -> IO () Source #

loadS :: Fill (LoadIndex SH L sh) a -> UArray r SH sh a -> UArray tr L sh a -> IO () Source #

(USource r L sh a, UTarget tr L sh a, WorkIndex sh Int) => Load r L tr L sh a Source # 

Associated Types

type LoadIndex L L sh :: * Source #

Methods

loadP :: Fill (LoadIndex L L sh) a -> Threads -> UArray r L sh a -> UArray tr L sh a -> IO () Source #

loadS :: Fill (LoadIndex L L sh) a -> UArray r L sh a -> UArray tr L sh a -> IO () Source #

class Load r l tr tl sh a => RangeLoad r l tr tl sh a where Source #

Class abstracts pair of arrays which could be loaded in just specified range of indices.

"Range" is a multidimensional segment: segment for Dim1 arrays, square for Dim2 arrays and cube for Dim3. Thus, it is specified by pair of indices: "top-left" (minimum is zero) and "bottom-right" (maximum is (entire arr tarr)) corners.

Methods

rangeLoadP :: Fill sh a -> Threads -> UArray r l sh a -> UArray tr tl sh a -> sh -> sh -> IO () Source #

O(n) Loads elements from source to target in specified range in parallel.

Example:

let ext = extent convolved
res <- new ext
rangeLoadP fill caps convolved res (5, 5) (ext `minus` (5, 5))

rangeLoadS :: Fill sh a -> UArray r l sh a -> UArray tr tl sh a -> sh -> sh -> IO () Source #

O(n) Sequentially loads elements from source to target in specified range.

Instances

Load r SH tr SH sh a => RangeLoad r SH tr SH sh a Source # 

Methods

rangeLoadP :: Fill sh a -> Threads -> UArray r SH sh a -> UArray tr SH sh a -> sh -> sh -> IO () Source #

rangeLoadS :: Fill sh a -> UArray r SH sh a -> UArray tr SH sh a -> sh -> sh -> IO () Source #

Load r L tr SH sh a => RangeLoad r L tr SH sh a Source # 

Methods

rangeLoadP :: Fill sh a -> Threads -> UArray r L sh a -> UArray tr SH sh a -> sh -> sh -> IO () Source #

rangeLoadS :: Fill sh a -> UArray r L sh a -> UArray tr SH sh a -> sh -> sh -> IO () Source #

Load r SH tr L sh a => RangeLoad r SH tr L sh a Source # 

Methods

rangeLoadP :: Fill sh a -> Threads -> UArray r SH sh a -> UArray tr L sh a -> sh -> sh -> IO () Source #

rangeLoadS :: Fill sh a -> UArray r SH sh a -> UArray tr L sh a -> sh -> sh -> IO () Source #

Load r L tr L sh a => RangeLoad r L tr L sh a Source # 

Methods

rangeLoadP :: Fill sh a -> Threads -> UArray r L sh a -> UArray tr L sh a -> sh -> sh -> IO () Source #

rangeLoadS :: Fill sh a -> UArray r L sh a -> UArray tr L sh a -> sh -> sh -> IO () Source #

class (UVecSource r slr l sh v e, UVecTarget tr tslr tl sh v2 e, Load slr l tslr tl sh e, Dim v ~ Dim v2) => VecLoad r slr l tr tslr tl sh v v2 e where Source #

Class abstracts separated in time and space loading slices of one array type to another. Result of running functions with -Slices- infix is always identical to result of running corresponding function from Load class. VecLoad and RangeVecLoad are just about performance. If target representation is separate (ex. (SE F)), using loadSlicesP may be faster than loadP because of per-thread memory locality.

Parameters:

  • r - source representation
  • slr - source slice representation
  • l - source load type
  • tr - target representation
  • tslr - target slice representation
  • tl - target load type
  • sh - shape of arrays
  • v - source vector type
  • v2 - target vector type
  • e - vector element type, common for source and target arrays

Methods

loadSlicesP :: Fill (LoadIndex l tl sh) e -> Threads -> UArray r l sh (v e) -> UArray tr tl sh (v2 e) -> IO () Source #

O(n) Entirely, slice-wise loads vectors from source to target in parallel.

Example:

-- blurred and delayedBlurred are arrays of color components.
loadSlicesP fill caps delayedBlurred blurred

loadSlicesS :: Fill (LoadIndex l tl sh) e -> UArray r l sh (v e) -> UArray tr tl sh (v2 e) -> IO () Source #

O(n) Sequentially loads vectors from source to target, slice by slice.

Instances

(UVecSource r slr SH sh v e, UVecTarget tr tslr SH sh v2 e, Load slr SH tslr SH sh e, (~) * (Dim v) (Dim v2)) => VecLoad r slr SH tr tslr SH sh v v2 e Source # 

Methods

loadSlicesP :: Fill (LoadIndex SH SH sh) e -> Threads -> UArray r SH sh (v e) -> UArray tr SH sh (v2 e) -> IO () Source #

loadSlicesS :: Fill (LoadIndex SH SH sh) e -> UArray r SH sh (v e) -> UArray tr SH sh (v2 e) -> IO () Source #

(UVecSource r slr L sh v e, UVecTarget tr tslr SH sh v2 e, Load slr L tslr SH sh e, (~) * (Dim v) (Dim v2)) => VecLoad r slr L tr tslr SH sh v v2 e Source # 

Methods

loadSlicesP :: Fill (LoadIndex L SH sh) e -> Threads -> UArray r L sh (v e) -> UArray tr SH sh (v2 e) -> IO () Source #

loadSlicesS :: Fill (LoadIndex L SH sh) e -> UArray r L sh (v e) -> UArray tr SH sh (v2 e) -> IO () Source #

(UVecSource r slr SH sh v e, UVecTarget tr tslr L sh v2 e, Load slr SH tslr L sh e, (~) * (Dim v) (Dim v2)) => VecLoad r slr SH tr tslr L sh v v2 e Source # 

Methods

loadSlicesP :: Fill (LoadIndex SH L sh) e -> Threads -> UArray r SH sh (v e) -> UArray tr L sh (v2 e) -> IO () Source #

loadSlicesS :: Fill (LoadIndex SH L sh) e -> UArray r SH sh (v e) -> UArray tr L sh (v2 e) -> IO () Source #

(UVecSource r slr L sh v e, UVecTarget tr tslr L sh v2 e, Load slr L tslr L sh e, (~) * (Dim v) (Dim v2)) => VecLoad r slr L tr tslr L sh v v2 e Source # 

Methods

loadSlicesP :: Fill (LoadIndex L L sh) e -> Threads -> UArray r L sh (v e) -> UArray tr L sh (v2 e) -> IO () Source #

loadSlicesS :: Fill (LoadIndex L L sh) e -> UArray r L sh (v e) -> UArray tr L sh (v2 e) -> IO () Source #

class (VecLoad r slr l tr tslr tl sh v v2 e, RangeLoad slr l tslr tl sh e) => RangeVecLoad r slr l tr tslr tl sh v v2 e where Source #

This class extends VecLoad just like RangeLoad extends Load. It abstracts slice-wise loading from one array type to another in specified range.

Methods

rangeLoadSlicesP :: Fill sh e -> Threads -> UArray r l sh (v e) -> UArray tr tl sh (v2 e) -> sh -> sh -> IO () Source #

O(n) Loads vectors from source to target in specified range, slice-wise, in parallel.

rangeLoadSlicesS :: Fill sh e -> UArray r l sh (v e) -> UArray tr tl sh (v2 e) -> sh -> sh -> IO () Source #

O(n) Sequentially loads vector elements from source to target in specified range, slice by slice.

Instances

(VecLoad r slr SH tr tslr SH sh v v2 e, RangeLoad slr SH tslr SH sh e) => RangeVecLoad r slr SH tr tslr SH sh v v2 e Source # 

Methods

rangeLoadSlicesP :: Fill sh e -> Threads -> UArray r SH sh (v e) -> UArray tr SH sh (v2 e) -> sh -> sh -> IO () Source #

rangeLoadSlicesS :: Fill sh e -> UArray r SH sh (v e) -> UArray tr SH sh (v2 e) -> sh -> sh -> IO () Source #

(VecLoad r slr L tr tslr SH sh v v2 e, RangeLoad slr L tslr SH sh e) => RangeVecLoad r slr L tr tslr SH sh v v2 e Source # 

Methods

rangeLoadSlicesP :: Fill sh e -> Threads -> UArray r L sh (v e) -> UArray tr SH sh (v2 e) -> sh -> sh -> IO () Source #

rangeLoadSlicesS :: Fill sh e -> UArray r L sh (v e) -> UArray tr SH sh (v2 e) -> sh -> sh -> IO () Source #

(VecLoad r slr SH tr tslr L sh v v2 e, RangeLoad slr SH tslr L sh e) => RangeVecLoad r slr SH tr tslr L sh v v2 e Source # 

Methods

rangeLoadSlicesP :: Fill sh e -> Threads -> UArray r SH sh (v e) -> UArray tr L sh (v2 e) -> sh -> sh -> IO () Source #

rangeLoadSlicesS :: Fill sh e -> UArray r SH sh (v e) -> UArray tr L sh (v2 e) -> sh -> sh -> IO () Source #

(VecLoad r slr L tr tslr L sh v v2 e, RangeLoad slr L tslr L sh e) => RangeVecLoad r slr L tr tslr L sh v v2 e Source # 

Methods

rangeLoadSlicesP :: Fill sh e -> Threads -> UArray r L sh (v e) -> UArray tr L sh (v2 e) -> sh -> sh -> IO () Source #

rangeLoadSlicesS :: Fill sh e -> UArray r L sh (v e) -> UArray tr L sh (v2 e) -> sh -> sh -> IO () Source #

Compute functions

compute Source #

Arguments

:: (USource r l sh a, Manifest tr mtr tl sh b) 
=> (UArray r l sh a -> UArray mtr tl sh b -> IO ())

Loading function

-> UArray r l sh a

Source array

-> IO (UArray tr tl sh b)

Entirely loaded from the source, freezed manifest target array

O(n) This function simplifies the most common way of loading arrays.

Instead of

mTarget <- new (extent source)
loadP fill caps source mTarget
target <- freeze mTarget

You can write just

target <- compute (loadP fill caps) source

dComputeP :: (USource r l sh a, Manifest tr mtr tl sh a, Load r l mtr tl sh a) => UArray r l sh a -> IO (UArray tr tl sh a) Source #

Most common parallel use case of compute.

dComputeP = compute (loadP fill caps)

dComputeS :: (USource r l sh a, Manifest tr mtr tl sh a, Load r l mtr tl sh a) => UArray r l sh a -> IO (UArray tr tl sh a) Source #

Most common sequential use case of compute.

dComputeS = compute (loadS fill)

Common load types

data L Source #

Linear load type index. UArrays with L load type index define linearIndex and linearWrite and leave index and write functions defined by default.

Instances

WorkIndex sh Int => PreferredWorkIndex L sh Int Source # 
(Shape sh, Storable e) => UTarget FS L sh e Source # 

Methods

write :: UArray FS L sh e -> sh -> e -> IO () Source #

linearWrite :: UArray FS L sh e -> Int -> e -> IO () Source #

(Shape sh, Storable a) => UTarget F L sh a Source # 

Methods

write :: UArray F L sh a -> sh -> a -> IO () Source #

linearWrite :: UArray F L sh a -> Int -> a -> IO () Source #

(Shape sh, NFData a) => UTarget MB L sh a Source # 

Methods

write :: UArray MB L sh a -> sh -> a -> IO () Source #

linearWrite :: UArray MB L sh a -> Int -> a -> IO () Source #

Shape sh => USource D L sh a Source # 

Methods

index :: UArray D L sh a -> sh -> IO a Source #

linearIndex :: UArray D L sh a -> Int -> IO a Source #

(Shape sh, Storable e) => USource FS L sh e Source # 

Methods

index :: UArray FS L sh e -> sh -> IO e Source #

linearIndex :: UArray FS L sh e -> Int -> IO e Source #

(Shape sh, Storable a) => USource F L sh a Source # 

Methods

index :: UArray F L sh a -> sh -> IO a Source #

linearIndex :: UArray F L sh a -> Int -> IO a Source #

(Shape sh, NFData a) => USource MB L sh a Source # 

Methods

index :: UArray MB L sh a -> sh -> IO a Source #

linearIndex :: UArray MB L sh a -> Int -> IO a Source #

(Shape sh, NFData a) => USource B L sh a Source # 

Methods

index :: UArray B L sh a -> sh -> IO a Source #

linearIndex :: UArray B L sh a -> Int -> IO a Source #

Shape sh => Regular D L sh a Source # 

Associated Types

data UArray D L sh a :: * Source #

Methods

extent :: UArray D L sh a -> sh Source #

touchArray :: UArray D L sh a -> IO () Source #

force :: UArray D L sh a -> IO () Source #

Shape sh => Regular FS L sh e Source # 

Associated Types

data UArray FS L sh e :: * Source #

Methods

extent :: UArray FS L sh e -> sh Source #

touchArray :: UArray FS L sh e -> IO () Source #

force :: UArray FS L sh e -> IO () Source #

Shape sh => Regular F L sh a Source # 

Associated Types

data UArray F L sh a :: * Source #

Methods

extent :: UArray F L sh a -> sh Source #

touchArray :: UArray F L sh a -> IO () Source #

force :: UArray F L sh a -> IO () Source #

(Shape sh, NFData a) => Regular MB L sh a Source # 

Associated Types

data UArray MB L sh a :: * Source #

Methods

extent :: UArray MB L sh a -> sh Source #

touchArray :: UArray MB L sh a -> IO () Source #

force :: UArray MB L sh a -> IO () Source #

(Shape sh, NFData a) => Regular B L sh a Source # 

Associated Types

data UArray B L sh a :: * Source #

Methods

extent :: UArray B L sh a -> sh Source #

touchArray :: UArray B L sh a -> IO () Source #

force :: UArray B L sh a -> IO () Source #

DefaultFusion D D L sh Source # 

Methods

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

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

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

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

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

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

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

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

DefaultFusion FS D L sh Source # 

Methods

dmap :: (USource FS L sh a, USource D L sh b) => (a -> b) -> UArray FS L sh a -> UArray D L sh b Source #

dmapM :: (USource FS L sh a, USource D L sh b) => (a -> IO b) -> UArray FS L sh a -> UArray D L sh b Source #

dzip2 :: (USource FS L sh a, USource FS L sh b, USource D L sh c) => (a -> b -> c) -> UArray FS L sh a -> UArray FS L sh b -> UArray D L sh c Source #

dzip2M :: (USource FS L sh a, USource FS L sh b, USource D L sh c) => (a -> b -> IO c) -> UArray FS L sh a -> UArray FS L sh b -> UArray D L sh c Source #

dzip3 :: (USource FS L sh a, USource FS L sh b, USource FS L sh c, USource D L sh d) => (a -> b -> c -> d) -> UArray FS L sh a -> UArray FS L sh b -> UArray FS L sh c -> UArray D L sh d Source #

dzip3M :: (USource FS L sh a, USource FS L sh b, USource FS L sh c, USource D L sh d) => (a -> b -> c -> IO d) -> UArray FS L sh a -> UArray FS L sh b -> UArray FS L sh c -> UArray D L sh d Source #

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

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

DefaultFusion F D L sh Source # 

Methods

dmap :: (USource F L sh a, USource D L sh b) => (a -> b) -> UArray F L sh a -> UArray D L sh b Source #

dmapM :: (USource F L sh a, USource D L sh b) => (a -> IO b) -> UArray F L sh a -> UArray D L sh b Source #

dzip2 :: (USource F L sh a, USource F L sh b, USource D L sh c) => (a -> b -> c) -> UArray F L sh a -> UArray F L sh b -> UArray D L sh c Source #

dzip2M :: (USource F L sh a, USource F L sh b, USource D L sh c) => (a -> b -> IO c) -> UArray F L sh a -> UArray F L sh b -> UArray D L sh c Source #

dzip3 :: (USource F L sh a, USource F L sh b, USource F L sh c, USource D L sh d) => (a -> b -> c -> d) -> UArray F L sh a -> UArray F L sh b -> UArray F L sh c -> UArray D L sh d Source #

dzip3M :: (USource F L sh a, USource F L sh b, USource F L sh c, USource D L sh d) => (a -> b -> c -> IO d) -> UArray F L sh a -> UArray F L sh b -> UArray F L sh c -> UArray D L sh d Source #

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

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

DefaultFusion MB D L sh Source # 

Methods

dmap :: (USource MB L sh a, USource D L sh b) => (a -> b) -> UArray MB L sh a -> UArray D L sh b Source #

dmapM :: (USource MB L sh a, USource D L sh b) => (a -> IO b) -> UArray MB L sh a -> UArray D L sh b Source #

dzip2 :: (USource MB L sh a, USource MB L sh b, USource D L sh c) => (a -> b -> c) -> UArray MB L sh a -> UArray MB L sh b -> UArray D L sh c Source #

dzip2M :: (USource MB L sh a, USource MB L sh b, USource D L sh c) => (a -> b -> IO c) -> UArray MB L sh a -> UArray MB L sh b -> UArray D L sh c Source #

dzip3 :: (USource MB L sh a, USource MB L sh b, USource MB L sh c, USource D L sh d) => (a -> b -> c -> d) -> UArray MB L sh a -> UArray MB L sh b -> UArray MB L sh c -> UArray D L sh d Source #

dzip3M :: (USource MB L sh a, USource MB L sh b, USource MB L sh c, USource D L sh d) => (a -> b -> c -> IO d) -> UArray MB L sh a -> UArray MB L sh b -> UArray MB L sh c -> UArray D L sh d Source #

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

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

DefaultFusion B D L sh Source # 

Methods

dmap :: (USource B L sh a, USource D L sh b) => (a -> b) -> UArray B L sh a -> UArray D L sh b Source #

dmapM :: (USource B L sh a, USource D L sh b) => (a -> IO b) -> UArray B L sh a -> UArray D L sh b Source #

dzip2 :: (USource B L sh a, USource B L sh b, USource D L sh c) => (a -> b -> c) -> UArray B L sh a -> UArray B L sh b -> UArray D L sh c Source #

dzip2M :: (USource B L sh a, USource B L sh b, USource D L sh c) => (a -> b -> IO c) -> UArray B L sh a -> UArray B L sh b -> UArray D L sh c Source #

dzip3 :: (USource B L sh a, USource B L sh b, USource B L sh c, USource D L sh d) => (a -> b -> c -> d) -> UArray B L sh a -> UArray B L sh b -> UArray B L sh c -> UArray D L sh d Source #

dzip3M :: (USource B L sh a, USource B L sh b, USource B L sh c, USource D L sh d) => (a -> b -> c -> IO d) -> UArray B L sh a -> UArray B L sh b -> UArray B L sh c -> UArray D L sh d Source #

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

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

Fusion r D L sh Source # 

Methods

fmap :: (USource r L sh a, USource D L sh b) => (a -> b) -> UArray r L sh a -> UArray D L sh b Source #

fmapM :: (USource r L sh a, USource D L sh b) => (a -> IO b) -> UArray r L sh a -> UArray D L sh b Source #

fzip2 :: (USource r L sh a, USource r L sh b, USource D L sh c) => (a -> b -> c) -> UArray r L sh a -> UArray r L sh b -> UArray D L sh c Source #

fzip2M :: (USource r L sh a, USource r L sh b, USource D L sh c) => (a -> b -> IO c) -> UArray r L sh a -> UArray r L sh b -> UArray D L sh c Source #

fzip3 :: (USource r L sh a, USource r L sh b, USource r L sh c, USource D L sh d) => (a -> b -> c -> d) -> UArray r L sh a -> UArray r L sh b -> UArray r L sh c -> UArray D L sh d Source #

fzip3M :: (USource r L sh a, USource r L sh b, USource r L sh c, USource D L sh d) => (a -> b -> c -> IO d) -> UArray r L sh a -> UArray r L sh b -> UArray r L sh c -> UArray D L sh d Source #

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

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

(Shape sh, Storable a) => Manifest F F L sh a Source # 

Methods

new :: sh -> IO (UArray F L sh a) Source #

freeze :: UArray F L sh a -> IO (UArray F L sh a) Source #

thaw :: UArray F L sh a -> IO (UArray F L sh a) Source #

(Shape sh, NFData a) => Manifest B MB L sh a Source # 

Methods

new :: sh -> IO (UArray MB L sh a) Source #

freeze :: UArray MB L sh a -> IO (UArray B L sh a) Source #

thaw :: UArray B L sh a -> IO (UArray MB L sh a) Source #

Shape sh => DefaultIFusion D L D SH sh Source # 

Methods

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

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

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

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

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

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

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

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

Shape sh => DefaultIFusion FS L D SH sh Source # 

Methods

imap :: (USource FS L sh a, USource D SH sh b) => (sh -> a -> b) -> UArray FS L sh a -> UArray D SH sh b Source #

imapM :: (USource FS L sh a, USource D SH sh b) => (sh -> a -> IO b) -> UArray FS L sh a -> UArray D SH sh b Source #

izip2 :: (USource FS L sh a, USource FS L sh b, USource D SH sh c) => (sh -> a -> b -> c) -> UArray FS L sh a -> UArray FS L sh b -> UArray D SH sh c Source #

izip2M :: (USource FS L sh a, USource FS L sh b, USource D SH sh c) => (sh -> a -> b -> IO c) -> UArray FS L sh a -> UArray FS L sh b -> UArray D SH sh c Source #

izip3 :: (USource FS L sh a, USource FS L sh b, USource FS L sh c, USource D SH sh d) => (sh -> a -> b -> c -> d) -> UArray FS L sh a -> UArray FS L sh b -> UArray FS L sh c -> UArray D SH sh d Source #

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

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

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

Shape sh => DefaultIFusion F L D SH sh Source # 

Methods

imap :: (USource F L sh a, USource D SH sh b) => (sh -> a -> b) -> UArray F L sh a -> UArray D SH sh b Source #

imapM :: (USource F L sh a, USource D SH sh b) => (sh -> a -> IO b) -> UArray F L sh a -> UArray D SH sh b Source #

izip2 :: (USource F L sh a, USource F L sh b, USource D SH sh c) => (sh -> a -> b -> c) -> UArray F L sh a -> UArray F L sh b -> UArray D SH sh c Source #

izip2M :: (USource F L sh a, USource F L sh b, USource D SH sh c) => (sh -> a -> b -> IO c) -> UArray F L sh a -> UArray F L sh b -> UArray D SH sh c Source #

izip3 :: (USource F L sh a, USource F L sh b, USource F L sh c, USource D SH sh d) => (sh -> a -> b -> c -> d) -> UArray F L sh a -> UArray F L sh b -> UArray F L sh c -> UArray D SH sh d Source #

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

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

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

Shape sh => DefaultIFusion MB L D SH sh Source # 

Methods

imap :: (USource MB L sh a, USource D SH sh b) => (sh -> a -> b) -> UArray MB L sh a -> UArray D SH sh b Source #

imapM :: (USource MB L sh a, USource D SH sh b) => (sh -> a -> IO b) -> UArray MB L sh a -> UArray D SH sh b Source #

izip2 :: (USource MB L sh a, USource MB L sh b, USource D SH sh c) => (sh -> a -> b -> c) -> UArray MB L sh a -> UArray MB L sh b -> UArray D SH sh c Source #

izip2M :: (USource MB L sh a, USource MB L sh b, USource D SH sh c) => (sh -> a -> b -> IO c) -> UArray MB L sh a -> UArray MB L sh b -> UArray D SH sh c Source #

izip3 :: (USource MB L sh a, USource MB L sh b, USource MB L sh c, USource D SH sh d) => (sh -> a -> b -> c -> d) -> UArray MB L sh a -> UArray MB L sh b -> UArray MB L sh c -> UArray D SH sh d Source #

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

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

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

Shape sh => DefaultIFusion B L D SH sh Source # 

Methods

imap :: (USource B L sh a, USource D SH sh b) => (sh -> a -> b) -> UArray B L sh a -> UArray D SH sh b Source #

imapM :: (USource B L sh a, USource D SH sh b) => (sh -> a -> IO b) -> UArray B L sh a -> UArray D SH sh b Source #

izip2 :: (USource B L sh a, USource B L sh b, USource D SH sh c) => (sh -> a -> b -> c) -> UArray B L sh a -> UArray B L sh b -> UArray D SH sh c Source #

izip2M :: (USource B L sh a, USource B L sh b, USource D SH sh c) => (sh -> a -> b -> IO c) -> UArray B L sh a -> UArray B L sh b -> UArray D SH sh c Source #

izip3 :: (USource B L sh a, USource B L sh b, USource B L sh c, USource D SH sh d) => (sh -> a -> b -> c -> d) -> UArray B L sh a -> UArray B L sh b -> UArray B L sh c -> UArray D SH sh d Source #

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

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

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

(Shape sh, Vector v e, Storable e, Storable (v e)) => UVecTarget F FS L sh v e Source # 
(Shape sh, Vector v e) => UVecSource D D L sh v e Source # 
(Shape sh, Vector v e, Storable e, Storable (v e)) => UVecSource F FS L sh v e Source # 
(Shape sh, Vector v e) => VecRegular D D L sh v e Source # 

Methods

slices :: UArray D L sh (v e) -> VecList (Dim v) (UArray D L sh e) Source #

(Shape sh, Vector v e, Storable e, Storable (v e)) => VecRegular F FS L sh v e Source # 

Methods

slices :: UArray F L sh (v e) -> VecList (Dim v) (UArray FS L sh e) Source #

Load r L tr SH sh a => RangeLoad r L tr SH sh a Source # 

Methods

rangeLoadP :: Fill sh a -> Threads -> UArray r L sh a -> UArray tr SH sh a -> sh -> sh -> IO () Source #

rangeLoadS :: Fill sh a -> UArray r L sh a -> UArray tr SH sh a -> sh -> sh -> IO () Source #

Load r SH tr L sh a => RangeLoad r SH tr L sh a Source # 

Methods

rangeLoadP :: Fill sh a -> Threads -> UArray r SH sh a -> UArray tr L sh a -> sh -> sh -> IO () Source #

rangeLoadS :: Fill sh a -> UArray r SH sh a -> UArray tr L sh a -> sh -> sh -> IO () Source #

Load r L tr L sh a => RangeLoad r L tr L sh a Source # 

Methods

rangeLoadP :: Fill sh a -> Threads -> UArray r L sh a -> UArray tr L sh a -> sh -> sh -> IO () Source #

rangeLoadS :: Fill sh a -> UArray r L sh a -> UArray tr L sh a -> sh -> sh -> IO () Source #

(USource r L sh a, UTarget tr SH sh a) => Load r L tr SH sh a Source # 

Associated Types

type LoadIndex L SH sh :: * Source #

Methods

loadP :: Fill (LoadIndex L SH sh) a -> Threads -> UArray r L sh a -> UArray tr SH sh a -> IO () Source #

loadS :: Fill (LoadIndex L SH sh) a -> UArray r L sh a -> UArray tr SH sh a -> IO () Source #

(USource r SH sh a, UTarget tr L sh a) => Load r SH tr L sh a Source # 

Associated Types

type LoadIndex SH L sh :: * Source #

Methods

loadP :: Fill (LoadIndex SH L sh) a -> Threads -> UArray r SH sh a -> UArray tr L sh a -> IO () Source #

loadS :: Fill (LoadIndex SH L sh) a -> UArray r SH sh a -> UArray tr L sh a -> IO () Source #

(USource r L sh a, UTarget tr L sh a, WorkIndex sh Int) => Load r L tr L sh a Source # 

Associated Types

type LoadIndex L L sh :: * Source #

Methods

loadP :: Fill (LoadIndex L L sh) a -> Threads -> UArray r L sh a -> UArray tr L sh a -> IO () Source #

loadS :: Fill (LoadIndex L L sh) a -> UArray r L sh a -> UArray tr L sh a -> IO () Source #

(VecLoad r slr L tr tslr SH sh v v2 e, RangeLoad slr L tslr SH sh e) => RangeVecLoad r slr L tr tslr SH sh v v2 e Source # 

Methods

rangeLoadSlicesP :: Fill sh e -> Threads -> UArray r L sh (v e) -> UArray tr SH sh (v2 e) -> sh -> sh -> IO () Source #

rangeLoadSlicesS :: Fill sh e -> UArray r L sh (v e) -> UArray tr SH sh (v2 e) -> sh -> sh -> IO () Source #

(VecLoad r slr SH tr tslr L sh v v2 e, RangeLoad slr SH tslr L sh e) => RangeVecLoad r slr SH tr tslr L sh v v2 e Source # 

Methods

rangeLoadSlicesP :: Fill sh e -> Threads -> UArray r SH sh (v e) -> UArray tr L sh (v2 e) -> sh -> sh -> IO () Source #

rangeLoadSlicesS :: Fill sh e -> UArray r SH sh (v e) -> UArray tr L sh (v2 e) -> sh -> sh -> IO () Source #

(VecLoad r slr L tr tslr L sh v v2 e, RangeLoad slr L tslr L sh e) => RangeVecLoad r slr L tr tslr L sh v v2 e Source # 

Methods

rangeLoadSlicesP :: Fill sh e -> Threads -> UArray r L sh (v e) -> UArray tr L sh (v2 e) -> sh -> sh -> IO () Source #

rangeLoadSlicesS :: Fill sh e -> UArray r L sh (v e) -> UArray tr L sh (v2 e) -> sh -> sh -> IO () Source #

(UVecSource r slr L sh v e, UVecTarget tr tslr SH sh v2 e, Load slr L tslr SH sh e, (~) * (Dim v) (Dim v2)) => VecLoad r slr L tr tslr SH sh v v2 e Source # 

Methods

loadSlicesP :: Fill (LoadIndex L SH sh) e -> Threads -> UArray r L sh (v e) -> UArray tr SH sh (v2 e) -> IO () Source #

loadSlicesS :: Fill (LoadIndex L SH sh) e -> UArray r L sh (v e) -> UArray tr SH sh (v2 e) -> IO () Source #

(UVecSource r slr SH sh v e, UVecTarget tr tslr L sh v2 e, Load slr SH tslr L sh e, (~) * (Dim v) (Dim v2)) => VecLoad r slr SH tr tslr L sh v v2 e Source # 

Methods

loadSlicesP :: Fill (LoadIndex SH L sh) e -> Threads -> UArray r SH sh (v e) -> UArray tr L sh (v2 e) -> IO () Source #

loadSlicesS :: Fill (LoadIndex SH L sh) e -> UArray r SH sh (v e) -> UArray tr L sh (v2 e) -> IO () Source #

(UVecSource r slr L sh v e, UVecTarget tr tslr L sh v2 e, Load slr L tslr L sh e, (~) * (Dim v) (Dim v2)) => VecLoad r slr L tr tslr L sh v v2 e Source # 

Methods

loadSlicesP :: Fill (LoadIndex L L sh) e -> Threads -> UArray r L sh (v e) -> UArray tr L sh (v2 e) -> IO () Source #

loadSlicesS :: Fill (LoadIndex L L sh) e -> UArray r L sh (v e) -> UArray tr L sh (v2 e) -> IO () 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 # 
Shape sh => NFData (UArray D L sh a) # 

Methods

rnf :: UArray D L sh a -> () #

Shape sh => NFData (UArray FS L sh e) # 

Methods

rnf :: UArray FS L sh e -> () #

Shape sh => NFData (UArray F L sh a) # 

Methods

rnf :: UArray F L sh a -> () #

(Shape sh, NFData a) => NFData (UArray MB L sh a) # 

Methods

rnf :: UArray MB L sh a -> () #

(Shape sh, NFData a) => NFData (UArray B L sh a) # 

Methods

rnf :: UArray B L sh a -> () #

data UArray D L Source # 
data UArray D L = LinearDelayed !sh (IO ()) (IO ()) (Int -> IO a)
data UArray FS L Source # 
data UArray FS L = ForeignSlice !sh !Int !(ForeignPtr e) !(Ptr e)
data UArray F L Source # 
data UArray F L = ForeignArray !sh !(ForeignPtr a) !(Ptr a)
data UArray MB L Source # 
data UArray B L Source # 
data UArray B L = Boxed !sh !(Array a)
type LoadIndex SH L sh Source # 
type LoadIndex SH L sh = sh
type LoadIndex L SH sh Source # 
type LoadIndex L SH sh = sh
type LoadIndex L L sh Source # 
type LoadIndex L L sh = Int

data SH Source #

General shape load type index. UArrays with SH load type index specialize index and write and leave linearIndex and linearWrite functions defined by default.

Type-level distinction between Linear and SHaped arrays is aimed to avoid integral division operations while looping through composite (Dim2, Dim3) indices.

Integral division is very expensive operation even on modern CPUs.

Instances

Shape sh => PreferredWorkIndex SH sh sh Source # 
Shape sh => UTarget DT SH sh a Source # 

Methods

write :: UArray DT SH sh a -> sh -> a -> IO () Source #

linearWrite :: UArray DT SH sh a -> Int -> a -> IO () Source #

Shape sh => USource D SH sh a Source # 

Methods

index :: UArray D SH sh a -> sh -> IO a Source #

linearIndex :: UArray D SH sh a -> Int -> IO a Source #

Shape sh => Regular DT SH sh a Source # 

Associated Types

data UArray DT SH sh a :: * Source #

Methods

extent :: UArray DT SH sh a -> sh Source #

touchArray :: UArray DT SH sh a -> IO () Source #

force :: UArray DT SH sh a -> IO () Source #

Shape sh => Regular D SH sh a Source # 

Associated Types

data UArray D SH sh a :: * Source #

Methods

extent :: UArray D SH sh a -> sh Source #

touchArray :: UArray D SH sh a -> IO () Source #

force :: UArray D SH sh a -> IO () Source #

Shape sh => DefaultFusion D D SH sh Source # 

Methods

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

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

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

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

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

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

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

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

Shape sh => DefaultIFusion D SH D SH sh Source # 

Methods

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

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

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

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

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

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

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

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

Shape sh => DefaultIFusion D L D SH sh Source # 

Methods

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

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

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

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

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

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

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

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

Shape sh => DefaultIFusion FS L D SH sh Source # 

Methods

imap :: (USource FS L sh a, USource D SH sh b) => (sh -> a -> b) -> UArray FS L sh a -> UArray D SH sh b Source #

imapM :: (USource FS L sh a, USource D SH sh b) => (sh -> a -> IO b) -> UArray FS L sh a -> UArray D SH sh b Source #

izip2 :: (USource FS L sh a, USource FS L sh b, USource D SH sh c) => (sh -> a -> b -> c) -> UArray FS L sh a -> UArray FS L sh b -> UArray D SH sh c Source #

izip2M :: (USource FS L sh a, USource FS L sh b, USource D SH sh c) => (sh -> a -> b -> IO c) -> UArray FS L sh a -> UArray FS L sh b -> UArray D SH sh c Source #

izip3 :: (USource FS L sh a, USource FS L sh b, USource FS L sh c, USource D SH sh d) => (sh -> a -> b -> c -> d) -> UArray FS L sh a -> UArray FS L sh b -> UArray FS L sh c -> UArray D SH sh d Source #

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

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

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

Shape sh => DefaultIFusion F L D SH sh Source # 

Methods

imap :: (USource F L sh a, USource D SH sh b) => (sh -> a -> b) -> UArray F L sh a -> UArray D SH sh b Source #

imapM :: (USource F L sh a, USource D SH sh b) => (sh -> a -> IO b) -> UArray F L sh a -> UArray D SH sh b Source #

izip2 :: (USource F L sh a, USource F L sh b, USource D SH sh c) => (sh -> a -> b -> c) -> UArray F L sh a -> UArray F L sh b -> UArray D SH sh c Source #

izip2M :: (USource F L sh a, USource F L sh b, USource D SH sh c) => (sh -> a -> b -> IO c) -> UArray F L sh a -> UArray F L sh b -> UArray D SH sh c Source #

izip3 :: (USource F L sh a, USource F L sh b, USource F L sh c, USource D SH sh d) => (sh -> a -> b -> c -> d) -> UArray F L sh a -> UArray F L sh b -> UArray F L sh c -> UArray D SH sh d Source #

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

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

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

Shape sh => DefaultIFusion MB L D SH sh Source # 

Methods

imap :: (USource MB L sh a, USource D SH sh b) => (sh -> a -> b) -> UArray MB L sh a -> UArray D SH sh b Source #

imapM :: (USource MB L sh a, USource D SH sh b) => (sh -> a -> IO b) -> UArray MB L sh a -> UArray D SH sh b Source #

izip2 :: (USource MB L sh a, USource MB L sh b, USource D SH sh c) => (sh -> a -> b -> c) -> UArray MB L sh a -> UArray MB L sh b -> UArray D SH sh c Source #

izip2M :: (USource MB L sh a, USource MB L sh b, USource D SH sh c) => (sh -> a -> b -> IO c) -> UArray MB L sh a -> UArray MB L sh b -> UArray D SH sh c Source #

izip3 :: (USource MB L sh a, USource MB L sh b, USource MB L sh c, USource D SH sh d) => (sh -> a -> b -> c -> d) -> UArray MB L sh a -> UArray MB L sh b -> UArray MB L sh c -> UArray D SH sh d Source #

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

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

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

Shape sh => DefaultIFusion B L D SH sh Source # 

Methods

imap :: (USource B L sh a, USource D SH sh b) => (sh -> a -> b) -> UArray B L sh a -> UArray D SH sh b Source #

imapM :: (USource B L sh a, USource D SH sh b) => (sh -> a -> IO b) -> UArray B L sh a -> UArray D SH sh b Source #

izip2 :: (USource B L sh a, USource B L sh b, USource D SH sh c) => (sh -> a -> b -> c) -> UArray B L sh a -> UArray B L sh b -> UArray D SH sh c Source #

izip2M :: (USource B L sh a, USource B L sh b, USource D SH sh c) => (sh -> a -> b -> IO c) -> UArray B L sh a -> UArray B L sh b -> UArray D SH sh c Source #

izip3 :: (USource B L sh a, USource B L sh b, USource B L sh c, USource D SH sh d) => (sh -> a -> b -> c -> d) -> UArray B L sh a -> UArray B L sh b -> UArray B L sh c -> UArray D SH sh d Source #

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

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

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

Shape sh => IFusion r l D SH sh Source # 

Methods

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

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

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

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

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

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

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

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

(Shape sh, Vector v e) => UVecSource D D SH sh v e Source # 
(Shape sh, Vector v e) => VecRegular D D SH sh v e Source # 

Methods

slices :: UArray D SH sh (v e) -> VecList (Dim v) (UArray D SH sh e) Source #

Load r SH tr SH sh a => RangeLoad r SH tr SH sh a Source # 

Methods

rangeLoadP :: Fill sh a -> Threads -> UArray r SH sh a -> UArray tr SH sh a -> sh -> sh -> IO () Source #

rangeLoadS :: Fill sh a -> UArray r SH sh a -> UArray tr SH sh a -> sh -> sh -> IO () Source #

Load r L tr SH sh a => RangeLoad r L tr SH sh a Source # 

Methods

rangeLoadP :: Fill sh a -> Threads -> UArray r L sh a -> UArray tr SH sh a -> sh -> sh -> IO () Source #

rangeLoadS :: Fill sh a -> UArray r L sh a -> UArray tr SH sh a -> sh -> sh -> IO () Source #

Load r SH tr L sh a => RangeLoad r SH tr L sh a Source # 

Methods

rangeLoadP :: Fill sh a -> Threads -> UArray r SH sh a -> UArray tr L sh a -> sh -> sh -> IO () Source #

rangeLoadS :: Fill sh a -> UArray r SH sh a -> UArray tr L sh a -> sh -> sh -> IO () Source #

(USource r SH sh a, UTarget tr SH sh a) => Load r SH tr SH sh a Source # 

Associated Types

type LoadIndex SH SH sh :: * Source #

Methods

loadP :: Fill (LoadIndex SH SH sh) a -> Threads -> UArray r SH sh a -> UArray tr SH sh a -> IO () Source #

loadS :: Fill (LoadIndex SH SH sh) a -> UArray r SH sh a -> UArray tr SH sh a -> IO () Source #

(USource r L sh a, UTarget tr SH sh a) => Load r L tr SH sh a Source # 

Associated Types

type LoadIndex L SH sh :: * Source #

Methods

loadP :: Fill (LoadIndex L SH sh) a -> Threads -> UArray r L sh a -> UArray tr SH sh a -> IO () Source #

loadS :: Fill (LoadIndex L SH sh) a -> UArray r L sh a -> UArray tr SH sh a -> IO () Source #

(USource r SH sh a, UTarget tr L sh a) => Load r SH tr L sh a Source # 

Associated Types

type LoadIndex SH L sh :: * Source #

Methods

loadP :: Fill (LoadIndex SH L sh) a -> Threads -> UArray r SH sh a -> UArray tr L sh a -> IO () Source #

loadS :: Fill (LoadIndex SH L sh) a -> UArray r SH sh a -> UArray tr L sh a -> IO () Source #

(VecLoad r slr SH tr tslr SH sh v v2 e, RangeLoad slr SH tslr SH sh e) => RangeVecLoad r slr SH tr tslr SH sh v v2 e Source # 

Methods

rangeLoadSlicesP :: Fill sh e -> Threads -> UArray r SH sh (v e) -> UArray tr SH sh (v2 e) -> sh -> sh -> IO () Source #

rangeLoadSlicesS :: Fill sh e -> UArray r SH sh (v e) -> UArray tr SH sh (v2 e) -> sh -> sh -> IO () Source #

(VecLoad r slr L tr tslr SH sh v v2 e, RangeLoad slr L tslr SH sh e) => RangeVecLoad r slr L tr tslr SH sh v v2 e Source # 

Methods

rangeLoadSlicesP :: Fill sh e -> Threads -> UArray r L sh (v e) -> UArray tr SH sh (v2 e) -> sh -> sh -> IO () Source #

rangeLoadSlicesS :: Fill sh e -> UArray r L sh (v e) -> UArray tr SH sh (v2 e) -> sh -> sh -> IO () Source #

(VecLoad r slr SH tr tslr L sh v v2 e, RangeLoad slr SH tslr L sh e) => RangeVecLoad r slr SH tr tslr L sh v v2 e Source # 

Methods

rangeLoadSlicesP :: Fill sh e -> Threads -> UArray r SH sh (v e) -> UArray tr L sh (v2 e) -> sh -> sh -> IO () Source #

rangeLoadSlicesS :: Fill sh e -> UArray r SH sh (v e) -> UArray tr L sh (v2 e) -> sh -> sh -> IO () Source #

(UVecSource r slr SH sh v e, UVecTarget tr tslr SH sh v2 e, Load slr SH tslr SH sh e, (~) * (Dim v) (Dim v2)) => VecLoad r slr SH tr tslr SH sh v v2 e Source # 

Methods

loadSlicesP :: Fill (LoadIndex SH SH sh) e -> Threads -> UArray r SH sh (v e) -> UArray tr SH sh (v2 e) -> IO () Source #

loadSlicesS :: Fill (LoadIndex SH SH sh) e -> UArray r SH sh (v e) -> UArray tr SH sh (v2 e) -> IO () Source #

(UVecSource r slr L sh v e, UVecTarget tr tslr SH sh v2 e, Load slr L tslr SH sh e, (~) * (Dim v) (Dim v2)) => VecLoad r slr L tr tslr SH sh v v2 e Source # 

Methods

loadSlicesP :: Fill (LoadIndex L SH sh) e -> Threads -> UArray r L sh (v e) -> UArray tr SH sh (v2 e) -> IO () Source #

loadSlicesS :: Fill (LoadIndex L SH sh) e -> UArray r L sh (v e) -> UArray tr SH sh (v2 e) -> IO () Source #

(UVecSource r slr SH sh v e, UVecTarget tr tslr L sh v2 e, Load slr SH tslr L sh e, (~) * (Dim v) (Dim v2)) => VecLoad r slr SH tr tslr L sh v v2 e Source # 

Methods

loadSlicesP :: Fill (LoadIndex SH L sh) e -> Threads -> UArray r SH sh (v e) -> UArray tr L sh (v2 e) -> IO () Source #

loadSlicesS :: Fill (LoadIndex SH L sh) e -> UArray r SH sh (v e) -> UArray tr L sh (v2 e) -> IO () 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 #

Shape sh => NFData (UArray DT SH sh a) # 

Methods

rnf :: UArray DT SH sh a -> () #

Shape sh => NFData (UArray D SH sh a) # 

Methods

rnf :: UArray D SH sh a -> () #

data UArray DT SH Source # 
data UArray DT SH = ShapeDelayedTarget !sh (IO ()) (IO ()) (sh -> a -> IO ())
data UArray D SH Source # 
data UArray D SH = ShapeDelayed !sh (IO ()) (IO ()) (sh -> IO a)
type LoadIndex SH SH sh Source # 
type LoadIndex SH SH sh = sh
type LoadIndex SH L sh Source # 
type LoadIndex SH L sh = sh
type LoadIndex L SH sh Source # 
type LoadIndex L SH sh = sh

Utility

entire :: (Regular r l sh a, Regular r2 l2 sh b) => UArray r l sh a -> UArray r2 l2 sh b -> sh Source #

Determines maximum common range of 2 arrays - intersection of their extents.