module Data.Array.Parallel.Prelude.Double (
Double,
(==), (/=), (<), (<=), (>), (>=), min, max,
minimumP, maximumP, minIndexP, maxIndexP,
(+), (), (*), negate, abs,
sumP, productP,
(/), recip,
pi, exp, sqrt, log, (**), logBase,
sin, tan, cos, asin, atan, acos,
sinh, tanh, cosh, asinh, atanh, acosh,
fromInt,
truncate, round, ceiling, floor,
) where
import Data.Array.Parallel.Prim ()
import Data.Array.Parallel.Prelude.Base
import Data.Array.Parallel.PArr
import Data.Array.Parallel.Lifted.Scalar
import Data.Array.Parallel.Lifted.Closure
import qualified Prelude as P
infixr 8 **
infixl 7 *, /
infixl 6 +,
infix 4 ==, /=, <, <=, >, >=
(==), (/=), (<), (<=), (>), (>=) :: Double -> Double -> Bool
(==) = (P.==)
(/=) = (P./=)
(<=) = (P.<=)
(<) = (P.<)
(>=) = (P.>=)
(>) = (P.>)
min, max :: Double -> Double -> Double
min = P.min
max = P.max
minimumP, maximumP :: PArr Double -> Double
minimumP a = a `indexPArr` 0
maximumP a = a `indexPArr` 0
minimumP_v, maximumP_v:: PArray Double :-> Double
minimumP_v = closure1 (scalar_fold1 P.min) (scalar_fold1s P.min)
maximumP_v = closure1 (scalar_fold1 P.max) (scalar_fold1s P.max)
minIndexP :: PArr Double -> Int
minIndexP _ = 0
minIndexPA :: PArray Double :-> Int
minIndexPA = closure1 (scalar_fold1Index min') (scalar_fold1sIndex min')
min' (i,x) (j,y) | x P.<= y = (i,x)
| P.otherwise = (j,y)
maxIndexP :: PArr Double -> Int
maxIndexP _ = 0
maxIndexPA :: PArray Double :-> Int
maxIndexPA = closure1 (scalar_fold1Index max') (scalar_fold1sIndex max')
max' (i,x) (j,y) | x P.>= y = (i,x)
| P.otherwise = (j,y)
(+), (), (*) :: Double -> Double -> Double
(+) = (P.+)
() = (P.-)
(*) = (P.*)
negate, abs :: Double -> Double
negate = P.negate
abs = P.abs
sumP, productP :: PArr Double -> Double
sumP a = a `indexPArr` 0
productP a = a `indexPArr` 0
sumP_v, productP_v:: PArray Double :-> Double
sumP_v = closure1 (scalar_fold (+) 0) (scalar_folds (+) 0)
productP_v = closure1 (scalar_fold (*) 1) (scalar_folds (*) 1)
(/) :: Double -> Double -> Double
(/) = (P./)
recip :: Double -> Double
recip = P.recip
pi :: Double
pi = P.pi
exp, sqrt, log, sin, tan, cos, asin, atan, acos, sinh, tanh, cosh,
asinh, atanh, acosh :: Double -> Double
exp = P.exp
sqrt = P.sqrt
log = P.log
sin = P.sin
tan = P.tan
cos = P.cos
asin = P.asin
atan = P.atan
acos = P.acos
sinh = P.sinh
tanh = P.tanh
cosh = P.cosh
asinh = P.asinh
atanh = P.atanh
acosh = P.acosh
(**), logBase :: Double -> Double -> Double
(**) = (P.**)
logBase = P.logBase
fromInt :: Int -> Double
fromInt = P.fromIntegral
truncate, round, ceiling, floor :: Double -> Int
truncate = P.truncate
round = P.round
ceiling = P.ceiling
floor = P.floor