Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions dataframe.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ source-repository head
location: https://github.com/mchav/dataframe

library
exposed-modules: DataFrame
exposed-modules: DataFrame,
DataFrame.Lazy
other-modules: DataFrame.Internal.Types,
DataFrame.Internal.Expression,
DataFrame.Internal.Parsing,
Expand All @@ -33,20 +34,24 @@ library
DataFrame.Internal.Row,
DataFrame.Errors,
DataFrame.Operations.Core,
DataFrame.Operations.Merge,
DataFrame.Operations.Subset,
DataFrame.Operations.Sorting,
DataFrame.Operations.Statistics,
DataFrame.Operations.Transformations,
DataFrame.Operations.Typing,
DataFrame.Operations.Aggregation,
DataFrame.Display.Terminal.Plot,
DataFrame.IO.CSV
DataFrame.IO.CSV,
DataFrame.Lazy.IO.CSV,
DataFrame.Lazy.Internal.DataFrame
build-depends: base >= 4.17.2.0 && < 4.22,
array ^>= 0.5,
attoparsec >= 0.12 && <= 0.14.4,
bytestring >= 0.11 && <= 0.12.2.0,
containers >= 0.6.7 && < 0.8,
directory >= 1.3.0.0 && <= 1.3.9.0,
filepath >= 1.0.0.0 && <= 1.5.4.0,
hashable >= 1.2 && <= 1.5.0.0,
statistics >= 0.16.2.1 && <= 0.16.3.0,
text >= 2.0 && <= 2.1.2,
Expand Down Expand Up @@ -76,7 +81,8 @@ executable dataframe
DataFrame.Operations.Typing,
DataFrame.Operations.Aggregation,
DataFrame.Display.Terminal.Plot,
DataFrame.IO.CSV
DataFrame.IO.CSV,
DataFrame.Lazy.IO.CSV
build-depends: base >= 4.17.2.0 && < 4.22,
array ^>= 0.5,
attoparsec >= 0.12 && <= 0.14.4,
Expand Down
3 changes: 3 additions & 0 deletions src/DataFrame/IO.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module DataFrame.IO where

data InputTypes = CSV deriving Show
27 changes: 26 additions & 1 deletion src/DataFrame/Internal/Column.hs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE Strict #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
Expand Down Expand Up @@ -521,6 +521,31 @@ expandColumn n (UnboxedColumn col) = OptionalColumn $ VB.map Just (VU.convert co
expandColumn n (GroupedBoxedColumn col) = GroupedBoxedColumn $ col <> VB.replicate n VB.empty
expandColumn n (GroupedUnboxedColumn col) = GroupedUnboxedColumn $ col <> VB.replicate n VU.empty

leftExpandColumn :: Int -> Column -> Column
leftExpandColumn n (OptionalColumn col) = OptionalColumn $ VB.replicate n Nothing <> col
leftExpandColumn n (BoxedColumn col) = OptionalColumn $ VB.replicate n Nothing <> VB.map Just col
leftExpandColumn n (UnboxedColumn col) = OptionalColumn $ VB.replicate n Nothing <> VB.map Just (VU.convert col)
leftExpandColumn n (GroupedBoxedColumn col) = GroupedBoxedColumn $ VB.replicate n VB.empty <> col
leftExpandColumn n (GroupedUnboxedColumn col) = GroupedUnboxedColumn $ VB.replicate n VU.empty <> col

concatColumns :: Column -> Column -> Maybe Column
concatColumns (OptionalColumn left) (OptionalColumn right) = case testEquality (typeOf left) (typeOf right) of
Nothing -> Nothing
Just Refl -> Just (OptionalColumn $ left <> right)
concatColumns (BoxedColumn left) (BoxedColumn right) = case testEquality (typeOf left) (typeOf right) of
Nothing -> Nothing
Just Refl -> Just (BoxedColumn $ left <> right)
concatColumns (UnboxedColumn left) (UnboxedColumn right) = case testEquality (typeOf left) (typeOf right) of
Nothing -> Nothing
Just Refl -> Just (UnboxedColumn $ left <> right)
concatColumns (GroupedBoxedColumn left) (GroupedBoxedColumn right) = case testEquality (typeOf left) (typeOf right) of
Nothing -> Nothing
Just Refl -> Just (GroupedBoxedColumn $ left <> right)
concatColumns (GroupedUnboxedColumn left) (GroupedUnboxedColumn right) = case testEquality (typeOf left) (typeOf right) of
Nothing -> Nothing
Just Refl -> Just (GroupedUnboxedColumn $ left <> right)
concatColumns _ _ = Nothing

toVector :: forall a . Columnable a => Column -> VB.Vector a
toVector column@(OptionalColumn (col :: VB.Vector b)) =
case testEquality (typeRep @a) (typeRep @b) of
Expand Down
2 changes: 1 addition & 1 deletion src/DataFrame/Internal/DataFrame.hs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE Strict #-}
{-# LANGUAGE FlexibleContexts #-}
module DataFrame.Internal.DataFrame where

Expand Down
2 changes: 1 addition & 1 deletion src/DataFrame/Internal/Expression.hs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ data Expr a where
Apply :: (Columnable a, Columnable b) => T.Text -> (b -> a) -> Expr b -> Expr a
BinOp :: (Columnable c, Columnable b, Columnable a) => T.Text -> (c -> b -> a) -> Expr c -> Expr b -> Expr a

interpret :: forall a b . (Columnable a) => DataFrame -> Expr a -> TypedColumn a
interpret :: forall a . (Columnable a) => DataFrame -> Expr a -> TypedColumn a
interpret df (Lit value) = TColumn $ toColumn' $ V.replicate (fst $ dataframeDimensions df) value
interpret df (Col name) = case getColumn name df of
Nothing -> throw $ ColumnNotFoundException name "" (map fst $ M.toList $ columnIndices df)
Expand Down
2 changes: 1 addition & 1 deletion src/DataFrame/Internal/Types.hs
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ import Data.Word ( Word8, Word16, Word32, Word64 )
import Type.Reflection (TypeRep, typeOf, typeRep)
import Data.Type.Equality (TestEquality(..))

type Columnable' a = (Typeable a, Show a, Ord a, Eq a)
type Columnable' a = (Typeable a, Show a, Ord a, Eq a, Read a)
3 changes: 3 additions & 0 deletions src/DataFrame/Lazy.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module DataFrame.Lazy (module DataFrame.Lazy.Internal.DataFrame) where

import DataFrame.Lazy.Internal.DataFrame
Loading