rp-tree-0.2.0.0: src/Data/RPTree/Internal/Testing.hs
{-# options_ghc -Wno-unused-imports #-}
module Data.RPTree.Internal.Testing where
import Control.Monad.IO.Class (MonadIO(..))
import GHC.Word (Word8, Word64)
-- conduit
import qualified Data.Conduit as C (ConduitT, runConduit, yield, await, transPipe)
import Data.Conduit ((.|))
import qualified Data.Conduit.Combinators as C (map, mapM, scanl, scanlM, last, print)
import qualified Data.Conduit.List as C (chunksOf, unfold, unfoldM)
-- splitmix
import System.Random.SplitMix (initSMGen, unseedSMGen)
-- splitmix-distributions
import System.Random.SplitMix.Distributions (GenT)
import Data.RPTree.Internal (SVector, fromListSv, DVector, fromListDv)
import Data.RPTree.Gen (dense, sparse, normal2, normalSparse2, normalDense2)
import Data.RPTree.Conduit (dataSource)
data BenchConfig = BenchConfig {
bcDescription :: String
, bcMaxTreeDepth :: Int
, bcMinLeafSize :: Int
, bcNumTrees :: Int
, bcChunkSize :: Int
, bcNZDensity :: Double
, bcVectorDim :: Int
, bcDataSize :: Int
, bcNumQueryPoints :: Int
} deriving (Show)
randSeed :: MonadIO m => m Word64
randSeed = liftIO (fst . unseedSMGen <$> initSMGen)
-- | binary mixture of isotropic Gaussian rvs
datD :: Monad m =>
Int -- ^ number of data points
-> Int -- ^ vector dimension
-> C.ConduitT i (DVector Double) (GenT m) ()
datD n d = dataSource n $ normalDense2 d
-- | binary mixture of isotropic Gaussian rvs with sparse components
datS :: Monad m =>
Int -- ^ number of data points
-> Int -- ^ vector dimension
-> Double -- ^ nonzero density
-> C.ConduitT i (SVector Double) (GenT m) ()
datS n d pnz = dataSource n $ normalSparse2 pnz d