packages feed

numhask-range 0.2.1.0 → 0.2.2.0

raw patch · 6 files changed

+102/−69 lines, 6 filesdep ~numhask-prelude

Dependency ranges changed: numhask-prelude

Files

numhask-range.cabal view
@@ -2,10 +2,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 62fc752e10fc215ee3f1cacd5452edc20d82a58c25ee596a682e1eccbd3a98ea+-- hash: eb71b3256d9227210388010a697953048c3c2bb2f48b3d3d4c8cb6c4eda5aee7  name:           numhask-range-version:        0.2.1.0+version:        0.2.2.0 synopsis:       Numbers that are range representations description:    Numbers that represent ranges of all sorts. category:       project@@ -36,7 +36,7 @@     , adjunctions     , base >=4.7 && <4.12     , distributive-    , numhask-prelude >=0.0.1.0+    , numhask-prelude >=0.0.4.0     , protolude     , semigroupoids   exposed-modules:@@ -59,7 +59,7 @@   build-depends:       base >=4.7 && <5     , doctest-    , numhask-prelude >=0.0.1.0+    , numhask-prelude >=0.0.4.0     , numhask-range     , tasty   other-modules:
src/NumHask/Pair.hs view
@@ -189,14 +189,20 @@     where       (da, ma) = a0 `divMod` a1       (db, mb) = b0 `divMod` b1+  (Pair a0 b0) `quotRem` (Pair a1 b1) = (Pair da db, Pair ma mb)+    where+      (da, ma) = a0 `quotRem` a1+      (db, mb) = b0 `quotRem` b1  instance (Signed a) => Signed (Pair a) where   sign (Pair a b) = Pair (sign a) (sign b)   abs (Pair a b) = Pair (abs a) (abs b) -instance (ExpField a, MultiplicativeUnital a) =>+instance (ExpField a, Normed a a, MultiplicativeUnital a) =>          Normed (Pair a) a where-  size (Pair a b) = sqrt (a ** (one + one) + b ** (one + one))+  normL1 (Pair a b) = normL1 a + normL1 b+  normL2 (Pair a b) = sqrt (a ** (one + one) + b ** (one + one))+  normLp p (Pair a b) = (normL1 a ** p + normL1 b ** p) ** (one/p)  -- | L1-based Ord instance instance (Eq a, Ord a, Signed a, Additive a) => Ord (Pair a) where@@ -206,25 +212,31 @@   nearZero (Pair a b) = nearZero a && nearZero b   aboutEqual a b = nearZero $ a - b -instance (ExpField a) => Metric (Pair a) a where-  distance (Pair a0 b0) (Pair a1 b1) = size (Pair (a1 - a0) (b1 - b0))+instance (ExpField a, Normed a a) => Metric (Pair a) a where+  distanceL1 a b = normL1 (a - b)+  distanceL2 a b = normL2 (a - b)+  distanceLp p a b = normLp p (a - b) -instance (AdditiveGroup a, Distribution a) => Distribution (Pair a)+instance (Distribution a) => Distribution (Pair a) -instance (Ring a) => Ring (Pair a)+instance (Semiring a) => Semiring (Pair a) -instance (AdditiveGroup a, Semiring a) => Semiring (Pair a)+instance (Ring a) => Ring (Pair a)  instance (CRing a) => CRing (Pair a) +instance (Semifield a) => Semifield (Pair a)+ instance (Field a) => Field (Pair a)  instance (ExpField a) => ExpField (Pair a) where   exp (Pair a b) = Pair (exp a) (exp b)   log (Pair a b) = Pair (log a) (log b) -instance (BoundedField a) => BoundedField (Pair a) where+instance (UpperBoundedField a) => UpperBoundedField (Pair a) where   isNaN (Pair a b) = isNaN a || isNaN b++instance (LowerBoundedField a) => LowerBoundedField (Pair a)  instance (Additive a) => AdditiveBasis Pair a where     (.+.) = liftR2 (+)
src/NumHask/Range.hs view
@@ -156,7 +156,7 @@     plus (Range l0 u0) (Range l1 u1) = Range (min l0 l1) (max u0 u1)   instance (Ord a, BoundedField a) => AdditiveUnital (Range a) where-    zero = Range infinity neginfinity+    zero = Range infinity negInfinity  instance (Ord a) => AdditiveAssociative (Range a) @@ -200,13 +200,23 @@     abs (Range l u) = if u >= l then Range l u else Range u l  instance (AdditiveGroup a) => Normed (Range a) a where-    size (Range l u) = u-l+    normL1 (Range l u) = u-l+    normL2 (Range l u) = u-l+    normLp _ (Range l u) = u-l  instance (Ord a, AdditiveGroup a) => Metric (Range a) a where-    distance (Range l u) (Range l' u')+    distanceL1 (Range l u) (Range l' u')         | u < l' = l' - u         | u' < l = l - u'         | otherwise = zero+    distanceL2 (Range l u) (Range l' u')+        | u < l' = l' - u+        | u' < l = l - u'+        | otherwise = zero+    distanceLp _ (Range l u) (Range l' u')+        | u < l' = l' - u+        | u' < l = l - u'+        | otherwise = zero  instance (BoundedField a, Ord a, Epsilon a) => Epsilon (Range a) where     nearZero (Range l u) = nearZero (l - u)@@ -223,7 +233,7 @@     Space (Range a) where     type Element (Range a) = a     union (Range l0 u0) (Range l1 u1) = Range (min l0 l1) (max u0 u1)-    nul = Range infinity neginfinity+    nul = Range infinity negInfinity     lower (Range l _) = l     upper (Range _ u) = u     singleton a = Range a a@@ -252,7 +262,7 @@  -- | turn a range into n `a`s pleasing to human sense and sensibility -- the `a`s may well lie outside the original range as a result-gridSensible :: (FromInteger a, Fractional a, Ord a, QuotientField a, ExpField a) =>+gridSensible :: (FromInteger a, Fractional a, QuotientField a, ExpField a) =>     Pos -> Range a -> Int -> [a] gridSensible tp (Range l u) n =     (+ if tp==MidPos then step/two else zero) <$> posns
src/NumHask/Rect.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE FlexibleInstances #-}@@ -84,7 +85,8 @@ -- [Pair 2.5 0.25,Pair 2.5 0.75,Pair 7.5 0.25,Pair 7.5 0.75] newtype Rect a =   Rect' (Compose Pair Range a)-  deriving (Eq, Functor, Apply, Applicative, Foldable, Foldable1, Traversable)+  deriving (Eq, Functor, Apply, Applicative, Foldable, Foldable1, Traversable,+            Generic)  -- | pattern of Rect lowerx upperx lowery uppery pattern Rect :: a -> a -> a -> a -> Rect a@@ -100,6 +102,13 @@   show (Rect a b c d) =     "Rect " <> show a <> " " <> show b <> " " <> show c <> " " <> show d +-- rect'' :: Dhall.Type (Rect a)+-- rect'' = pair (pair double double) (pair double double)++-- instance (Interpret a) => Interpret (Rect a)+-- input auto "{ _1 = {_1 = 1.1, _2 = 1.1 }}" :: IO (Range Double)++ instance Traversable1 Rect where   traverse1 f (Rect a b c d) = Rect <$> f a <.> f b <.> f c <.> f d @@ -158,7 +167,9 @@   abs (Ranges l u) = Ranges (sign l * l) (sign u * u)  instance (AdditiveGroup a) => Normed (Rect a) (Pair a) where-  size (Ranges l u) = Pair (size l) (size u)+  normL1 (Ranges l u) = Pair (normL1 l) (normL1 u)+  normL2 (Ranges l u) = Pair (normL2 l) (normL2 u)+  normLp (Pair pl pu) (Ranges l u) = Pair (normLp pl l) (normLp pu u)  instance (BoundedField a, Ord a, Epsilon a) => Epsilon (Rect a) where     nearZero (Ranges a b) = nearZero a && nearZero b
stack.yaml view
@@ -1,8 +1,8 @@-resolver: nightly-2018-04-05+resolver: nightly-2018-05-08  packages:   - .  extra-deps:-  - numhask-prelude-0.0.3.0-  - numhask-0.2.0.0+  - numhask-prelude-0.0.4.0+  - numhask-0.2.1.0
test/test.hs view
@@ -63,21 +63,21 @@   -> [Law2 s (Element s)] projectSpaceFuzzyLaws x =   [ ( "project o n (lower o) ≈ lower n"-    , Ternary2-        (\o n _ ->+    , Binary20+        (\o n ->            singular o ||            singular n ||-           x < abs (size o) ||-           x < abs (size n) || project o n (lower o) ≈ lower n))+           x < abs (normL1 o) ||+           x < abs (normL1 n) || project o n (lower o) ≈ lower n))   , ( "project o n (upper o) ≈ upper n"-    , Ternary2-        (\o n _ ->+    , Binary20+        (\o n ->            singular o ||            singular n ||-           x < abs (size o) ||-           x < abs (size n) || project o n (upper o) ≈ upper n))+           x < abs (normL1 o) ||+           x < abs (normL1 n) || project o n (upper o) ≈ upper n))   , ( "project a a x ≈ x"-    , Ternary2 (\o _ s -> singular o || x < abs (size o) || project o o s ≈ s))+    , Binary11 (\o s -> singular o || x < abs (normL1 o) || project o o s ≈ s))   ]  additiveSpaceFuzzyLaws ::@@ -91,16 +91,16 @@   -> [Law s] additiveSpaceFuzzyLaws n =   [ ( "left unital: zero + a ≈ a"-    , Unary (\a -> n < abs (size a) || zero + a ≈ a))+    , Unary (\a -> n < abs (normL1 a) || zero + a ≈ a))   , ( "right unital: a + zero ≈ a"-    , Unary (\a -> n < abs (size a) || zero + a ≈ a))+    , Unary (\a -> n < abs (normL1 a) || zero + a ≈ a))   , ( "associative: (a + b) + c ≈ a + (b +c)"-    , Ternary (\a b c -> n < abs (size a) || (a + b) + c ≈ a + (b + c)))+    , Ternary (\a b c -> n < abs (normL1 a) || (a + b) + c ≈ a + (b + c)))   , ( "commutative a + b ≈ b + a"-    , Binary (\a b -> n < abs (size a) || a + b ≈ b + a))-  , ("idempotent a + a ≈ a", Unary (\a -> n < abs (size a) || a + a ≈ a))+    , Binary (\a b -> n < abs (normL1 a) || a + b ≈ b + a))+  , ("idempotent a + a ≈ a", Unary (\a -> n < abs (normL1 a) || a + a ≈ a))   , ( "idempotent negate a + negate a ≈ abs a"-    , Unary (\a -> n < abs (size a) || a + negate a ≈ abs a))+    , Unary (\a -> n < abs (normL1 a) || a + negate a ≈ abs a))   ]  multiplicativeSpaceFuzzyLaws ::@@ -114,15 +114,15 @@   => Element s   -> [Law s] multiplicativeSpaceFuzzyLaws n =-  [ ("left unital: one * a ≈ a", Unary (\a -> n < abs (size a) || one * a ≈ a))-  , ("right unital: a * one ≈ a", Unary (\a -> n < abs (size a) || one * a ≈ a))+  [ ("left unital: one * a ≈ a", Unary (\a -> n < abs (normL1 a) || one * a ≈ a))+  , ("right unital: a * one ≈ a", Unary (\a -> n < abs (normL1 a) || one * a ≈ a))   , ( "associative: (a * b) * c ≈ a * (b *c)"     , Ternary         (\a b c ->-           n < abs (size a) ||-           n < abs (size b) || n < abs (size c) || (a * b) * c ≈ a * (b * c)))+           n < abs (normL1 a) ||+           n < abs (normL1 b) || n < abs (normL1 c) || (a * b) * c ≈ a * (b * c)))   , ( "commutative a * b ≈ b * a"-    , Binary (\a b -> n < abs (size a) || a * b ≈ b * a))+    , Binary (\a b -> n < abs (normL1 a) || a * b ≈ b * a))   ]  multiplicativeGroupSpaceFuzzyLaws ::@@ -138,13 +138,13 @@   -> [Law s] multiplicativeGroupSpaceFuzzyLaws n =   [ ( "divide: a / a ≈ one"-    , Unary (\a -> singular a || n < abs (size a) || (a / a) ≈ one))+    , Unary (\a -> singular a || n < abs (normL1 a) || (a / a) ≈ one))   , ( "recip divide: recip a ≈ one / a"-    , Unary (\a -> singular a || n < abs (size a) || recip a ≈ one / a))+    , Unary (\a -> singular a || n < abs (normL1 a) || recip a ≈ one / a))   , ( "recip left: recip a * a ≈ one"-    , Unary (\a -> singular a || n < abs (size a) || recip a * a ≈ one))+    , Unary (\a -> singular a || n < abs (normL1 a) || recip a * a ≈ one))   , ( "recip right: a * recip a ≈ one"-    , Unary (\a -> singular a || n < abs (size a) || a * recip a ≈ one))+    , Unary (\a -> singular a || n < abs (normL1 a) || a * recip a ≈ one))   ]  fieldFuzzyLaws ::@@ -159,52 +159,52 @@   -> [Law (r a)] fieldFuzzyLaws n =   [ ( "left unital: zero + a ≈ a"-    , Unary (\a -> n < abs (size a) || zero + a ≈ a))+    , Unary (\a -> n < abs (normL1 a) || zero + a ≈ a))   , ( "right unital: a + zero ≈ a"-    , Unary (\a -> n < abs (size a) || zero + a ≈ a))+    , Unary (\a -> n < abs (normL1 a) || zero + a ≈ a))   , ( "associative: (a + b) + c ≈ a + (b +c)"-    , Ternary (\a b c -> n < abs (size a) || (a + b) + c ≈ a + (b + c)))+    , Ternary (\a b c -> n < abs (normL1 a) || (a + b) + c ≈ a + (b + c)))   , ( "commutative a + b ≈ b + a"-    , Binary (\a b -> n < abs (size a) || a + b ≈ b + a))+    , Binary (\a b -> n < abs (normL1 a) || a + b ≈ b + a))   , ( "minus: a - a ≈ zero"-    , Unary (\a -> nearZero a || n < abs (size a) || (a - a) ≈ zero))+    , Unary (\a -> nearZero a || n < abs (normL1 a) || (a - a) ≈ zero))   , ( "negate minus: negate a ≈ zero - a"-    , Unary (\a -> nearZero a || n < abs (size a) || negate a ≈ zero - a))+    , Unary (\a -> nearZero a || n < abs (normL1 a) || negate a ≈ zero - a))   , ( "negate left: negate a * a ≈ zero"-    , Unary (\a -> nearZero a || n < abs (size a) || negate a + a ≈ zero))+    , Unary (\a -> nearZero a || n < abs (normL1 a) || negate a + a ≈ zero))   , ( "negate right: a * negate a ≈ zero"-    , Unary (\a -> nearZero a || n < abs (size a) || a + negate a ≈ zero))-  , ("left unital: one * a ≈ a", Unary (\a -> n < abs (size a) || one * a ≈ a))-  , ("right unital: a * one ≈ a", Unary (\a -> n < abs (size a) || one * a ≈ a))+    , Unary (\a -> nearZero a || n < abs (normL1 a) || a + negate a ≈ zero))+  , ("left unital: one * a ≈ a", Unary (\a -> n < abs (normL1 a) || one * a ≈ a))+  , ("right unital: a * one ≈ a", Unary (\a -> n < abs (normL1 a) || one * a ≈ a))   , ( "associative: (a * b) * c ≈ a * (b *c)"     , Ternary         (\a b c ->-           n < abs (size a) ||-           n < abs (size b) || n < abs (size c) || (a * b) * c ≈ a * (b * c)))+           n < abs (normL1 a) ||+           n < abs (normL1 b) || n < abs (normL1 c) || (a * b) * c ≈ a * (b * c)))   , ( "commutative a * b ≈ b * a"-    , Binary (\a b -> n < abs (size a) || a * b ≈ b * a))+    , Binary (\a b -> n < abs (normL1 a) || a * b ≈ b * a))   , ( "divide: a / a ≈ one"-    , Unary (\a -> nearZero a || n < abs (size a) || (a / a) ≈ one))+    , Unary (\a -> nearZero a || n < abs (normL1 a) || (a / a) ≈ one))   , ( "recip divide: recip a ≈ one / a"-    , Unary (\a -> nearZero a || n < abs (size a) || recip a ≈ one / a))+    , Unary (\a -> nearZero a || n < abs (normL1 a) || recip a ≈ one / a))   , ( "recip left: recip a * a ≈ one"-    , Unary (\a -> nearZero a || n < abs (size a) || recip a * a ≈ one))+    , Unary (\a -> nearZero a || n < abs (normL1 a) || recip a * a ≈ one))   , ( "recip right: a * recip a ≈ one"-    , Unary (\a -> nearZero a || n < abs (size a) || a * recip a ≈ one))+    , Unary (\a -> nearZero a || n < abs (normL1 a) || a * recip a ≈ one))   , ( "left annihilation: a * zero ≈ zero"-    , Unary (\a -> n < abs (size a) || a * zero ≈ zero))+    , Unary (\a -> n < abs (normL1 a) || a * zero ≈ zero))   , ( "right annihilation: zero * a ≈ zero"-    , Unary (\a -> n < abs (size a) || zero * a ≈ zero))+    , Unary (\a -> n < abs (normL1 a) || zero * a ≈ zero))   , ( "left distributivity: a * (b + c) ≈ a * b + a * c"     , Ternary         (\a b c ->-           n < abs (size a) ||-           n < abs (size b) || n < abs (size c) || a * (b + c) ≈ a * b + a * c))+           n < abs (normL1 a) ||+           n < abs (normL1 b) || n < abs (normL1 c) || a * (b + c) ≈ a * b + a * c))   , ( "right distributivity: (a + b) * c ≈ a * c + b * c"     , Ternary         (\a b c ->-           n < abs (size a) ||-           n < abs (size b) || n < abs (size c) || (a + b) * c ≈ a * c + b * c))+           n < abs (normL1 a) ||+           n < abs (normL1 b) || n < abs (normL1 c) || (a + b) * c ≈ a * c + b * c))   ]  semiringFuzzyLaws ::