packed-dawg 0.2.0.7 → 0.2.0.8
raw patch · 4 files changed
+60/−12 lines, 4 filesdep ~binarydep ~vectordep ~vector-binary-instancesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: binary, vector, vector-binary-instances
API changes (from Hackage documentation)
- Data.DAWG.Packed: instance Binary Node
- Data.DAWG.Packed: instance Eq Node
- Data.DAWG.Packed: instance NFData Node
- Data.DAWG.Packed: instance Show Node
+ Data.DAWG.Packed: instance Control.DeepSeq.NFData Data.DAWG.Packed.Node
+ Data.DAWG.Packed: instance Data.Binary.Class.Binary Data.DAWG.Packed.Node
+ Data.DAWG.Packed: instance GHC.Classes.Eq Data.DAWG.Packed.Node
+ Data.DAWG.Packed: instance GHC.Show.Show Data.DAWG.Packed.Node
Files
- Benchmarks.hs +1/−1
- Data/DAWG/Packed.hs +40/−1
- packed-dawg.cabal +19/−10
- ridyhew.txt too large to diff
Benchmarks.hs view
@@ -10,7 +10,7 @@ ws <- fmap lines $ readFile dictPath let dawg = fromList ws test [- bench "dawg generation" $ whnf (char . fromList) ws,+ bench "dawg generation" $ whnf fromList ws, bench "enlist suffixes" $ nf toList dawg, bench "serialize" $ nfIO $ toFile "twl06.dawg" dawg, bench "deserialize" $ nfIO $ fromFile "twl06.dawg"
Data/DAWG/Packed.hs view
@@ -48,8 +48,15 @@ ) where import qualified Data.Vector.Unboxed as V++ import qualified Data.HashMap.Strict as HM import qualified Control.Monad.State.Strict as S++import Control.Monad.ST.Strict+import Data.STRef++import Data.Function import Control.DeepSeq import Control.Arrow import Data.Binary@@ -218,6 +225,38 @@ go n = [[char n] | endOfWord n] ++ (map (char n:) . go =<< children n) +-- trieToNode :: Trie -> Node+-- trieToNode n = runST $ do+-- m <- HT.new :: ST s (HashTable s [Word32] Int)+-- HT.insert m [] 0 +-- iref <- newSTRef (0 :: Int)++-- let adjustChd = \case+-- [] -> (0, [])+-- [x] -> (1, [x .|. 2])+-- x:xs -> (succ *** (x:)) (adjustChd xs)++-- root <- ($ n) $ fix $ \go node@TrieNode{..} -> do+-- xs <- mapM go chd+-- let (len, xs') = adjustChd xs+-- i <- readSTRef iref+-- pack val False eow `fmap`+-- (maybe+-- (do HT.insert m xs' $! (i + 1)+-- writeSTRef iref $! (i + len)+-- pure $! (i + 1))+-- pure+-- =<< (HT.lookup m xs'))++-- i <- readSTRef iref+-- mlist <- HT.toList m+-- let assocs = (i + 1, root .|. 2):+-- [(i', x) | (xs, i) <- mlist,+-- (i', x) <- zip [i..] xs]+-- vec = V.unsafeAccum (flip const) (V.replicate (i + 2) 0) assocs++-- pure $ unpack (V.unsafeLast vec) vec+ reduce :: Trie -> S.State (HM.HashMap [Word32] Int, Int) Word32 reduce !node@TrieNode{..} = do xs <- mapM reduce chd@@ -240,7 +279,7 @@ (i', x) <- zip [i..] xs] vec = V.unsafeAccum (flip const) (V.replicate (i + 2) 0) assocs in unpack (V.unsafeLast vec) vec-+ -- | Allows for faster DAWG generation than 'fromList'. The input list must be in ascending order, but this is not checked. fromAscList :: [String] -> Node
packed-dawg.cabal view
@@ -1,7 +1,7 @@ name: packed-dawg-version: 0.2.0.7+version: 0.2.0.8 synopsis: Generation and traversal of highly compressed directed acyclic word graphs. description: Generation and traversal of highly compressed directed acyclic word graphs. license: BSD3@@ -11,7 +11,7 @@ category: Data build-type: Simple cabal-version: >=1.8-data-files: TWL06.txt+data-files: TWL06.txt, ridyhew.txt Source-Repository head Type: git@@ -19,25 +19,34 @@ library exposed-modules: Data.DAWG.Packed - build-depends: base >= 4.6.0 && <= 4.9, vector == 0.10.*, mtl >=2.1, - vector-binary-instances == 0.2.1.*, binary == 0.7.*, deepseq>=1.3, unordered-containers >= 0.2+ build-depends: base >= 4.6.0 && <= 4.9,+ binary >= 0.7.0,+ deepseq>=1.3,+ mtl >=2.1,+ unordered-containers >= 0.2,+ vector >= 0.10.0,+ vector-binary-instances >= 0.2.1.0 test-suite test main-is: Tests.hs type: exitcode-stdio-1.0 - build-depends: base >= 4.6.0 && <= 4.9, vector == 0.10.*, mtl >=2.1, - vector-binary-instances == 0.2.1.*, binary == 0.7.*, deepseq>=1.3, unordered-containers >= 0.2,- QuickCheck >= 2.5, HUnit >= 1.2, tasty >= 0.3, tasty-quickcheck >= 0.3, tasty-hunit >= 0.2+ build-depends: base >= 4.6.0 && <= 4.9, vector >= 0.10.0, mtl >=2.1, + vector-binary-instances >= 0.2.1.0, binary >= 0.7.0, + deepseq>=1.3, unordered-containers >= 0.2,+ QuickCheck >= 2.5, HUnit >= 1.2, tasty >= 0.3, + tasty-quickcheck >= 0.3, tasty-hunit >= 0.2 ghc-options: -O2 -rtsopts benchmark bench-dawg-gen main-is: Benchmarks.hs- Build-depends: base >= 4.6.0 && <= 4.9, vector == 0.10.*, mtl >=2.1, - vector-binary-instances == 0.2.1.*, binary == 0.7.*, deepseq>=1.3, unordered-containers >= 0.2,-+ Build-depends: base >= 4.6.0 && <= 4.9, vector >= 0.10.0, mtl >=2.1, + vector-binary-instances >= 0.2.1.0, binary >= 0.7.0, + deepseq >= 1.3, unordered-containers >= 0.2, criterion >= 1.0++ ghc-options: -O2 -rtsopts type: exitcode-stdio-1.0
+ ridyhew.txt view
file too large to diff