{-# OPTIONS_GHC -fno-cse #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
module Torch.Indef.Static.Tensor.Math.Pairwise where
import Numeric.Dimensions
import System.IO.Unsafe
import Torch.Indef.Types
import Torch.Indef.Static.Tensor
import qualified Torch.Indef.Dynamic.Tensor.Math.Pairwise as Dynamic
class Num real => Pairwise tensor real where
(^+) :: tensor -> real -> tensor
(^-) :: tensor -> real -> tensor
(^*) :: tensor -> real -> tensor
(^/) :: tensor -> real -> tensor
instance (Pairwise t0 r, Pairwise t1 r) => Pairwise (t0, t1) r where
(a,b) ^+ v = (a ^+ v, b ^+ v)
(a,b) ^- v = (a ^- v, b ^- v)
(a,b) ^* v = (a ^* v, b ^* v)
(a,b) ^/ v = (a ^/ v, b ^/ v)
infixl 7 ^*,^/
infixl 6 ^+,^-
instance Dimensions d => Pairwise (Tensor d) HsReal where
(^+) = add
(^-) = sub
(^*) = mul
(^/) = Torch.Indef.Static.Tensor.Math.Pairwise.div
(+^) :: Pairwise ten real => real -> ten -> ten
(+^) = flip (^+)
(*^) :: Pairwise ten real => real -> ten -> ten
(*^) = flip (^*)
(/^) :: Pairwise ten real => real -> ten -> ten
(/^) = flip (^/)
(-^) :: forall ten real . Pairwise ten real => real -> ten -> ten
(-^) v t = v +^ (negate (1::real) *^ t)
add_ :: Dimensions d => Tensor d -> HsReal -> IO ()
add_ t = Dynamic.add_ (asDynamic t)
add :: Dimensions d => Tensor d -> HsReal -> Tensor d
add t v = asStatic $ Dynamic.add (asDynamic t) v
sub_ :: Dimensions d => Tensor d -> HsReal -> IO ()
sub_ t = Dynamic.sub_ (asDynamic t)
sub :: Dimensions d => Tensor d -> HsReal -> Tensor d
sub t v = asStatic $ Dynamic.sub (asDynamic t) v
add_scaled_ :: Dimensions d => Tensor d -> HsReal -> HsReal -> IO ()
add_scaled_ t = Dynamic.add_scaled_ (asDynamic t)
sub_scaled_ :: Dimensions d => Tensor d -> HsReal -> HsReal -> IO ()
sub_scaled_ t = Dynamic.sub_scaled_ (asDynamic t)
mul_ :: Dimensions d => Tensor d -> HsReal -> IO ()
mul_ t = Dynamic.mul_ (asDynamic t)
mul :: Dimensions d => Tensor d -> HsReal -> Tensor d
mul t v = asStatic $ Dynamic.mul (asDynamic t) v
div_ t = Dynamic.div_ (asDynamic t)
div t v = asStatic $ Dynamic.div (asDynamic t) v
lshift_ :: Dimensions d => Tensor d -> HsReal -> IO ()
lshift_ t = Dynamic.lshift_ (asDynamic t)
rshift_ :: Dimensions d => Tensor d -> HsReal -> IO ()
rshift_ t = Dynamic.rshift_ (asDynamic t)
fmod_ :: Dimensions d => Tensor d -> HsReal -> IO ()
fmod_ t = Dynamic.fmod_ (asDynamic t)
remainder_ :: Dimensions d => Tensor d -> HsReal -> IO ()
remainder_ t = Dynamic.remainder_ (asDynamic t)
bitand_ :: Dimensions d => Tensor d -> HsReal -> IO ()
bitand_ t = Dynamic.bitand_ (asDynamic t)
bitor_ :: Dimensions d => Tensor d -> HsReal -> IO ()
bitor_ t = Dynamic.bitor_ (asDynamic t)
bitxor_ :: Dimensions d => Tensor d -> HsReal -> IO ()
bitxor_ t = Dynamic.bitxor_ (asDynamic t)