exp-pairs 0.1.5.2 → 0.1.6.0
raw patch · 10 files changed
+61/−49 lines, 10 filesdep +prettyprinterdep +semigroupsdep −wl-pprintdep ~basePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: prettyprinter, semigroups
Dependencies removed: wl-pprint
Dependency ranges changed: base
API changes (from Hackage documentation)
- Math.ExpPairs: instance Text.PrettyPrint.Leijen.Pretty Math.ExpPairs.OptimizeResult
- Math.ExpPairs.Kratzel: instance Text.PrettyPrint.Leijen.Pretty Math.ExpPairs.Kratzel.TauAResult
- Math.ExpPairs.Kratzel: instance Text.PrettyPrint.Leijen.Pretty Math.ExpPairs.Kratzel.TauabTheorem
- Math.ExpPairs.Kratzel: instance Text.PrettyPrint.Leijen.Pretty Math.ExpPairs.Kratzel.TauabcTheorem
- Math.ExpPairs.Kratzel: instance Text.PrettyPrint.Leijen.Pretty Math.ExpPairs.Kratzel.TauabcdTheorem
- Math.ExpPairs.Kratzel: instance Text.PrettyPrint.Leijen.Pretty Math.ExpPairs.Kratzel.Theorem
- Math.ExpPairs.LinearForm: instance (GHC.Num.Num t, GHC.Classes.Eq t, Text.PrettyPrint.Leijen.Pretty t) => Text.PrettyPrint.Leijen.Pretty (Math.ExpPairs.LinearForm.Constraint t)
- Math.ExpPairs.LinearForm: instance (GHC.Num.Num t, GHC.Classes.Eq t, Text.PrettyPrint.Leijen.Pretty t) => Text.PrettyPrint.Leijen.Pretty (Math.ExpPairs.LinearForm.LinearForm t)
- Math.ExpPairs.LinearForm: instance (GHC.Num.Num t, GHC.Classes.Eq t, Text.PrettyPrint.Leijen.Pretty t) => Text.PrettyPrint.Leijen.Pretty (Math.ExpPairs.LinearForm.RationalForm t)
- Math.ExpPairs.LinearForm: instance Text.PrettyPrint.Leijen.Pretty Math.ExpPairs.LinearForm.IneqType
- Math.ExpPairs.Matrix3: instance Text.PrettyPrint.Leijen.Pretty t => Text.PrettyPrint.Leijen.Pretty (Math.ExpPairs.Matrix3.Matrix3 t)
- Math.ExpPairs.Pair: instance (Text.PrettyPrint.Leijen.Pretty t, GHC.Num.Num t, GHC.Classes.Eq t) => Text.PrettyPrint.Leijen.Pretty (Math.ExpPairs.Pair.InitPair' t)
- Math.ExpPairs.Pair: instance Text.PrettyPrint.Leijen.Pretty GHC.Real.Rational
- Math.ExpPairs.Pair: instance Text.PrettyPrint.Leijen.Pretty Math.ExpPairs.Pair.Triangle
- Math.ExpPairs.PrettyProcess: instance Text.PrettyPrint.Leijen.Pretty Math.ExpPairs.PrettyProcess.PrettyProcess
- Math.ExpPairs.Process: instance Text.PrettyPrint.Leijen.Pretty Math.ExpPairs.Process.Path
- Math.ExpPairs.ProcessMatrix: instance Text.PrettyPrint.Leijen.Pretty Math.ExpPairs.ProcessMatrix.Process
- Math.ExpPairs.ProcessMatrix: instance Text.PrettyPrint.Leijen.Pretty Math.ExpPairs.ProcessMatrix.ProcessMatrix
- Math.ExpPairs.RatioInf: instance (GHC.Real.Integral t, Text.PrettyPrint.Leijen.Pretty t) => Text.PrettyPrint.Leijen.Pretty (Math.ExpPairs.RatioInf.RatioInf t)
+ Math.ExpPairs: instance Data.Text.Prettyprint.Doc.Internal.Pretty Math.ExpPairs.OptimizeResult
+ Math.ExpPairs.Kratzel: instance Data.Text.Prettyprint.Doc.Internal.Pretty Math.ExpPairs.Kratzel.TauAResult
+ Math.ExpPairs.Kratzel: instance Data.Text.Prettyprint.Doc.Internal.Pretty Math.ExpPairs.Kratzel.TauabTheorem
+ Math.ExpPairs.Kratzel: instance Data.Text.Prettyprint.Doc.Internal.Pretty Math.ExpPairs.Kratzel.TauabcTheorem
+ Math.ExpPairs.Kratzel: instance Data.Text.Prettyprint.Doc.Internal.Pretty Math.ExpPairs.Kratzel.TauabcdTheorem
+ Math.ExpPairs.Kratzel: instance Data.Text.Prettyprint.Doc.Internal.Pretty Math.ExpPairs.Kratzel.Theorem
+ Math.ExpPairs.LinearForm: instance (GHC.Num.Num t, GHC.Classes.Eq t, Data.Text.Prettyprint.Doc.Internal.Pretty t) => Data.Text.Prettyprint.Doc.Internal.Pretty (Math.ExpPairs.LinearForm.Constraint t)
+ Math.ExpPairs.LinearForm: instance (GHC.Num.Num t, GHC.Classes.Eq t, Data.Text.Prettyprint.Doc.Internal.Pretty t) => Data.Text.Prettyprint.Doc.Internal.Pretty (Math.ExpPairs.LinearForm.LinearForm t)
+ Math.ExpPairs.LinearForm: instance (GHC.Num.Num t, GHC.Classes.Eq t, Data.Text.Prettyprint.Doc.Internal.Pretty t) => Data.Text.Prettyprint.Doc.Internal.Pretty (Math.ExpPairs.LinearForm.RationalForm t)
+ Math.ExpPairs.LinearForm: instance Data.Text.Prettyprint.Doc.Internal.Pretty Math.ExpPairs.LinearForm.IneqType
+ Math.ExpPairs.LinearForm: instance GHC.Num.Num t => Data.Semigroup.Semigroup (Math.ExpPairs.LinearForm.LinearForm t)
+ Math.ExpPairs.Matrix3: instance Data.Text.Prettyprint.Doc.Internal.Pretty t => Data.Text.Prettyprint.Doc.Internal.Pretty (Math.ExpPairs.Matrix3.Matrix3 t)
+ Math.ExpPairs.Pair: instance (Data.Text.Prettyprint.Doc.Internal.Pretty t, GHC.Num.Num t, GHC.Classes.Eq t) => Data.Text.Prettyprint.Doc.Internal.Pretty (Math.ExpPairs.Pair.InitPair' t)
+ Math.ExpPairs.Pair: instance (GHC.Real.Integral a, GHC.Show.Show a) => Data.Text.Prettyprint.Doc.Internal.Pretty (GHC.Real.Ratio a)
+ Math.ExpPairs.Pair: instance Data.Text.Prettyprint.Doc.Internal.Pretty Math.ExpPairs.Pair.Triangle
+ Math.ExpPairs.PrettyProcess: instance Data.Text.Prettyprint.Doc.Internal.Pretty Math.ExpPairs.PrettyProcess.PrettyProcess
+ Math.ExpPairs.Process: instance Data.Semigroup.Semigroup Math.ExpPairs.Process.Path
+ Math.ExpPairs.Process: instance Data.Text.Prettyprint.Doc.Internal.Pretty Math.ExpPairs.Process.Path
+ Math.ExpPairs.ProcessMatrix: instance Data.Semigroup.Semigroup Math.ExpPairs.ProcessMatrix.ProcessMatrix
+ Math.ExpPairs.ProcessMatrix: instance Data.Text.Prettyprint.Doc.Internal.Pretty Math.ExpPairs.ProcessMatrix.Process
+ Math.ExpPairs.ProcessMatrix: instance Data.Text.Prettyprint.Doc.Internal.Pretty Math.ExpPairs.ProcessMatrix.ProcessMatrix
+ Math.ExpPairs.RatioInf: instance (GHC.Real.Integral t, Data.Text.Prettyprint.Doc.Internal.Pretty t) => Data.Text.Prettyprint.Doc.Internal.Pretty (Math.ExpPairs.RatioInf.RatioInf t)
- Math.ExpPairs.Matrix3: toList :: Foldable t => forall a. t a -> [a]
+ Math.ExpPairs.Matrix3: toList :: Foldable t => forall a. () => t a -> [a]
Files
- Math/ExpPairs.hs +5/−5
- Math/ExpPairs/Kratzel.hs +4/−4
- Math/ExpPairs/LinearForm.hs +14/−12
- Math/ExpPairs/Matrix3.hs +1/−1
- Math/ExpPairs/Pair.hs +8/−8
- Math/ExpPairs/PrettyProcess.hs +7/−5
- Math/ExpPairs/Process.hs +7/−3
- Math/ExpPairs/ProcessMatrix.hs +7/−5
- Math/ExpPairs/RatioInf.hs +4/−4
- exp-pairs.cabal +4/−2
Math/ExpPairs.hs view
@@ -47,8 +47,8 @@ import Data.List (minimumBy) import Data.Monoid import Data.Ratio-import Text.PrettyPrint.Leijen hiding ((<$>), (<>))-import qualified Text.PrettyPrint.Leijen as PP+import Data.Text.Prettyprint.Doc hiding ((<>))+import qualified Data.Text.Prettyprint.Doc as PP import Text.Printf import Math.ExpPairs.LinearForm@@ -117,10 +117,10 @@ deriving (Show) instance Pretty OptimizeResult where- pretty (OptimizeResult r' ip p) = pretty1 r' PP.<$>- (parens (pretty (k%m) PP.<> comma PP.<> pretty (l%m)) <+> equals <+> pretty p </> pretty ip)+ pretty (OptimizeResult r' ip p) = pretty1 r' <> PP.line <>+ (parens (pretty (k%m) PP.<> comma PP.<> pretty (l%m)) <+> equals <+> pretty p <> softline <> pretty ip) where- pretty1 r@(Finite rr) = text (printf "%.6f" (fromRational rr :: Double)) <+> equals <+> pretty r+ pretty1 r@(Finite rr) = pretty (printf "%.6f" (fromRational rr :: Double) :: String) <+> equals <+> pretty r pretty1 r = pretty r (k, l, m) = evalPath p $ initPairToProjValue ip
Math/ExpPairs/Kratzel.hs view
@@ -43,7 +43,7 @@ import Data.Ratio import Data.Ord (comparing) import Data.List (minimumBy, sort, inits, tails)-import Text.PrettyPrint.Leijen+import Data.Text.Prettyprint.Doc import qualified Data.Map as M import qualified Data.Set as S@@ -65,7 +65,7 @@ deriving (Eq, Ord, Enum, Bounded, Show) instance Pretty TauabTheorem where- pretty = text . show+ pretty = pretty . show divideResult :: Real a => a -> (b, OptimizeResult) -> (b, OptimizeResult) divideResult d = second (\o -> o {optimalValue = optimalValue o / Finite (toRational d)})@@ -281,8 +281,8 @@ deriving (Eq, Ord, Show) instance Pretty Theorem where- pretty NoTheorem = text ""- pretty Ivic = text "Ivic"+ pretty NoTheorem = pretty ""+ pretty Ivic = pretty "Ivic" pretty (Ab t) = pretty t pretty (Abc t) = pretty t pretty (Abcd t) = pretty t
Math/ExpPairs/LinearForm.hs view
@@ -25,12 +25,11 @@ import Control.DeepSeq import Data.Foldable (Foldable (..), toList) import Data.Maybe (mapMaybe)-#if __GLASGOW_HASKELL__ < 710 import Data.Monoid (Monoid, mempty, mappend)-#endif import Data.Ratio (numerator, denominator)+import Data.Semigroup (Semigroup, (<>)) import GHC.Generics (Generic (..))-import Text.PrettyPrint.Leijen+import Data.Text.Prettyprint.Doc import Math.ExpPairs.RatioInf @@ -44,12 +43,12 @@ rnf = rnf . toList instance (Num t, Eq t, Pretty t) => Pretty (LinearForm t) where- pretty (LinearForm 0 0 0) = char '0'+ pretty (LinearForm 0 0 0) = pretty "0" pretty (LinearForm a b c) = cat $ punctuate plus $ mapMaybe f [(a, 'k'), (b, 'l'), (c, 'm')] where- plus = space <> char '+' <> space+ plus = space <> pretty "+" <> space f (0, _) = Nothing- f (1, t) = Just (char t)- f (r, t) = Just (pretty r <+> char '*' <+> char t)+ f (1, t) = Just (pretty t)+ f (r, t) = Just (pretty r <+> pretty "*" <+> pretty t) instance Num t => Num (LinearForm t) where (LinearForm a b c) + (LinearForm d e f) = LinearForm (a+d) (b+e) (c+f)@@ -59,9 +58,12 @@ signum = error "Signum of LinearForm is undefined" fromInteger n = LinearForm 0 0 (fromInteger n) +instance Num t => Semigroup (LinearForm t) where+ (<>) = (+)+ instance Num t => Monoid (LinearForm t) where mempty = 0- mappend = (+)+ mappend = (<>) -- | Multiply a linear form by a given coefficient. scaleLF :: (Num t, Eq t) => t -> LinearForm t -> LinearForm t@@ -84,7 +86,7 @@ infix 5 :/: instance (Num t, Eq t, Pretty t) => Pretty (RationalForm t) where- pretty (l1 :/: l2) = parens (pretty l1) </> parens (pretty l2)+ pretty (l1 :/: l2) = parens (pretty l1) <> softline <> parens (pretty l2) instance NFData t => NFData (RationalForm t) where rnf = rnf . toList@@ -122,15 +124,15 @@ deriving (Eq, Ord, Show, Enum, Bounded, Generic) instance Pretty IneqType where- pretty Strict = text ">"- pretty NonStrict = text ">="+ pretty Strict = pretty ">"+ pretty NonStrict = pretty ">=" -- |A linear constraint of two variables. data Constraint t = Constraint !(LinearForm t) !IneqType deriving (Eq, Show, Functor, Foldable, Generic) instance (Num t, Eq t, Pretty t) => Pretty (Constraint t) where- pretty (Constraint lf ineq) = pretty lf <+> pretty ineq <+> int 0+ pretty (Constraint lf ineq) = pretty lf <+> pretty ineq <+> pretty "0" instance NFData t => NFData (Constraint t) where rnf (Constraint l i) = i `seq` rnf l
Math/ExpPairs/Matrix3.hs view
@@ -33,7 +33,7 @@ import Data.Foldable (Foldable (..), toList) import Data.List (transpose) import GHC.Generics (Generic (..))-import Text.PrettyPrint.Leijen+import Data.Text.Prettyprint.Doc -- |Matrix of order 3. Instances of 'Num' and 'Fractional' -- are given in terms of the multiplicative group of matrices,
Math/ExpPairs/Pair.hs view
@@ -30,7 +30,7 @@ import Data.Maybe import Data.Ratio import GHC.Generics (Generic (..))-import Text.PrettyPrint.Leijen+import Data.Text.Prettyprint.Doc -- |Vertices of the triangle of initial exponent pairs. data Triangle@@ -49,7 +49,7 @@ deriving (Show, Bounded, Enum, Eq, Ord, Generic) instance Pretty Triangle where- pretty = text . show+ pretty = pretty . show -- |Type to hold an initial exponent pair. data InitPair' t@@ -69,17 +69,17 @@ -- 'Corput16', 'HuxW87b1' and 'Hux05' type InitPair = InitPair' Rational -instance Pretty Rational where- pretty = rational+instance (Integral a, Show a) => Pretty (Ratio a) where+ pretty = pretty . show instance (Pretty t, Num t, Eq t) => Pretty (InitPair' t) where- pretty Corput01 = parens (rational 0 <> comma <+> rational 1)- pretty Corput12 = parens (rational (1%2) <> comma <+> rational (1%2))+ pretty Corput01 = parens (pretty (0%1) <> comma <+> pretty (1%1))+ pretty Corput12 = parens (pretty (1%2) <> comma <+> pretty (1%2)) pretty (Mix r1 r2) = cat $ punctuate plus $ mapMaybe f [(r1, Corput16), (r2, HuxW87b1), (1 - r1 - r2, Hux05)] where- plus = space <> char '+' <> space+ plus = space <> pretty "+" <> space f (0, _) = Nothing f (1, t) = Just (pretty t)- f (r, t) = Just (pretty r <+> char '*' <+> pretty t)+ f (r, t) = Just (pretty r <+> pretty "*" <+> pretty t) sect :: Integer sect = 30
Math/ExpPairs/PrettyProcess.hs view
@@ -14,14 +14,16 @@ -} {-# LANGUAGE LambdaCase #-} {-# OPTIONS_GHC -fno-warn-type-defaults #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-} module Math.ExpPairs.PrettyProcess ( prettify, uglify, PrettyProcess) where import Data.List (minimumBy, inits, tails)+import Data.Monoid (mempty) import Data.Ord (comparing)-import Text.PrettyPrint.Leijen+import Data.Text.Prettyprint.Doc import qualified Data.Map as M import qualified Data.Set as S@@ -39,11 +41,11 @@ instance Pretty PrettyProcess where pretty = \case- Simply xs -> hsep (map (text . show) xs)- Repeat _ 0 -> empty+ Simply xs -> hsep (map (pretty . show) xs)+ Repeat _ 0 -> mempty Repeat xs 1 -> pretty xs- Repeat (Simply [A]) n -> text (show A) <> char '^' <> int n- Repeat xs n -> parens (pretty xs) <> char '^' <> int n+ Repeat (Simply [A]) n -> pretty (show A) <> pretty "^" <> pretty n+ Repeat xs n -> parens (pretty xs) <> pretty "^" <> pretty n Sequence a b -> pretty a <+> pretty b -- | Width of the bracket.
Math/ExpPairs/Process.hs view
@@ -23,8 +23,9 @@ ) where import GHC.Generics (Generic)-import Data.Monoid-import Text.PrettyPrint.Leijen hiding ((<>))+import Data.Monoid (Monoid, mempty, mappend)+import Data.Semigroup (Semigroup, (<>))+import Data.Text.Prettyprint.Doc hiding ((<>)) import Math.ExpPairs.ProcessMatrix import Math.ExpPairs.PrettyProcess@@ -34,9 +35,12 @@ data Path = Path !ProcessMatrix ![Process] deriving (Eq, Show, Generic) +instance Semigroup Path where+ Path m1 p1 <> Path m2 p2 = Path (m1 <> m2) (p1 <> p2)+ instance Monoid Path where mempty = Path mempty mempty- mappend (Path m1 p1) (Path m2 p2) = Path (m1 <> m2) (p1 <> p2)+ mappend = (<>) instance Pretty Path where pretty (Path _ l) = pretty (prettify l)
Math/ExpPairs/ProcessMatrix.hs view
@@ -23,11 +23,10 @@ , evalMatrix ) where -#if __GLASGOW_HASKELL__ < 710 import Data.Monoid (Monoid, mempty, mappend)-#endif+import Data.Semigroup (Semigroup, (<>)) import GHC.Generics (Generic (..))-import Text.PrettyPrint.Leijen+import Data.Text.Prettyprint.Doc import Math.ExpPairs.Matrix3 @@ -40,15 +39,18 @@ deriving (Eq, Show, Read, Ord, Enum, Generic) instance Pretty Process where- pretty = text . show+ pretty = pretty . show -- | Sequence of processes, represented as a matrix 3x3. newtype ProcessMatrix = ProcessMatrix (Matrix3 Integer) deriving (Eq, Num, Show, Pretty) +instance Semigroup ProcessMatrix where+ ProcessMatrix a <> ProcessMatrix b = ProcessMatrix $ normalize $ a * b+ instance Monoid ProcessMatrix where mempty = 1- mappend (ProcessMatrix a) (ProcessMatrix b) = ProcessMatrix $ normalize $ a * b+ mappend = (<>) process2matrix :: Process -> ProcessMatrix process2matrix A = ProcessMatrix $ Matrix3 1 0 0 1 1 1 2 0 2
Math/ExpPairs/RatioInf.hs view
@@ -18,7 +18,7 @@ ) where import Data.Ratio (Ratio, numerator, denominator)-import Text.PrettyPrint.Leijen+import Data.Text.Prettyprint.Doc -- |Extends a rational type with positive and negative -- infinities.@@ -36,11 +36,11 @@ type RationalInf = RatioInf Integer instance (Integral t, Pretty t) => Pretty (RatioInf t) where- pretty InfMinus = text "-Inf"+ pretty InfMinus = pretty "-Inf" pretty (Finite x) | denominator x == 1 = pretty (numerator x)- | otherwise = pretty (numerator x) <+> char '/' <+> pretty (denominator x)- pretty InfPlus = text "+Inf"+ | otherwise = pretty (numerator x) <+> pretty "/" <+> pretty (denominator x)+ pretty InfPlus = pretty "+Inf" instance Integral t => Num (RatioInf t) where InfMinus + InfPlus = error "Cannot add up negative and positive infinities"
exp-pairs.cabal view
@@ -1,5 +1,5 @@ name: exp-pairs-version: 0.1.5.2+version: 0.1.6.0 synopsis: Linear programming over exponent pairs description: Package implements an algorithm to minimize rational objective function over the set of exponent pairs homepage: https://github.com/Bodigrim/exp-pairs@@ -30,9 +30,11 @@ Math.ExpPairs.RatioInf build-depends: base >=4 && <5, ghc-prim,- wl-pprint >=1.2,+ prettyprinter, deepseq >=1.3, containers+ if impl(ghc < 8.0)+ build-depends: semigroups >= 0.8 default-language: Haskell2010 ghc-options: -Wall -fno-warn-type-defaults