hmm-lapack 0.3.0.2 → 0.3.0.3
raw patch · 8 files changed
+22/−38 lines, 8 filesdep ~lapackdep ~semigroupsPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: lapack, semigroups
API changes (from Hackage documentation)
- Math.HiddenMarkovModel: deviation :: (InvIndexed sh, Eq sh, Real prob, Ord prob) => T distr sh prob -> T distr sh prob -> prob
+ Math.HiddenMarkovModel: deviation :: (C sh, Eq sh, Real prob, Ord prob) => T distr sh prob -> T distr sh prob -> prob
Files
- hmm-lapack.cabal +3/−3
- src/Math/HiddenMarkovModel.hs +4/−20
- src/Math/HiddenMarkovModel/CSV.hs +0/−1
- src/Math/HiddenMarkovModel/Distribution.hs +0/−1
- src/Math/HiddenMarkovModel/Example/SineWave.hs +2/−2
- src/Math/HiddenMarkovModel/Example/TrafficLightPrivate.hs +0/−1
- src/Math/HiddenMarkovModel/Test.hs +1/−7
- src/Math/HiddenMarkovModel/Utility.hs +12/−3
hmm-lapack.cabal view
@@ -1,5 +1,5 @@ Name: hmm-lapack-Version: 0.3.0.2+Version: 0.3.0.3 Synopsis: Hidden Markov Models using LAPACK primitives Description: Hidden Markov Models implemented using LAPACK data types and operations.@@ -41,7 +41,7 @@ Changes.md Source-Repository this- Tag: 0.3.0.2+ Tag: 0.3.0.3 Type: darcs Location: http://hub.darcs.net/thielema/hmm-lapack @@ -67,7 +67,7 @@ Math.HiddenMarkovModel.Utility Math.HiddenMarkovModel.CSV Build-Depends:- lapack >=0.2 && <0.3,+ lapack >=0.2.2 && <0.3, fixed-length >=0.2.1 && <0.3, tfp >=1.0 && <1.1, netlib-ffi >=0.1.1 && <0.2,
src/Math/HiddenMarkovModel.hs view
@@ -26,12 +26,11 @@ import Math.HiddenMarkovModel.Private (T(..), Trained(..), mergeTrained, toCells, parseCSV) import Math.HiddenMarkovModel.Utility- (SquareMatrix, squareConstant,+ (SquareMatrix, squareConstant, distance, randomItemProp, normalizeProb, attachOnes) import qualified Numeric.LAPACK.Matrix as Matrix import qualified Numeric.LAPACK.Vector as Vector-import qualified Numeric.LAPACK.Scalar as Scalar import qualified Numeric.Netlib.Class as Class @@ -182,27 +181,12 @@ should suffice for defining an abort criterion. -} deviation ::- (Shape.InvIndexed sh, Eq sh, Class.Real prob, Ord prob) =>+ (Shape.C sh, Eq sh, Class.Real prob, Ord prob) => T distr sh prob -> T distr sh prob -> prob deviation hmm0 hmm1 =- deviationVec (initial hmm0) (initial hmm1)+ distance (initial hmm0) (initial hmm1) `max`- deviationVec (transition hmm0) (transition hmm1)--deviationVec ::- (Shape.InvIndexed sh, Eq sh, Class.Real a) =>- StorableArray.Array sh a -> StorableArray.Array sh a -> a-deviationVec =- getDeviation $ Class.switchReal deviationVecAux deviationVecAux--newtype Deviation f a = Deviation {getDeviation :: f a -> f a -> a}--deviationVecAux ::- (Shape.InvIndexed sh, Eq sh, Ord a, Class.Real a, Scalar.RealOf a ~ a) =>- Deviation (StorableArray.Array sh) a-deviationVecAux =- Deviation $ \x y ->- Scalar.absolute $ snd $ Vector.argAbsMaximum $ Vector.sub x y+ distance (transition hmm0) (transition hmm1) toCSV ::
src/Math/HiddenMarkovModel/CSV.hs view
@@ -114,7 +114,6 @@ parseVectorCells = parseVectorFields =<< getRow --- ToDo: Maybe check row consistency already here? parseVectorFields :: (Read a, Class.Real a) => CSV.CSVRow -> CSVParser (Vector ZeroInt a)
src/Math/HiddenMarkovModel/Distribution.hs view
@@ -314,7 +314,6 @@ (error "Distribution.normalize: undefined array element")) $ distr --- ToDo: could be managed by semigroup maybePlus :: (a -> a -> a) -> Maybe a -> Maybe a -> Maybe a maybePlus f mx my = liftA2 f mx my <|> mx <|> my
src/Math/HiddenMarkovModel/Example/SineWave.hs view
@@ -11,10 +11,10 @@ import qualified Math.HiddenMarkovModel as HMM import qualified Math.HiddenMarkovModel.Distribution as Distr import Math.HiddenMarkovModel.Utility- (normalizeProb, squareFromLists, hermitianFromList, singleton)+ (normalizeProb, squareFromLists, hermitianFromList) import qualified Numeric.LAPACK.Vector as Vector-import Numeric.LAPACK.Vector (Vector)+import Numeric.LAPACK.Vector (Vector, singleton) import qualified Data.Array.Comfort.Boxed as Array import qualified Data.Array.Comfort.Shape as Shape
src/Math/HiddenMarkovModel/Example/TrafficLightPrivate.hs view
@@ -44,7 +44,6 @@ symbolFromCell = maybeRead --- data State = StateRed | StateYellowDown | StateGreen | StateYellowUp data State = StateRed | StateYellowRG | StateGreen | StateYellowGR deriving (Eq, Ord, Enum, Bounded)
src/Math/HiddenMarkovModel/Test.hs view
@@ -11,7 +11,7 @@ import qualified Math.HiddenMarkovModel.Normalized as Normalized import qualified Math.HiddenMarkovModel.Private as Priv import qualified Math.HiddenMarkovModel.Distribution as Distr-import Math.HiddenMarkovModel.Utility (SquareMatrix, squareFromLists)+import Math.HiddenMarkovModel.Utility (SquareMatrix, squareFromLists, distance) import qualified Numeric.LAPACK.Vector as Vector import qualified Numeric.LAPACK.ShapeStatic as ShapeStatic@@ -123,12 +123,6 @@ Priv.zetaFromAlphaBeta recipLikelihood alphas betas, uncurry Normalized.zetaFromAlphaBeta $ Normalized.alphaBeta hmm sequ)---distance ::- (Shape.C sh, Eq sh) =>- Vector.Vector sh Double -> Vector.Vector sh Double -> Double-distance x y = Vector.normInf (Vector.sub x y) {- |
src/Math/HiddenMarkovModel/Utility.hs view
@@ -50,10 +50,7 @@ vectorDim :: Shape.C sh => Vector sh a -> Int vectorDim = Shape.size . StorableArray.shape -singleton :: (Class.Real a) => a -> Vector () a-singleton = Vector.constant () - hermitianFromList :: (Shape.C sh, Storable a) => sh -> [a] -> Hermitian.Hermitian sh a hermitianFromList = Hermitian.fromList MatrixShape.RowMajor@@ -70,3 +67,15 @@ diagonal :: (Shape.C sh, Class.Real a) => Vector sh a -> Diagonal sh a diagonal = Triangular.diagonal MatrixShape.RowMajor+++newtype Distance f a = Distance {getDistance :: f a -> f a -> a}++distance ::+ (Shape.C sh, Eq sh, Class.Real a) =>+ Vector sh a -> Vector sh a -> a+distance =+ getDistance $+ Class.switchReal+ (Distance $ (Vector.normInf .) . Vector.sub)+ (Distance $ (Vector.normInf .) . Vector.sub)