Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Facilities for creating, inspecting, and simplifying reshape and coercion operations.
Synopsis
- shapeCoerce :: [SubExp] -> VName -> Exp rep
- reshapeOuter :: Shape -> Int -> Shape -> Shape
- reshapeInner :: Shape -> Int -> Shape -> Shape
- reshapeIndex :: IntegralExp num => [num] -> [num] -> [num] -> [num]
- flattenIndex :: IntegralExp num => [num] -> [num] -> num
- unflattenIndex :: IntegralExp num => [num] -> num -> [num]
- sliceSizes :: IntegralExp num => [num] -> [num]
Construction
shapeCoerce :: [SubExp] -> VName -> Exp rep Source #
Construct a Reshape
that is a ReshapeCoerce
.
Execution
reshapeOuter :: Shape -> Int -> Shape -> Shape Source #
reshapeOuter newshape n oldshape
returns a Reshape
expression
that replaces the outer n
dimensions of oldshape
with newshape
.
reshapeInner :: Shape -> Int -> Shape -> Shape Source #
reshapeInner newshape n oldshape
returns a Reshape
expression
that replaces the inner m-n
dimensions (where m
is the rank of
oldshape
) of src
with newshape
.
Simplification
Shape calculations
reshapeIndex :: IntegralExp num => [num] -> [num] -> [num] -> [num] Source #
reshapeIndex to_dims from_dims is
transforms the index list
is
(which is into an array of shape from_dims
) into an index
list is'
, which is into an array of shape to_dims
. is
must
have the same length as from_dims
, and is'
will have the same
length as to_dims
.
flattenIndex :: IntegralExp num => [num] -> [num] -> num Source #
flattenIndex dims is
computes the flat index of is
into an
array with dimensions dims
. The length of dims
and is
must
be the same.
unflattenIndex :: IntegralExp num => [num] -> num -> [num] Source #
unflattenIndex dims i
computes a list of indices into an array
with dimension dims
given the flat index i
. The resulting list
will have the same size as dims
.
sliceSizes :: IntegralExp num => [num] -> [num] Source #
Given a length n
list of dimensions dims
, sizeSizes dims
will compute a length n+1
list of the size of each possible array
slice. The first element of this list will be the product of
dims
, and the last element will be 1.