module Torch.Indef.Dynamic.Tensor.Index
( _indexCopy
, _indexAdd
, _indexFill
, _indexSelect
, _take
, _put
) where
import Foreign
import Foreign.Ptr
import Torch.Sig.Types
import Control.Monad.Managed
import qualified Torch.Sig.Types as Sig
import qualified Torch.Sig.Types.Global as Sig
import qualified Torch.Sig.Tensor.Index as Sig
import Torch.Indef.Types
_indexCopy :: Dynamic -> Int -> IndexDynamic -> Dynamic -> IO ()
_indexCopy r i ix t = withLift $ Sig.c_indexCopy
<$> managedState
<*> managedTensor r
<*> pure (fromIntegral i)
<*> managed (withForeignPtr (snd $ Sig.longDynamicState ix))
<*> managedTensor t
_indexAdd :: Dynamic -> Int -> IndexDynamic -> Dynamic -> IO ()
_indexAdd r i ix t = withLift $ Sig.c_indexAdd
<$> managedState
<*> managedTensor r
<*> pure (fromIntegral i)
<*> managed (withForeignPtr (snd $ Sig.longDynamicState ix))
<*> managedTensor t
_indexFill :: Dynamic -> Int -> IndexDynamic -> HsReal -> IO ()
_indexFill r i ix v = withLift $ Sig.c_indexFill
<$> managedState
<*> managedTensor r
<*> pure (fromIntegral i)
<*> managed (withForeignPtr (snd $ Sig.longDynamicState ix))
<*> pure (Sig.hs2cReal v)
_indexSelect :: Dynamic -> Dynamic -> Int -> IndexDynamic -> IO ()
_indexSelect r t i ix = withLift $ Sig.c_indexSelect
<$> managedState
<*> managedTensor r
<*> managedTensor t
<*> pure (fromIntegral i)
<*> managed (withForeignPtr (snd $ Sig.longDynamicState ix))
_take :: Dynamic -> Dynamic -> IndexDynamic -> IO ()
_take r t ix = withLift $ Sig.c_take
<$> managedState
<*> managedTensor r
<*> managedTensor t
<*> managed (withForeignPtr (snd $ Sig.longDynamicState ix))
_put :: Dynamic -> IndexDynamic -> Dynamic -> Int -> IO ()
_put r ix t i = withLift $ Sig.c_put
<$> managedState
<*> managedTensor r
<*> managed (withForeignPtr (snd $ Sig.longDynamicState ix))
<*> managedTensor t
<*> pure (fromIntegral i)