packages feed

statistics 0.15.0.0 → 0.15.1.0

raw patch · 5 files changed

+48/−18 lines, 5 filesdep +async

Dependencies added: async

Files

Statistics/Regression.hs view
@@ -14,10 +14,9 @@     ) where  import Control.Applicative ((<$>))-import Control.Concurrent (forkIO)-import Control.Concurrent.Chan (newChan, readChan, writeChan)+import Control.Concurrent.Async (forConcurrently) import Control.DeepSeq (rnf)-import Control.Monad (forM_, replicateM, when)+import Control.Monad (when) import Data.List (nub) import GHC.Conc (getNumCapabilities) import Prelude hiding (pred, sum)@@ -140,16 +139,15 @@    caps <- getNumCapabilities   gens <- splitGen caps gen0-  done <- newChan-  forM_ (zip gens (balance caps numResamples)) $ \(gen,count) -> forkIO $ do+  vs <- forConcurrently (zip gens (balance caps numResamples)) $ \(gen,count) -> do       v <- V.replicateM count $ do            let n = U.length resp0            ixs <- U.replicateM n $ uniformR (0,n-1) gen            let resp  = U.backpermute resp0 ixs                preds = map (flip U.backpermute ixs) preds0            return $ rgrss preds resp-      rnf v `seq` writeChan done v-  (coeffsv, r2v) <- (G.unzip . V.concat) <$> replicateM caps (readChan done)+      rnf v `seq` return v+  let (coeffsv, r2v) = G.unzip (V.concat vs)   let coeffs  = flip G.imap (G.convert coeffss) $ \i x ->                 est x . U.generate numResamples $ \k -> (coeffsv G.! k) G.! i       r2      = est r2s (G.convert r2v)
Statistics/Resampling.hs view
@@ -37,8 +37,8 @@  import Data.Aeson (FromJSON, ToJSON) import Control.Applicative-import Control.Concurrent (forkIO, newChan, readChan, writeChan)-import Control.Monad (forM_, forM, replicateM, replicateM_, liftM2)+import Control.Concurrent.Async (forConcurrently_)+import Control.Monad (forM_, forM, replicateM, liftM2) import Control.Monad.Primitive (PrimMonad(..)) import Data.Binary (Binary(..)) import Data.Data (Data, Typeable)@@ -164,18 +164,17 @@                         (replicate r 1 ++ repeat 0)           where (q,r) = numResamples `quotRem` numCapabilities   results <- mapM (const (MU.new numResamples)) ests-  done <- newChan   gens <- splitGen numCapabilities gen-  forM_ (zip3 ixs (tail ixs) gens) $ \ (start,!end,gen') ->-    forkIO $ do-      let loop k ers | k >= end = writeChan done ()+  forConcurrently_ (zip3 ixs (tail ixs) gens) $ \ (start,!end,gen') -> do+    -- on GHCJS it doesn't make sense to do any forking.+    -- JavaScript runtime has only single capability.+      let loop k ers | k >= end = return ()                      | otherwise = do             re <- resampleVector gen' samples             forM_ ers $ \(est,arr) ->                 MU.write arr k . est $ re             loop (k+1) ers       loop start (zip ests' results)-  replicateM_ numCapabilities $ readChan done   mapM_ sort results   -- Build resamples   res <- mapM unsafeFreeze results
Statistics/Resampling/Bootstrap.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} -- | -- Module    : Statistics.Resampling.Bootstrap -- Copyright : (c) 2009, 2011 Bryan O'Sullivan@@ -16,7 +17,6 @@     -- $references     ) where -import Control.Monad.Par (parMap, runPar) import           Data.Vector.Generic ((!)) import qualified Data.Vector.Unboxed as U import qualified Data.Vector.Generic as G@@ -31,6 +31,9 @@  import qualified Statistics.Resampling as R +#if !defined(__GHCJS__)+import Control.Monad.Par (parMap, runPar)+#endif  data T = {-# UNPACK #-} !Double :< {-# UNPACK #-} !Double infixl 2 :<@@ -48,7 +51,15 @@   --   this.   -> [Estimate ConfInt Double] bootstrapBCA confidenceLevel sample resampledData+#if defined(__GHCJS__)+  -- monad-par causes seems to cause "thread blocked indefinitely on MVar"+  -- on GHCJS still+  --+  -- I (phadej) would change the interface to return IO, and use mapConcurrently from async+  = map e resampledData+#else   = runPar $ parMap e resampledData+#endif   where     e (est, Bootstrap pt resample)       | U.length sample == 1 || isInfinite bias =
changelog.md view
@@ -1,3 +1,10 @@+## Changes in 0.15.1.0++ * GHCJS support++ * Concurrent resampling now uses `async` instead of hand-rolled primitives++ ## Changes in 0.15.0.0   * Modules `Statistics.Matrix.*` are split into new package
statistics.cabal view
@@ -1,5 +1,5 @@ name:           statistics-version:        0.15.0.0+version:        0.15.1.0 synopsis:       A library of statistical types, data, and functions description:   This library provides a number of common functions and types useful@@ -44,8 +44,19 @@   tests/Tests/Math/gen.py   tests/utils/Makefile   tests/utils/fftw.c-tested-with: GHC==7.4.2, GHC==7.6.3, GHC==7.8.3, GHC==7.10.3, GHC==8.0.2, GHC==8.2.2, GHC==8.4.3 +tested-with:+    GHC ==7.4.2+     || ==7.6.3+     || ==7.8.4+     || ==7.10.3+     || ==8.0.2+     || ==8.2.2+     || ==8.4.4+     || ==8.6.5+  , GHCJS ==8.4++ library   exposed-modules:     Statistics.Autocorrelation@@ -103,9 +114,9 @@                , mwc-random              >= 0.13.0.0                  --                , aeson                   >= 0.6.0.0+               , async                   >= 2.2.2 && <2.3                , deepseq                 >= 1.1.0.2                , binary                  >= 0.5.1.0-               , monad-par               >= 0.3.4                , primitive               >= 0.3                , dense-linear-algebra    >= 0.1 && <0.2                , vector                  >= 0.10@@ -113,6 +124,10 @@                , vector-th-unbox                , vector-binary-instances >= 0.2.1                , data-default-class      >= 0.1.2+  if !impl(ghcjs)+    build-depends:+      monad-par               >= 0.3.4+  -- Older GHC   if impl(ghc < 7.6)     build-depends:       ghc-prim