{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeInType #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE ViewPatterns #-}
module Numeric.DataFrame.IO
( IODataFrame (XIOFrame), SomeIODataFrame (..)
, castDataFrame
, newDataFrame, newPinnedDataFrame, oneMoreDataFrame
, subDataFrameView, subDataFrameView'
, copyDataFrame, copyMutableDataFrame
, copyDataFrame', copyMutableDataFrame'
, copyDataFrameOff, copyMutableDataFrameOff
, freezeDataFrame, unsafeFreezeDataFrame
, thawDataFrame, thawPinDataFrame, unsafeThawDataFrame, withThawDataFrame
, writeDataFrame, writeDataFrameOff
, readDataFrame, readDataFrameOff
, isDataFramePinned, getDataFrameSteps
, withDataFramePtr
) where
import GHC.IO (IO (..))
import GHC.Ptr (Ptr (..))
import Control.Monad.ST (RealWorld)
import Data.Coerce
import Data.Kind
import Numeric.DataFrame.Internal.Mutable
import Numeric.DataFrame.Internal.PrimArray
import Numeric.DataFrame.Type
import Numeric.Dimensions
import Unsafe.Coerce
newtype IODataFrame (t :: Type) (ns :: [k]) = IODataFrame (MDataFrame RealWorld t (ns :: [k]))
pattern XIOFrame :: forall (t :: Type) (xns :: [XNat]) . ()
=> forall (ns :: [Nat]) . (FixedDims xns ns, Dimensions ns)
=> IODataFrame t ns -> IODataFrame t xns
pattern $bXIOFrame :: IODataFrame t ns -> IODataFrame t xns
$mXIOFrame :: forall r t (xns :: [XNat]).
IODataFrame t xns
-> (forall (ns :: [Nat]).
(FixedDims xns ns, Dimensions ns) =>
IODataFrame t ns -> r)
-> (Void# -> r)
-> r
XIOFrame df <- (mkXIOFramePat -> XIOFramePat df)
where
XIOFrame = IODataFrame t ns -> IODataFrame t xns
forall t (xns :: [XNat]) (ns :: [Nat]).
FixedDims xns ns =>
IODataFrame t ns -> IODataFrame t xns
castDataFrame
{-# COMPLETE XIOFrame #-}
data XIOFramePat (t :: Type) (xns :: [XNat])
= forall (ns :: [Nat]) . (FixedDims xns ns, Dimensions ns)
=> XIOFramePat (IODataFrame t ns)
mkXIOFramePat :: forall (t :: Type) (xns :: [XNat])
. IODataFrame t xns -> XIOFramePat t xns
mkXIOFramePat :: IODataFrame t xns -> XIOFramePat t xns
mkXIOFramePat IODataFrame t xns
df
| SomeDims Dims ns
ds <- CumulDims -> SomeDims
fromSteps (IODataFrame t xns -> CumulDims
forall k t (ns :: [k]). IODataFrame t ns -> CumulDims
getDataFrameSteps IODataFrame t xns
df)
, XDims (Dims ns
Dims :: Dims ns) <- (Dims ns -> Dims xns
forall a b. a -> b
unsafeCoerce Dims ns
ds) :: Dims xns
= IODataFrame t ns -> XIOFramePat t xns
forall t (xns :: [XNat]) (ns :: [Nat]).
(FixedDims xns ns, Dimensions ns) =>
IODataFrame t ns -> XIOFramePat t xns
XIOFramePat @t @xns @ns (IODataFrame t xns -> IODataFrame t ns
forall a b. a -> b
unsafeCoerce IODataFrame t xns
df)
| Bool
otherwise
= [Char] -> XIOFramePat t xns
forall a. HasCallStack => [Char] -> a
error [Char]
"XIOFrame pattern: impossible args"
data SomeIODataFrame (t :: Type)
= forall (ns :: [Nat]) . Dimensions ns => SomeIODataFrame (IODataFrame t ns)
castDataFrame ::
forall (t :: Type) (xns :: [XNat]) (ns :: [Nat])
. FixedDims xns ns
=> IODataFrame t ns -> IODataFrame t xns
castDataFrame :: IODataFrame t ns -> IODataFrame t xns
castDataFrame = (MDataFrame RealWorld t ns -> MDataFrame RealWorld t xns)
-> IODataFrame t ns -> IODataFrame t xns
coerce (forall s.
FixedDims xns ns =>
MDataFrame s t ns -> MDataFrame s t xns
forall t (xns :: [XNat]) (ns :: [Nat]) s.
FixedDims xns ns =>
MDataFrame s t ns -> MDataFrame s t xns
castDataFrame# @t @xns @ns)
{-# INLINE castDataFrame #-}
newDataFrame ::
forall (t :: Type) ns
. (PrimBytes t, Dimensions ns) => IO (IODataFrame t ns)
newDataFrame :: IO (IODataFrame t ns)
newDataFrame = (State# RealWorld
-> (# State# RealWorld, MDataFrame RealWorld t ns #))
-> IO (IODataFrame t ns)
coerce (forall s.
(PrimBytes t, Dimensions ns) =>
State# s -> (# State# s, MDataFrame s t ns #)
forall t k (ns :: [k]) s.
(PrimBytes t, Dimensions ns) =>
State# s -> (# State# s, MDataFrame s t ns #)
newDataFrame# @t @_ @ns)
{-# INLINE newDataFrame #-}
newPinnedDataFrame ::
forall (t :: Type) ns
. (PrimBytes t, Dimensions ns) => IO (IODataFrame t ns)
newPinnedDataFrame :: IO (IODataFrame t ns)
newPinnedDataFrame = (State# RealWorld
-> (# State# RealWorld, MDataFrame RealWorld t ns #))
-> IO (IODataFrame t ns)
coerce (forall s.
(PrimBytes t, Dimensions ns) =>
State# s -> (# State# s, MDataFrame s t ns #)
forall t k (ns :: [k]) s.
(PrimBytes t, Dimensions ns) =>
State# s -> (# State# s, MDataFrame s t ns #)
newPinnedDataFrame# @t @_ @ns)
{-# INLINE newPinnedDataFrame #-}
oneMoreDataFrame ::
forall (t :: Type) ns
. IODataFrame t ns -> IO (IODataFrame t ns)
oneMoreDataFrame :: IODataFrame t ns -> IO (IODataFrame t ns)
oneMoreDataFrame = (MDataFrame RealWorld t ns
-> State# RealWorld
-> (# State# RealWorld, MDataFrame RealWorld t ns #))
-> IODataFrame t ns -> IO (IODataFrame t ns)
coerce (forall s.
MDataFrame s t ns -> State# s -> (# State# s, MDataFrame s t ns #)
forall t k (ns :: [k]) s.
MDataFrame s t ns -> State# s -> (# State# s, MDataFrame s t ns #)
oneMoreDataFrame# @t @_ @ns)
{-# INLINE oneMoreDataFrame #-}
subDataFrameView ::
forall (t :: Type) b bi bd as bs asbs
. (SubFrameIndexCtx b bi bd, KnownDim bd, ConcatList as (b :+ bs) asbs)
=> Idxs (as +: bi) -> IODataFrame t asbs -> IODataFrame t (bd :+ bs)
subDataFrameView :: Idxs (as +: bi) -> IODataFrame t asbs -> IODataFrame t (bd :+ bs)
subDataFrameView = (Idxs (as +: bi)
-> MDataFrame RealWorld t asbs
-> MDataFrame RealWorld t (bd :+ bs))
-> Idxs (as +: bi)
-> IODataFrame t asbs
-> IODataFrame t (bd :+ bs)
coerce (forall s.
(SubFrameIndexCtx b bi bd, KnownDim bd,
ConcatList as (b :+ bs) asbs) =>
Idxs (as +: bi) -> MDataFrame s t asbs -> MDataFrame s t (bd :+ bs)
forall t k (b :: k) (bi :: k) (bd :: k) (as :: [k]) (bs :: [k])
(asbs :: [k]) s.
(SubFrameIndexCtx b bi bd, KnownDim bd,
ConcatList as (b :+ bs) asbs) =>
Idxs (as +: bi) -> MDataFrame s t asbs -> MDataFrame s t (bd :+ bs)
subDataFrameView# @t @_ @b @bi @bd @as @bs @asbs)
subDataFrameView' ::
forall (t :: Type) as bs asbs
. ConcatList as bs asbs
=> Idxs as -> IODataFrame t asbs -> IODataFrame t bs
subDataFrameView' :: Idxs as -> IODataFrame t asbs -> IODataFrame t bs
subDataFrameView' = (Idxs as
-> MDataFrame RealWorld t asbs -> MDataFrame RealWorld t bs)
-> Idxs as -> IODataFrame t asbs -> IODataFrame t bs
coerce (forall s.
ConcatList as bs asbs =>
Idxs as -> MDataFrame s t asbs -> MDataFrame s t bs
forall t k (as :: [k]) (bs :: [k]) (asbs :: [k]) s.
ConcatList as bs asbs =>
Idxs as -> MDataFrame s t asbs -> MDataFrame s t bs
subDataFrameView'# @t @_ @as @bs @asbs)
copyDataFrame ::
forall (t :: Type) b bi bd as bs asbs
. ( SubFrameIndexCtx b bi bd, KnownDim bd, ExactDims bs
, PrimArray t (DataFrame t (bd :+ bs))
, ConcatList as (b :+ bs) asbs )
=> Idxs (as +: bi) -> DataFrame t (bd :+ bs) -> IODataFrame t asbs -> IO ()
copyDataFrame :: Idxs (as +: bi)
-> DataFrame t (bd :+ bs) -> IODataFrame t asbs -> IO ()
copyDataFrame = (Idxs (as +: bi)
-> DataFrame t (bd :+ bs)
-> MDataFrame RealWorld t asbs
-> State# RealWorld
-> (# State# RealWorld, () #))
-> Idxs (as +: bi)
-> DataFrame t (bd :+ bs)
-> IODataFrame t asbs
-> IO ()
coerce (forall s.
(SubFrameIndexCtx b bi bd, KnownDim bd, ExactDims bs,
PrimArray t (DataFrame t (bd :+ bs)),
ConcatList as (b :+ bs) asbs) =>
Idxs (as +: bi)
-> DataFrame t (bd :+ bs)
-> MDataFrame s t asbs
-> State# s
-> (# State# s, () #)
forall t k (b :: k) (bi :: k) (bd :: k) (as :: [k]) (bs :: [k])
(asbs :: [k]) s.
(SubFrameIndexCtx b bi bd, KnownDim bd, ExactDims bs,
PrimArray t (DataFrame t (bd :+ bs)),
ConcatList as (b :+ bs) asbs) =>
Idxs (as +: bi)
-> DataFrame t (bd :+ bs)
-> MDataFrame s t asbs
-> State# s
-> (# State# s, () #)
copyDataFrame# @t @_ @b @bi @bd @as @bs @asbs)
{-# INLINE copyDataFrame #-}
copyMutableDataFrame ::
forall (t :: Type) b bi bd as bs asbs
. ( SubFrameIndexCtx b bi bd
, ExactDims bs
, PrimBytes t
, ConcatList as (b :+ bs) asbs )
=> Idxs (as +: bi) -> IODataFrame t (bd :+ bs) -> IODataFrame t asbs -> IO ()
copyMutableDataFrame :: Idxs (as +: bi)
-> IODataFrame t (bd :+ bs) -> IODataFrame t asbs -> IO ()
copyMutableDataFrame = (Idxs (as +: bi)
-> MDataFrame RealWorld t (bd :+ bs)
-> MDataFrame RealWorld t asbs
-> State# RealWorld
-> (# State# RealWorld, () #))
-> Idxs (as +: bi)
-> IODataFrame t (bd :+ bs)
-> IODataFrame t asbs
-> IO ()
coerce (forall s.
(SubFrameIndexCtx b bi bd, ExactDims bs, PrimBytes t,
ConcatList as (b :+ bs) asbs) =>
Idxs (as +: bi)
-> MDataFrame s t (bd :+ bs)
-> MDataFrame s t asbs
-> State# s
-> (# State# s, () #)
forall t k (b :: k) (bi :: k) (bd :: k) (as :: [k]) (bs :: [k])
(asbs :: [k]) s.
(SubFrameIndexCtx b bi bd, ExactDims bs, PrimBytes t,
ConcatList as (b :+ bs) asbs) =>
Idxs (as +: bi)
-> MDataFrame s t (bd :+ bs)
-> MDataFrame s t asbs
-> State# s
-> (# State# s, () #)
copyMDataFrame# @t @_ @b @bi @bd @as @bs @asbs)
{-# INLINE copyMutableDataFrame #-}
copyDataFrame' ::
forall (t :: Type) as bs asbs
. ( ExactDims bs
, PrimArray t (DataFrame t bs)
, ConcatList as bs asbs )
=> Idxs as -> DataFrame t bs -> IODataFrame t asbs -> IO ()
copyDataFrame' :: Idxs as -> DataFrame t bs -> IODataFrame t asbs -> IO ()
copyDataFrame' = (Idxs as
-> DataFrame t bs
-> MDataFrame RealWorld t asbs
-> State# RealWorld
-> (# State# RealWorld, () #))
-> Idxs as -> DataFrame t bs -> IODataFrame t asbs -> IO ()
coerce (forall s.
(ExactDims bs, PrimArray t (DataFrame t bs),
ConcatList as bs asbs) =>
Idxs as
-> DataFrame t bs
-> MDataFrame s t asbs
-> State# s
-> (# State# s, () #)
forall t k (as :: [k]) (bs :: [k]) (asbs :: [k]) s.
(ExactDims bs, PrimArray t (DataFrame t bs),
ConcatList as bs asbs) =>
Idxs as
-> DataFrame t bs
-> MDataFrame s t asbs
-> State# s
-> (# State# s, () #)
copyDataFrame'# @t @_ @as @bs @asbs)
{-# INLINE copyDataFrame' #-}
copyMutableDataFrame' ::
forall (t :: Type) as bs asbs
. (ExactDims bs, PrimBytes t, ConcatList as bs asbs)
=> Idxs as -> IODataFrame t bs -> IODataFrame t asbs -> IO ()
copyMutableDataFrame' :: Idxs as -> IODataFrame t bs -> IODataFrame t asbs -> IO ()
copyMutableDataFrame' = (Idxs as
-> MDataFrame RealWorld t bs
-> MDataFrame RealWorld t asbs
-> State# RealWorld
-> (# State# RealWorld, () #))
-> Idxs as -> IODataFrame t bs -> IODataFrame t asbs -> IO ()
coerce (forall s.
(ExactDims bs, PrimBytes t, ConcatList as bs asbs) =>
Idxs as
-> MDataFrame s t bs
-> MDataFrame s t asbs
-> State# s
-> (# State# s, () #)
forall t k (as :: [k]) (bs :: [k]) (asbs :: [k]) s.
(ExactDims bs, PrimBytes t, ConcatList as bs asbs) =>
Idxs as
-> MDataFrame s t bs
-> MDataFrame s t asbs
-> State# s
-> (# State# s, () #)
copyMDataFrame'# @t @_ @as @bs @asbs)
{-# INLINE copyMutableDataFrame' #-}
copyDataFrameOff ::
forall (t :: Type) as bs asbs
. ( Dimensions bs
, PrimArray t (DataFrame t bs)
, ConcatList as bs asbs )
=> Int -> DataFrame t bs -> IODataFrame t asbs -> IO ()
copyDataFrameOff :: Int -> DataFrame t bs -> IODataFrame t asbs -> IO ()
copyDataFrameOff = (Int
-> DataFrame t bs
-> MDataFrame RealWorld t asbs
-> State# RealWorld
-> (# State# RealWorld, () #))
-> Int -> DataFrame t bs -> IODataFrame t asbs -> IO ()
coerce (forall s.
(Dimensions bs, PrimArray t (DataFrame t bs),
ConcatList as bs asbs) =>
Int
-> DataFrame t bs
-> MDataFrame s t asbs
-> State# s
-> (# State# s, () #)
forall t k (as :: [k]) (bs :: [k]) (asbs :: [k]) s.
(Dimensions bs, PrimArray t (DataFrame t bs),
ConcatList as bs asbs) =>
Int
-> DataFrame t bs
-> MDataFrame s t asbs
-> State# s
-> (# State# s, () #)
copyDataFrameOff# @t @_ @as @bs @asbs)
{-# INLINE copyDataFrameOff #-}
copyMutableDataFrameOff ::
forall (t :: Type) as bs asbs
. (ExactDims bs, PrimBytes t, ConcatList as bs asbs)
=> Int -> IODataFrame t bs -> IODataFrame t asbs -> IO ()
copyMutableDataFrameOff :: Int -> IODataFrame t bs -> IODataFrame t asbs -> IO ()
copyMutableDataFrameOff = (Int
-> MDataFrame RealWorld t bs
-> MDataFrame RealWorld t asbs
-> State# RealWorld
-> (# State# RealWorld, () #))
-> Int -> IODataFrame t bs -> IODataFrame t asbs -> IO ()
coerce (forall s.
(ExactDims bs, PrimBytes t, ConcatList as bs asbs) =>
Int
-> MDataFrame s t bs
-> MDataFrame s t asbs
-> State# s
-> (# State# s, () #)
forall t k (as :: [k]) (bs :: [k]) (asbs :: [k]) s.
(ExactDims bs, PrimBytes t, ConcatList as bs asbs) =>
Int
-> MDataFrame s t bs
-> MDataFrame s t asbs
-> State# s
-> (# State# s, () #)
copyMDataFrameOff# @t @_ @as @bs @asbs)
{-# INLINE copyMutableDataFrameOff #-}
unsafeFreezeDataFrame ::
forall (t :: Type) ns
. PrimArray t (DataFrame t ns)
=> IODataFrame t ns -> IO (DataFrame t ns)
unsafeFreezeDataFrame :: IODataFrame t ns -> IO (DataFrame t ns)
unsafeFreezeDataFrame = (MDataFrame RealWorld t ns
-> State# RealWorld -> (# State# RealWorld, DataFrame t ns #))
-> IODataFrame t ns -> IO (DataFrame t ns)
coerce (forall s.
PrimArray t (DataFrame t ns) =>
MDataFrame s t ns -> State# s -> (# State# s, DataFrame t ns #)
forall t k (ns :: [k]) s.
PrimArray t (DataFrame t ns) =>
MDataFrame s t ns -> State# s -> (# State# s, DataFrame t ns #)
unsafeFreezeDataFrame# @t @_ @ns)
{-# INLINE unsafeFreezeDataFrame #-}
freezeDataFrame ::
forall (t :: Type) ns
. PrimArray t (DataFrame t ns)
=> IODataFrame t ns -> IO (DataFrame t ns)
freezeDataFrame :: IODataFrame t ns -> IO (DataFrame t ns)
freezeDataFrame = (MDataFrame RealWorld t ns
-> State# RealWorld -> (# State# RealWorld, DataFrame t ns #))
-> IODataFrame t ns -> IO (DataFrame t ns)
coerce (forall s.
PrimArray t (DataFrame t ns) =>
MDataFrame s t ns -> State# s -> (# State# s, DataFrame t ns #)
forall t k (ns :: [k]) s.
PrimArray t (DataFrame t ns) =>
MDataFrame s t ns -> State# s -> (# State# s, DataFrame t ns #)
freezeDataFrame# @t @_ @ns)
{-# INLINE freezeDataFrame #-}
thawDataFrame ::
forall (t :: Type) ns
. (Dimensions ns, PrimArray t (DataFrame t ns))
=> DataFrame t ns -> IO (IODataFrame t ns)
thawDataFrame :: DataFrame t ns -> IO (IODataFrame t ns)
thawDataFrame = (DataFrame t ns
-> State# RealWorld
-> (# State# RealWorld, MDataFrame RealWorld t ns #))
-> DataFrame t ns -> IO (IODataFrame t ns)
coerce (forall s.
(Dimensions ns, PrimArray t (DataFrame t ns)) =>
DataFrame t ns -> State# s -> (# State# s, MDataFrame s t ns #)
forall t k (ns :: [k]) s.
(Dimensions ns, PrimArray t (DataFrame t ns)) =>
DataFrame t ns -> State# s -> (# State# s, MDataFrame s t ns #)
thawDataFrame# @t @_ @ns)
{-# INLINE thawDataFrame #-}
thawPinDataFrame ::
forall (t :: Type) ns
. (Dimensions ns, PrimArray t (DataFrame t ns))
=> DataFrame t ns -> IO (IODataFrame t ns)
thawPinDataFrame :: DataFrame t ns -> IO (IODataFrame t ns)
thawPinDataFrame = (DataFrame t ns
-> State# RealWorld
-> (# State# RealWorld, MDataFrame RealWorld t ns #))
-> DataFrame t ns -> IO (IODataFrame t ns)
coerce (forall s.
(Dimensions ns, PrimArray t (DataFrame t ns)) =>
DataFrame t ns -> State# s -> (# State# s, MDataFrame s t ns #)
forall t k (ns :: [k]) s.
(Dimensions ns, PrimArray t (DataFrame t ns)) =>
DataFrame t ns -> State# s -> (# State# s, MDataFrame s t ns #)
thawPinDataFrame# @t @_ @ns)
{-# INLINE thawPinDataFrame #-}
unsafeThawDataFrame ::
forall (t :: Type) ns
. (Dimensions ns, PrimArray t (DataFrame t ns))
=> DataFrame t ns
-> IO (IODataFrame t ns)
unsafeThawDataFrame :: DataFrame t ns -> IO (IODataFrame t ns)
unsafeThawDataFrame = (DataFrame t ns
-> State# RealWorld
-> (# State# RealWorld, MDataFrame RealWorld t ns #))
-> DataFrame t ns -> IO (IODataFrame t ns)
coerce (forall s.
(Dimensions ns, PrimArray t (DataFrame t ns)) =>
DataFrame t ns -> State# s -> (# State# s, MDataFrame s t ns #)
forall t k (ns :: [k]) s.
(Dimensions ns, PrimArray t (DataFrame t ns)) =>
DataFrame t ns -> State# s -> (# State# s, MDataFrame s t ns #)
unsafeThawDataFrame# @t @_ @ns)
{-# INLINE unsafeThawDataFrame #-}
withThawDataFrame ::
forall (t :: Type) ns r
. PrimArray t (DataFrame t ns)
=> (t -> IO r)
-> (IODataFrame t ns -> IO r)
-> DataFrame t ns -> IO r
withThawDataFrame :: (t -> IO r) -> (IODataFrame t ns -> IO r) -> DataFrame t ns -> IO r
withThawDataFrame = ((t -> State# RealWorld -> (# State# RealWorld, r #))
-> (MDataFrame RealWorld t ns
-> State# RealWorld -> (# State# RealWorld, r #))
-> DataFrame t ns
-> State# RealWorld
-> (# State# RealWorld, r #))
-> (t -> IO r)
-> (IODataFrame t ns -> IO r)
-> DataFrame t ns
-> IO r
coerce (forall s.
PrimArray t (DataFrame t ns) =>
(t -> State# s -> (# State# s, r #))
-> (MDataFrame s t ns -> State# s -> (# State# s, r #))
-> DataFrame t ns
-> State# s
-> (# State# s, r #)
forall t k (ns :: [k]) r s.
PrimArray t (DataFrame t ns) =>
(t -> State# s -> (# State# s, r #))
-> (MDataFrame s t ns -> State# s -> (# State# s, r #))
-> DataFrame t ns
-> State# s
-> (# State# s, r #)
withThawDataFrame# @t @_ @ns @r)
writeDataFrameOff ::
forall (t :: Type) ns
. PrimBytes (DataFrame t ('[] :: KindOf ns))
=> IODataFrame t ns -> Int -> DataFrame t ('[] :: KindOf ns) -> IO ()
writeDataFrameOff :: IODataFrame t ns -> Int -> DataFrame t '[] -> IO ()
writeDataFrameOff = (MDataFrame RealWorld t ns
-> Int
-> DataFrame t '[]
-> State# RealWorld
-> (# State# RealWorld, () #))
-> IODataFrame t ns -> Int -> DataFrame t '[] -> IO ()
coerce (forall s.
PrimBytes (DataFrame t '[]) =>
MDataFrame s t ns
-> Int -> DataFrame t '[] -> State# s -> (# State# s, () #)
forall t k (ns :: [k]) s.
PrimBytes (DataFrame t '[]) =>
MDataFrame s t ns
-> Int -> DataFrame t '[] -> State# s -> (# State# s, () #)
writeDataFrameOff# @t @_ @ns)
{-# INLINE writeDataFrameOff #-}
writeDataFrame ::
forall (t :: Type) ns
. PrimBytes (DataFrame t ('[] :: KindOf ns))
=> IODataFrame t ns -> Idxs ns -> DataFrame t ('[] :: KindOf ns) -> IO ()
writeDataFrame :: IODataFrame t ns -> Idxs ns -> DataFrame t '[] -> IO ()
writeDataFrame = (MDataFrame RealWorld t ns
-> Idxs ns
-> DataFrame t '[]
-> State# RealWorld
-> (# State# RealWorld, () #))
-> IODataFrame t ns -> Idxs ns -> DataFrame t '[] -> IO ()
coerce (forall s.
PrimBytes (DataFrame t '[]) =>
MDataFrame s t ns
-> Idxs ns -> DataFrame t '[] -> State# s -> (# State# s, () #)
forall t k (ns :: [k]) s.
PrimBytes (DataFrame t '[]) =>
MDataFrame s t ns
-> Idxs ns -> DataFrame t '[] -> State# s -> (# State# s, () #)
writeDataFrame# @t @_ @ns)
{-# INLINE writeDataFrame #-}
readDataFrameOff ::
forall (t :: Type) ns
. PrimBytes (DataFrame t ('[] :: KindOf ns))
=> IODataFrame t ns -> Int -> IO (DataFrame t ('[] :: KindOf ns))
readDataFrameOff :: IODataFrame t ns -> Int -> IO (DataFrame t '[])
readDataFrameOff = (MDataFrame RealWorld t ns
-> Int
-> State# RealWorld
-> (# State# RealWorld, DataFrame t '[] #))
-> IODataFrame t ns -> Int -> IO (DataFrame t '[])
coerce (forall s.
PrimBytes (DataFrame t '[]) =>
MDataFrame s t ns
-> Int -> State# s -> (# State# s, DataFrame t '[] #)
forall t k (ns :: [k]) s.
PrimBytes (DataFrame t '[]) =>
MDataFrame s t ns
-> Int -> State# s -> (# State# s, DataFrame t '[] #)
readDataFrameOff# @t @_ @ns)
{-# INLINE readDataFrameOff #-}
readDataFrame ::
forall (t :: Type) ns
. PrimBytes (DataFrame t ('[] :: KindOf ns))
=> IODataFrame t ns -> Idxs ns -> IO (DataFrame t ('[] :: KindOf ns))
readDataFrame :: IODataFrame t ns -> Idxs ns -> IO (DataFrame t '[])
readDataFrame = (MDataFrame RealWorld t ns
-> Idxs ns
-> State# RealWorld
-> (# State# RealWorld, DataFrame t '[] #))
-> IODataFrame t ns -> Idxs ns -> IO (DataFrame t '[])
coerce (forall s.
PrimBytes (DataFrame t '[]) =>
MDataFrame s t ns
-> Idxs ns -> State# s -> (# State# s, DataFrame t '[] #)
forall t k (ns :: [k]) s.
PrimBytes (DataFrame t '[]) =>
MDataFrame s t ns
-> Idxs ns -> State# s -> (# State# s, DataFrame t '[] #)
readDataFrame# @t @_ @ns)
{-# INLINE readDataFrame #-}
isDataFramePinned ::
forall (t :: Type) ns . IODataFrame t ns -> Bool
isDataFramePinned :: IODataFrame t ns -> Bool
isDataFramePinned = (MDataFrame RealWorld t ns -> Bool) -> IODataFrame t ns -> Bool
coerce (forall s. MDataFrame s t ns -> Bool
forall t k (ns :: [k]) s. MDataFrame s t ns -> Bool
isDataFramePinned# @t @_ @ns)
{-# INLINE isDataFramePinned #-}
getDataFrameSteps ::
forall (t :: Type) ns . IODataFrame t ns -> CumulDims
getDataFrameSteps :: IODataFrame t ns -> CumulDims
getDataFrameSteps = (MDataFrame RealWorld t ns -> CumulDims)
-> IODataFrame t ns -> CumulDims
coerce (forall s. MDataFrame s t ns -> CumulDims
forall t k (ns :: [k]) s. MDataFrame s t ns -> CumulDims
getDataFrameSteps# @t @_ @ns)
{-# INLINE getDataFrameSteps #-}
withDataFramePtr ::
forall (t :: Type) ns (r :: Type)
. PrimBytes t => IODataFrame t ns -> (Ptr t -> IO r) -> IO r
withDataFramePtr :: IODataFrame t ns -> (Ptr t -> IO r) -> IO r
withDataFramePtr (IODataFrame MDataFrame RealWorld t ns
x) Ptr t -> IO r
k
= (State# RealWorld -> (# State# RealWorld, r #)) -> IO r
forall a. (State# RealWorld -> (# State# RealWorld, a #)) -> IO a
IO (MDataFrame RealWorld t ns
-> (Addr# -> State# RealWorld -> (# State# RealWorld, r #))
-> State# RealWorld
-> (# State# RealWorld, r #)
forall t k (ns :: [k]) r.
PrimBytes t =>
MDataFrame RealWorld t ns
-> (Addr# -> State# RealWorld -> (# State# RealWorld, r #))
-> State# RealWorld
-> (# State# RealWorld, r #)
withDataFramePtr# MDataFrame RealWorld t ns
x (\Addr#
p -> case Ptr t -> IO r
k (Addr# -> Ptr t
forall a. Addr# -> Ptr a
Ptr Addr#
p) of IO State# RealWorld -> (# State# RealWorld, r #)
f -> State# RealWorld -> (# State# RealWorld, r #)
f))
{-# INLINE withDataFramePtr #-}