obdd 0.8.2 → 0.8.4
raw patch · 4 files changed
+35/−18 lines, 4 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- OBDD.Data: instance (GHC.Classes.Eq i, GHC.Classes.Eq v) => GHC.Classes.Eq (OBDD.Data.Node v i)
- OBDD.Data: instance (GHC.Classes.Ord i, GHC.Classes.Ord v) => GHC.Classes.Ord (OBDD.Data.Node v i)
+ OBDD: data OBDD v
+ OBDD: fold :: Ord v => (Bool -> a) -> (v -> a -> a -> a) -> OBDD v -> a
+ OBDD: foldM :: (Monad m, Ord v) => (Bool -> m a) -> (v -> a -> a -> m a) -> OBDD v -> m a
+ OBDD: full_fold :: Ord v => Set v -> (Bool -> a) -> (v -> a -> a -> a) -> OBDD v -> a
+ OBDD: full_foldM :: (Monad m, Ord v) => Set v -> (Bool -> m a) -> (v -> a -> a -> m a) -> OBDD v -> m a
+ OBDD: instance GHC.Classes.Ord v => GHC.Classes.Eq (OBDD.Data.OBDD v)
+ OBDD: models :: Ord k => Set k -> OBDD k -> [Map k Bool]
+ OBDD: null :: OBDD v -> Bool
+ OBDD: number_of_models :: Ord v => Set v -> OBDD v -> Integer
+ OBDD: paths :: Ord v => OBDD v -> [Map v Bool]
+ OBDD: satisfiable :: OBDD v -> Bool
+ OBDD: size :: OBDD v -> Index
+ OBDD: some_model :: Ord v => OBDD v -> IO (Maybe (Map v Bool))
+ OBDD: variables :: Ord v => OBDD v -> Set v
+ OBDD.Data: instance (GHC.Classes.Eq v, GHC.Classes.Eq i) => GHC.Classes.Eq (OBDD.Data.Node v i)
+ OBDD.Data: instance (GHC.Classes.Ord v, GHC.Classes.Ord i) => GHC.Classes.Ord (OBDD.Data.Node v i)
+ OBDD.Operation: infixr 0 ==>
+ OBDD.Operation: infixr 2 ||
+ OBDD.Operation: infixr 3 &&
- OBDD.Cube: dnf :: Ord k => OBDD k -> [Cube k]
+ OBDD.Cube: dnf :: Ord v => OBDD v -> [Cube v]
- OBDD.Cube: greed :: (Ord a, Ord b) => Map a b -> [Set a] -> Set a
+ OBDD.Cube: greed :: forall a b. (Ord b, Ord a) => Map a b -> [Set a] -> Set a
- OBDD.Data: not_ :: () => OBDD v -> OBDD v
+ OBDD.Data: not_ :: OBDD v -> OBDD v
- OBDD.Data: size :: () => OBDD v -> Index
+ OBDD.Data: size :: OBDD v -> Index
- OBDD.Property: size :: () => OBDD v -> Index
+ OBDD.Property: size :: OBDD v -> Index
Files
- examples/Sort.hs +14/−14
- obdd.cabal +14/−2
- src/OBDD.hs +5/−0
- src/OBDD/Data.hs +2/−2
examples/Sort.hs view
@@ -63,11 +63,11 @@ -- * poset enumeration data State =- State { comps:: ! [Comp]- , poset :: ! Poset- , args :: ! [Num]- , form :: ! Bit- , size :: ! Integer+ State { comps:: ![Comp]+ , poset :: !Poset+ , args :: ![Num]+ , form :: !Bit+ , size :: !Integer } start w =@@ -110,20 +110,20 @@ else if size s > 2^d then return (False,known) else do- let verbose = False+ let verbose = False case M.lookup (canonical $ poset s) known of Just (r,prev) -> do if verbose- then putStrLn $ unwords [ show d, show $ size s, show (comps s)+ then putStrLn $ unwords [ show d, show $ size s, show (comps s) , show r, "iso", show prev ]- else putStr "!"+ else putStr "!" return (r,known) Nothing -> do let go [] known = return (False, known) go (c@(x,y):cs) known = do- let [s1,s2] = reverse- $ sortOn size- $ map (next w s) [ (x,y), (y,x) ]+ let [s1,s2] = reverse+ $ sortOn size+ $ map (next w s) [ (x,y), (y,x) ] (a1,k1) <- work w (d-1) s1 known if a1 then do@@ -139,10 +139,10 @@ $ comparators w (r,known) <- go candidates known if verbose- then putStrLn $ unwords [ show d, show $ size s, show (comps s)+ then putStrLn $ unwords [ show d, show $ size s, show (comps s) , show r ] else putStr "." - hFlush stdout + hFlush stdout return (r, M.insert (canonical $ poset s) (r, comps s) known) @@ -154,7 +154,7 @@ $ logBase 2 $ fromIntegral $ factorial $ read w in -- search (read w) b- void $ run (read w) b+ void $ run (read w) b [ w , d ] -> void $ run (read w) (read d)
obdd.cabal view
@@ -1,6 +1,6 @@ Name: obdd-Version: 0.8.2-Cabal-Version: >= 1.8+Version: 0.8.4+Cabal-Version: 1.12 Build-type: Simple Synopsis: Ordered Reduced Binary Decision Diagrams Description:@@ -37,6 +37,9 @@ Maintainer: Johannes Waldmann Homepage: https://github.com/jwaldmann/haskell-obdd +tested-with: GHC == 9.0.1 , GHC == 8.10.4 , GHC == 8.8.4 , GHC == 8.6.5 , GHC == 8.4.4+ , GHC == 8.2.2 , GHC == 8.0.2 , GHC == 7.10.3+ Source-Repository head Type: git Location: git://github.com/jwaldmann/haskell-obdd.git@@ -46,6 +49,7 @@ Hs-Source-Dirs: src Exposed-Modules: OBDD OBDD.Data OBDD.Make OBDD.Operation OBDD.Property, OBDD.Display, OBDD.Linopt, OBDD.Cube Other-Modules: OBDD.IntIntMap, OBDD.VarIntIntMap+ Default-Language: Haskell2010 ghc-options: -funbox-strict-fields test-suite obdd-placement@@ -53,18 +57,21 @@ Type: exitcode-stdio-1.0 Main-Is: Placement.hs Build-Depends: base, containers, obdd+ Default-Language: Haskell2010 test-suite obdd-domino Hs-Source-Dirs: examples Type: exitcode-stdio-1.0 Main-Is: Domino.hs Build-Depends: base, containers, obdd+ Default-Language: Haskell2010 test-suite obdd-cubism Hs-Source-Dirs : examples Type: exitcode-stdio-1.0 Main-Is: Cubism.hs Build-Depends: base, containers, obdd+ Default-Language: Haskell2010 test-suite obdd-queens Hs-Source-Dirs : examples@@ -72,18 +79,21 @@ Main-Is: Queens.hs ghc-options: -threaded -rtsopts Build-Depends: base, containers, obdd, text+ Default-Language: Haskell2010 test-suite obdd-queens2 Hs-Source-Dirs : examples Type: exitcode-stdio-1.0 Main-Is: Queens2.hs Build-Depends: base, containers, obdd+ Default-Language: Haskell2010 test-suite obdd-weight Hs-Source-Dirs : examples Type: exitcode-stdio-1.0 Main-Is: Weight.hs Build-Depends: base, containers, obdd+ Default-Language: Haskell2010 test-suite obdd-sort Hs-Source-Dirs : examples@@ -91,6 +101,7 @@ Main-Is: Sort.hs Build-Depends: base, containers, obdd Ghc-Options: -rtsopts + Default-Language: Haskell2010 test-suite obdd-mm0916 Hs-Source-Dirs : examples@@ -98,3 +109,4 @@ Main-Is: MM0916.hs Build-Depends: base, containers, obdd, array Ghc-Options: -rtsopts+ Default-Language: Haskell2010
src/OBDD.hs view
@@ -28,3 +28,8 @@ import OBDD.Operation import OBDD.Display import OBDD.Make++import Prelude hiding (not, null)++instance Ord v => Eq (OBDD v) where+ f == g = null $ not $ equiv f g
src/OBDD/Data.hs view
@@ -72,8 +72,8 @@ -- , icore :: !(Map ( Node v Index ) Index) , icore :: !(VarIntIntMap v Index)- , ifalse :: ! Index- , itrue :: ! Index+ , ifalse :: !Index+ , itrue :: !Index , next :: !Index , top :: !Index }