packages feed

tsne-1.1.0: example/Main.hs

module Main where

import System.Environment(getArgs)
import System.Exit
import Control.Monad(when)
import Data.Default(def)
import Pipes
import Data.Algorithm.TSNE


main :: IO ()
main = do
    putStrLn "Haskell tSNE example"

    args <- getArgs
    let argc = length args
    when (argc < 1 || argc > 2) $ do
        putStrLn "Usage haskell_tsne_example {input file name} [{num input values}]"
        exitFailure

    let inputFileName = head args
    inputData <- readDataFile inputFileName

    let n = length inputData
    putStrLn $ "total input: " ++ show n

    let n' = if (argc < 2) then n else (read (args !! 1)) 

    putStrLn $ "using: " ++ show n'

    forTsne3D outputResult def $ take n' inputData
    
    --runEffect $ for (tsne3D def $ take n' inputData) $ \r -> do
    --    lift $ outputResult r

readDataFile :: FilePath -> IO [[Double]]
readDataFile f = do
    d <- readFile f
    return $ map read (lines d)

outputResult :: TSNEOutput3D -> IO ()
outputResult s = do
    putStrLn $ "iteration: " ++ (show.tsneIteration3D) s
    putStrLn $ "cost: " ++ (show.tsneCost3D) s