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