packages feed

dataframe-core 2.5.0.1 → 2.5.0.2

raw patch · 7 files changed

+67/−61 lines, 7 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- DataFrame.Internal.Expression: MeanAcc :: {-# UNPACK #-} !Double -> {-# UNPACK #-} !Int -> MeanAcc
- DataFrame.Internal.Expression: data MeanAcc
- DataFrame.Internal.Expression: instance GHC.Classes.Eq DataFrame.Internal.Expression.MeanAcc
- DataFrame.Internal.Expression: instance GHC.Classes.Ord DataFrame.Internal.Expression.MeanAcc
- DataFrame.Internal.Expression: instance GHC.Read.Read DataFrame.Internal.Expression.MeanAcc
- DataFrame.Internal.Expression: instance GHC.Show.Show DataFrame.Internal.Expression.MeanAcc
+ DataFrame.Internal.Column.Operations: zipVectors :: (Columnable a, Columnable b, Vector va a, Vector vb b) => va a -> vb b -> Column
- DataFrame.Internal.Expression: replaceExpr :: (Columnable a, Columnable b, Columnable c) => Expr a -> Expr b -> Expr c -> Expr c
+ DataFrame.Internal.Expression: replaceExpr :: (Columnable a, Columnable b) => Expr a -> Expr a -> Expr b -> Expr b

Files

dataframe-core.cabal view
@@ -1,6 +1,6 @@ cabal-version:      3.4 name:               dataframe-core-version:            2.5.0.1+version:            2.5.0.2 synopsis:           Core data structures for the dataframe library. description:     Minimal interchange-format types for the @dataframe@ ecosystem:
src-internal/DataFrame/Internal/Column/Conversion.hs view
@@ -411,10 +411,15 @@         Nothing -> case testEquality (typeRep @a) (typeRep @T.Text) of             Just Refl -> col'             Nothing -> VB.map (T.pack . show) col'-        Just bitmap ->-            VB.imap-                (\i x -> if bitmapTestBit bitmap i then T.pack (show x) else "null")-                col'+        Just bitmap -> case testEquality (typeRep @a) (typeRep @T.Text) of+            Just Refl ->+                VB.imap+                    (\i x -> if bitmapTestBit bitmap i then x else "null")+                    col'+            Nothing ->+                VB.imap+                    (\i x -> if bitmapTestBit bitmap i then T.pack (show x) else "null")+                    col' columnToTextVec (UnboxedColumn bm col') =     case bm of         Nothing -> VB.map (T.pack . show) (VB.convert col')
src-internal/DataFrame/Internal/Column/Encode.hs view
@@ -126,8 +126,8 @@         ht <- newHashTable (min n (maxCard + 1))         codes <- VUM.new n         let go !i !next-                | i >= n = pure (Just next)                 | next > maxCard = pure Nothing+                | i >= n = pure (Just next)                 | otherwise = do                     let !h = hashAt i                     (code, isNew) <- htInsert ht eqAt next i h
src-internal/DataFrame/Internal/Column/Operations.hs view
@@ -801,23 +801,26 @@ zipColumns l r@(MergedColumn _ _) = zipColumns l (materializeMerged r) zipColumns l@(PackedText _ _) r = zipColumns (materializePacked l) r zipColumns l r@(PackedText _ _) = zipColumns l (materializePacked r)-zipColumns (BoxedColumn _ column) (BoxedColumn _ other) = BoxedColumn Nothing (VG.zip column other)-zipColumns (BoxedColumn _ column) (UnboxedColumn _ other) =-    BoxedColumn-        Nothing-        ( VB.generate-            (min (VG.length column) (VG.length other))-            (\i -> (column VG.! i, other VG.! i))-        )-zipColumns (UnboxedColumn _ column) (BoxedColumn _ other) =-    BoxedColumn-        Nothing-        ( VB.generate-            (min (VG.length column) (VG.length other))-            (\i -> (column VG.! i, other VG.! i))-        )-zipColumns (UnboxedColumn _ column) (UnboxedColumn _ other) = UnboxedColumn Nothing (VG.zip column other)+zipColumns (BoxedColumn _ column) (BoxedColumn _ other) = zipVectors column other+zipColumns (BoxedColumn _ column) (UnboxedColumn _ other) = zipVectors column other+zipColumns (UnboxedColumn _ column) (BoxedColumn _ other) = zipVectors column other+zipColumns (UnboxedColumn _ column) (UnboxedColumn _ other) = zipVectors column other {-# INLINE zipColumns #-}++zipVectors ::+    forall a b va vb.+    (Columnable a, Columnable b, VG.Vector va a, VG.Vector vb b) =>+    va a -> vb b -> Column+zipVectors column other =+    case sUnbox @a of+        STrue -> case sUnbox @b of+            STrue -> UnboxedColumn Nothing (VU.generate n pairAt)+            SFalse -> BoxedColumn Nothing (VB.generate n pairAt)+        SFalse -> BoxedColumn Nothing (VB.generate n pairAt)+  where+    !n = min (VG.length column) (VG.length other)+    pairAt i = (VG.unsafeIndex column i, VG.unsafeIndex other i)+{-# INLINE zipVectors #-}  -- | An internal, column version of zipWith. zipWithColumns ::
src-internal/DataFrame/Internal/Column/Types.hs view
@@ -58,6 +58,7 @@     Unboxable Bool = 'True     Unboxable Double = 'True     Unboxable Float = 'True+    Unboxable (a, b) = If (Unboxable a) (Unboxable b) 'False     Unboxable _ = 'False  type family Numeric (a :: Type) :: Bool where
src-internal/DataFrame/Internal/Expression.hs view
@@ -71,9 +71,6 @@     binaryCommutative (MkBinaryOp{binaryCommutative = c}) = c     binaryPrecedence (MkBinaryOp{binaryPrecedence = p}) = p -data MeanAcc = MeanAcc {-# UNPACK #-} !Double {-# UNPACK #-} !Int-    deriving (Show, Eq, Ord, Read)- data AggStrategy a b where     CollectAgg ::         (VG.Vector v b, Typeable v) => T.Text -> (v b -> a) -> AggStrategy a b@@ -361,26 +358,24 @@     eqNormalized _ _ = False  replaceExpr ::-    forall a b c.-    (Columnable a, Columnable b, Columnable c) =>-    Expr a -> Expr b -> Expr c -> Expr c-replaceExpr new old expr = case testEquality (typeRep @b) (typeRep @c) of-    Just Refl -> case testEquality (typeRep @a) (typeRep @c) of-        Just Refl -> if eqExpr old expr then new else replace'-        Nothing -> expr+    forall a b.+    (Columnable a, Columnable b) =>+    Expr a -> Expr a -> Expr b -> Expr b+replaceExpr old new expr = case testEquality (typeRep @a) (typeRep @b) of+    Just Refl -> if eqExpr old expr then new else replace'     Nothing -> replace'   where     replace' = case expr of         (Col _) -> expr         (CastWith{}) -> expr-        (CastExprWith t f e) -> CastExprWith t f (replaceExpr new old e)+        (CastExprWith t f e) -> CastExprWith t f (replaceExpr old new e)         (Lit _) -> expr         (If cond l r) ->-            If (replaceExpr new old cond) (replaceExpr new old l) (replaceExpr new old r)-        (Unary op value) -> Unary op (replaceExpr new old value)-        (Binary op l r) -> Binary op (replaceExpr new old l) (replaceExpr new old r)-        (Agg op inner) -> Agg op (replaceExpr new old inner)-        (Over keys inner) -> Over keys (replaceExpr new old inner)+            If (replaceExpr old new cond) (replaceExpr old new l) (replaceExpr old new r)+        (Unary op value) -> Unary op (replaceExpr old new value)+        (Binary op l r) -> Binary op (replaceExpr old new l) (replaceExpr old new r)+        (Agg op inner) -> Agg op (replaceExpr old new inner)+        (Over keys inner) -> Over keys (replaceExpr old new inner)  {- | Simultaneously substitute 'Col' references from a name→expression map in a single parallel pass, so a swap like @{a ↦ col b, b ↦ col a}@ works. Raw-text@@ -441,8 +436,9 @@ prettyPrint = prettyPrintWidth P.defaultWidth  {- | Render an expression as readable, width-aware pseudo-code: long binary chains-wrap onto aligned continuation lines, @if@/@then@/@else@ break onto their own lines-(nested @else if@ form a flat ladder), and sub-exprs are parenthesized by precedence.+wrap onto aligned continuation lines, conditionals are laid out like Python+statements (@if cond@ / @else if cond@ / @else@ with 4-space indented branches, so+nested conditionals nest visually), and sub-exprs are parenthesized by precedence. -} prettyPrintWidth :: Int -> Expr a -> String prettyPrintWidth width = P.render width . toDoc 0@@ -505,8 +501,7 @@     renderIf prec (If c t e) =         let blk =                 P.text "if" P.<+> P.nest 3 (P.group (toDoc 0 c))-                    <> P.hardline-                    <> P.text "then" P.<+> toDoc 0 t+                    <> P.nest indentWidth (P.hardline <> toDoc 0 t)                     <> P.hardline                     <> renderElse e          in if prec > 0 then P.parens (P.nest 2 blk) else blk@@ -514,9 +509,11 @@      renderElse :: Expr x -> P.Doc     renderElse (If c t e) =-        P.text "else if" P.<+> P.nest 8 (P.group (toDoc 0 c))-            <> P.hardline-            <> P.text "then" P.<+> toDoc 0 t+        P.text "else if" P.<+> P.nest 5 (P.group (toDoc 0 c))+            <> P.nest indentWidth (P.hardline <> toDoc 0 t)             <> P.hardline             <> renderElse e-    renderElse other = P.text "else" P.<+> toDoc 0 other+    renderElse other =+        P.text "else" <> P.nest indentWidth (P.hardline <> toDoc 0 other)+    indentWidth :: Int+    indentWidth = 4
src-internal/DataFrame/Internal/Interpreter.hs view
@@ -49,56 +49,56 @@ -- Specializations for common aggregation types to avoid dictionary overhead. -- foldLinearGroups: mean accumulator {-# SPECIALIZE foldLinearGroups ::-    (MeanAcc -> Double -> MeanAcc) ->-    MeanAcc ->+    ((Double, Int) -> Double -> (Double, Int)) ->+    (Double, Int) ->     Column ->     VU.Vector Int ->     Int ->     Either DataFrameException Column     #-} {-# SPECIALIZE foldLinearGroups ::-    (MeanAcc -> Float -> MeanAcc) ->-    MeanAcc ->+    ((Double, Int) -> Float -> (Double, Int)) ->+    (Double, Int) ->     Column ->     VU.Vector Int ->     Int ->     Either DataFrameException Column     #-} {-# SPECIALIZE foldLinearGroups ::-    (MeanAcc -> Int -> MeanAcc) ->-    MeanAcc ->+    ((Double, Int) -> Int -> (Double, Int)) ->+    (Double, Int) ->     Column ->     VU.Vector Int ->     Int ->     Either DataFrameException Column     #-} {-# SPECIALIZE foldLinearGroups ::-    (MeanAcc -> Int8 -> MeanAcc) ->-    MeanAcc ->+    ((Double, Int) -> Int8 -> (Double, Int)) ->+    (Double, Int) ->     Column ->     VU.Vector Int ->     Int ->     Either DataFrameException Column     #-} {-# SPECIALIZE foldLinearGroups ::-    (MeanAcc -> Int16 -> MeanAcc) ->-    MeanAcc ->+    ((Double, Int) -> Int16 -> (Double, Int)) ->+    (Double, Int) ->     Column ->     VU.Vector Int ->     Int ->     Either DataFrameException Column     #-} {-# SPECIALIZE foldLinearGroups ::-    (MeanAcc -> Int32 -> MeanAcc) ->-    MeanAcc ->+    ((Double, Int) -> Int32 -> (Double, Int)) ->+    (Double, Int) ->     Column ->     VU.Vector Int ->     Int ->     Either DataFrameException Column     #-} {-# SPECIALIZE foldLinearGroups ::-    (MeanAcc -> Int64 -> MeanAcc) ->-    MeanAcc ->+    ((Double, Int) -> Int64 -> (Double, Int)) ->+    (Double, Int) ->     Column ->     VU.Vector Int ->     Int ->@@ -213,7 +213,7 @@  -- mapColumn: finalize {-# SPECIALIZE mapColumn ::-    (MeanAcc -> Double) -> Column -> Either DataFrameException Column+    ((Double, Int) -> Double) -> Column -> Either DataFrameException Column     #-} {-# SPECIALIZE mapColumn ::     (Double -> Double) -> Column -> Either DataFrameException Column