packages feed

vp-tree-0.1.0.0: bench/memory/Main.hs

{-# options_ghc -Wno-unused-imports #-}
module Main where

-- vector
import qualified Data.Vector as V (Vector, map)
-- weigh
import Weigh (mainWith, wgroup, func)

import Data.VPTree.Build (build)
import Data.VPTree.Draw (draw)
import Data.VPTree.Internal (VT, VPTree, withST, withST_, withIO)
import Data.VPTree.Query (range, distances)
import Data.VPTree.TestData (buildP, binDiskSamples, gaussMixSamples, P(..))


main :: IO ()
main = mainWith $ do
  wgroup "Data.VPTree.Build" $ do
    let
      go n = buildP (binDiskSamples n)
    func "build 10" go 10
    func "build 100" go 100
    func "build 1000" go 1000
    func "build 10.000" go 10000
    -- func "build 100.000" go 100000
  wgroup "Data.VPTree.Query : index size 100" $ do
    let
      index = buildIndex binDiskSamples 100
      go n = queryIndex index binDiskSamples 1.0 n
    func "range 10" go 10
    func "range 100" go 100
    func "range 1000" go 1000
    func "range 10.000" go 10000
  wgroup "Data.VPTree.Query : index size 1000" $ do
    let
      index = buildIndex binDiskSamples 1000
      go n = queryIndex index binDiskSamples 1.0 n
    func "range 10" go 10
    func "range 100" go 100
    func "range 1000" go 1000
    func "range 10.000" go 10000
  wgroup "Data.VPTree.Query : index size 10.000" $ do
    let
      index = buildIndex binDiskSamples 10000
      go n = queryIndex index binDiskSamples 1.0 n
    func "range 10" go 10
    func "range 100" go 100
    func "range 1000" go 1000
    func "range 10.000" go 10000


buildIndex :: (t -> V.Vector P) -> t -> VPTree Double P
buildIndex genTree m = buildP (genTree m)

queryIndex :: (Num p1, Ord p1) =>
              VPTree p1 a -> (p2 -> V.Vector a) -> p1 -> p2 -> V.Vector [(p1, a)]
queryIndex index genData thr n = V.map (range index thr) qrys
  where
    qrys = genData n

-- rangeWith :: (p1 -> V.Vector P)
--           -> (p2 -> V.Vector P)
--           -> Double
--           -> p1
--           -> p2
--           -> V.Vector [(Double, P)]
-- rangeWith genTree genData thr m n = V.map (range tree thr) qrys
--   where
--     tree = buildP (genTree m)
--     qrys = genData n



-- main =
--   mainWith (do func "integers count 0" count 0
--                func "integers count 1" count 1
--                func "integers count 2" count 2
--                func "integers count 3" count 3
--                func "integers count 10" count 10
--                func "integers count 100" count 100)
--   where count :: Integer -> ()
--         count 0 = ()
--         count a = count (a - 1)