data-sketches 0.1.0.1 → 0.1.0.2
raw patch · 4 files changed
+40/−26 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- data-sketches.cabal +6/−6
- src/DataSketches/Quantiles/RelativeErrorQuantile.hs +17/−15
- src/DataSketches/Quantiles/RelativeErrorQuantile/Internal/Auxiliary.hs +16/−4
- src/DataSketches/Quantiles/RelativeErrorQuantile/Internal/Compactor.hs +1/−1
data-sketches.cabal view
@@ -5,13 +5,13 @@ -- see: https://github.com/sol/hpack name: data-sketches-version: 0.1.0.1-description: Please see the README on GitHub at <https://github.com/iand675/streaming-quantiles#readme>-homepage: https://github.com/iand675/data-sketches#readme-bug-reports: https://github.com/iand675/data-sketches/issues+version: 0.1.0.2+description: Please see the README on GitHub at <https://github.com/iand675/datasketches-haskell#readme>+homepage: https://github.com/iand675/datasketches-haskell#readme+bug-reports: https://github.com/iand675/datasketches-haskell/issues author: Ian Duncan, Rob Bassi maintainer: ian@iankduncan.com-copyright: 2021 Ian Duncan, Rob Bassi, Mercury Bank+copyright: 2021 Ian Duncan, Rob Bassi, Mercury Technologies license: Apache license-file: LICENSE build-type: Simple@@ -25,7 +25,7 @@ source-repository head type: git- location: https://github.com/iand675/data-sketches+ location: https://github.com/iand675/datasketches-haskell library exposed-modules:
src/DataSketches/Quantiles/RelativeErrorQuantile.hs view
@@ -62,7 +62,7 @@ import Control.Monad.Primitive import Control.Monad.Trans import Data.Bits (shiftL)-import Data.Vector ((!))+import Data.Vector ((!), imapM_) import qualified Data.Vector as Vector import Data.Primitive.MutVar import Data.Proxy@@ -84,6 +84,7 @@ import Control.Exception (throw, assert) import GHC.Generics import System.Random.MWC (Gen, create)+import qualified Data.Vector.Generic.Mutable as MG data ReqSketch (k :: Nat) s = ReqSketch { rankAccuracySetting :: !RankAccuracy@@ -460,20 +461,21 @@ compress :: (PrimMonad m, KnownNat k) => ReqSketch k (PrimState m) -> m () compress this = do compactors <- getCompactors this- Vector.iforM_ compactors $ \height compactor -> do- buffSize <- DoubleBuffer.getCount =<< Compactor.getBuffer compactor- nominalCapacity <- Compactor.getNominalCapacity compactor- when (buffSize >= nominalCapacity) $ do- numLevels <- getNumLevels this- when (height + 1 >= numLevels) $ do- grow this- compactors' <- getCompactors this- cReturn <- Compactor.compact compactor- let topCompactor = compactors' ! (height + 1)- buff <- Compactor.getBuffer topCompactor- DoubleBuffer.mergeSortIn buff $ Compactor.crDoubleBuffer cReturn- modifyURef (retainedItems this) (+ Compactor.crDeltaRetItems cReturn)- modifyURef (maxNominalCapacitiesSize this) (+ Compactor.crDeltaNominalSize cReturn)+ let compressionStep height compactor = do+ buffSize <- DoubleBuffer.getCount =<< Compactor.getBuffer compactor+ nominalCapacity <- Compactor.getNominalCapacity compactor+ when (buffSize >= nominalCapacity) $ do+ numLevels <- getNumLevels this+ when (height + 1 >= numLevels) $ do+ grow this+ compactors' <- getCompactors this+ cReturn <- Compactor.compact compactor+ let topCompactor = compactors' ! (height + 1)+ buff <- Compactor.getBuffer topCompactor+ DoubleBuffer.mergeSortIn buff $ Compactor.crDoubleBuffer cReturn+ modifyURef (retainedItems this) (+ Compactor.crDeltaRetItems cReturn)+ modifyURef (maxNominalCapacitiesSize this) (+ Compactor.crDeltaNominalSize cReturn)+ imapM_ compressionStep compactors writeMutVar (aux this) Nothing -- | Merge other sketch into this one.
src/DataSketches/Quantiles/RelativeErrorQuantile/Internal/Auxiliary.hs view
@@ -26,6 +26,7 @@ import DataSketches.Quantiles.RelativeErrorQuantile.Internal.InequalitySearch (find) import qualified DataSketches.Quantiles.RelativeErrorQuantile.Internal.InequalitySearch as IS import Debug.Trace+import qualified Data.Vector.Generic.Mutable as MG data ReqAuxiliary = ReqAuxiliary { raWeightedItems :: {-# UNPACK #-} !(U.Vector (Double, Word64))@@ -95,13 +96,24 @@ createCumulativeWeights this = do weights <- getWeights this let size = MUVector.length weights- MUVector.iforM_ weights $ \i weight -> do- when (i > 0) $ do- prevWeight <- MUVector.read weights (i - 1)- MUVector.unsafeWrite weights i (weight + prevWeight)+ let accumulateM i weight = do+ when (i > 0) $ do+ prevWeight <- MUVector.read weights (i - 1)+ MUVector.unsafeWrite weights i (weight + prevWeight)+ forI_ weights (\i -> MUVector.read weights i >>= \x -> accumulateM i x) lastWeight <- MUVector.read weights (size - 1) when (lastWeight /= mraSize this) $ do error "invariant violated: lastWeight does not equal raSize"+ where+ forI_ :: (Monad m, MG.MVector v a) => v (PrimState m) a -> (Int -> m b) -> m ()+ {-# INLINE forI_ #-}+ forI_ v f = loop 0+ where+ loop i + | i >= n = return ()+ | otherwise = f i >> loop (i + 1)+ n = MG.length v+ dedup :: PrimMonad m => MReqAuxiliary (PrimState m) -> m () dedup this = do
src/DataSketches/Quantiles/RelativeErrorQuantile/Internal/Compactor.hs view
@@ -19,7 +19,7 @@ import Data.Semigroup (Semigroup) import Data.Word import DataSketches.Quantiles.RelativeErrorQuantile.Types-import System.Random.MWC (create, Variate(uniform), Uniform (uniformM), Gen)+import System.Random.MWC (create, Variate(uniform), Gen) import Control.Exception (assert) import Control.Monad (when) import Control.Monad.Trans