77{-# LANGUAGE RankNTypes #-}
88{-# LANGUAGE ScopedTypeVariables #-}
99{-# LANGUAGE TypeApplications #-}
10+ {-# LANGUAGE Strict #-}
1011
1112module DataFrame.Operations.Aggregation where
1213
@@ -15,7 +16,6 @@ import qualified Data.Map as M
1516import qualified Data.Text as T
1617import qualified Data.Vector as V
1718import qualified Data.Vector.Algorithms.Merge as VA
18- import qualified Data.Vector.Generic as VG
1919import qualified Data.Vector.Unboxed as VU
2020import 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
148148changingPoints :: VU. Vector (Int , Int ) -> VU. Vector Int
149149changingPoints 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) =
267267selectIndices :: VU. Vector Int -> DataFrame -> DataFrame
268268selectIndices 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.
275275distinct :: 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