Hello community, here is the log from the commit of package ghc-hasty-hamiltonian for openSUSE:Factory checked in at 2017-03-03 17:50:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ghc-hasty-hamiltonian (Old) and /work/SRC/openSUSE:Factory/.ghc-hasty-hamiltonian.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-hasty-hamiltonian" Fri Mar 3 17:50:23 2017 rev:4 rq:461634 version:1.3.0 Changes: -------- --- /work/SRC/openSUSE:Factory/ghc-hasty-hamiltonian/ghc-hasty-hamiltonian.changes 2017-01-12 15:49:30.405142046 +0100 +++ /work/SRC/openSUSE:Factory/.ghc-hasty-hamiltonian.new/ghc-hasty-hamiltonian.changes 2017-03-03 17:50:24.639325892 +0100 @@ -1,0 +2,5 @@ +Sun Feb 12 14:12:34 UTC 2017 - psim...@suse.com + +- Update to version 1.3.0 with cabal2obs. + +------------------------------------------------------------------- Old: ---- hasty-hamiltonian-1.1.5.tar.gz New: ---- hasty-hamiltonian-1.3.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ghc-hasty-hamiltonian.spec ++++++ --- /var/tmp/diff_new_pack.irwDah/_old 2017-03-03 17:50:25.119258110 +0100 +++ /var/tmp/diff_new_pack.irwDah/_new 2017-03-03 17:50:25.119258110 +0100 @@ -1,7 +1,7 @@ # # spec file for package ghc-hasty-hamiltonian # -# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,7 +19,7 @@ %global pkg_name hasty-hamiltonian %bcond_with tests Name: ghc-%{pkg_name} -Version: 1.1.5 +Version: 1.3.0 Release: 0 Summary: Speedy traversal through parameter space License: MIT @@ -27,6 +27,7 @@ Url: https://hackage.haskell.org/package/%{pkg_name} Source0: https://hackage.haskell.org/package/%{pkg_name}-%{version}/%{pkg_name}-%{version}.tar.gz BuildRequires: ghc-Cabal-devel +BuildRequires: ghc-kan-extensions-devel BuildRequires: ghc-lens-devel BuildRequires: ghc-mcmc-types-devel BuildRequires: ghc-mwc-probability-devel @@ -50,8 +51,9 @@ <https://hackage.haskell.org/package/ad ad> library for automatic differentiation. -Exports a 'mcmc' function that prints a trace to stdout, as well as a -'hamiltonian' transition operator that can be used more generally. +Exports a 'mcmc' function that prints a trace to stdout, a 'chain' function for +collecting results in memory, and a 'hamiltonian' transition operator that can +be used more generally. > import Numeric.AD (grad) > import Numeric.MCMC.Hamiltonian > > target :: RealFloat a => [a] -> a > target [x0, x1] = negate ((x0 + 2 * x1 - 7) ^ 2 + (2 ++++++ hasty-hamiltonian-1.1.5.tar.gz -> hasty-hamiltonian-1.3.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hasty-hamiltonian-1.1.5/Numeric/MCMC/Hamiltonian.hs new/hasty-hamiltonian-1.3.0/Numeric/MCMC/Hamiltonian.hs --- old/hasty-hamiltonian-1.1.5/Numeric/MCMC/Hamiltonian.hs 2016-10-31 20:56:16.000000000 +0100 +++ new/hasty-hamiltonian-1.3.0/Numeric/MCMC/Hamiltonian.hs 2016-12-21 21:46:48.000000000 +0100 @@ -24,6 +24,7 @@ module Numeric.MCMC.Hamiltonian ( mcmc + , chain , hamiltonian -- * Re-exported @@ -35,8 +36,11 @@ ) where import Control.Lens hiding (index) +import Control.Monad (replicateM) +import Control.Monad.Codensity (lowerCodensity) +import Control.Monad.IO.Class (MonadIO, liftIO) +import Control.Monad.Primitive (PrimState, PrimMonad) import Control.Monad.Trans.State.Strict hiding (state) -import Control.Monad.Primitive (PrimState, PrimMonad, RealWorld) import qualified Data.Foldable as Foldable (sum) import Data.Maybe (fromMaybe) import Data.Sampling.Types @@ -48,9 +52,10 @@ -- | Trace 'n' iterations of a Markov chain and stream them to stdout. -- --- >>> withSystemRandom . asGenIO $ mcmc 3 1 [0, 0] target +-- >>> withSystemRandom . asGenIO $ mcmc 10000 0.05 20 [0, 0] target mcmc - :: (Num (IxValue (t Double)), Show (t Double), Traversable t + :: ( MonadIO m, PrimMonad m + , Num (IxValue (t Double)), Show (t Double), Traversable t , FunctorWithIndex (Index (t Double)) t, Ixed (t Double) , IxValue (t Double) ~ Double) => Int @@ -58,18 +63,47 @@ -> Int -> t Double -> Target (t Double) - -> Gen RealWorld - -> IO () + -> Gen (PrimState m) + -> m () mcmc n step leaps chainPosition chainTarget gen = runEffect $ - chain step leaps Chain {..} gen + drive step leaps Chain {..} gen >-> Pipes.take n - >-> Pipes.mapM_ print + >-> Pipes.mapM_ (liftIO . print) where chainScore = lTarget chainTarget chainPosition chainTunables = Nothing --- A Markov chain driven by the Metropolis transition operator. +-- | Trace 'n' iterations of a Markov chain and collect the results in a list. +-- +-- >>> results <- withSystemRandom . asGenIO $ chain 1000 0.05 20 [0, 0] target chain + :: (PrimMonad m, Traversable f + , FunctorWithIndex (Index (f Double)) f, Ixed (f Double) + , IxValue (f Double) ~ Double) + => Int + -> Double + -> Int + -> f Double + -> Target (f Double) + -> Gen (PrimState m) + -> m [Chain (f Double) b] +chain n step leaps position target gen = runEffect $ + drive step leaps origin gen + >-> collect n + where + origin = Chain { + chainScore = lTarget target position + , chainTunables = Nothing + , chainTarget = target + , chainPosition = position + } + + collect :: Monad m => Int -> Consumer a m [a] + collect size = lowerCodensity $ + replicateM size (lift Pipes.await) + +-- Drive a Markov chain. +drive :: (Num (IxValue (t Double)), Traversable t , FunctorWithIndex (Index (t Double)) t, Ixed (t Double) , PrimMonad m, IxValue (t Double) ~ Double) @@ -77,8 +111,8 @@ -> Int -> Chain (t Double) b -> Gen (PrimState m) - -> Producer (Chain (t Double) b) m () -chain step leaps = loop where + -> Producer (Chain (t Double) b) m c +drive step leaps = loop where loop state prng = do next <- lift (MWC.sample (execStateT (hamiltonian step leaps) state) prng) yield next diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hasty-hamiltonian-1.1.5/hasty-hamiltonian.cabal new/hasty-hamiltonian-1.3.0/hasty-hamiltonian.cabal --- old/hasty-hamiltonian-1.1.5/hasty-hamiltonian.cabal 2016-12-04 10:04:50.000000000 +0100 +++ new/hasty-hamiltonian-1.3.0/hasty-hamiltonian.cabal 2016-12-21 21:49:39.000000000 +0100 @@ -1,5 +1,5 @@ name: hasty-hamiltonian -version: 1.1.5 +version: 1.3.0 synopsis: Speedy traversal through parameter space. homepage: http://github.com/jtobin/hasty-hamiltonian license: MIT @@ -8,7 +8,7 @@ maintainer: ja...@jtobin.ca category: Numeric build-type: Simple -cabal-version: >=1.10 +cabal-version: >= 1.10 Description: Gradient-based traversal through parameter space. . @@ -20,8 +20,9 @@ handy <https://hackage.haskell.org/package/ad ad> library for automatic differentiation. . - Exports a 'mcmc' function that prints a trace to stdout, as well as a - 'hamiltonian' transition operator that can be used more generally. + Exports a 'mcmc' function that prints a trace to stdout, a 'chain' function + for collecting results in memory, and a 'hamiltonian' transition operator + that can be used more generally. . > import Numeric.AD (grad) > import Numeric.MCMC.Hamiltonian @@ -50,6 +51,7 @@ Numeric.MCMC.Hamiltonian build-depends: base >= 4 && < 6 + , kan-extensions >= 5 && < 6 , mcmc-types >= 1.0.1 , mwc-probability >= 1.0.1 , lens >= 4 && < 5 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hasty-hamiltonian-1.1.5/test/Booth.hs new/hasty-hamiltonian-1.3.0/test/Booth.hs --- old/hasty-hamiltonian-1.1.5/test/Booth.hs 2016-10-31 20:49:03.000000000 +0100 +++ new/hasty-hamiltonian-1.3.0/test/Booth.hs 2016-12-21 21:47:27.000000000 +0100 @@ -13,5 +13,7 @@ booth = Target target (Just gTarget) main :: IO () -main = withSystemRandom . asGenIO $ mcmc 100 0.05 20 [0, 0] booth +main = withSystemRandom . asGenIO $ \gen -> do + _ <- chain 100 0.05 20 [0, 0] booth gen + mcmc 100 0.05 20 [0, 0] booth gen