packages feed

experimenter-0.1.0.0: src/Experimenter/Eval/Util.hs

{-# LANGUAGE BangPatterns      #-}
{-# LANGUAGE OverloadedStrings #-}
module Experimenter.Eval.Util where

import           Control.DeepSeq
import           Control.Lens             hiding (Cons, Over, over)
import           Control.Monad.IO.Class
import qualified Data.Text                as T
import           Data.Time.Clock          (diffUTCTime, getCurrentTime)
import           System.FilePath.Posix

import           Experimenter.Result.Type


rootPath :: FilePath
rootPath = "results"

mainFile :: Experiments a -> FilePath
mainFile exps = "main_" <> getTime exps <> ".tex"

getTime :: Experiments a -> String
getTime exps = maybe "unfinished_experiment" (T.unpack . T.replace " " "_" . T.pack . show) (exps ^. experimentsEndTime)

scalarFile :: Experiments a -> FilePath
scalarFile exps = "scalar_" <> getTime exps <> ".tex"

repetitionFile :: Experiments a -> FilePath
repetitionFile exps = "repetition_" <> getTime exps <> ".tex"

replicationFile :: Experiments a -> FilePath
replicationFile exps = "replication_" <> getTime exps <> ".tex"

periodicFile :: Experiments a -> FilePath
periodicFile exps = "periodic_" <> getTime exps <> ".tex"

mainFilePdf :: Experiments a -> FilePath
mainFilePdf exps = T.unpack (T.dropWhileEnd (/= '.') (T.pack $ mainFile exps)) <> "pdf"

getExpsName :: Experiments a -> String
getExpsName exps  = T.unpack $ T.replace "/" "_" $ T.replace " " "_" $ exps ^. experimentsName

expsPath :: Experiments a -> FilePath
expsPath exps = rootPath </> getExpsName exps

mkTime :: (MonadIO m, NFData t) => String -> m t -> m t
mkTime name a = do
  start <- liftIO getCurrentTime
  !val <- force <$> a
  end <- liftIO getCurrentTime
  let name' | null name = name
            | otherwise = name ++ [' ']
  liftIO $ putStrLn (name' <> "Computation Time: " ++ show (diffUTCTime end start))
  return val