packages feed

mwc-probability-transition 0.3.0.1 → 0.3.0.2

raw patch · 3 files changed

+48/−11 lines, 3 filesPVP: minor bump suggested

API additions: PVP suggests at least a minor version bump

API changes (from Hackage documentation)

+ System.Random.MWC.Probability.Transition: evalTransition :: Monad m => Handler m message -> Transition message s m a -> Int -> s -> Gen (PrimState m) -> m [a]
+ System.Random.MWC.Probability.Transition: execTransition :: Monad m => Handler m message -> Transition message s m a -> Int -> s -> Gen (PrimState m) -> m s

Files

mwc-probability-transition.cabal view
@@ -1,5 +1,5 @@ name:                mwc-probability-transition-version:             0.3.0.1+version:             0.3.0.2 synopsis:            A Markov stochastic transition operator with logging description:             .@@ -38,6 +38,7 @@   hs-source-dirs:      test   main-is:             LibSpec.hs   build-depends:       base+                     , logging-effect                      , mwc-probability                      , mwc-probability-transition                      , hspec
src/System/Random/MWC/Probability/Transition.hs view
@@ -6,8 +6,12 @@     Transition   , mkTransition   , runTransition+  -- ** Specialized combinators+  , evalTransition+  , execTransition+  -- ** Conditional execution   , stepConditional-  -- ** Helper functions+  -- * Helper functions   , withSeverity   -- -- * Re-exported from `logging-effect`   -- , Handler@@ -22,8 +26,9 @@  import Control.Monad.Trans.Class (MonadTrans(..), lift) import Control.Monad.Trans.State.Strict (StateT(..), evalStateT, execStateT, runStateT)-import Control.Monad.Log (MonadLog(..), Handler, WithSeverity(..), Severity(..), LoggingT(..), runLoggingT, withFDHandler, defaultBatchingOptions, logMessage)+-- import Control.Monad.Log (MonadLog(..), Handler, WithSeverity(..), Severity(..), LoggingT(..), runLoggingT, withFDHandler, defaultBatchingOptions, logMessage) +import qualified Control.Monad.Log as L import Data.Char  import System.Random.MWC.Probability@@ -32,7 +37,7 @@  -- | A Markov transition kernel. newtype Transition message s m a = Transition (-  Gen (PrimState m) -> StateT s (LoggingT message m) a+  Gen (PrimState m) -> StateT s (L.LoggingT message m) a   ) deriving (Functor)  instance Show (Transition msg s m a) where@@ -56,22 +61,51 @@   s <- S.get   w <- lift . lift $ sample (fm s) gen   let (a, s') = fs s w-  lift $ logMessage $ flog a s' +  lift $ L.logMessage $ flog a s'    S.put s'   return a  -- | Run a 'Transition' for a number of steps, while logging each iteration.+--+-- Returns both the list of outputs and the final state. runTransition :: Monad m =>-         Handler m message        -- ^ Logging handler+         L.Handler m message        -- ^ Logging handler       -> Transition message s m a       -> Int                      -- ^ Number of iterations        -> s                        -- ^ Initial state       -> Gen (PrimState m)        -- ^ PRNG       -> m ([a], s)               -- ^ (Outputs, Final state) runTransition logf (Transition fm) n s0 g =-  runLoggingT (runStateT (replicateM n (fm g)) s0) logf+  L.runLoggingT (runStateT (replicateM n (fm g)) s0) logf  +-- | Run a 'Transition' for a number of steps, while logging each iteration.+--+-- Returns the list of outputs.+evalTransition :: Monad m =>+                  L.Handler m message+               -> Transition message s m a+               -> Int+               -> s+               -> Gen (PrimState m)+               -> m [a]              -- ^ Outputs+evalTransition logf (Transition fm) n s0 g =+  L.runLoggingT (evalStateT (replicateM n (fm g)) s0) logf++-- | Run a 'Transition' for a number of steps, while logging each iteration.+--+-- Returns the final state.+execTransition :: Monad m =>+                  L.Handler m message+               -> Transition message s m a+               -> Int+               -> s+               -> Gen (PrimState m)+               -> m s              -- ^ Final state+execTransition logf (Transition fm) n s0 g =+  L.runLoggingT (execStateT (replicateM n (fm g)) s0) logf++ -- | Perform one 'Transition' and check output and updated state against the current state, producing an Either with the result of the comparison. -- -- Can be useful for detecting early divergence or lack of convergence etc.@@ -79,13 +113,13 @@                    (a -> s -> s -> Bool)  -- ^ Inputs: Model output, Current state, New state                 -> (a -> s -> s -> l)     -- ^ "                 -> (a -> s -> s -> r)     -- ^ "-                -> Handler m message      +                -> L.Handler m message                       -> Transition message s m a                 -> s                      -- ^ Current state                 -> Gen (PrimState m)                 -> m (Either l r) stepConditional q fleft fright logf (Transition fm) s g = do -  (a, s') <- runLoggingT (runStateT (fm g) s) logf+  (a, s') <- L.runLoggingT (runStateT (fm g) s) logf   if q a s s' then pure (Left $ fleft a s s') else pure (Right $ fright a s s')  @@ -97,7 +131,7 @@ bracketsUpp p = unwords ["[", map toUpper (show p), "]"]  -- | Render a logging message along with an annotation of its severity.-withSeverity :: (t -> String) -> WithSeverity t -> String-withSeverity k (WithSeverity u a ) = unwords [bracketsUpp u, k a]+withSeverity :: (t -> String) -> L.WithSeverity t -> String+withSeverity k (L.WithSeverity u a ) = unwords [bracketsUpp u, k a]  
test/LibSpec.hs view
@@ -3,6 +3,8 @@ import Test.Hspec import Test.Hspec.QuickCheck +import Control.Monad.Log+ import System.Random.MWC.Probability import System.Random.MWC.Probability.Transition