Copyright | (c) Sam Stites 2017 |
---|---|

License | BSD3 |

Maintainer | sam@stites.io |

Stability | experimental |

Portability | non-portable |

Safe Haskell | None |

Language | Haskell2010 |

Redundant version of `Torch.Indef.{Dynamic/Static}.Tensor`

for Index tensors.

FIXME: in the future, there could be a smaller subset of Torch which could
be compiled to to keep the code dry. Alternatively, if backpack one day
supports recursive indefinites, we could use this feature to possibly remove
this package and `Mask`

.

## Synopsis

- singleton :: Integral i => i -> IndexTensor '[1]
- esingleton :: Enum i => i -> IndexTensor '[1]
- newIx :: forall d. Dimensions d => IndexTensor d
- newIxDyn :: Integral i => [i] -> IndexDynamic
- zeroIxNd :: Dimensions d => IndexTensor d
- index :: forall n. KnownDim n => [Integer] -> Maybe (IndexTensor '[n])
- index1d :: KnownDim n => [Integer] -> Maybe (IndexTensor '[n])
- indexNd :: forall d. KnownDim (Product d) => [Integer] -> Maybe (IndexTensor d)
- indexDyn :: [Integer] -> IndexDynamic
- mkCPUIx :: Ptr C'THLongTensor -> IO LongDynamic
- withCPUIxStorage :: LongStorage -> (Ptr C'THLongStorage -> IO x) -> IO x
- withIxStorage :: IndexStorage -> (Ptr CLongStorage -> IO x) -> IO x
- withDynamicState :: IndexDynamic -> (Ptr CState -> Ptr CLongTensor -> IO x) -> IO x
- mkCPUIxStorage :: Ptr C'THLongStorage -> IO LongStorage
- ixShape :: IndexTensor d -> [Word]
- ixCPUStorage :: [Integer] -> IO LongStorage
- showIx :: IndexTensor d -> [Char]

# Documentation

singleton :: Integral i => i -> IndexTensor '[1] Source #

esingleton :: Enum i => i -> IndexTensor '[1] Source #

newIx :: forall d. Dimensions d => IndexTensor d Source #

build a new static index tensor

FIXME: This can abstracted away with backpack, but I'm not sure if it can do it atm.

newIxDyn :: Integral i => [i] -> IndexDynamic Source #

build a new 1-dimensional, dynamically-typed index tensor of lenght `i`

zeroIxNd :: Dimensions d => IndexTensor d Source #

build a new, empty, static index tensor with no term-level dimensions -- but allow the type-level dimensions to vary.

FIXME: this is a bad function and should be replaced with a `new`

function.

index :: forall n. KnownDim n => [Integer] -> Maybe (IndexTensor '[n]) Source #

purely make a 1d static index tensor from a list of integers. Returns Nothing if the list does not match the expected size of the tensor.

should be depreciated in favor of `index1d`

index1d :: KnownDim n => [Integer] -> Maybe (IndexTensor '[n]) Source #

alias to `index`

and should subsume it when this package no longer assumes that index tensors are 1d.

indexDyn :: [Integer] -> IndexDynamic Source #

Make a dynamic, 1d index tensor from a list.

FIXME construct this with TH, not with the setting, which might be doing a second linear pass

mkCPUIx :: Ptr C'THLongTensor -> IO LongDynamic Source #

make a dynamic CPU tensor from a raw torch ctensor

withCPUIxStorage :: LongStorage -> (Ptr C'THLongStorage -> IO x) -> IO x Source #

run a function with access to a raw CPU-bound Long tensor storage.

withIxStorage :: IndexStorage -> (Ptr CLongStorage -> IO x) -> IO x Source #

run a function with access to a dynamic index storage's raw internal state and c-pointer.

withDynamicState :: IndexDynamic -> (Ptr CState -> Ptr CLongTensor -> IO x) -> IO x Source #

run a function with access to a dynamic index tensor's raw internal state and c-pointer.

mkCPUIxStorage :: Ptr C'THLongStorage -> IO LongStorage Source #

make a dynamic CPU tensor's storage from a raw torch LongStorage

ixShape :: IndexTensor d -> [Word] Source #

get the shape of a static index tensor from the term-level

ixCPUStorage :: [Integer] -> IO LongStorage Source #

Convenience method for `newWithData`

specific to longs for making CPU Long storage.

showIx :: IndexTensor d -> [Char] Source #

show an index.

FIXME: because we are using backpack, we can't declare a show instance on the IndexTensor both here and in the signatures. /if we want this functionality we must operate on raw code and write the show instance in hasktorch-types/.