{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE ViewPatterns #-}
module ArrayFire.Algorithm where
import Data.Word (Word32)
import Foreign.C.Types (CBool)
import ArrayFire.Arith (cast)
import ArrayFire.FFI
import ArrayFire.Internal.Algorithm
import ArrayFire.Internal.Types
sum
:: AFType a
=> Array a
-> Int
-> Array a
sum :: forall a. AFType a => Array a -> Int -> Array a
sum Array a
x (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) = (Array a
x Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
`op1` (\Ptr AFArray
p AFArray
a -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_sum Ptr AFArray
p AFArray
a CInt
n))
sumNaN
:: (Fractional a, AFType a)
=> Array a
-> Int
-> Double
-> Array a
sumNaN :: forall a.
(Fractional a, AFType a) =>
Array a -> Int -> Double -> Array a
sumNaN Array a
n (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
i) Double
d = (Array a
n Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
`op1` (\Ptr AFArray
p AFArray
a -> Ptr AFArray -> AFArray -> CInt -> Double -> IO AFErr
af_sum_nan Ptr AFArray
p AFArray
a CInt
i Double
d))
product
:: AFType a
=> Array a
-> Int
-> Array a
product :: forall a. AFType a => Array a -> Int -> Array a
product Array a
x (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) = (Array a
x Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
`op1` (\Ptr AFArray
p AFArray
a -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_product Ptr AFArray
p AFArray
a CInt
n))
productNaN
:: (AFType a, Fractional a)
=> Array a
-> Int
-> Double
-> Array a
productNaN :: forall a.
(AFType a, Fractional a) =>
Array a -> Int -> Double -> Array a
productNaN Array a
n (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
i) Double
d = Array a
n Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
`op1` (\Ptr AFArray
p AFArray
a -> Ptr AFArray -> AFArray -> CInt -> Double -> IO AFErr
af_product_nan Ptr AFArray
p AFArray
a CInt
i Double
d)
min
:: AFType a
=> Array a
-> Int
-> Array a
min :: forall a. AFType a => Array a -> Int -> Array a
min Array a
x (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) = Array a
x Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
`op1` (\Ptr AFArray
p AFArray
a -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_min Ptr AFArray
p AFArray
a CInt
n)
max
:: AFType a
=> Array a
-> Int
-> Array a
max :: forall a. AFType a => Array a -> Int -> Array a
max Array a
x (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) = Array a
x Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
`op1` (\Ptr AFArray
p AFArray
a -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_max Ptr AFArray
p AFArray
a CInt
n)
allTrue
:: AFType a
=> Array a
-> Int
-> Array CBool
allTrue :: forall a. AFType a => Array a -> Int -> Array CBool
allTrue Array a
x (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) =
Array a
x Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array CBool
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
`op1` (\Ptr AFArray
p AFArray
a -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_all_true Ptr AFArray
p AFArray
a CInt
n)
anyTrue
:: AFType a
=> Array a
-> Int
-> Array CBool
anyTrue :: forall a. AFType a => Array a -> Int -> Array CBool
anyTrue Array a
x (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) =
(Array a
x Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array CBool
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
`op1` (\Ptr AFArray
p AFArray
a -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_any_true Ptr AFArray
p AFArray
a CInt
n))
count
:: forall a . AFType a
=> Array a
-> Int
-> Array Int
count :: forall a. AFType a => Array a -> Int -> Array Int
count Array a
x (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) =
Array Word32 -> Array Int
forall a b. (AFType a, AFType b) => Array a -> Array b
cast (Array a
x Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array Word32
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
`op1` (\Ptr AFArray
p AFArray
a -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_count Ptr AFArray
p AFArray
a CInt
n) :: Array Word32)
sumAll
:: forall a . AFResult a
=> Array a
-> Scalar a
sumAll :: forall a. AFResult a => Array a -> Scalar a
sumAll = forall a. AFResult a => (Double, Double) -> Scalar a
toAFResult @a ((Double, Double) -> Scalar a)
-> (Array a -> (Double, Double)) -> Array a -> Scalar a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
`infoFromArray2` Ptr Double -> Ptr Double -> AFArray -> IO AFErr
af_sum_all)
sumNaNAll
:: forall a . (AFResult a, Fractional a)
=> Array a
-> Double
-> Scalar a
sumNaNAll :: forall a.
(AFResult a, Fractional a) =>
Array a -> Double -> Scalar a
sumNaNAll Array a
a Double
d = forall a. AFResult a => (Double, Double) -> Scalar a
toAFResult @a ((Double, Double) -> Scalar a) -> (Double, Double) -> Scalar a
forall a b. (a -> b) -> a -> b
$ Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
infoFromArray2 Array a
a (\Ptr Double
p Ptr Double
g AFArray
x -> Ptr Double -> Ptr Double -> AFArray -> Double -> IO AFErr
af_sum_nan_all Ptr Double
p Ptr Double
g AFArray
x Double
d)
productAll
:: forall a . AFResult a
=> Array a
-> Scalar a
productAll :: forall a. AFResult a => Array a -> Scalar a
productAll = forall a. AFResult a => (Double, Double) -> Scalar a
toAFResult @a ((Double, Double) -> Scalar a)
-> (Array a -> (Double, Double)) -> Array a -> Scalar a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
`infoFromArray2` Ptr Double -> Ptr Double -> AFArray -> IO AFErr
af_product_all)
productNaNAll
:: forall a . (AFResult a, Fractional a)
=> Array a
-> Double
-> Scalar a
productNaNAll :: forall a.
(AFResult a, Fractional a) =>
Array a -> Double -> Scalar a
productNaNAll Array a
a Double
d = forall a. AFResult a => (Double, Double) -> Scalar a
toAFResult @a ((Double, Double) -> Scalar a) -> (Double, Double) -> Scalar a
forall a b. (a -> b) -> a -> b
$ Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
infoFromArray2 Array a
a (\Ptr Double
p Ptr Double
x AFArray
y -> Ptr Double -> Ptr Double -> AFArray -> Double -> IO AFErr
af_product_nan_all Ptr Double
p Ptr Double
x AFArray
y Double
d)
minAll
:: forall a . AFResult a
=> Array a
-> Scalar a
minAll :: forall a. AFResult a => Array a -> Scalar a
minAll = forall a. AFResult a => (Double, Double) -> Scalar a
toAFResult @a ((Double, Double) -> Scalar a)
-> (Array a -> (Double, Double)) -> Array a -> Scalar a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
`infoFromArray2` Ptr Double -> Ptr Double -> AFArray -> IO AFErr
af_min_all)
maxAll
:: forall a . AFResult a
=> Array a
-> Scalar a
maxAll :: forall a. AFResult a => Array a -> Scalar a
maxAll = forall a. AFResult a => (Double, Double) -> Scalar a
toAFResult @a ((Double, Double) -> Scalar a)
-> (Array a -> (Double, Double)) -> Array a -> Scalar a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
`infoFromArray2` Ptr Double -> Ptr Double -> AFArray -> IO AFErr
af_max_all)
allTrueAll
:: forall a . AFResult a
=> Array a
-> Scalar a
allTrueAll :: forall a. AFResult a => Array a -> Scalar a
allTrueAll = forall a. AFResult a => (Double, Double) -> Scalar a
toAFResult @a ((Double, Double) -> Scalar a)
-> (Array a -> (Double, Double)) -> Array a -> Scalar a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
`infoFromArray2` Ptr Double -> Ptr Double -> AFArray -> IO AFErr
af_all_true_all)
anyTrueAll
:: forall a . AFResult a
=> Array a
-> Scalar a
anyTrueAll :: forall a. AFResult a => Array a -> Scalar a
anyTrueAll = forall a. AFResult a => (Double, Double) -> Scalar a
toAFResult @a ((Double, Double) -> Scalar a)
-> (Array a -> (Double, Double)) -> Array a -> Scalar a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
`infoFromArray2` Ptr Double -> Ptr Double -> AFArray -> IO AFErr
af_any_true_all)
countAll
:: forall a . AFResult a
=> Array a
-> Scalar a
countAll :: forall a. AFResult a => Array a -> Scalar a
countAll = forall a. AFResult a => (Double, Double) -> Scalar a
toAFResult @a ((Double, Double) -> Scalar a)
-> (Array a -> (Double, Double)) -> Array a -> Scalar a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Array a
-> (Ptr Double -> Ptr Double -> AFArray -> IO AFErr)
-> (Double, Double)
forall a b arr.
(Storable a, Storable b) =>
Array arr -> (Ptr a -> Ptr b -> AFArray -> IO AFErr) -> (a, b)
`infoFromArray2` Ptr Double -> Ptr Double -> AFArray -> IO AFErr
af_count_all)
imin
:: AFType a
=> Array a
-> Int
-> (Array a, Array Word32)
imin :: forall a. AFType a => Array a -> Int -> (Array a, Array Word32)
imin Array a
a (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) = Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> IO AFErr)
-> (Array a, Array Word32)
forall a b.
Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> IO AFErr)
-> (Array a, Array b)
op2p Array a
a (\Ptr AFArray
x Ptr AFArray
y AFArray
z -> Ptr AFArray -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_imin Ptr AFArray
x Ptr AFArray
y AFArray
z CInt
n)
imax
:: AFType a
=> Array a
-> Int
-> (Array a, Array Word32)
imax :: forall a. AFType a => Array a -> Int -> (Array a, Array Word32)
imax Array a
a (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) = Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> IO AFErr)
-> (Array a, Array Word32)
forall a b.
Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> IO AFErr)
-> (Array a, Array b)
op2p Array a
a (\Ptr AFArray
x Ptr AFArray
y AFArray
z -> Ptr AFArray -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_imax Ptr AFArray
x Ptr AFArray
y AFArray
z CInt
n)
iminAll
:: forall a . AFResult a
=> Array a
-> (Scalar a, Int)
iminAll :: forall a. AFResult a => Array a -> (Scalar a, Int)
iminAll Array a
a = do
let (Double
x,Double
y,CUInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> Int
z) = Array a
a Array a
-> (Ptr Double -> Ptr Double -> Ptr CUInt -> AFArray -> IO AFErr)
-> (Double, Double, CUInt)
forall a b c arr.
(Storable a, Storable b, Storable c) =>
Array arr
-> (Ptr a -> Ptr b -> Ptr c -> AFArray -> IO AFErr) -> (a, b, c)
`infoFromArray3` Ptr Double -> Ptr Double -> Ptr CUInt -> AFArray -> IO AFErr
af_imin_all
(forall a. AFResult a => (Double, Double) -> Scalar a
toAFResult @a (Double
x,Double
y), Int
z)
imaxAll
:: forall a . AFResult a
=> Array a
-> (Scalar a, Int)
imaxAll :: forall a. AFResult a => Array a -> (Scalar a, Int)
imaxAll Array a
a = do
let (Double
x,Double
y,CUInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> Int
z) = Array a
a Array a
-> (Ptr Double -> Ptr Double -> Ptr CUInt -> AFArray -> IO AFErr)
-> (Double, Double, CUInt)
forall a b c arr.
(Storable a, Storable b, Storable c) =>
Array arr
-> (Ptr a -> Ptr b -> Ptr c -> AFArray -> IO AFErr) -> (a, b, c)
`infoFromArray3` Ptr Double -> Ptr Double -> Ptr CUInt -> AFArray -> IO AFErr
af_imax_all
(forall a. AFResult a => (Double, Double) -> Scalar a
toAFResult @a (Double
x,Double
y), Int
z)
accum
:: AFType a
=> Array a
-> Int
-> Array a
accum :: forall a. AFType a => Array a -> Int -> Array a
accum Array a
a (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) = Array a
a Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
`op1` (\Ptr AFArray
x AFArray
y -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_accum Ptr AFArray
x AFArray
y CInt
n)
scan
:: AFType a
=> Array a
-> Int
-> BinaryOp
-> Bool
-> Array a
scan :: forall a. AFType a => Array a -> Int -> BinaryOp -> Bool -> Array a
scan Array a
a (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
d) BinaryOp
op (Int -> CBool
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CBool) -> (Bool -> Int) -> Bool -> CBool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Int
forall a. Enum a => a -> Int
fromEnum -> CBool
inclusive) =
Array a
a Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
`op1` (\Ptr AFArray
x AFArray
y -> Ptr AFArray -> AFArray -> CInt -> AFBinaryOp -> CBool -> IO AFErr
af_scan Ptr AFArray
x AFArray
y CInt
d (BinaryOp -> AFBinaryOp
toBinaryOp BinaryOp
op) CBool
inclusive)
scanByKey
:: (AFType a, AFType k)
=> Array k
-> Array a
-> Int
-> BinaryOp
-> Bool
-> Array a
scanByKey :: forall a k.
(AFType a, AFType k) =>
Array k -> Array a -> Int -> BinaryOp -> Bool -> Array a
scanByKey Array k
a Array a
b (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
d) BinaryOp
op (Int -> CBool
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CBool) -> (Bool -> Int) -> Bool -> CBool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Int
forall a. Enum a => a -> Int
fromEnum -> CBool
inclusive) =
Array k
-> Array a
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> Array a
forall b a c.
Array b
-> Array a
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> Array c
op2 Array k
a Array a
b (\Ptr AFArray
x AFArray
y AFArray
z -> Ptr AFArray
-> AFArray -> AFArray -> CInt -> AFBinaryOp -> CBool -> IO AFErr
af_scan_by_key Ptr AFArray
x AFArray
y AFArray
z CInt
d (BinaryOp -> AFBinaryOp
toBinaryOp BinaryOp
op) CBool
inclusive)
where'
:: AFType a
=> Array a
-> Array Word32
where' :: forall a. AFType a => Array a -> Array Word32
where' = (Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array Word32
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
`op1` Ptr AFArray -> AFArray -> IO AFErr
af_where)
diff1
:: AFType a
=> Array a
-> Int
-> Array a
diff1 :: forall a. AFType a => Array a -> Int -> Array a
diff1 Array a
a (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) = Array a
a Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
`op1` (\Ptr AFArray
p AFArray
x -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_diff1 Ptr AFArray
p AFArray
x CInt
n)
diff2
:: AFType a
=> Array a
-> Int
-> Array a
diff2 :: forall a. AFType a => Array a -> Int -> Array a
diff2 Array a
a (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
n) = Array a
a Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
`op1` (\Ptr AFArray
p AFArray
x -> Ptr AFArray -> AFArray -> CInt -> IO AFErr
af_diff2 Ptr AFArray
p AFArray
x CInt
n)
sort
:: AFType a
=> Array a
-> Int
-> Order
-> Array a
sort :: forall a. AFType a => Array a -> Int -> Order -> Array a
sort Array a
a (Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CUInt
n) (Int -> CBool
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CBool) -> (Order -> Int) -> Order -> CBool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Order -> Int
forall a. Enum a => a -> Int
fromEnum -> CBool
b) =
Array a
a Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
`op1` (\Ptr AFArray
p AFArray
x -> Ptr AFArray -> AFArray -> CUInt -> CBool -> IO AFErr
af_sort Ptr AFArray
p AFArray
x CUInt
n CBool
b)
sortIndex
:: AFType a
=> Array a
-> Int
-> Order
-> (Array a, Array Word32)
sortIndex :: forall a.
AFType a =>
Array a -> Int -> Order -> (Array a, Array Word32)
sortIndex Array a
a (Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CUInt
n) (Int -> CBool
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CBool) -> (Order -> Int) -> Order -> CBool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Order -> Int
forall a. Enum a => a -> Int
fromEnum -> CBool
b) =
Array a
a Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> IO AFErr)
-> (Array a, Array Word32)
forall a b.
Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> IO AFErr)
-> (Array a, Array b)
`op2p` (\Ptr AFArray
p1 Ptr AFArray
p2 AFArray
p3 -> Ptr AFArray -> Ptr AFArray -> AFArray -> CUInt -> CBool -> IO AFErr
af_sort_index Ptr AFArray
p1 Ptr AFArray
p2 AFArray
p3 CUInt
n CBool
b)
data Order = Desc | Asc
deriving (Int -> Order
Order -> Int
Order -> [Order]
Order -> Order
Order -> Order -> [Order]
Order -> Order -> Order -> [Order]
(Order -> Order)
-> (Order -> Order)
-> (Int -> Order)
-> (Order -> Int)
-> (Order -> [Order])
-> (Order -> Order -> [Order])
-> (Order -> Order -> [Order])
-> (Order -> Order -> Order -> [Order])
-> Enum Order
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: Order -> Order
succ :: Order -> Order
$cpred :: Order -> Order
pred :: Order -> Order
$ctoEnum :: Int -> Order
toEnum :: Int -> Order
$cfromEnum :: Order -> Int
fromEnum :: Order -> Int
$cenumFrom :: Order -> [Order]
enumFrom :: Order -> [Order]
$cenumFromThen :: Order -> Order -> [Order]
enumFromThen :: Order -> Order -> [Order]
$cenumFromTo :: Order -> Order -> [Order]
enumFromTo :: Order -> Order -> [Order]
$cenumFromThenTo :: Order -> Order -> Order -> [Order]
enumFromThenTo :: Order -> Order -> Order -> [Order]
Enum, Int -> Order -> ShowS
[Order] -> ShowS
Order -> String
(Int -> Order -> ShowS)
-> (Order -> String) -> ([Order] -> ShowS) -> Show Order
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Order -> ShowS
showsPrec :: Int -> Order -> ShowS
$cshow :: Order -> String
show :: Order -> String
$cshowList :: [Order] -> ShowS
showList :: [Order] -> ShowS
Show, Order -> Order -> Bool
(Order -> Order -> Bool) -> (Order -> Order -> Bool) -> Eq Order
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Order -> Order -> Bool
== :: Order -> Order -> Bool
$c/= :: Order -> Order -> Bool
/= :: Order -> Order -> Bool
Eq)
sortByKey
:: AFType a
=> Array a
-> Array a
-> Int
-> Order
-> (Array a, Array a)
sortByKey :: forall a.
AFType a =>
Array a -> Array a -> Int -> Order -> (Array a, Array a)
sortByKey Array a
a1 Array a
a2 (Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CUInt
n) (Int -> CBool
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CBool) -> (Order -> Int) -> Order -> CBool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Order -> Int
forall a. Enum a => a -> Int
fromEnum -> CBool
b) =
Array a
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array a, Array a)
forall a b c d.
Array a
-> Array b
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array c, Array d)
op2p2 Array a
a1 Array a
a2 (\Ptr AFArray
w Ptr AFArray
x AFArray
y AFArray
z -> Ptr AFArray
-> Ptr AFArray -> AFArray -> AFArray -> CUInt -> CBool -> IO AFErr
af_sort_by_key Ptr AFArray
w Ptr AFArray
x AFArray
y AFArray
z CUInt
n CBool
b)
setUnique
:: AFType a
=> Array a
-> Bool
-> Array a
setUnique :: forall a. AFType a => Array a -> Bool -> Array a
setUnique Array a
a (Int -> CBool
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CBool) -> (Bool -> Int) -> Bool -> CBool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Int
forall a. Enum a => a -> Int
fromEnum -> CBool
b) =
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array a
forall a b.
Array a -> (Ptr AFArray -> AFArray -> IO AFErr) -> Array b
op1 Array a
a (\Ptr AFArray
x AFArray
y -> Ptr AFArray -> AFArray -> CBool -> IO AFErr
af_set_unique Ptr AFArray
x AFArray
y CBool
b)
setUnion
:: AFType a
=> Array a
-> Array a
-> Bool
-> Array a
setUnion :: forall a. AFType a => Array a -> Array a -> Bool -> Array a
setUnion Array a
a1 Array a
a2 (Int -> CBool
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CBool) -> (Bool -> Int) -> Bool -> CBool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Int
forall a. Enum a => a -> Int
fromEnum -> CBool
b) =
Array a
-> Array a
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> Array a
forall b a c.
Array b
-> Array a
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> Array c
op2 Array a
a1 Array a
a2 (\Ptr AFArray
x AFArray
y AFArray
z -> Ptr AFArray -> AFArray -> AFArray -> CBool -> IO AFErr
af_set_union Ptr AFArray
x AFArray
y AFArray
z CBool
b)
setIntersect
:: AFType a
=> Array a
-> Array a
-> Bool
-> Array a
setIntersect :: forall a. AFType a => Array a -> Array a -> Bool -> Array a
setIntersect Array a
a1 Array a
a2 (Int -> CBool
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CBool) -> (Bool -> Int) -> Bool -> CBool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Int
forall a. Enum a => a -> Int
fromEnum -> CBool
b) =
Array a
-> Array a
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> Array a
forall b a c.
Array b
-> Array a
-> (Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> Array c
op2 Array a
a1 Array a
a2 (\Ptr AFArray
x AFArray
y AFArray
z -> Ptr AFArray -> AFArray -> AFArray -> CBool -> IO AFErr
af_set_intersect Ptr AFArray
x AFArray
y AFArray
z CBool
b)
sumByKey
:: AFType a
=> Array Int
-> Array a
-> Int
-> (Array Int, Array a)
sumByKey :: forall a.
AFType a =>
Array Int -> Array a -> Int -> (Array Int, Array a)
sumByKey Array Int
keys Array a
vals (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
dim) =
Array Int
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array Int, Array a)
forall a b.
Array Int
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array Int, Array b)
op2p2kv Array Int
keys Array a
vals (\Ptr AFArray
ko Ptr AFArray
vo AFArray
k AFArray
v -> Ptr AFArray
-> Ptr AFArray -> AFArray -> AFArray -> CInt -> IO AFErr
af_sum_by_key Ptr AFArray
ko Ptr AFArray
vo AFArray
k AFArray
v CInt
dim)
sumByKeyNaN
:: AFType a
=> Array Int
-> Array a
-> Int
-> Double
-> (Array Int, Array a)
sumByKeyNaN :: forall a.
AFType a =>
Array Int -> Array a -> Int -> Double -> (Array Int, Array a)
sumByKeyNaN Array Int
keys Array a
vals (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
dim) Double
nanval =
Array Int
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array Int, Array a)
forall a b.
Array Int
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array Int, Array b)
op2p2kv Array Int
keys Array a
vals (\Ptr AFArray
ko Ptr AFArray
vo AFArray
k AFArray
v -> Ptr AFArray
-> Ptr AFArray -> AFArray -> AFArray -> CInt -> Double -> IO AFErr
af_sum_by_key_nan Ptr AFArray
ko Ptr AFArray
vo AFArray
k AFArray
v CInt
dim Double
nanval)
productByKey
:: AFType a
=> Array Int
-> Array a
-> Int
-> (Array Int, Array a)
productByKey :: forall a.
AFType a =>
Array Int -> Array a -> Int -> (Array Int, Array a)
productByKey Array Int
keys Array a
vals (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
dim) =
Array Int
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array Int, Array a)
forall a b.
Array Int
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array Int, Array b)
op2p2kv Array Int
keys Array a
vals (\Ptr AFArray
ko Ptr AFArray
vo AFArray
k AFArray
v -> Ptr AFArray
-> Ptr AFArray -> AFArray -> AFArray -> CInt -> IO AFErr
af_product_by_key Ptr AFArray
ko Ptr AFArray
vo AFArray
k AFArray
v CInt
dim)
productByKeyNaN
:: AFType a
=> Array Int
-> Array a
-> Int
-> Double
-> (Array Int, Array a)
productByKeyNaN :: forall a.
AFType a =>
Array Int -> Array a -> Int -> Double -> (Array Int, Array a)
productByKeyNaN Array Int
keys Array a
vals (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
dim) Double
nanval =
Array Int
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array Int, Array a)
forall a b.
Array Int
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array Int, Array b)
op2p2kv Array Int
keys Array a
vals (\Ptr AFArray
ko Ptr AFArray
vo AFArray
k AFArray
v -> Ptr AFArray
-> Ptr AFArray -> AFArray -> AFArray -> CInt -> Double -> IO AFErr
af_product_by_key_nan Ptr AFArray
ko Ptr AFArray
vo AFArray
k AFArray
v CInt
dim Double
nanval)
minByKey
:: AFType a
=> Array Int
-> Array a
-> Int
-> (Array Int, Array a)
minByKey :: forall a.
AFType a =>
Array Int -> Array a -> Int -> (Array Int, Array a)
minByKey Array Int
keys Array a
vals (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
dim) =
Array Int
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array Int, Array a)
forall a b.
Array Int
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array Int, Array b)
op2p2kv Array Int
keys Array a
vals (\Ptr AFArray
ko Ptr AFArray
vo AFArray
k AFArray
v -> Ptr AFArray
-> Ptr AFArray -> AFArray -> AFArray -> CInt -> IO AFErr
af_min_by_key Ptr AFArray
ko Ptr AFArray
vo AFArray
k AFArray
v CInt
dim)
maxByKey
:: AFType a
=> Array Int
-> Array a
-> Int
-> (Array Int, Array a)
maxByKey :: forall a.
AFType a =>
Array Int -> Array a -> Int -> (Array Int, Array a)
maxByKey Array Int
keys Array a
vals (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
dim) =
Array Int
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array Int, Array a)
forall a b.
Array Int
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array Int, Array b)
op2p2kv Array Int
keys Array a
vals (\Ptr AFArray
ko Ptr AFArray
vo AFArray
k AFArray
v -> Ptr AFArray
-> Ptr AFArray -> AFArray -> AFArray -> CInt -> IO AFErr
af_max_by_key Ptr AFArray
ko Ptr AFArray
vo AFArray
k AFArray
v CInt
dim)
allTrueByKey
:: AFType a
=> Array Int
-> Array a
-> Int
-> (Array Int, Array CBool)
allTrueByKey :: forall a.
AFType a =>
Array Int -> Array a -> Int -> (Array Int, Array CBool)
allTrueByKey Array Int
keys Array a
vals (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
dim) =
Array Int
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array Int, Array CBool)
forall a b.
Array Int
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array Int, Array b)
op2p2kv Array Int
keys Array a
vals (\Ptr AFArray
ko Ptr AFArray
vo AFArray
k AFArray
v -> Ptr AFArray
-> Ptr AFArray -> AFArray -> AFArray -> CInt -> IO AFErr
af_all_true_by_key Ptr AFArray
ko Ptr AFArray
vo AFArray
k AFArray
v CInt
dim)
anyTrueByKey
:: AFType a
=> Array Int
-> Array a
-> Int
-> (Array Int, Array CBool)
anyTrueByKey :: forall a.
AFType a =>
Array Int -> Array a -> Int -> (Array Int, Array CBool)
anyTrueByKey Array Int
keys Array a
vals (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
dim) =
Array Int
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array Int, Array CBool)
forall a b.
Array Int
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array Int, Array b)
op2p2kv Array Int
keys Array a
vals (\Ptr AFArray
ko Ptr AFArray
vo AFArray
k AFArray
v -> Ptr AFArray
-> Ptr AFArray -> AFArray -> AFArray -> CInt -> IO AFErr
af_any_true_by_key Ptr AFArray
ko Ptr AFArray
vo AFArray
k AFArray
v CInt
dim)
countByKey
:: AFType a
=> Array Int
-> Array a
-> Int
-> (Array Int, Array Word32)
countByKey :: forall a.
AFType a =>
Array Int -> Array a -> Int -> (Array Int, Array Word32)
countByKey Array Int
keys Array a
vals (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> CInt
dim) =
Array Int
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array Int, Array Word32)
forall a b.
Array Int
-> Array a
-> (Ptr AFArray -> Ptr AFArray -> AFArray -> AFArray -> IO AFErr)
-> (Array Int, Array b)
op2p2kv Array Int
keys Array a
vals (\Ptr AFArray
ko Ptr AFArray
vo AFArray
k AFArray
v -> Ptr AFArray
-> Ptr AFArray -> AFArray -> AFArray -> CInt -> IO AFErr
af_count_by_key Ptr AFArray
ko Ptr AFArray
vo AFArray
k AFArray
v CInt
dim)