edges 0.8.1 → 0.9
raw patch · 6 files changed
+66/−66 lines, 6 filesdep +hashabledep +unordered-containersPVP ok
version bump matches the API change (PVP)
Dependencies added: hashable, unordered-containers
API changes (from Hackage documentation)
+ Edges.Data: unindexNodeCounts :: (Eq entity, Hashable entity) => (Int -> Maybe entity) -> NodeCounts entity -> HashMap entity Int
Files
- edges.cabal +25/−50
- library/Edges/Cereal/Get.hs +5/−8
- library/Edges/Cereal/Put.hs +5/−8
- library/Edges/Functions.hs +6/−0
- library/Edges/Functions/Folds.hs +17/−0
- library/Edges/Prelude.hs +8/−0
edges.cabal view
@@ -1,45 +1,22 @@-name:- edges-version:- 0.8.1-category:- Graphs-synopsis:- Tools for efficient immutable graphs-description:- A set of tools for constructing immutable graphs which are both memory and performance-efficient.-homepage:- https://github.com/metrix-ai/edges-bug-reports:- https://github.com/metrix-ai/edges/issues-author:- Nikita Volkov <nikita.y.volkov@mail.ru>-maintainer:- Metrix Tech Team <tech@metrix.ai>-copyright:- (c) 2018, Metrix.AI-license:- MIT-license-file:- LICENSE-build-type:- Simple-cabal-version:- >=1.10--source-repository head- type:- git- location:- git://github.com/metrix-ai/edges.git+name: edges+version: 0.9+category: Graphs+synopsis: Tools for efficient immutable graphs+description: A set of tools for constructing immutable graphs which are both memory and performance-efficient.+homepage: https://github.com/metrix-ai/edges+bug-reports: https://github.com/metrix-ai/edges/issues+author: Nikita Volkov <nikita.y.volkov@mail.ru>+maintainer: Metrix.AI Tech Team <tech@metrix.ai>+copyright: (c) 2018, Metrix.AI+license: MIT+license-file: LICENSE+build-type: Simple+cabal-version: >=1.10 library- hs-source-dirs:- library- default-extensions:- Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, PatternSynonyms, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeApplications, TypeFamilies, TypeOperators, UnboxedTuples, OverloadedLists- default-language:- Haskell2010+ hs-source-dirs: library+ default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, OverloadedLists, PatternGuards, PatternSynonyms, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeApplications, TypeFamilies, TypeOperators, UnboxedTuples+ default-language: Haskell2010 exposed-modules: Edges.Data Edges.Folds@@ -50,6 +27,7 @@ Edges.Gens other-modules: Edges.Functions+ Edges.Functions.Folds Edges.Instances Edges.Instances.Cereal Edges.Cereal.Get@@ -62,6 +40,7 @@ contravariant >=1.4 && <2, deferred-folds >=0.6 && <0.7, foldl >=1.4.2 && <2,+ hashable >=1.2 && <2, monad-par >=0.3.4.8 && <0.4, pointed >=5 && <6, potoki >=2.0.2 && <2.1,@@ -72,19 +51,15 @@ QuickCheck >=2.8.1 && <3, semigroupoids >=5.2 && <6, text >=1 && <2,+ unordered-containers >=0.2 && <0.3, vector >=0.12 && <0.13 test-suite test- type:- exitcode-stdio-1.0- hs-source-dirs:- test- main-is:- Main.hs- default-extensions:- Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, PatternSynonyms, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeApplications, TypeFamilies, TypeOperators, UnboxedTuples, OverloadedLists- default-language:- Haskell2010+ type: exitcode-stdio-1.0+ hs-source-dirs: test+ main-is: Main.hs+ default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, OverloadedLists, PatternGuards, PatternSynonyms, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeApplications, TypeFamilies, TypeOperators, UnboxedTuples+ default-language: Haskell2010 build-depends: cereal, edges,
library/Edges/Cereal/Get.hs view
@@ -3,23 +3,20 @@ import Edges.Prelude import Edges.Types-import Data.Serialize.Get+import Data.Serialize import qualified PrimitiveExtras.PrimArray as PrimArray import qualified PrimitiveExtras.PrimMultiArray as PrimMultiArray -int :: Get Int-int = fromIntegral <$> getInt64le- nodeCounts :: Get (NodeCounts entity) nodeCounts =- NodeCounts <$> PrimArray.cerealGet int getWord32le+ NodeCounts <$> PrimArray.cerealGetAsInMemory get edges :: Get (Edges a b) edges = do- targetSpace <- int- pma <- PrimMultiArray.cerealGet int getWord32le+ targetSpace <- get+ pma <- PrimMultiArray.cerealGetAsInMemory get return (Edges targetSpace pma) node :: Get (Node a)-node = Node <$> int+node = Node <$> get
library/Edges/Cereal/Put.hs view
@@ -3,22 +3,19 @@ import Edges.Prelude import Edges.Types-import Data.Serialize.Put+import Data.Serialize import qualified PrimitiveExtras.PrimArray as PrimArray import qualified PrimitiveExtras.PrimMultiArray as PrimMultiArray -int :: Putter Int-int = putInt64le . fromIntegral- nodeCounts :: Putter (NodeCounts entity) nodeCounts (NodeCounts pa) =- PrimArray.cerealPut int putWord32le pa+ PrimArray.cerealPutAsInMemory put pa edges :: Putter (Edges a b) edges (Edges targetSpaceValue mpaValue) = targetSpace <> mpa where- targetSpace = int targetSpaceValue- mpa = PrimMultiArray.cerealPut int putWord32le mpaValue+ targetSpace = put targetSpaceValue+ mpa = PrimMultiArray.cerealPutAsInMemory put mpaValue node :: Putter (Node a)-node (Node x) = int x+node (Node x) = put x
library/Edges/Functions.hs view
@@ -4,8 +4,10 @@ import Edges.Prelude import Edges.Types import qualified Data.Vector.Unboxed as UnboxedVector+import qualified DeferredFolds.Unfold as Unfold import qualified DeferredFolds.UnfoldM as UnfoldM import qualified Control.Foldl as Foldl+import qualified Edges.Functions.Folds as Foldl import qualified Control.Monad.Par as Par import qualified PrimitiveExtras.PrimMultiArray as PrimMultiArray import qualified PrimitiveExtras.PrimArray as PrimArray@@ -65,3 +67,7 @@ nodeCountsUnboxedVector :: NodeCounts entity -> UnboxedVector.Vector Word32 nodeCountsUnboxedVector (NodeCounts pa) = PrimArray.toUnboxedVector pa++unindexNodeCounts :: (Eq entity, Hashable entity) => (Int -> Maybe entity) -> NodeCounts entity -> HashMap entity Int+unindexNodeCounts lookup (NodeCounts pa) =+ Unfold.fold (Foldl.hashMapByKeyLookup lookup) (fmap fromIntegral (Unfold.primArray pa))
+ library/Edges/Functions/Folds.hs view
@@ -0,0 +1,17 @@+module Edges.Functions.Folds+where++import Edges.Prelude+import Edges.Types+import Control.Foldl+import qualified Data.HashMap.Strict as HashMap+++hashMapByKeyLookup :: (Eq b, Hashable b) => (a -> Maybe b) -> Fold a (HashMap b a)+hashMapByKeyLookup lookup = Fold (flip updateMap) init extract where+ updateMap a = case lookup a of+ Just b -> HashMap.insert b a+ Nothing -> id+ init = HashMap.empty+ extract = id+
library/Edges/Prelude.hs view
@@ -108,6 +108,10 @@ ------------------------- import Control.Foldl as Exports (Fold(..), FoldM(..)) +-- hashable+-------------------------+import Data.Hashable as Exports (Hashable)+ -- primitive ------------------------- import Data.Primitive as Exports@@ -117,6 +121,10 @@ ------------------------- import PrimitiveExtras.PrimMultiArray as Exports (PrimMultiArray) import PrimitiveExtras.TVarArray as Exports (TVarArray)++-- unordered-containers+-------------------------+import Data.HashMap.Strict as Exports (HashMap) -- vector -------------------------