packages feed

accelerate-kullback-liebler-0.1.2.1: common/Data/Array/Accelerate/Test.hs

{-# LANGUAGE ConstraintKinds  #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeFamilies     #-}

module Data.Array.Accelerate.Test ( randDist
                                  , the
                                  ) where

import qualified Data.Array.Accelerate                   as A
import qualified Data.Array.Accelerate.KullbackLiebler   as KL
import           Data.Array.Accelerate.System.Random.MWC (Variate, randomArray, uniformR)

-- | Doesn't actually check the list has one element
the :: A.Elt e => A.Scalar e -> e
the = head . A.toList

-- | Make a distribution of a given size
randDist :: (A.Shape sh, Fractional e, Variate e, A.Floating e, sh ~ A.DIM1) => sh -> IO (A.Acc (A.Vector e))
randDist = fmap (KL.scale . A.use) . randomArray (uniformR (0.0, 1.0))