{-# LINE 1 "Data/SVM/Raw.hsc" #-}
{-# LANGUAGE ForeignFunctionInterface, GeneralizedNewtypeDeriving,
EmptyDataDecls #-}
{-# LINE 13 "Data/SVM/Raw.hsc" #-}
module Data.SVM.Raw where
import Foreign.Storable (Storable(..), peekByteOff, pokeByteOff)
import Foreign.C.Types (CDouble (..), CInt (..))
import Foreign.C.String (CString)
import Foreign.Ptr(nullPtr, Ptr)
import Foreign.ForeignPtr (FinalizerPtr)
data CSvmNode = CSvmNode {
index:: CInt,
value:: CDouble
}
instance Storable CSvmNode where
sizeOf _ = (16)
{-# LINE 29 "Data/SVM/Raw.hsc" #-}
alignment _ = 8
{-# LINE 30 "Data/SVM/Raw.hsc" #-}
peek ptr = do idx <- ((\hsc_ptr -> peekByteOff hsc_ptr 0)) ptr
{-# LINE 31 "Data/SVM/Raw.hsc" #-}
val <- ((\hsc_ptr -> peekByteOff hsc_ptr 8)) ptr
{-# LINE 32 "Data/SVM/Raw.hsc" #-}
return $ CSvmNode idx val
poke ptr (CSvmNode i v) = do ((\hsc_ptr -> pokeByteOff hsc_ptr 0)) ptr i
{-# LINE 34 "Data/SVM/Raw.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 8)) ptr v
{-# LINE 35 "Data/SVM/Raw.hsc" #-}
data CSvmProblem = CSvmProblem {
l:: CInt,
y:: Ptr CDouble,
x:: Ptr (Ptr CSvmNode)
}
instance Storable CSvmProblem where
sizeOf _ = (24)
{-# LINE 44 "Data/SVM/Raw.hsc" #-}
alignment _ = 8
{-# LINE 45 "Data/SVM/Raw.hsc" #-}
peek ptr = do lp <- ((\hsc_ptr -> peekByteOff hsc_ptr 0)) ptr
{-# LINE 46 "Data/SVM/Raw.hsc" #-}
yp <- ((\hsc_ptr -> peekByteOff hsc_ptr 8)) ptr
{-# LINE 47 "Data/SVM/Raw.hsc" #-}
xp <- ((\hsc_ptr -> peekByteOff hsc_ptr 16)) ptr
{-# LINE 48 "Data/SVM/Raw.hsc" #-}
return $ CSvmProblem lp yp xp
poke ptr (CSvmProblem lp yp xp) = do ((\hsc_ptr -> pokeByteOff hsc_ptr 0)) ptr lp
{-# LINE 50 "Data/SVM/Raw.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 8)) ptr yp
{-# LINE 51 "Data/SVM/Raw.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 16)) ptr xp
{-# LINE 52 "Data/SVM/Raw.hsc" #-}
newtype CSvmType = CSvmType {unCSvmType :: CInt}
deriving (Storable, Show)
cSvc :: CSvmType
cSvc = CSvmType 0
nuSvc :: CSvmType
nuSvc = CSvmType 1
oneClass :: CSvmType
oneClass = CSvmType 2
epsilonSvr :: CSvmType
epsilonSvr = CSvmType 3
nuSvr :: CSvmType
nuSvr = CSvmType 4
{-# LINE 57 "Data/SVM/Raw.hsc" #-}
newtype CKernelType = CKernelType {unCKernelType :: CInt}
deriving (Storable, Show)
linear :: CKernelType
linear = CKernelType 0
poly :: CKernelType
poly = CKernelType 1
rbf :: CKernelType
rbf = CKernelType 2
sigmoid :: CKernelType
sigmoid = CKernelType 3
precomputed :: CKernelType
precomputed = CKernelType 4
{-# LINE 61 "Data/SVM/Raw.hsc" #-}
data CSvmParameter = CSvmParameter {
svm_type :: CSvmType,
kernel_type :: CKernelType,
degree :: CInt,
gamma :: CDouble,
coef0 :: CDouble,
cache_size :: CDouble,
eps :: CDouble,
c :: CDouble,
nr_weight :: CInt,
weight_label :: Ptr CInt,
weight :: Ptr CDouble,
nu :: CDouble,
p :: CDouble,
shrinking :: CInt,
probability :: CInt
} deriving Show
defaultCParam :: CSvmParameter
defaultCParam = CSvmParameter cSvc rbf 3 0 0 100 1e-3 1
0 nullPtr nullPtr 0.5 0.1 1 0
instance Storable CSvmParameter where
sizeOf _ = (104)
{-# LINE 86 "Data/SVM/Raw.hsc" #-}
alignment _ = 8
{-# LINE 87 "Data/SVM/Raw.hsc" #-}
peek ptr = do svm_type_p <- ((\hsc_ptr -> peekByteOff hsc_ptr 0)) ptr
{-# LINE 88 "Data/SVM/Raw.hsc" #-}
kernel_type_p <- ((\hsc_ptr -> peekByteOff hsc_ptr 4)) ptr
{-# LINE 89 "Data/SVM/Raw.hsc" #-}
degree_p <- ((\hsc_ptr -> peekByteOff hsc_ptr 8)) ptr
{-# LINE 90 "Data/SVM/Raw.hsc" #-}
gamma_p <- ((\hsc_ptr -> peekByteOff hsc_ptr 16)) ptr
{-# LINE 91 "Data/SVM/Raw.hsc" #-}
coef0_p <- ((\hsc_ptr -> peekByteOff hsc_ptr 24)) ptr
{-# LINE 92 "Data/SVM/Raw.hsc" #-}
cache_size_p <- ((\hsc_ptr -> peekByteOff hsc_ptr 32)) ptr
{-# LINE 93 "Data/SVM/Raw.hsc" #-}
eps_p <- ((\hsc_ptr -> peekByteOff hsc_ptr 40)) ptr
{-# LINE 94 "Data/SVM/Raw.hsc" #-}
c_p <- ((\hsc_ptr -> peekByteOff hsc_ptr 48)) ptr
{-# LINE 95 "Data/SVM/Raw.hsc" #-}
nr_weight_p <- ((\hsc_ptr -> peekByteOff hsc_ptr 56)) ptr
{-# LINE 96 "Data/SVM/Raw.hsc" #-}
weight_label_p <- ((\hsc_ptr -> peekByteOff hsc_ptr 64)) ptr
{-# LINE 97 "Data/SVM/Raw.hsc" #-}
weight_p <- ((\hsc_ptr -> peekByteOff hsc_ptr 72)) ptr
{-# LINE 98 "Data/SVM/Raw.hsc" #-}
nu_p <- ((\hsc_ptr -> peekByteOff hsc_ptr 80)) ptr
{-# LINE 99 "Data/SVM/Raw.hsc" #-}
p_p <- ((\hsc_ptr -> peekByteOff hsc_ptr 88)) ptr
{-# LINE 100 "Data/SVM/Raw.hsc" #-}
shrinking_p <- ((\hsc_ptr -> peekByteOff hsc_ptr 8)) ptr
{-# LINE 101 "Data/SVM/Raw.hsc" #-}
probability_p <- ((\hsc_ptr -> peekByteOff hsc_ptr 100)) ptr
{-# LINE 102 "Data/SVM/Raw.hsc" #-}
return $ CSvmParameter svm_type_p kernel_type_p degree_p
gamma_p coef0_p cache_size_p eps_p c_p nr_weight_p
weight_label_p weight_p nu_p p_p shrinking_p probability_p
poke ptr (CSvmParameter svm_type_p kernel_type_p degree_p
gamma_p coef0_p cache_size_p eps_p c_p nr_weight_p
weight_label_p weight_p nu_p p_p shrinking_p probability_p) =
do ((\hsc_ptr -> pokeByteOff hsc_ptr 0)) ptr svm_type_p
{-# LINE 109 "Data/SVM/Raw.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 4)) ptr kernel_type_p
{-# LINE 110 "Data/SVM/Raw.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 8)) ptr degree_p
{-# LINE 111 "Data/SVM/Raw.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 16)) ptr gamma_p
{-# LINE 112 "Data/SVM/Raw.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 24)) ptr coef0_p
{-# LINE 113 "Data/SVM/Raw.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 32)) ptr cache_size_p
{-# LINE 114 "Data/SVM/Raw.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 40)) ptr eps_p
{-# LINE 115 "Data/SVM/Raw.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 48)) ptr c_p
{-# LINE 116 "Data/SVM/Raw.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 56)) ptr nr_weight_p
{-# LINE 117 "Data/SVM/Raw.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 64)) ptr weight_label_p
{-# LINE 118 "Data/SVM/Raw.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 72)) ptr weight_p
{-# LINE 119 "Data/SVM/Raw.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 80)) ptr nu_p
{-# LINE 120 "Data/SVM/Raw.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 88)) ptr p_p
{-# LINE 121 "Data/SVM/Raw.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 96)) ptr shrinking_p
{-# LINE 122 "Data/SVM/Raw.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 100)) ptr probability_p
{-# LINE 123 "Data/SVM/Raw.hsc" #-}
data CSvmModel
foreign import ccall unsafe "svm.h svm_train" c_svm_train :: Ptr CSvmProblem -> Ptr CSvmParameter -> IO (Ptr CSvmModel)
foreign import ccall unsafe "svm.h svm_cross_validation" c_svm_cross_validation:: Ptr CSvmProblem -> Ptr CSvmParameter -> CInt -> Ptr CDouble -> IO ()
foreign import ccall unsafe "svm.h svm_predict" c_svm_predict :: Ptr CSvmModel -> Ptr CSvmNode -> CDouble
foreign import ccall unsafe "svm.h svm_save_model" c_svm_save_model :: CString -> Ptr CSvmModel -> IO CInt
foreign import ccall unsafe "svm.h svm_load_model" c_svm_load_model :: CString -> IO (Ptr CSvmModel)
foreign import ccall unsafe "svm.h svm_check_parameter" c_svm_check_parameter :: Ptr CSvmProblem -> Ptr CSvmParameter -> CString
foreign import ccall unsafe "svm.h &svm_destroy_model" c_svm_destroy_model :: FinalizerPtr CSvmModel
foreign import ccall unsafe "svm.h clone_model_support_vectors" c_clone_model_support_vectors :: Ptr CSvmModel -> IO CInt