···3939 , KnownNat strideColumns
4040 , KnownNat kernelFlattened
4141 , kernelFlattened ~ (kernelRows * kernelColumns * channels)
4242- , Monad m
4343- ) => Gen.Gen m (Convolution channels filters kernelRows kernelColumns strideRows strideColumns)
4242+ ) => Gen (Convolution channels filters kernelRows kernelColumns strideRows strideColumns)
4443genConvolution = Convolution <$> uniformSample <*> uniformSample
45444646-genOpaqueOpaqueConvolution :: Monad m => Gen m OpaqueConvolution
4545+genOpaqueOpaqueConvolution :: Gen OpaqueConvolution
4746genOpaqueOpaqueConvolution = do
4847 channels <- genNat
4948 filters <- genNat
···5958 p2 = natDict pkc
6059 p3 = natDict pch
6160 in case p1 %* p2 %* p3 of
6262- Dict -> OpaqueConvolution <$> (genConvolution :: Monad n => Gen n (Convolution ch fl kr kc sr sc))
6161+ Dict -> OpaqueConvolution <$> (genConvolution :: Gen (Convolution ch fl kr kc sr sc))
63626463prop_conv_net_witness = property $
6564 blindForAll genOpaqueOpaqueConvolution >>= \onet ->
+1-1
test/Test/Grenade/Layers/FullyConnected.hs
···2626instance Show OpaqueFullyConnected where
2727 show (OpaqueFullyConnected n) = show n
28282929-genOpaqueFullyConnected :: Monad m => Gen m OpaqueFullyConnected
2929+genOpaqueFullyConnected :: Gen OpaqueFullyConnected
3030genOpaqueFullyConnected = do
3131 input :: Integer <- choose 2 100
3232 output :: Integer <- choose 1 100
+1-2
test/Test/Grenade/Layers/Pooling.hs
···1313import Grenade.Layers.Pooling
14141515import Hedgehog
1616-import qualified Hedgehog.Gen as Gen
17161817import Test.Hedgehog.Compat
1918···2322instance Show OpaquePooling where
2423 show (OpaquePooling n) = show n
25242626-genOpaquePooling :: Monad m => Gen.Gen m OpaquePooling
2525+genOpaquePooling :: Gen OpaquePooling
2726genOpaquePooling = do
2827 Just kernelHeight <- someNatVal <$> choose 2 15
2928 Just kernelWidth <- someNatVal <$> choose 2 15
+3-3
test/Test/Grenade/Network.hs
···5353--
5454-- This is slightly insane for a few reasons. Everything must be wrapped up
5555-- in a SomeNetwork.
5656-genNetwork :: Monad m => Gen.Gen m SomeNetwork
5656+genNetwork :: Gen SomeNetwork
5757genNetwork =
5858 Gen.recursive Gen.choice [
5959 do SomeSing ( r :: Sing final ) <- genShape
···438438 result ~~~ expected
439439440440-- Make a shape where all are 0 except for 1 value, which is 1.
441441-oneUp :: forall shape m. ( Monad m, SingI shape ) => Gen.Gen m (S shape)
441441+oneUp :: forall shape. ( SingI shape ) => Gen (S shape)
442442oneUp =
443443 case ( sing :: Sing shape ) of
444444 D1Sing SNat ->
···482482maxVal ( S2D x ) = norm_Inf x
483483maxVal ( S3D x ) = norm_Inf x
484484485485-(~~~) :: (Monad m, HasCallStack) => Double -> Double -> Test m ()
485485+(~~~) :: (Monad m, HasCallStack) => Double -> Double -> PropertyT m ()
486486(~~~) x y =
487487 if abs (x - y) < 2e-5 then
488488 success
+2-3
test/Test/Grenade/Recurrent/Layers/LSTM.hs
···1111module Test.Grenade.Recurrent.Layers.LSTM where
12121313import Hedgehog
1414-import qualified Hedgehog.Gen as Gen
1514import Hedgehog.Internal.Source
1615import Hedgehog.Internal.Show
1716import Hedgehog.Internal.Property ( failWith, Diff (..) )
···2928import qualified Test.Grenade.Recurrent.Layers.LSTM.Reference as Reference
3029import Test.Hedgehog.Hmatrix
31303232-genLSTM :: forall i o m. (KnownNat i, KnownNat o, Monad m) => Gen.Gen m (LSTM i o)
3131+genLSTM :: forall i o. (KnownNat i, KnownNat o) => Gen (LSTM i o)
3332genLSTM = do
3433 let w = uniformSample
3534 u = uniformSample
···103102 refGradients = Reference.runLSTMbackOnCell refInput refNet refCell
104103 in toList refGradients ~~~ H.toList (S.extract actualGradients)
105104106106-(~~~) :: (Monad m, Eq a, Ord a, Num a, Fractional a, Show a, HasCallStack) => [a] -> [a] -> Test m ()
105105+(~~~) :: (Monad m, Eq a, Ord a, Num a, Fractional a, Show a, HasCallStack) => [a] -> [a] -> PropertyT m ()
107106(~~~) x y =
108107 if all (< 1e-8) (zipWith (-) x y) then
109108 success
+8-16
test/Test/Hedgehog/Compat.hs
···77 , forAllRender
88 )where
991010-import Control.Monad.Trans.Class (MonadTrans(..))
1111-1010+import Hedgehog (Gen)
1211import qualified Hedgehog.Gen as Gen
1312import qualified Hedgehog.Range as Range
1413import Hedgehog.Internal.Property
1514import Hedgehog.Internal.Source
1616-import Hedgehog.Internal.Show
17151816(...) :: (c -> d) -> (a -> b -> c) -> a -> b -> d
1917(...) = (.) . (.)
2018{-# INLINE (...) #-}
21192222-choose :: ( Monad m, Integral a ) => a -> a -> Gen.Gen m a
2020+choose :: ( Integral a ) => a -> a -> Gen a
2321choose = Gen.integral ... Range.constant
24222525-blindForAll :: Monad m => Gen.Gen m a -> Test m a
2626-blindForAll = Test . lift . lift
2323+blindForAll :: Monad m => Gen a -> PropertyT m a
2424+blindForAll = forAllWith (const "blind")
27252828-semiBlindForAll :: (Monad m, Show a, HasCallStack) => Gen.Gen m a -> Test m a
2929-semiBlindForAll gen = do
3030- x <- Test . lift $ lift gen
3131- withFrozenCallStack $ annotate (showPretty x)
3232- return x
2626+semiBlindForAll :: (Monad m, Show a, HasCallStack) => Gen a -> PropertyT m a
2727+semiBlindForAll = forAllWith (const "blind")
33283434-forAllRender :: (Monad m, HasCallStack) => ( a -> String ) -> Gen.Gen m a -> Test m a
3535-forAllRender render gen = do
3636- x <- Test . lift $ lift gen
3737- withFrozenCallStack $ footnote (render x)
3838- return x
2929+forAllRender :: (Monad m, HasCallStack) => ( a -> String ) -> Gen a -> PropertyT m a
3030+forAllRender render gen = forAllWith render gen
+4-3
test/Test/Hedgehog/Hmatrix.hs
···99import Data.Singletons
1010import Data.Singletons.TypeLits
11111212+import Hedgehog (Gen)
1213import qualified Hedgehog.Gen as Gen
1314import qualified Hedgehog.Range as Range
14151516import qualified Numeric.LinearAlgebra.Static as HStatic
16171717-randomVector :: forall m n. ( Monad m, KnownNat n ) => Gen.Gen m (HStatic.R n)
1818+randomVector :: forall n. ( KnownNat n ) => Gen (HStatic.R n)
1819randomVector = (\s -> HStatic.randomVector s HStatic.Uniform * 2 - 1) <$> Gen.int Range.linearBounded
19202020-uniformSample :: forall mm m n. ( Monad mm, KnownNat m, KnownNat n ) => Gen.Gen mm (HStatic.L m n)
2121+uniformSample :: forall m n. ( KnownNat m, KnownNat n ) => Gen (HStatic.L m n)
2122uniformSample = (\s -> HStatic.uniformSample s (-1) 1 ) <$> Gen.int Range.linearBounded
22232324-- | Generate random data of the desired shape
2424-genOfShape :: forall m x. ( Monad m, SingI x ) => Gen.Gen m (S x)
2525+genOfShape :: forall x. ( SingI x ) => Gen (S x)
2526genOfShape =
2627 case (sing :: Sing x) of
2728 D1Sing l ->
+6-5
test/Test/Hedgehog/TypeLits.hs
···1313#endif
1414import Data.Singletons
15151616+import Hedgehog (Gen)
1617import qualified Hedgehog.Gen as Gen
17181819import Grenade
···2122import GHC.TypeLits.Witnesses
2223import Test.Hedgehog.Compat
23242424-genNat :: Monad m => Gen.Gen m SomeNat
2525+genNat :: Gen SomeNat
2526genNat = do
2627 Just n <- someNatVal <$> choose 1 10
2728 return n
···3233type Shape' = Shape
3334#endif
34353535-genShape :: Monad m => Gen.Gen m (SomeSing Shape')
3636+genShape :: Gen (SomeSing Shape')
3637genShape
3738 = Gen.choice [
3839 genD1
···4041 , genD3
4142 ]
42434343-genD1 :: Monad m => Gen.Gen m (SomeSing Shape')
4444+genD1 :: Gen (SomeSing Shape')
4445genD1 = do
4546 n <- genNat
4647 return $ case n of
4748 SomeNat (_ :: Proxy x) -> SomeSing (sing :: Sing ('D1 x))
48494949-genD2 :: Monad m => Gen.Gen m (SomeSing Shape')
5050+genD2 :: Gen (SomeSing Shape')
5051genD2 = do
5152 n <- genNat
5253 m <- genNat
5354 return $ case (n, m) of
5455 (SomeNat (_ :: Proxy x), SomeNat (_ :: Proxy y)) -> SomeSing (sing :: Sing ('D2 x y))
55565656-genD3 :: Monad m => Gen.Gen m (SomeSing Shape')
5757+genD3 :: Gen (SomeSing Shape')
5758genD3 = do
5859 n <- genNat
5960 m <- genNat