packages feed

som 8.0.5 → 8.0.6

raw patch · 5 files changed

+29/−14 lines, 5 filesdep +assertdep +deepseqdep ~basePVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: assert, deepseq

Dependency ranges changed: base

API changes (from Hackage documentation)

- Data.Datamining.Clustering.DSOM: [DSOM] :: gm p -> (x -> x -> x -> x) -> (p -> p -> x) -> (p -> x -> p -> p) -> DSOM gm x k p
- Data.Datamining.Clustering.DSOMInternal: [DSOM] :: gm p -> (x -> x -> x -> x) -> (p -> p -> x) -> (p -> x -> p -> p) -> DSOM gm x k p
- Data.Datamining.Clustering.DSOMInternal: instance (Foldable gm, GridMap gm p, FiniteGrid (BaseGrid gm p)) => GridMap (DSOM gm x k) p
- Data.Datamining.Clustering.DSOMInternal: instance (GridMap gm p, k ~ Index (BaseGrid gm p), FiniteGrid (gm p), GridMap gm x, k ~ Index (gm p), k ~ Index (gm x), k ~ Index (BaseGrid gm x), Ord k, Ord x, Num x, Fractional x) => Classifier (DSOM gm) x k p
- Data.Datamining.Clustering.DSOMInternal: instance Foldable gm => Foldable (DSOM gm x k)
- Data.Datamining.Clustering.DSOMInternal: instance Grid (gm p) => Grid (DSOM gm x k p)
- Data.Datamining.Clustering.SOM: [SOM] :: gm p -> (t -> d -> x) -> (p -> p -> x) -> (p -> x -> p -> p) -> t -> SOM t d gm x k p
- Data.Datamining.Clustering.SOMInternal: [SOM] :: gm p -> (t -> d -> x) -> (p -> p -> x) -> (p -> x -> p -> p) -> t -> SOM t d gm x k p
- Data.Datamining.Clustering.SOMInternal: instance (Foldable gm, GridMap gm p, Grid (BaseGrid gm p)) => GridMap (SOM t d gm x k) p
- Data.Datamining.Clustering.SOMInternal: instance (GridMap gm p, k ~ Index (BaseGrid gm p), Grid (gm p), GridMap gm x, k ~ Index (gm p), k ~ Index (BaseGrid gm x), Num t, Ord x, Num x, Num d) => Classifier (SOM t d gm) x k p
- Data.Datamining.Clustering.SOMInternal: instance Constructor C1_0SOM
- Data.Datamining.Clustering.SOMInternal: instance Datatype D1SOM
- Data.Datamining.Clustering.SOMInternal: instance Foldable gm => Foldable (SOM t d gm x k)
- Data.Datamining.Clustering.SOMInternal: instance Generic (SOM t d gm x k p)
- Data.Datamining.Clustering.SOMInternal: instance Grid (gm p) => Grid (SOM t d gm x k p)
- Data.Datamining.Clustering.SOMInternal: instance Selector S1_0_0SOM
- Data.Datamining.Clustering.SOMInternal: instance Selector S1_0_1SOM
- Data.Datamining.Clustering.SOMInternal: instance Selector S1_0_2SOM
- Data.Datamining.Clustering.SOMInternal: instance Selector S1_0_3SOM
- Data.Datamining.Clustering.SOMInternal: instance Selector S1_0_4SOM
- Data.Datamining.Clustering.SSOM: [SSOM] :: Map k p -> (t -> x) -> (p -> p -> x) -> (p -> x -> p -> p) -> t -> SSOM t x k p
- Data.Datamining.Clustering.SSOMInternal: [SSOM] :: Map k p -> (t -> x) -> (p -> p -> x) -> (p -> x -> p -> p) -> t -> SSOM t x k p
- Data.Datamining.Clustering.SSOMInternal: instance (Num t, Ord x, Num x, Ord k) => Classifier (SSOM t) x k p
- Data.Datamining.Clustering.SSOMInternal: instance Constructor C1_0SSOM
- Data.Datamining.Clustering.SSOMInternal: instance Datatype D1SSOM
- Data.Datamining.Clustering.SSOMInternal: instance Generic (SSOM t x k p)
- Data.Datamining.Clustering.SSOMInternal: instance Selector S1_0_0SSOM
- Data.Datamining.Clustering.SSOMInternal: instance Selector S1_0_1SSOM
- Data.Datamining.Clustering.SSOMInternal: instance Selector S1_0_2SSOM
- Data.Datamining.Clustering.SSOMInternal: instance Selector S1_0_3SSOM
- Data.Datamining.Clustering.SSOMInternal: instance Selector S1_0_4SSOM
- Data.Datamining.Pattern: instance Show a => Show (NormalisedVector a)
- Data.Datamining.Pattern: instance Show a => Show (ScaledVector a)
+ Data.Datamining.Clustering.DSOM: DSOM :: gm p -> (x -> x -> x -> x) -> (p -> p -> x) -> (p -> x -> p -> p) -> DSOM gm x k p
+ Data.Datamining.Clustering.DSOMInternal: DSOM :: gm p -> (x -> x -> x -> x) -> (p -> p -> x) -> (p -> x -> p -> p) -> DSOM gm x k p
+ Data.Datamining.Clustering.DSOMInternal: instance (Data.Foldable.Foldable gm, Math.Geometry.GridMap.GridMap gm p, Math.Geometry.GridInternal.FiniteGrid (Math.Geometry.GridMap.BaseGrid gm p)) => Math.Geometry.GridMap.GridMap (Data.Datamining.Clustering.DSOMInternal.DSOM gm x k) p
+ Data.Datamining.Clustering.DSOMInternal: instance (Math.Geometry.GridMap.GridMap gm p, k ~ Math.Geometry.GridInternal.Index (Math.Geometry.GridMap.BaseGrid gm p), Math.Geometry.GridInternal.FiniteGrid (gm p), Math.Geometry.GridMap.GridMap gm x, k ~ Math.Geometry.GridInternal.Index (gm p), k ~ Math.Geometry.GridInternal.Index (gm x), k ~ Math.Geometry.GridInternal.Index (Math.Geometry.GridMap.BaseGrid gm x), GHC.Classes.Ord k, GHC.Classes.Ord x, GHC.Num.Num x, GHC.Real.Fractional x) => Data.Datamining.Clustering.Classifier.Classifier (Data.Datamining.Clustering.DSOMInternal.DSOM gm) x k p
+ Data.Datamining.Clustering.DSOMInternal: instance Control.DeepSeq.NFData (gm p) => Control.DeepSeq.NFData (Data.Datamining.Clustering.DSOMInternal.DSOM gm x k p)
+ Data.Datamining.Clustering.DSOMInternal: instance Data.Foldable.Foldable gm => Data.Foldable.Foldable (Data.Datamining.Clustering.DSOMInternal.DSOM gm x k)
+ Data.Datamining.Clustering.DSOMInternal: instance GHC.Generics.Constructor Data.Datamining.Clustering.DSOMInternal.C1_0DSOM
+ Data.Datamining.Clustering.DSOMInternal: instance GHC.Generics.Datatype Data.Datamining.Clustering.DSOMInternal.D1DSOM
+ Data.Datamining.Clustering.DSOMInternal: instance GHC.Generics.Generic (Data.Datamining.Clustering.DSOMInternal.DSOM gm x k p)
+ Data.Datamining.Clustering.DSOMInternal: instance GHC.Generics.Selector Data.Datamining.Clustering.DSOMInternal.S1_0_0DSOM
+ Data.Datamining.Clustering.DSOMInternal: instance GHC.Generics.Selector Data.Datamining.Clustering.DSOMInternal.S1_0_1DSOM
+ Data.Datamining.Clustering.DSOMInternal: instance GHC.Generics.Selector Data.Datamining.Clustering.DSOMInternal.S1_0_2DSOM
+ Data.Datamining.Clustering.DSOMInternal: instance GHC.Generics.Selector Data.Datamining.Clustering.DSOMInternal.S1_0_3DSOM
+ Data.Datamining.Clustering.DSOMInternal: instance Math.Geometry.GridInternal.Grid (gm p) => Math.Geometry.GridInternal.Grid (Data.Datamining.Clustering.DSOMInternal.DSOM gm x k p)
+ Data.Datamining.Clustering.SOM: SOM :: gm p -> (t -> d -> x) -> (p -> p -> x) -> (p -> x -> p -> p) -> t -> SOM t d gm x k p
+ Data.Datamining.Clustering.SOMInternal: SOM :: gm p -> (t -> d -> x) -> (p -> p -> x) -> (p -> x -> p -> p) -> t -> SOM t d gm x k p
+ Data.Datamining.Clustering.SOMInternal: instance (Control.DeepSeq.NFData t, Control.DeepSeq.NFData (gm p)) => Control.DeepSeq.NFData (Data.Datamining.Clustering.SOMInternal.SOM t d gm x k p)
+ Data.Datamining.Clustering.SOMInternal: instance (Data.Foldable.Foldable gm, Math.Geometry.GridMap.GridMap gm p, Math.Geometry.GridInternal.Grid (Math.Geometry.GridMap.BaseGrid gm p)) => Math.Geometry.GridMap.GridMap (Data.Datamining.Clustering.SOMInternal.SOM t d gm x k) p
+ Data.Datamining.Clustering.SOMInternal: instance (Math.Geometry.GridMap.GridMap gm p, k ~ Math.Geometry.GridInternal.Index (Math.Geometry.GridMap.BaseGrid gm p), Math.Geometry.GridInternal.Grid (gm p), Math.Geometry.GridMap.GridMap gm x, k ~ Math.Geometry.GridInternal.Index (gm p), k ~ Math.Geometry.GridInternal.Index (Math.Geometry.GridMap.BaseGrid gm x), GHC.Num.Num t, GHC.Classes.Ord x, GHC.Num.Num x, GHC.Num.Num d) => Data.Datamining.Clustering.Classifier.Classifier (Data.Datamining.Clustering.SOMInternal.SOM t d gm) x k p
+ Data.Datamining.Clustering.SOMInternal: instance Data.Foldable.Foldable gm => Data.Foldable.Foldable (Data.Datamining.Clustering.SOMInternal.SOM t d gm x k)
+ Data.Datamining.Clustering.SOMInternal: instance GHC.Generics.Constructor Data.Datamining.Clustering.SOMInternal.C1_0SOM
+ Data.Datamining.Clustering.SOMInternal: instance GHC.Generics.Datatype Data.Datamining.Clustering.SOMInternal.D1SOM
+ Data.Datamining.Clustering.SOMInternal: instance GHC.Generics.Generic (Data.Datamining.Clustering.SOMInternal.SOM t d gm x k p)
+ Data.Datamining.Clustering.SOMInternal: instance GHC.Generics.Selector Data.Datamining.Clustering.SOMInternal.S1_0_0SOM
+ Data.Datamining.Clustering.SOMInternal: instance GHC.Generics.Selector Data.Datamining.Clustering.SOMInternal.S1_0_1SOM
+ Data.Datamining.Clustering.SOMInternal: instance GHC.Generics.Selector Data.Datamining.Clustering.SOMInternal.S1_0_2SOM
+ Data.Datamining.Clustering.SOMInternal: instance GHC.Generics.Selector Data.Datamining.Clustering.SOMInternal.S1_0_3SOM
+ Data.Datamining.Clustering.SOMInternal: instance GHC.Generics.Selector Data.Datamining.Clustering.SOMInternal.S1_0_4SOM
+ Data.Datamining.Clustering.SOMInternal: instance Math.Geometry.GridInternal.Grid (gm p) => Math.Geometry.GridInternal.Grid (Data.Datamining.Clustering.SOMInternal.SOM t d gm x k p)
+ Data.Datamining.Clustering.SSOM: SSOM :: Map k p -> (t -> x) -> (p -> p -> x) -> (p -> x -> p -> p) -> t -> SSOM t x k p
+ Data.Datamining.Clustering.SSOMInternal: SSOM :: Map k p -> (t -> x) -> (p -> p -> x) -> (p -> x -> p -> p) -> t -> SSOM t x k p
+ Data.Datamining.Clustering.SSOMInternal: instance (Control.DeepSeq.NFData t, Control.DeepSeq.NFData k, Control.DeepSeq.NFData p) => Control.DeepSeq.NFData (Data.Datamining.Clustering.SSOMInternal.SSOM t x k p)
+ Data.Datamining.Clustering.SSOMInternal: instance (GHC.Num.Num t, GHC.Classes.Ord x, GHC.Num.Num x, GHC.Classes.Ord k) => Data.Datamining.Clustering.Classifier.Classifier (Data.Datamining.Clustering.SSOMInternal.SSOM t) x k p
+ Data.Datamining.Clustering.SSOMInternal: instance GHC.Generics.Constructor Data.Datamining.Clustering.SSOMInternal.C1_0SSOM
+ Data.Datamining.Clustering.SSOMInternal: instance GHC.Generics.Datatype Data.Datamining.Clustering.SSOMInternal.D1SSOM
+ Data.Datamining.Clustering.SSOMInternal: instance GHC.Generics.Generic (Data.Datamining.Clustering.SSOMInternal.SSOM t x k p)
+ Data.Datamining.Clustering.SSOMInternal: instance GHC.Generics.Selector Data.Datamining.Clustering.SSOMInternal.S1_0_0SSOM
+ Data.Datamining.Clustering.SSOMInternal: instance GHC.Generics.Selector Data.Datamining.Clustering.SSOMInternal.S1_0_1SSOM
+ Data.Datamining.Clustering.SSOMInternal: instance GHC.Generics.Selector Data.Datamining.Clustering.SSOMInternal.S1_0_2SSOM
+ Data.Datamining.Clustering.SSOMInternal: instance GHC.Generics.Selector Data.Datamining.Clustering.SSOMInternal.S1_0_3SSOM
+ Data.Datamining.Clustering.SSOMInternal: instance GHC.Generics.Selector Data.Datamining.Clustering.SSOMInternal.S1_0_4SSOM
+ Data.Datamining.Pattern: instance GHC.Show.Show a => GHC.Show.Show (Data.Datamining.Pattern.NormalisedVector a)
+ Data.Datamining.Pattern: instance GHC.Show.Show a => GHC.Show.Show (Data.Datamining.Pattern.ScaledVector a)

