crf-chain2-tiers-0.3.0: src/Data/CRF/Chain2/Tiers/Dataset/Internal.hs
-- | Internal core data types.
module Data.CRF.Chain2.Tiers.Dataset.Internal
(
module Data.CRF.Chain2.Tiers.Core
-- * Input element (word)
, Xs
-- * Output element (choice)
, Ys
-- * Indexing
, lbOn
, lbNum
, lbIxs
) where
-- import Data.Binary (Binary, put, get)
-- import Data.Ix (Ix)
-- import Control.Applicative ((<$>), (<*>))
-- import Control.Arrow (second)
-- import Data.Int (Int16, Int32)
-- import qualified Data.Array.Unboxed as A
import qualified Data.Vector as V
-- import qualified Data.Vector.Unboxed as U
-- import Data.Vector.Unboxed.Deriving
-- import qualified Data.Vector.Generic.Base as G
-- import qualified Data.Vector.Generic.Mutable as G
-- import qualified Data.Number.LogFloat as L
-- -- import qualified Data.Primitive.ByteArray as BA
--
-- import Data.CRF.Chain2.Tiers.Array (Bounds)
import Data.CRF.Chain2.Tiers.Core
-- | Sentence of words.
type Xs = V.Vector X
-- | Sentence of Y (label choices).
type Ys = V.Vector Y
lbVec :: Xs -> Int -> V.Vector Cb
lbVec xs = _unR . (xs V.!)
{-# INLINE lbVec #-}
-- | Number of potential labels at the given position of the sentence.
lbNumI :: Xs -> Int -> Int
lbNumI xs = V.length . lbVec xs
{-# INLINE lbNumI #-}
-- | Potential label at the given position and at the given index.
lbOnI :: Xs -> Int -> CbIx -> Cb
lbOnI xs = (V.!) . lbVec xs
{-# INLINE lbOnI #-}
-- | List of label indices at the given position.
lbIxsI :: Xs -> Int -> [CbIx]
lbIxsI xs i = [0 .. lbNum xs i - 1]
{-# INLINE lbIxsI #-}
-- | Number of potential labels at the given position of the sentence.
-- Function extended to indices outside the positions' domain.
lbNum :: Xs -> Int -> Int
lbNum xs i
| i < 0 || i >= n = 1
| otherwise = lbNumI xs i
where
n = V.length xs
{-# INLINE lbNum #-}
-- | Potential label at the given position and at the given index.
-- Return Nothing for positions outside the domain.
lbOn :: Xs -> Int -> CbIx -> Maybe Cb
lbOn xs i
| i < 0 || i >= n = const Nothing
| otherwise = Just . lbOnI xs i
where
n = V.length xs
{-# INLINE lbOn #-}
-- | List of label indices at the given position. Function extended to
-- indices outside the positions' domain.
lbIxs :: Xs -> Int -> [CbIx]
lbIxs xs i
| i < 0 || i >= n = [0]
| otherwise = lbIxsI xs i
where
n = V.length xs
{-# INLINE lbIxs #-}