{-# OPTIONS_GHC -Wno-orphans #-}
module AERN2.MP.Ball.Comparisons
(
module AERN2.Norm
, reducePrecionIfInaccurate
, byEndpointsMP
, intersectCNMPBall
, hullMPBall
)
where
import MixedTypesNumPrelude
import qualified Control.CollectErrors as CE
import Control.CollectErrors
( CollectErrors(getMaybeValue), CanBeErrors )
import qualified Numeric.CollectErrors as CN
import AERN2.Norm
import AERN2.MP.Dyadic (Dyadic)
import AERN2.MP.Float (MPFloat)
import AERN2.MP.Precision
import AERN2.MP.Ball.Type
import AERN2.MP.Ball.Conversions ()
instance HasEqAsymmetric MPBall MPBall where
type EqCompareType MPBall MPBall = Kleenean
MPBall
b1 equalTo :: MPBall -> MPBall -> EqCompareType MPBall MPBall
`equalTo` MPBall
b2 = MPBall
b1 MPBall -> MPBall -> OrderCompareType MPBall MPBall
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
>= MPBall
b2 Kleenean -> Kleenean -> AndOrType Kleenean Kleenean
forall a b. CanAndOrAsymmetric a b => a -> b -> AndOrType a b
&& MPBall
b1 MPBall -> MPBall -> OrderCompareType MPBall MPBall
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
<= MPBall
b2
instance HasEqAsymmetric MPBall Integer where
type EqCompareType MPBall Integer = Kleenean
MPBall
b1 equalTo :: MPBall -> Integer -> EqCompareType MPBall Integer
`equalTo` Integer
b2 = MPBall
b1 MPBall -> Integer -> OrderCompareType MPBall Integer
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
>= Integer
b2 Kleenean -> Kleenean -> AndOrType Kleenean Kleenean
forall a b. CanAndOrAsymmetric a b => a -> b -> AndOrType a b
&& MPBall
b1 MPBall -> Integer -> OrderCompareType MPBall Integer
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
<= Integer
b2
instance HasEqAsymmetric Integer MPBall where
type EqCompareType Integer MPBall = Kleenean
Integer
b1 equalTo :: Integer -> MPBall -> EqCompareType Integer MPBall
`equalTo` MPBall
b2 = Integer
b1 Integer -> MPBall -> OrderCompareType Integer MPBall
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
>= MPBall
b2 Kleenean -> Kleenean -> AndOrType Kleenean Kleenean
forall a b. CanAndOrAsymmetric a b => a -> b -> AndOrType a b
&& Integer
b1 Integer -> MPBall -> OrderCompareType Integer MPBall
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
<= MPBall
b2
instance HasEqAsymmetric MPBall Int where
type EqCompareType MPBall Int = Kleenean
MPBall
b1 equalTo :: MPBall -> Int -> EqCompareType MPBall Int
`equalTo` Int
b2 = MPBall
b1 MPBall -> Int -> OrderCompareType MPBall Int
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
>= Int
b2 Kleenean -> Kleenean -> AndOrType Kleenean Kleenean
forall a b. CanAndOrAsymmetric a b => a -> b -> AndOrType a b
&& MPBall
b1 MPBall -> Int -> OrderCompareType MPBall Int
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
<= Int
b2
instance HasEqAsymmetric Int MPBall where
type EqCompareType Int MPBall = Kleenean
Int
b1 equalTo :: Int -> MPBall -> EqCompareType Int MPBall
`equalTo` MPBall
b2 = Int
b1 Int -> MPBall -> OrderCompareType Int MPBall
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
>= MPBall
b2 Kleenean -> Kleenean -> AndOrType Kleenean Kleenean
forall a b. CanAndOrAsymmetric a b => a -> b -> AndOrType a b
&& Int
b1 Int -> MPBall -> OrderCompareType Int MPBall
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
<= MPBall
b2
instance HasEqAsymmetric MPBall Rational where
type EqCompareType MPBall Rational = Kleenean
MPBall
b1 equalTo :: MPBall -> Rational -> EqCompareType MPBall Rational
`equalTo` Rational
b2 = MPBall
b1 MPBall -> Rational -> OrderCompareType MPBall Rational
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
>= Rational
b2 Kleenean -> Kleenean -> AndOrType Kleenean Kleenean
forall a b. CanAndOrAsymmetric a b => a -> b -> AndOrType a b
&& MPBall
b1 MPBall -> Rational -> OrderCompareType MPBall Rational
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
<= Rational
b2
instance HasEqAsymmetric Rational MPBall where
type EqCompareType Rational MPBall = Kleenean
Rational
b1 equalTo :: Rational -> MPBall -> EqCompareType Rational MPBall
`equalTo` MPBall
b2 = Rational
b1 Rational -> MPBall -> OrderCompareType Rational MPBall
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
>= MPBall
b2 Kleenean -> Kleenean -> AndOrType Kleenean Kleenean
forall a b. CanAndOrAsymmetric a b => a -> b -> AndOrType a b
&& Rational
b1 Rational -> MPBall -> OrderCompareType Rational MPBall
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
<= MPBall
b2
instance HasEqAsymmetric MPBall Dyadic where
type EqCompareType MPBall Dyadic = Kleenean
MPBall
b1 equalTo :: MPBall -> Dyadic -> EqCompareType MPBall Dyadic
`equalTo` Dyadic
b2 = MPBall
b1 MPBall -> Dyadic -> OrderCompareType MPBall Dyadic
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
>= Dyadic
b2 Kleenean -> Kleenean -> AndOrType Kleenean Kleenean
forall a b. CanAndOrAsymmetric a b => a -> b -> AndOrType a b
&& MPBall
b1 MPBall -> Dyadic -> OrderCompareType MPBall Dyadic
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
<= Dyadic
b2
instance HasEqAsymmetric Dyadic MPBall where
type EqCompareType Dyadic MPBall = Kleenean
Dyadic
b1 equalTo :: Dyadic -> MPBall -> EqCompareType Dyadic MPBall
`equalTo` MPBall
b2 = Dyadic
b1 Dyadic -> MPBall -> OrderCompareType Dyadic MPBall
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
>= MPBall
b2 Kleenean -> Kleenean -> AndOrType Kleenean Kleenean
forall a b. CanAndOrAsymmetric a b => a -> b -> AndOrType a b
&& Dyadic
b1 Dyadic -> MPBall -> OrderCompareType Dyadic MPBall
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
<= MPBall
b2
instance
(HasEqAsymmetric MPBall b
, IsBool (EqCompareType MPBall b)
, CanBeErrors es)
=>
HasEqAsymmetric MPBall (CollectErrors es b)
where
type EqCompareType MPBall (CollectErrors es b) =
CollectErrors es (EqCompareType MPBall b)
equalTo :: MPBall
-> CollectErrors es b -> EqCompareType MPBall (CollectErrors es b)
equalTo = (MPBall -> b -> EqCompareType MPBall b)
-> MPBall
-> CollectErrors es b
-> CollectErrors es (EqCompareType MPBall b)
forall es a b c.
Monoid es =>
(a -> b -> c) -> a -> CollectErrors es b -> CollectErrors es c
CE.liftT1 MPBall -> b -> EqCompareType MPBall b
forall a b. HasEqAsymmetric a b => a -> b -> EqCompareType a b
equalTo
instance
(HasEqAsymmetric a MPBall
, IsBool (EqCompareType a MPBall)
, CanBeErrors es)
=>
HasEqAsymmetric (CollectErrors es a) MPBall
where
type EqCompareType (CollectErrors es a) MPBall =
CollectErrors es (EqCompareType a MPBall)
equalTo :: CollectErrors es a
-> MPBall -> EqCompareType (CollectErrors es a) MPBall
equalTo = (a -> MPBall -> EqCompareType a MPBall)
-> CollectErrors es a
-> MPBall
-> CollectErrors es (EqCompareType a MPBall)
forall es a b c.
Monoid es =>
(a -> b -> c) -> CollectErrors es a -> b -> CollectErrors es c
CE.lift1T a -> MPBall -> EqCompareType a MPBall
forall a b. HasEqAsymmetric a b => a -> b -> EqCompareType a b
equalTo
instance HasOrderAsymmetric MPBall MPBall where
type OrderCompareType MPBall MPBall = Kleenean
lessThan :: MPBall -> MPBall -> OrderCompareType MPBall MPBall
lessThan MPBall
b1 MPBall
b2
| MPFloat
r1 MPFloat -> MPFloat -> OrderCompareType MPFloat MPFloat
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
< MPFloat
l2 = Kleenean
OrderCompareType MPBall MPBall
CertainTrue
| MPFloat
r2 MPFloat -> MPFloat -> OrderCompareType MPFloat MPFloat
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
<= MPFloat
l1 = Kleenean
OrderCompareType MPBall MPBall
CertainFalse
| Bool
otherwise = Kleenean
OrderCompareType MPBall MPBall
TrueOrFalse
where
(MPFloat
l1, MPFloat
r1) = MPBall -> (IntervalEndpoint MPBall, IntervalEndpoint MPBall)
forall i.
IsInterval i =>
i -> (IntervalEndpoint i, IntervalEndpoint i)
endpoints MPBall
b1
(MPFloat
l2, MPFloat
r2) = MPBall -> (IntervalEndpoint MPBall, IntervalEndpoint MPBall)
forall i.
IsInterval i =>
i -> (IntervalEndpoint i, IntervalEndpoint i)
endpoints MPBall
b2
leq :: MPBall -> MPBall -> OrderCompareType MPBall MPBall
leq MPBall
b1 MPBall
b2
| MPFloat
r1 MPFloat -> MPFloat -> OrderCompareType MPFloat MPFloat
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
<= MPFloat
l2 = Kleenean
OrderCompareType MPBall MPBall
CertainTrue
| MPFloat
r2 MPFloat -> MPFloat -> OrderCompareType MPFloat MPFloat
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
< MPFloat
l1 = Kleenean
OrderCompareType MPBall MPBall
CertainFalse
| Bool
otherwise = Kleenean
OrderCompareType MPBall MPBall
TrueOrFalse
where
(MPFloat
l1, MPFloat
r1) = MPBall -> (IntervalEndpoint MPBall, IntervalEndpoint MPBall)
forall i.
IsInterval i =>
i -> (IntervalEndpoint i, IntervalEndpoint i)
endpoints MPBall
b1
(MPFloat
l2, MPFloat
r2) = MPBall -> (IntervalEndpoint MPBall, IntervalEndpoint MPBall)
forall i.
IsInterval i =>
i -> (IntervalEndpoint i, IntervalEndpoint i)
endpoints MPBall
b2
instance HasOrderAsymmetric Integer MPBall where
type OrderCompareType Integer MPBall = Kleenean
lessThan :: Integer -> MPBall -> OrderCompareType Integer MPBall
lessThan = (MPBall -> MPBall -> Kleenean) -> Integer -> MPBall -> Kleenean
forall a b c.
ConvertibleExactly a b =>
(b -> b -> c) -> a -> b -> c
convertFirst MPBall -> MPBall -> Kleenean
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
lessThan
leq :: Integer -> MPBall -> OrderCompareType Integer MPBall
leq = (MPBall -> MPBall -> Kleenean) -> Integer -> MPBall -> Kleenean
forall a b c.
ConvertibleExactly a b =>
(b -> b -> c) -> a -> b -> c
convertFirst MPBall -> MPBall -> Kleenean
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
leq
instance HasOrderAsymmetric MPBall Integer where
type OrderCompareType MPBall Integer = Kleenean
lessThan :: MPBall -> Integer -> OrderCompareType MPBall Integer
lessThan = (MPBall -> MPBall -> Kleenean) -> MPBall -> Integer -> Kleenean
forall b a c.
ConvertibleExactly b a =>
(a -> a -> c) -> a -> b -> c
convertSecond MPBall -> MPBall -> Kleenean
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
lessThan
leq :: MPBall -> Integer -> OrderCompareType MPBall Integer
leq = (MPBall -> MPBall -> Kleenean) -> MPBall -> Integer -> Kleenean
forall b a c.
ConvertibleExactly b a =>
(a -> a -> c) -> a -> b -> c
convertSecond MPBall -> MPBall -> Kleenean
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
leq
instance HasOrderAsymmetric Int MPBall where
type OrderCompareType Int MPBall = Kleenean
lessThan :: Int -> MPBall -> OrderCompareType Int MPBall
lessThan = (MPBall -> MPBall -> Kleenean) -> Int -> MPBall -> Kleenean
forall a b c.
ConvertibleExactly a b =>
(b -> b -> c) -> a -> b -> c
convertFirst MPBall -> MPBall -> Kleenean
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
lessThan
leq :: Int -> MPBall -> OrderCompareType Int MPBall
leq = (MPBall -> MPBall -> Kleenean) -> Int -> MPBall -> Kleenean
forall a b c.
ConvertibleExactly a b =>
(b -> b -> c) -> a -> b -> c
convertFirst MPBall -> MPBall -> Kleenean
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
leq
instance HasOrderAsymmetric MPBall Int where
type OrderCompareType MPBall Int = Kleenean
lessThan :: MPBall -> Int -> OrderCompareType MPBall Int
lessThan = (MPBall -> MPBall -> Kleenean) -> MPBall -> Int -> Kleenean
forall b a c.
ConvertibleExactly b a =>
(a -> a -> c) -> a -> b -> c
convertSecond MPBall -> MPBall -> Kleenean
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
lessThan
leq :: MPBall -> Int -> OrderCompareType MPBall Int
leq = (MPBall -> MPBall -> Kleenean) -> MPBall -> Int -> Kleenean
forall b a c.
ConvertibleExactly b a =>
(a -> a -> c) -> a -> b -> c
convertSecond MPBall -> MPBall -> Kleenean
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
leq
instance HasOrderAsymmetric Dyadic MPBall where
type OrderCompareType Dyadic MPBall = Kleenean
lessThan :: Dyadic -> MPBall -> OrderCompareType Dyadic MPBall
lessThan = (MPBall -> MPBall -> Kleenean) -> Dyadic -> MPBall -> Kleenean
forall a b c.
ConvertibleExactly a b =>
(b -> b -> c) -> a -> b -> c
convertFirst MPBall -> MPBall -> Kleenean
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
lessThan
leq :: Dyadic -> MPBall -> OrderCompareType Dyadic MPBall
leq = (MPBall -> MPBall -> Kleenean) -> Dyadic -> MPBall -> Kleenean
forall a b c.
ConvertibleExactly a b =>
(b -> b -> c) -> a -> b -> c
convertFirst MPBall -> MPBall -> Kleenean
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
leq
instance HasOrderAsymmetric MPBall Dyadic where
type OrderCompareType MPBall Dyadic = Kleenean
lessThan :: MPBall -> Dyadic -> OrderCompareType MPBall Dyadic
lessThan = (MPBall -> MPBall -> Kleenean) -> MPBall -> Dyadic -> Kleenean
forall b a c.
ConvertibleExactly b a =>
(a -> a -> c) -> a -> b -> c
convertSecond MPBall -> MPBall -> Kleenean
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
lessThan
leq :: MPBall -> Dyadic -> OrderCompareType MPBall Dyadic
leq = (MPBall -> MPBall -> Kleenean) -> MPBall -> Dyadic -> Kleenean
forall b a c.
ConvertibleExactly b a =>
(a -> a -> c) -> a -> b -> c
convertSecond MPBall -> MPBall -> Kleenean
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
leq
instance HasOrderAsymmetric MPBall Rational where
type OrderCompareType MPBall Rational = Kleenean
lessThan :: MPBall -> Rational -> OrderCompareType MPBall Rational
lessThan MPBall
b1 Rational
q2
| MPFloat
r1 MPFloat -> Rational -> OrderCompareType MPFloat Rational
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
< Rational
l2 = Kleenean
OrderCompareType MPBall Rational
CertainTrue
| Rational
r2 Rational -> MPFloat -> OrderCompareType Rational MPFloat
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
<= MPFloat
l1 = Kleenean
OrderCompareType MPBall Rational
CertainFalse
| Bool
otherwise = Kleenean
OrderCompareType MPBall Rational
TrueOrFalse
where
(MPFloat
l1, MPFloat
r1) = MPBall -> (IntervalEndpoint MPBall, IntervalEndpoint MPBall)
forall i.
IsInterval i =>
i -> (IntervalEndpoint i, IntervalEndpoint i)
endpoints MPBall
b1
l2 :: Rational
l2 = Rational
q2
r2 :: Rational
r2 = Rational
q2
leq :: MPBall -> Rational -> OrderCompareType MPBall Rational
leq MPBall
b1 Rational
q2
| MPFloat
r1 MPFloat -> Rational -> OrderCompareType MPFloat Rational
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
<= Rational
l2 = Kleenean
OrderCompareType MPBall Rational
CertainTrue
| Rational
r2 Rational -> MPFloat -> OrderCompareType Rational MPFloat
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
< MPFloat
l1 = Kleenean
OrderCompareType MPBall Rational
CertainFalse
| Bool
otherwise = Kleenean
OrderCompareType MPBall Rational
TrueOrFalse
where
(MPFloat
l1, MPFloat
r1) = MPBall -> (IntervalEndpoint MPBall, IntervalEndpoint MPBall)
forall i.
IsInterval i =>
i -> (IntervalEndpoint i, IntervalEndpoint i)
endpoints MPBall
b1
l2 :: Rational
l2 = Rational
q2
r2 :: Rational
r2 = Rational
q2
instance HasOrderAsymmetric Rational MPBall where
type OrderCompareType Rational MPBall = Kleenean
lessThan :: Rational -> MPBall -> OrderCompareType Rational MPBall
lessThan Rational
q1 MPBall
b2
| Rational
r1 Rational -> MPFloat -> OrderCompareType Rational MPFloat
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
< MPFloat
l2 = Kleenean
OrderCompareType Rational MPBall
CertainTrue
| MPFloat
r2 MPFloat -> Rational -> OrderCompareType MPFloat Rational
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
<= Rational
l1 = Kleenean
OrderCompareType Rational MPBall
CertainFalse
| Bool
otherwise = Kleenean
OrderCompareType Rational MPBall
TrueOrFalse
where
(MPFloat
l2, MPFloat
r2) = MPBall -> (IntervalEndpoint MPBall, IntervalEndpoint MPBall)
forall i.
IsInterval i =>
i -> (IntervalEndpoint i, IntervalEndpoint i)
endpoints MPBall
b2
l1 :: Rational
l1 = Rational
q1
r1 :: Rational
r1 = Rational
q1
leq :: Rational -> MPBall -> OrderCompareType Rational MPBall
leq Rational
q1 MPBall
b2
| Rational
r1 Rational -> MPFloat -> OrderCompareType Rational MPFloat
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
<= MPFloat
l2 = Kleenean
OrderCompareType Rational MPBall
CertainTrue
| MPFloat
r2 MPFloat -> Rational -> OrderCompareType MPFloat Rational
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
< Rational
l1 = Kleenean
OrderCompareType Rational MPBall
CertainFalse
| Bool
otherwise = Kleenean
OrderCompareType Rational MPBall
TrueOrFalse
where
(MPFloat
l2, MPFloat
r2) = MPBall -> (IntervalEndpoint MPBall, IntervalEndpoint MPBall)
forall i.
IsInterval i =>
i -> (IntervalEndpoint i, IntervalEndpoint i)
endpoints MPBall
b2
l1 :: Rational
l1 = Rational
q1
r1 :: Rational
r1 = Rational
q1
instance
(HasOrderAsymmetric MPBall b
, IsBool (OrderCompareType MPBall b)
, CanBeErrors es)
=>
HasOrderAsymmetric MPBall (CollectErrors es b)
where
type OrderCompareType MPBall (CollectErrors es b) =
CollectErrors es (OrderCompareType MPBall b)
lessThan :: MPBall
-> CollectErrors es b
-> OrderCompareType MPBall (CollectErrors es b)
lessThan = (MPBall -> b -> OrderCompareType MPBall b)
-> MPBall
-> CollectErrors es b
-> CollectErrors es (OrderCompareType MPBall b)
forall es a b c.
Monoid es =>
(a -> b -> c) -> a -> CollectErrors es b -> CollectErrors es c
CE.liftT1 MPBall -> b -> OrderCompareType MPBall b
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
lessThan
leq :: MPBall
-> CollectErrors es b
-> OrderCompareType MPBall (CollectErrors es b)
leq = (MPBall -> b -> OrderCompareType MPBall b)
-> MPBall
-> CollectErrors es b
-> CollectErrors es (OrderCompareType MPBall b)
forall es a b c.
Monoid es =>
(a -> b -> c) -> a -> CollectErrors es b -> CollectErrors es c
CE.liftT1 MPBall -> b -> OrderCompareType MPBall b
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
leq
greaterThan :: MPBall
-> CollectErrors es b
-> OrderCompareType MPBall (CollectErrors es b)
greaterThan = (MPBall -> b -> OrderCompareType MPBall b)
-> MPBall
-> CollectErrors es b
-> CollectErrors es (OrderCompareType MPBall b)
forall es a b c.
Monoid es =>
(a -> b -> c) -> a -> CollectErrors es b -> CollectErrors es c
CE.liftT1 MPBall -> b -> OrderCompareType MPBall b
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
greaterThan
geq :: MPBall
-> CollectErrors es b
-> OrderCompareType MPBall (CollectErrors es b)
geq = (MPBall -> b -> OrderCompareType MPBall b)
-> MPBall
-> CollectErrors es b
-> CollectErrors es (OrderCompareType MPBall b)
forall es a b c.
Monoid es =>
(a -> b -> c) -> a -> CollectErrors es b -> CollectErrors es c
CE.liftT1 MPBall -> b -> OrderCompareType MPBall b
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
geq
instance
(HasOrderAsymmetric a MPBall
, IsBool (OrderCompareType a MPBall)
, CanBeErrors es)
=>
HasOrderAsymmetric (CollectErrors es a) MPBall
where
type OrderCompareType (CollectErrors es a) MPBall =
CollectErrors es (OrderCompareType a MPBall)
lessThan :: CollectErrors es a
-> MPBall -> OrderCompareType (CollectErrors es a) MPBall
lessThan = (a -> MPBall -> OrderCompareType a MPBall)
-> CollectErrors es a
-> MPBall
-> CollectErrors es (OrderCompareType a MPBall)
forall es a b c.
Monoid es =>
(a -> b -> c) -> CollectErrors es a -> b -> CollectErrors es c
CE.lift1T a -> MPBall -> OrderCompareType a MPBall
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
lessThan
leq :: CollectErrors es a
-> MPBall -> OrderCompareType (CollectErrors es a) MPBall
leq = (a -> MPBall -> OrderCompareType a MPBall)
-> CollectErrors es a
-> MPBall
-> CollectErrors es (OrderCompareType a MPBall)
forall es a b c.
Monoid es =>
(a -> b -> c) -> CollectErrors es a -> b -> CollectErrors es c
CE.lift1T a -> MPBall -> OrderCompareType a MPBall
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
leq
greaterThan :: CollectErrors es a
-> MPBall -> OrderCompareType (CollectErrors es a) MPBall
greaterThan = (a -> MPBall -> OrderCompareType a MPBall)
-> CollectErrors es a
-> MPBall
-> CollectErrors es (OrderCompareType a MPBall)
forall es a b c.
Monoid es =>
(a -> b -> c) -> CollectErrors es a -> b -> CollectErrors es c
CE.lift1T a -> MPBall -> OrderCompareType a MPBall
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
greaterThan
geq :: CollectErrors es a
-> MPBall -> OrderCompareType (CollectErrors es a) MPBall
geq = (a -> MPBall -> OrderCompareType a MPBall)
-> CollectErrors es a
-> MPBall
-> CollectErrors es (OrderCompareType a MPBall)
forall es a b c.
Monoid es =>
(a -> b -> c) -> CollectErrors es a -> b -> CollectErrors es c
CE.lift1T a -> MPBall -> OrderCompareType a MPBall
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
geq
instance CanTestZero MPBall
instance CanTestPosNeg MPBall
instance CanTestInteger MPBall where
certainlyNotInteger :: MPBall -> Bool
certainlyNotInteger MPBall
b =
(Integer
rN Integer -> Integer -> SubType Integer Integer
forall t1 t2. CanSub t1 t2 => t1 -> t2 -> SubType t1 t2
- Integer
lN) Integer -> Integer -> EqCompareType Integer Integer
forall a b. HasEqAsymmetric a b => a -> b -> EqCompareType a b
== Integer
1 Bool -> Bool -> AndOrType Bool Bool
forall a b. CanAndOrAsymmetric a b => a -> b -> AndOrType a b
&& Integer
lN Integer -> MPBall -> Bool
forall a b. HasOrderCertainlyAsymmetric a b => a -> b -> Bool
!<! MPBall
b Bool -> Bool -> AndOrType Bool Bool
forall a b. CanAndOrAsymmetric a b => a -> b -> AndOrType a b
&& MPBall
b MPBall -> Integer -> Bool
forall a b. HasOrderCertainlyAsymmetric a b => a -> b -> Bool
!<! Integer
rN
where
(Integer
lN, Integer
rN) = MPBall -> (Integer, Integer)
forall t. HasIntegerBounds t => t -> (Integer, Integer)
integerBounds MPBall
b
certainlyIntegerGetIt :: MPBall -> Maybe Integer
certainlyIntegerGetIt MPBall
b
| Integer
rN Integer -> Integer -> EqCompareType Integer Integer
forall a b. HasEqAsymmetric a b => a -> b -> EqCompareType a b
== Integer
lN = Integer -> Maybe Integer
forall a. a -> Maybe a
Just Integer
lN
| Bool
otherwise = Maybe Integer
forall a. Maybe a
Nothing
where
(Integer
lN, Integer
rN) = MPBall -> (Integer, Integer)
forall t. HasIntegerBounds t => t -> (Integer, Integer)
integerBounds MPBall
b
instance CanMinMaxAsymmetric MPBall MPBall where
min :: MPBall -> MPBall -> MinMaxType MPBall MPBall
min = (MPFloat -> MPFloat -> MPFloat) -> MPBall -> MPBall -> MPBall
byEndpointsMP MPFloat -> MPFloat -> MPFloat
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
min
max :: MPBall -> MPBall -> MinMaxType MPBall MPBall
max = (MPFloat -> MPFloat -> MPFloat) -> MPBall -> MPBall -> MPBall
byEndpointsMP MPFloat -> MPFloat -> MPFloat
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
max
instance CanMinMaxAsymmetric MPBall Integer where
type MinMaxType MPBall Integer = MPBall
min :: MPBall -> Integer -> MinMaxType MPBall Integer
min = (MPBall -> MPBall -> MPBall) -> MPBall -> Integer -> MPBall
forall b a c.
ConvertibleExactly b a =>
(a -> a -> c) -> a -> b -> c
convertSecond MPBall -> MPBall -> MPBall
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
min
max :: MPBall -> Integer -> MinMaxType MPBall Integer
max = (MPBall -> MPBall -> MPBall) -> MPBall -> Integer -> MPBall
forall b a c.
ConvertibleExactly b a =>
(a -> a -> c) -> a -> b -> c
convertSecond MPBall -> MPBall -> MPBall
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
max
instance CanMinMaxAsymmetric Integer MPBall where
type MinMaxType Integer MPBall = MPBall
min :: Integer -> MPBall -> MinMaxType Integer MPBall
min = (MPBall -> MPBall -> MPBall) -> Integer -> MPBall -> MPBall
forall a b c.
ConvertibleExactly a b =>
(b -> b -> c) -> a -> b -> c
convertFirst MPBall -> MPBall -> MPBall
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
min
max :: Integer -> MPBall -> MinMaxType Integer MPBall
max = (MPBall -> MPBall -> MPBall) -> Integer -> MPBall -> MPBall
forall a b c.
ConvertibleExactly a b =>
(b -> b -> c) -> a -> b -> c
convertFirst MPBall -> MPBall -> MPBall
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
max
instance CanMinMaxAsymmetric MPBall Int where
type MinMaxType MPBall Int = MPBall
min :: MPBall -> Int -> MinMaxType MPBall Int
min = (MPBall -> MPBall -> MPBall) -> MPBall -> Int -> MPBall
forall b a c.
ConvertibleExactly b a =>
(a -> a -> c) -> a -> b -> c
convertSecond MPBall -> MPBall -> MPBall
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
min
max :: MPBall -> Int -> MinMaxType MPBall Int
max = (MPBall -> MPBall -> MPBall) -> MPBall -> Int -> MPBall
forall b a c.
ConvertibleExactly b a =>
(a -> a -> c) -> a -> b -> c
convertSecond MPBall -> MPBall -> MPBall
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
max
instance CanMinMaxAsymmetric Int MPBall where
type MinMaxType Int MPBall = MPBall
min :: Int -> MPBall -> MinMaxType Int MPBall
min = (MPBall -> MPBall -> MPBall) -> Int -> MPBall -> MPBall
forall a b c.
ConvertibleExactly a b =>
(b -> b -> c) -> a -> b -> c
convertFirst MPBall -> MPBall -> MPBall
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
min
max :: Int -> MPBall -> MinMaxType Int MPBall
max = (MPBall -> MPBall -> MPBall) -> Int -> MPBall -> MPBall
forall a b c.
ConvertibleExactly a b =>
(b -> b -> c) -> a -> b -> c
convertFirst MPBall -> MPBall -> MPBall
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
max
instance CanMinMaxAsymmetric MPBall Dyadic where
type MinMaxType MPBall Dyadic = MPBall
min :: MPBall -> Dyadic -> MinMaxType MPBall Dyadic
min = (MPBall -> MPBall -> MPBall) -> MPBall -> Dyadic -> MPBall
forall b a c.
ConvertibleExactly b a =>
(a -> a -> c) -> a -> b -> c
convertSecond MPBall -> MPBall -> MPBall
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
min
max :: MPBall -> Dyadic -> MinMaxType MPBall Dyadic
max = (MPBall -> MPBall -> MPBall) -> MPBall -> Dyadic -> MPBall
forall b a c.
ConvertibleExactly b a =>
(a -> a -> c) -> a -> b -> c
convertSecond MPBall -> MPBall -> MPBall
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
max
instance CanMinMaxAsymmetric Dyadic MPBall where
type MinMaxType Dyadic MPBall = MPBall
min :: Dyadic -> MPBall -> MinMaxType Dyadic MPBall
min = (MPBall -> MPBall -> MPBall) -> Dyadic -> MPBall -> MPBall
forall a b c.
ConvertibleExactly a b =>
(b -> b -> c) -> a -> b -> c
convertFirst MPBall -> MPBall -> MPBall
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
min
max :: Dyadic -> MPBall -> MinMaxType Dyadic MPBall
max = (MPBall -> MPBall -> MPBall) -> Dyadic -> MPBall -> MPBall
forall a b c.
ConvertibleExactly a b =>
(b -> b -> c) -> a -> b -> c
convertFirst MPBall -> MPBall -> MPBall
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
max
instance CanMinMaxAsymmetric MPBall Rational where
type MinMaxType MPBall Rational = MPBall
min :: MPBall -> Rational -> MinMaxType MPBall Rational
min = (MPBall -> MPBall -> MPBall) -> MPBall -> Rational -> MPBall
forall t2 t1 c.
(ConvertibleWithPrecision t2 t1, HasPrecision t1) =>
(t1 -> t1 -> c) -> t1 -> t2 -> c
convertPSecond MPBall -> MPBall -> MPBall
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
min
max :: MPBall -> Rational -> MinMaxType MPBall Rational
max = (MPBall -> MPBall -> MPBall) -> MPBall -> Rational -> MPBall
forall t2 t1 c.
(ConvertibleWithPrecision t2 t1, HasPrecision t1) =>
(t1 -> t1 -> c) -> t1 -> t2 -> c
convertPSecond MPBall -> MPBall -> MPBall
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
max
instance CanMinMaxAsymmetric Rational MPBall where
type MinMaxType Rational MPBall = MPBall
min :: Rational -> MPBall -> MinMaxType Rational MPBall
min = (MPBall -> MPBall -> MPBall) -> Rational -> MPBall -> MPBall
forall t1 t2 c.
(ConvertibleWithPrecision t1 t2, HasPrecision t2) =>
(t2 -> t2 -> c) -> t1 -> t2 -> c
convertPFirst MPBall -> MPBall -> MPBall
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
min
max :: Rational -> MPBall -> MinMaxType Rational MPBall
max = (MPBall -> MPBall -> MPBall) -> Rational -> MPBall -> MPBall
forall t1 t2 c.
(ConvertibleWithPrecision t1 t2, HasPrecision t2) =>
(t2 -> t2 -> c) -> t1 -> t2 -> c
convertPFirst MPBall -> MPBall -> MPBall
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
max
instance
(CanMinMaxAsymmetric MPBall b
, CanBeErrors es)
=>
CanMinMaxAsymmetric MPBall (CollectErrors es b)
where
type MinMaxType MPBall (CollectErrors es b) =
CollectErrors es (MinMaxType MPBall b)
min :: MPBall
-> CollectErrors es b -> MinMaxType MPBall (CollectErrors es b)
min = (MPBall -> b -> MinMaxType MPBall b)
-> MPBall
-> CollectErrors es b
-> CollectErrors es (MinMaxType MPBall b)
forall es a b c.
Monoid es =>
(a -> b -> c) -> a -> CollectErrors es b -> CollectErrors es c
CE.liftT1 MPBall -> b -> MinMaxType MPBall b
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
min
max :: MPBall
-> CollectErrors es b -> MinMaxType MPBall (CollectErrors es b)
max = (MPBall -> b -> MinMaxType MPBall b)
-> MPBall
-> CollectErrors es b
-> CollectErrors es (MinMaxType MPBall b)
forall es a b c.
Monoid es =>
(a -> b -> c) -> a -> CollectErrors es b -> CollectErrors es c
CE.liftT1 MPBall -> b -> MinMaxType MPBall b
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
max
instance
(CanMinMaxAsymmetric a MPBall
, CanBeErrors es)
=>
CanMinMaxAsymmetric (CollectErrors es a) MPBall
where
type MinMaxType (CollectErrors es a) MPBall =
CollectErrors es (MinMaxType a MPBall)
min :: CollectErrors es a
-> MPBall -> MinMaxType (CollectErrors es a) MPBall
min = (a -> MPBall -> MinMaxType a MPBall)
-> CollectErrors es a
-> MPBall
-> CollectErrors es (MinMaxType a MPBall)
forall es a b c.
Monoid es =>
(a -> b -> c) -> CollectErrors es a -> b -> CollectErrors es c
CE.lift1T a -> MPBall -> MinMaxType a MPBall
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
min
max :: CollectErrors es a
-> MPBall -> MinMaxType (CollectErrors es a) MPBall
max = (a -> MPBall -> MinMaxType a MPBall)
-> CollectErrors es a
-> MPBall
-> CollectErrors es (MinMaxType a MPBall)
forall es a b c.
Monoid es =>
(a -> b -> c) -> CollectErrors es a -> b -> CollectErrors es c
CE.lift1T a -> MPBall -> MinMaxType a MPBall
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
max
instance CanIntersectAsymmetric MPBall MPBall where
intersect :: MPBall -> MPBall -> IntersectionType MPBall MPBall
intersect MPBall
a MPBall
b
| MPFloat
MinMaxType MPFloat MPFloat
l MPFloat -> MPFloat -> OrderCompareType MPFloat MPFloat
forall a b.
HasOrderAsymmetric a b =>
a -> b -> OrderCompareType a b
> MPFloat
MinMaxType MPFloat MPFloat
r =
NumError -> CN MPBall
forall v. NumError -> CN v
CN.noValueNumErrorCertain (NumError -> CN MPBall) -> NumError -> CN MPBall
forall a b. (a -> b) -> a -> b
$ String -> NumError
CN.NumError (String -> NumError) -> String -> NumError
forall a b. (a -> b) -> a -> b
$ String
"intersect: empty intersection: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ MPBall -> String
forall a. Show a => a -> String
show MPBall
a String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"; " String -> String -> String
forall a. [a] -> [a] -> [a]
++ MPBall -> String
forall a. Show a => a -> String
show MPBall
b
| Bool
otherwise = MPBall -> CN MPBall
forall v. v -> CN v
cn (MPBall -> CN MPBall) -> MPBall -> CN MPBall
forall a b. (a -> b) -> a -> b
$ Precision -> MPBall -> MPBall
forall t. CanSetPrecision t => Precision -> t -> t
setPrecision Precision
p (MPBall -> MPBall) -> MPBall -> MPBall
forall a b. (a -> b) -> a -> b
$ MPFloat -> MPFloat -> MPBall
fromMPFloatEndpoints MPFloat
MinMaxType MPFloat MPFloat
l MPFloat
MinMaxType MPFloat MPFloat
r
where
p :: Precision
p = MPBall -> Precision
forall t. HasPrecision t => t -> Precision
getPrecision MPBall
a
l :: MinMaxType MPFloat MPFloat
l = MPFloat -> MPFloat -> MinMaxType MPFloat MPFloat
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
max MPFloat
aL MPFloat
bL
r :: MinMaxType MPFloat MPFloat
r = MPFloat -> MPFloat -> MinMaxType MPFloat MPFloat
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
min MPFloat
aR MPFloat
bR
(MPFloat
aL,MPFloat
aR) = MPBall -> (IntervalEndpoint MPBall, IntervalEndpoint MPBall)
forall i.
IsInterval i =>
i -> (IntervalEndpoint i, IntervalEndpoint i)
endpoints MPBall
a
(MPFloat
bL,MPFloat
bR) = MPBall -> (IntervalEndpoint MPBall, IntervalEndpoint MPBall)
forall i.
IsInterval i =>
i -> (IntervalEndpoint i, IntervalEndpoint i)
endpoints MPBall
b
intersectCNMPBall :: CN MPBall -> CN MPBall -> CN MPBall
intersectCNMPBall :: CN MPBall -> CN MPBall -> CN MPBall
intersectCNMPBall = CN MPBall -> CN MPBall -> CN MPBall
forall e1 e2.
CanIntersectAsymmetric e1 e2 =>
e1 -> e2 -> IntersectionType e1 e2
intersect
instance
(CanIntersectAsymmetric MPBall b
, CanBeErrors es)
=>
CanIntersectAsymmetric MPBall (CollectErrors es b)
where
type IntersectionType MPBall (CollectErrors es b) =
CollectErrors es (IntersectionType MPBall b)
intersect :: MPBall
-> CollectErrors es b
-> IntersectionType MPBall (CollectErrors es b)
intersect = (MPBall -> b -> IntersectionType MPBall b)
-> MPBall
-> CollectErrors es b
-> CollectErrors es (IntersectionType MPBall b)
forall es a b c.
Monoid es =>
(a -> b -> c) -> a -> CollectErrors es b -> CollectErrors es c
CE.liftT1 MPBall -> b -> IntersectionType MPBall b
forall e1 e2.
CanIntersectAsymmetric e1 e2 =>
e1 -> e2 -> IntersectionType e1 e2
intersect
instance
(CanIntersectAsymmetric a MPBall
, CanBeErrors es)
=>
CanIntersectAsymmetric (CollectErrors es a) MPBall
where
type IntersectionType (CollectErrors es a) MPBall =
CollectErrors es (IntersectionType a MPBall)
intersect :: CollectErrors es a
-> MPBall -> IntersectionType (CollectErrors es a) MPBall
intersect = (a -> MPBall -> IntersectionType a MPBall)
-> CollectErrors es a
-> MPBall
-> CollectErrors es (IntersectionType a MPBall)
forall es a b c.
Monoid es =>
(a -> b -> c) -> CollectErrors es a -> b -> CollectErrors es c
CE.lift1T a -> MPBall -> IntersectionType a MPBall
forall e1 e2.
CanIntersectAsymmetric e1 e2 =>
e1 -> e2 -> IntersectionType e1 e2
intersect
hullMPBall :: MPBall -> MPBall -> MPBall
hullMPBall :: MPBall -> MPBall -> MPBall
hullMPBall MPBall
a MPBall
b =
IntervalEndpoint MPBall -> IntervalEndpoint MPBall -> MPBall
forall i.
IsInterval i =>
IntervalEndpoint i -> IntervalEndpoint i -> i
fromEndpoints MinMaxType MPFloat MPFloat
IntervalEndpoint MPBall
rL MinMaxType MPFloat MPFloat
IntervalEndpoint MPBall
rR
where
rL :: MinMaxType MPFloat MPFloat
rL = MPFloat -> MPFloat -> MinMaxType MPFloat MPFloat
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
min MPFloat
aL MPFloat
bL
rR :: MinMaxType MPFloat MPFloat
rR = MPFloat -> MPFloat -> MinMaxType MPFloat MPFloat
forall t1 t2.
CanMinMaxAsymmetric t1 t2 =>
t1 -> t2 -> MinMaxType t1 t2
max MPFloat
aR MPFloat
bR
(MPFloat
aL,MPFloat
aR) = MPBall -> (IntervalEndpoint MPBall, IntervalEndpoint MPBall)
forall i.
IsInterval i =>
i -> (IntervalEndpoint i, IntervalEndpoint i)
endpoints MPBall
a
(MPFloat
bL,MPFloat
bR) = MPBall -> (IntervalEndpoint MPBall, IntervalEndpoint MPBall)
forall i.
IsInterval i =>
i -> (IntervalEndpoint i, IntervalEndpoint i)
endpoints MPBall
b
instance CanUnionAsymmetric MPBall MPBall where
union :: MPBall -> MPBall -> UnionType MPBall MPBall
union MPBall
a MPBall
b =
case CN MPBall -> Maybe MPBall
forall es v. CollectErrors es v -> Maybe v
getMaybeValue (MPBall
a MPBall -> MPBall -> IntersectionType MPBall MPBall
forall e1 e2.
CanIntersectAsymmetric e1 e2 =>
e1 -> e2 -> IntersectionType e1 e2
`intersect` MPBall
b) of
Just MPBall
_ -> CN MPBall
UnionType MPBall MPBall
r
Maybe MPBall
_ -> NumError -> CN MPBall -> CN MPBall
forall t. NumError -> CN t -> CN t
CN.prependErrorCertain NumError
err CN MPBall
r
where
err :: NumError
err = String -> NumError
CN.NumError (String -> NumError) -> String -> NumError
forall a b. (a -> b) -> a -> b
$ String
"union of enclosures: not enclosing the same value"
r :: CN MPBall
r = MPBall -> CN MPBall
forall v. v -> CN v
cn (MPBall -> CN MPBall) -> MPBall -> CN MPBall
forall a b. (a -> b) -> a -> b
$ MPBall -> MPBall -> MPBall
hullMPBall MPBall
a MPBall
b
instance
(CanUnionAsymmetric MPBall b
, CanBeErrors es)
=>
CanUnionAsymmetric MPBall (CollectErrors es b)
where
type UnionType MPBall (CollectErrors es b) =
CollectErrors es (UnionType MPBall b)
union :: MPBall
-> CollectErrors es b -> UnionType MPBall (CollectErrors es b)
union = (MPBall -> b -> UnionType MPBall b)
-> MPBall
-> CollectErrors es b
-> CollectErrors es (UnionType MPBall b)
forall es a b c.
Monoid es =>
(a -> b -> c) -> a -> CollectErrors es b -> CollectErrors es c
CE.liftT1 MPBall -> b -> UnionType MPBall b
forall e1 e2.
CanUnionAsymmetric e1 e2 =>
e1 -> e2 -> UnionType e1 e2
union
instance
(CanUnionAsymmetric a MPBall
, CanBeErrors es)
=>
CanUnionAsymmetric (CollectErrors es a) MPBall
where
type UnionType (CollectErrors es a) MPBall =
CollectErrors es (UnionType a MPBall)
union :: CollectErrors es a
-> MPBall -> UnionType (CollectErrors es a) MPBall
union = (a -> MPBall -> UnionType a MPBall)
-> CollectErrors es a
-> MPBall
-> CollectErrors es (UnionType a MPBall)
forall es a b c.
Monoid es =>
(a -> b -> c) -> CollectErrors es a -> b -> CollectErrors es c
CE.lift1T a -> MPBall -> UnionType a MPBall
forall e1 e2.
CanUnionAsymmetric e1 e2 =>
e1 -> e2 -> UnionType e1 e2
union
byEndpointsMP ::
(MPFloat -> MPFloat -> MPFloat) ->
(MPBall -> MPBall -> MPBall)
byEndpointsMP :: (MPFloat -> MPFloat -> MPFloat) -> MPBall -> MPBall -> MPBall
byEndpointsMP MPFloat -> MPFloat -> MPFloat
op MPBall
b1 MPBall
b2 =
IntervalEndpoint MPBall -> IntervalEndpoint MPBall -> MPBall
forall i.
IsInterval i =>
IntervalEndpoint i -> IntervalEndpoint i -> i
fromEndpoints (MPFloat
l1 MPFloat -> MPFloat -> MPFloat
`op` MPFloat
l2) (MPFloat
r1 MPFloat -> MPFloat -> MPFloat
`op` MPFloat
r2)
where
(MPFloat
l1,MPFloat
r1) = MPBall -> (IntervalEndpoint MPBall, IntervalEndpoint MPBall)
forall i.
IsInterval i =>
i -> (IntervalEndpoint i, IntervalEndpoint i)
endpoints MPBall
b1
(MPFloat
l2,MPFloat
r2) = MPBall -> (IntervalEndpoint MPBall, IntervalEndpoint MPBall)
forall i.
IsInterval i =>
i -> (IntervalEndpoint i, IntervalEndpoint i)
endpoints MPBall
b2