Skip to content

Commit dbc1cd6

Browse files
committed
feat: Use container specific functions for vectors.
1 parent 3172f5c commit dbc1cd6

File tree

3 files changed

+25
-25
lines changed

3 files changed

+25
-25
lines changed

src/DataFrame/Internal/Column.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -333,13 +333,13 @@ sliceColumn start n (OptionalColumn xs) = OptionalColumn $ VG.slice start n xs
333333
atIndices :: S.Set Int -> Column -> Column
334334
atIndices indexes (BoxedColumn column) = BoxedColumn $ VG.ifilter (\i _ -> i `S.member` indexes) column
335335
atIndices indexes (OptionalColumn column) = OptionalColumn $ VG.ifilter (\i _ -> i `S.member` indexes) column
336-
atIndices indexes (UnboxedColumn column) = UnboxedColumn $ VG.ifilter (\i _ -> i `S.member` indexes) column
336+
atIndices indexes (UnboxedColumn column) = UnboxedColumn $ VU.ifilter (\i _ -> i `S.member` indexes) column
337337
{-# INLINE atIndices #-}
338338

339339
-- | O(n) Selects the elements at a given set of indices. Does not change the order.
340340
atIndicesStable :: VU.Vector Int -> Column -> Column
341341
atIndicesStable indexes (BoxedColumn column) = BoxedColumn $ VG.unsafeBackpermute column (VG.convert indexes)
342-
atIndicesStable indexes (UnboxedColumn column) = UnboxedColumn $ VG.unsafeBackpermute column indexes
342+
atIndicesStable indexes (UnboxedColumn column) = UnboxedColumn $ VU.unsafeBackpermute column indexes
343343
atIndicesStable indexes (OptionalColumn column) = OptionalColumn $ VG.unsafeBackpermute column (VG.convert indexes)
344344
{-# INLINE atIndicesStable #-}
345345

src/DataFrame/Internal/Expression.hs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ interpretAggregation gdf (Lit value) =
159159
Aggregated $
160160
TColumn $
161161
fromVector $
162-
V.replicate (VG.length (offsets gdf) - 1) value
162+
V.replicate (VU.length (offsets gdf) - 1) value
163163
interpretAggregation gdf@(Grouped df names indices os) (Col name) = case getColumn name df of
164164
Nothing -> Left $ ColumnNotFoundException name "" (M.keys $ columnIndices df)
165165
Just (BoxedColumn col) -> Right $ UnAggregated $ fromVector $ mkUnaggregatedColumnBoxed col os indices
@@ -701,7 +701,7 @@ interpretAggregation gdf@(Grouped df names indices os) expression@(AggNumericVec
701701
Aggregated $
702702
TColumn $
703703
fromVector $
704-
V.map f (VG.map (VG.map fromIntegral) col)
704+
V.map f (V.map (VU.map fromIntegral) col)
705705
Just Refl -> Right $ Aggregated $ TColumn $ fromVector $ V.map f col
706706
Right (UnAggregated _) -> Left $ InternalException "Aggregated into non-boxed column"
707707
Right (Aggregated (TColumn (BoxedColumn (col :: V.Vector d)))) -> case testEquality (typeRep @Integer) (typeRep @d) of
@@ -797,7 +797,7 @@ interpretAggregation gdf@(Grouped df names indices os) expression@(AggReduce exp
797797
Aggregated $
798798
TColumn $
799799
fromVector $
800-
V.map (VG.foldl1' f) col
800+
V.map (V.foldl1' f) col
801801
Right (UnAggregated _) -> Left $ InternalException "Aggregated into non-boxed column"
802802
Right (Aggregated (TColumn column)) -> case foldl1Column f column of
803803
Left e -> Left e
@@ -1102,8 +1102,8 @@ mkUnaggregatedColumnBoxed ::
11021102
mkUnaggregatedColumnBoxed col os indices =
11031103
let
11041104
sorted = V.unsafeBackpermute col (V.convert indices)
1105-
n i = os `VG.unsafeIndex` (i + 1) - (os `VG.unsafeIndex` i)
1106-
start i = os `VG.unsafeIndex` i
1105+
n i = os `VU.unsafeIndex` (i + 1) - (os `VU.unsafeIndex` i)
1106+
start i = os `VU.unsafeIndex` i
11071107
in
11081108
V.generate
11091109
(VU.length os - 1)
@@ -1119,7 +1119,7 @@ mkUnaggregatedColumnUnboxed col os indices =
11191119
let
11201120
sorted = VU.unsafeBackpermute col indices
11211121
n i = os `VU.unsafeIndex` (i + 1) - (os `VU.unsafeIndex` i)
1122-
start i = os `VG.unsafeIndex` i
1122+
start i = os `VU.unsafeIndex` i
11231123
in
11241124
V.generate
11251125
(VU.length os - 1)
@@ -1139,7 +1139,7 @@ mkAggregatedColumnUnboxed col os indices f =
11391139
let
11401140
sorted = VU.unsafeBackpermute col indices
11411141
n i = os `VU.unsafeIndex` (i + 1) - (os `VU.unsafeIndex` i)
1142-
start i = os `VG.unsafeIndex` i
1142+
start i = os `VU.unsafeIndex` i
11431143
in
11441144
VU.generate
11451145
(VU.length os - 1)
@@ -1162,11 +1162,11 @@ mkReducedColumnUnboxed col os indices f = runST $ do
11621162
let loopOut i
11631163
| i == len = return ()
11641164
| otherwise = do
1165-
let start = os `VU.unsafeIndex` i
1166-
let end = os `VU.unsafeIndex` (i + 1)
1167-
let initVal = col `VU.unsafeIndex` (indices `VU.unsafeIndex` start)
1165+
let !start = os `VU.unsafeIndex` i
1166+
let !end = os `VU.unsafeIndex` (i + 1)
1167+
let !initVal = col `VU.unsafeIndex` (indices `VU.unsafeIndex` start)
11681168

1169-
let loopIn !acc idx
1169+
let loopIn !acc !idx
11701170
| idx == end = acc
11711171
| otherwise =
11721172
let val = col `VU.unsafeIndex` (indices `VU.unsafeIndex` idx)

src/DataFrame/Operations/Aggregation.hs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
{-# LANGUAGE RankNTypes #-}
88
{-# LANGUAGE ScopedTypeVariables #-}
99
{-# LANGUAGE TypeApplications #-}
10+
{-# LANGUAGE Strict #-}
1011

1112
module DataFrame.Operations.Aggregation where
1213

@@ -15,7 +16,6 @@ import qualified Data.Map as M
1516
import qualified Data.Text as T
1617
import qualified Data.Vector as V
1718
import qualified Data.Vector.Algorithms.Merge as VA
18-
import qualified Data.Vector.Generic as VG
1919
import qualified Data.Vector.Unboxed as VU
2020
import qualified Data.Vector.Unboxed.Mutable as VUM
2121

@@ -55,7 +55,7 @@ groupBy names df
5555
Grouped
5656
df
5757
names
58-
(VG.map fst valueIndices)
58+
(VU.map fst valueIndices)
5959
(changingPoints valueIndices)
6060
where
6161
indicesToGroup = M.elems $ M.filterWithKey (\k _ -> k `elem` names) (columnIndices df)
@@ -72,7 +72,7 @@ groupBy names df
7272
case testEquality (typeRep @a) (typeRep @Int) of
7373
Just Refl ->
7474
VU.imapM_
75-
( \i (x :: Int) -> do
75+
( \i x -> do
7676
(_, !h) <- VUM.unsafeRead mv i
7777
VUM.unsafeWrite mv i (i, hashWithSalt h x)
7878
)
@@ -81,7 +81,7 @@ groupBy names df
8181
case testEquality (typeRep @a) (typeRep @Double) of
8282
Just Refl ->
8383
VU.imapM_
84-
( \i (d :: Double) -> do
84+
( \i d -> do
8585
(_, !h) <- VUM.unsafeRead mv i
8686
VUM.unsafeWrite mv i (i, hashWithSalt h (doubleToInt d))
8787
)
@@ -120,7 +120,7 @@ groupBy names df
120120
case testEquality (typeRep @a) (typeRep @T.Text) of
121121
Just Refl ->
122122
V.imapM_
123-
( \i (t :: T.Text) -> do
123+
( \i t -> do
124124
(_, !h) <- VUM.unsafeRead mv i
125125
VUM.unsafeWrite mv i (i, hashWithSalt h t)
126126
)
@@ -142,13 +142,13 @@ groupBy names df
142142
)
143143
v
144144

145-
VA.sortBy (\(a, b) (a', b') -> compare b' b) mv
146-
VG.unsafeFreeze mv
145+
VA.sortBy (\(!a, !b) (!a', !b') -> compare b' b) mv
146+
VU.unsafeFreeze mv
147147

148148
changingPoints :: VU.Vector (Int, Int) -> VU.Vector Int
149149
changingPoints vs =
150150
VU.reverse
151-
(VU.fromList (VG.length vs : fst (VU.ifoldl' findChangePoints initialState vs)))
151+
(VU.fromList (VU.length vs : fst (VU.ifoldl' findChangePoints initialState vs)))
152152
where
153153
initialState = ([0], snd (VU.head vs))
154154
findChangePoints (!offsets, !currentVal) index (_, !newVal)
@@ -250,7 +250,7 @@ aggregate aggs gdf@(Grouped df groupingColumns valueIndices offsets) =
250250
let
251251
df' =
252252
selectIndices
253-
(VG.map (valueIndices VG.!) (VG.init offsets))
253+
(VU.map (valueIndices VU.!) (VU.init offsets))
254254
(select groupingColumns df)
255255

256256
f (name, Wrap (expr :: Expr a)) d =
@@ -267,12 +267,12 @@ aggregate aggs gdf@(Grouped df groupingColumns valueIndices offsets) =
267267
selectIndices :: VU.Vector Int -> DataFrame -> DataFrame
268268
selectIndices xs df =
269269
df
270-
{ columns = VG.map (atIndicesStable xs) (columns df)
271-
, dataframeDimensions = (VG.length xs, VG.length (columns df))
270+
{ columns = V.map (atIndicesStable xs) (columns df)
271+
, dataframeDimensions = (VU.length xs, V.length (columns df))
272272
}
273273

274274
-- | Filter out all non-unique values in a dataframe.
275275
distinct :: DataFrame -> DataFrame
276-
distinct df = selectIndices (VG.map (indices VG.!) (VG.init os)) df
276+
distinct df = selectIndices (VU.map (indices VU.!) (VU.init os)) df
277277
where
278278
(Grouped _ _ indices os) = groupBy (columnNames df) df

0 commit comments

Comments
 (0)