Files

som.cabal view
@@ -1,5 +1,5 @@ Name:              som-Version:           8.0.5+Version:           8.0.6 Stability:         experimental Synopsis:          Self-Organising Maps. Description:       A Kohonen Self-organising Map (SOM) maps input patterns @@ -33,13 +33,15 @@ source-repository this   type:     git   location: https://github.com/mhwombat/som.git-  tag:      8.0.5+  tag:      8.0.6   library   hs-source-dirs:  src-  build-depends:   base ==4.*,+  build-depends:   assert ==0.0.*,+                   base >=4.8 && <5,                    containers ==0.5.*,+                   deepseq ==1.4.*,                    grid ==7.* && >=7.7,                    MonadRandom ==0.4.*   ghc-options:     -Wall@@ -54,7 +56,8 @@  test-suite som-tests   type:            exitcode-stdio-1.0-  build-depends:   base ==4.*,+  build-depends:   assert ==0.0.*,+                   base >=4.8 && <5,                    test-framework-quickcheck2 == 0.3.*,                    QuickCheck ==2.8.*,                    test-framework ==0.8.*,
src/Data/Datamining/Clustering/DSOMInternal.hs view
@@ -12,13 +12,15 @@ -- ------------------------------------------------------------------------ {-# LANGUAGE TypeFamilies, FlexibleContexts, FlexibleInstances,-    MultiParamTypeClasses #-}+    MultiParamTypeClasses, DeriveAnyClass, DeriveGeneric #-}  module Data.Datamining.Clustering.DSOMInternal where +import Control.DeepSeq (NFData) import qualified Data.Foldable as F (Foldable, foldr) import Data.List (foldl', minimumBy) import Data.Ord (comparing)+import GHC.Generics (Generic) import qualified Math.Geometry.Grid as G (Grid(..), FiniteGrid(..)) import qualified Math.Geometry.GridMap as GM (GridMap(..)) import Data.Datamining.Clustering.Classifier(Classifier(..))@@ -59,7 +61,7 @@     --   If @amount@=1, the result should be identical to the @target@.     --   If @amount@=0, the result should be the unmodified @pattern@.     makeSimilar :: p -> x -> p -> p-  }+  } deriving (Generic, NFData)  instance (F.Foldable gm) => F.Foldable (DSOM gm x k) where   foldr f x g = F.foldr f x (gridMap g)
src/Data/Datamining/Clustering/SOMInternal.hs view
@@ -12,10 +12,11 @@ -- ------------------------------------------------------------------------ {-# LANGUAGE TypeFamilies, FlexibleContexts, FlexibleInstances,-    MultiParamTypeClasses, DeriveGeneric #-}+    MultiParamTypeClasses, DeriveAnyClass, DeriveGeneric #-}  module Data.Datamining.Clustering.SOMInternal where +import Control.DeepSeq (NFData) import qualified Data.Foldable as F (Foldable, foldr) import Data.List (foldl', minimumBy) import Data.Ord (comparing)@@ -111,7 +112,7 @@     --   directly modify it, then the counter will represent the number     --   of patterns that this SOM has classified.     counter :: t-  } deriving (Generic)+  } deriving (Generic, NFData)  instance (F.Foldable gm) => F.Foldable (SOM t d gm x k) where   foldr f x g = F.foldr f x (gridMap g)
src/Data/Datamining/Clustering/SSOMInternal.hs view
@@ -12,10 +12,11 @@ -- ------------------------------------------------------------------------ {-# LANGUAGE TypeFamilies, FlexibleContexts, FlexibleInstances,-    MultiParamTypeClasses, DeriveGeneric #-}+    MultiParamTypeClasses, DeriveAnyClass, DeriveGeneric #-}  module Data.Datamining.Clustering.SSOMInternal where +import Control.DeepSeq (NFData) import Data.List (foldl', minimumBy) import Data.Ord (comparing) import Data.Datamining.Clustering.Classifier(Classifier(..))@@ -33,9 +34,6 @@ --   * 0 < r0 < 1 -- --   * 0 < d------   where << means "is much smaller than" (not the Haskell @<<@---   operator!) exponential :: Floating a => a -> a -> a -> a exponential r0 d t = r0 * exp (-d*t) @@ -77,7 +75,7 @@     --   directly modify it, then the counter will represent the number     --   of patterns that this SSOM has classified.     counter :: t-  } deriving (Generic)+  } deriving (Generic, NFData)  -- | Extracts the current models from the SSOM. --   A synonym for @'sMap'@.
test/Data/Datamining/Clustering/SSOMQC.hs view
@@ -23,7 +23,7 @@   absDifference) import Data.Datamining.Clustering.Classifier(classify,   classifyAndTrain, reportAndTrain, differences, diffAndTrain, models,-  train, trainBatch)+  train, trainBatch, numModels) import Data.Datamining.Clustering.SSOMInternal import qualified Data.Map.Strict as M @@ -138,6 +138,15 @@           s1 = trainNode s (classify s p) p           s2 = train s p +prop_train_node_only_modifies_one_model :: Int -> SSOMTestData -> Property+prop_train_node_only_modifies_one_model n (SSOMTestData s _ ps)+  = property $ as == as' && bs == bs'+    where p = head ps+          k = n `mod` (numModels s)+          s' = trainNode s k p+          (as, _:bs) = splitAt k (models s)+          (as', _:bs') = splitAt k (models s')+ -- | The training set consists of the same vectors in the same order, --   several times over. So the resulting classifications should consist --   of the same integers in the same order, over and over.@@ -266,6 +275,8 @@       prop_classifyAndTrainEquiv,     testProperty "prop_diffAndTrainEquiv" prop_diffAndTrainEquiv,     testProperty "prop_trainNodeEquiv" prop_trainNodeEquiv,+    testProperty "prop_train_node_only_modifies_one_model"+      prop_train_node_only_modifies_one_model,     testProperty "prop_batch_training_works" prop_batch_training_works,     testProperty "prop_classification_is_consistent"       prop_classification_is_consistent,