horde-ad-0.2.0.0: Higher Order Reverse Derivatives Efficiently - Automatic Differentiation
Safe HaskellNone
LanguageGHC2024

HordeAd.Core.CarriersADVal

Description

Dual numbers type and operations on it. These definitions, mostly class instances, are needed to make dual numbers a valid carrier for a tensor class algebra (instance) defined in HordeAd.Core.OpsADVal so that user programs can be instantiated to or interpreted into it (which corresponds to the forward pass) and subsequently differentiated by evaluating the resulting delta expressions (which corresponds to the backpropagation phase in case of reverse derivatives).

Synopsis

The dual number type

data ADVal (f :: Target) (y :: TK) Source #

The type of dual numbers that are the values of objective functions when they are being differentiated. In general, the primal parts of the dual numbers represent tensors or tuples of tensors. The dual parts are fixed to be delta expressions. The first type argument is the functor determining the nature of the tensors (concrete, symbolic, etc.). The second argument is the tensor kind, which constraints the shapes of the particular tensor (or tensor tuple).

Instances

Instances details
(ADReadyNoLet target, ShareTensor target, ShareTensor (PrimalOf target)) => ConvertTensor (ADVal target) Source # 
Instance details

Defined in HordeAd.Core.OpsADVal

Methods

tconvert :: forall (a :: TK) (b :: TK). TKConversion a b -> SingletonTK a -> ADVal target a -> ADVal target b Source #

kfromR :: GoodScalar r => ADVal target (TKR 0 r) -> ADVal target ('TKScalar r) Source #

kfromS :: GoodScalar r => ADVal target (TKS ('[] :: [Nat]) r) -> ADVal target ('TKScalar r) Source #

kfromX :: GoodScalar r => ADVal target (TKX ('[] :: [Maybe Nat]) r) -> ADVal target ('TKScalar r) Source #

rfromK :: GoodScalar r => ADVal target ('TKScalar r) -> ADVal target (TKR 0 r) Source #

rfromS :: forall (sh :: [Nat]) (x :: TK). (KnownShS sh, KnownSTK x) => ADVal target ('TKS2 sh x) -> ADVal target ('TKR2 (Rank sh) x) Source #

rfromX :: forall (sh :: [Maybe Nat]) (x :: TK). KnownSTK x => ADVal target ('TKX2 sh x) -> ADVal target ('TKR2 (Rank sh) x) Source #

sfromK :: GoodScalar r => ADVal target ('TKScalar r) -> ADVal target (TKS ('[] :: [Nat]) r) Source #

sfromR :: forall (sh :: [Nat]) (x :: TK). (KnownShS sh, KnownSTK x) => ADVal target ('TKR2 (Rank sh) x) -> ADVal target ('TKS2 sh x) Source #

sfromX :: forall (sh :: [Nat]) (sh' :: [Maybe Nat]) (x :: TK). (KnownShS sh, Rank sh ~ Rank sh', KnownSTK x) => ADVal target ('TKX2 sh' x) -> ADVal target ('TKS2 sh x) Source #

xfromK :: GoodScalar r => ADVal target ('TKScalar r) -> ADVal target (TKX ('[] :: [Maybe Nat]) r) Source #

xfromR :: forall (sh' :: [Maybe Nat]) (x :: TK). (KnownShX sh', KnownSTK x) => ADVal target ('TKR2 (Rank sh') x) -> ADVal target ('TKX2 sh' x) Source #

xfromS :: forall (sh :: [Nat]) (sh' :: [Maybe Nat]) (x :: TK). (KnownShS sh, KnownShX sh', Rank sh ~ Rank sh', KnownSTK x) => ADVal target ('TKS2 sh x) -> ADVal target ('TKX2 sh' x) Source #

rzip :: forall (y :: TK) (z :: TK) (n :: Nat). (KnownSTK y, KnownSTK z) => ADVal target ('TKProduct ('TKR2 n y) ('TKR2 n z)) -> ADVal target ('TKR2 n ('TKProduct y z)) Source #

runzip :: forall (y :: TK) (z :: TK) (n :: Nat). ADVal target ('TKR2 n ('TKProduct y z)) -> ADVal target ('TKProduct ('TKR2 n y) ('TKR2 n z)) Source #

szip :: forall (y :: TK) (z :: TK) (sh :: [Nat]). (KnownSTK y, KnownSTK z) => ADVal target ('TKProduct ('TKS2 sh y) ('TKS2 sh z)) -> ADVal target ('TKS2 sh ('TKProduct y z)) Source #

sunzip :: forall (y :: TK) (z :: TK) (sh :: [Nat]). ADVal target ('TKS2 sh ('TKProduct y z)) -> ADVal target ('TKProduct ('TKS2 sh y) ('TKS2 sh z)) Source #

xzip :: forall (y :: TK) (z :: TK) (sh :: [Maybe Nat]). (KnownSTK y, KnownSTK z) => ADVal target ('TKProduct ('TKX2 sh y) ('TKX2 sh z)) -> ADVal target ('TKX2 sh ('TKProduct y z)) Source #

xunzip :: forall (y :: TK) (z :: TK) (sh :: [Maybe Nat]). ADVal target ('TKX2 sh ('TKProduct y z)) -> ADVal target ('TKProduct ('TKX2 sh y) ('TKX2 sh z)) Source #

rnest :: forall (n :: Nat) (m :: Nat) (x :: TK). (KnownNat m, KnownSTK x) => SNat n -> ADVal target ('TKR2 (n + m) x) -> ADVal target ('TKR2 n ('TKR2 m x)) Source #

rnestS :: forall (n :: Nat) (sh2 :: [Nat]) (x :: TK). (KnownShS sh2, KnownSTK x) => SNat n -> ADVal target ('TKX2 (Replicate n ('Nothing :: Maybe Nat) ++ MapJust sh2) x) -> ADVal target ('TKR2 n ('TKS2 sh2 x)) Source #

rnestX :: forall (n :: Nat) (sh2 :: [Maybe Nat]) (x :: TK). (KnownShX sh2, KnownSTK x) => SNat n -> ADVal target ('TKX2 (Replicate n ('Nothing :: Maybe Nat) ++ sh2) x) -> ADVal target ('TKR2 n ('TKX2 sh2 x)) Source #

snestR :: forall (sh1 :: [Nat]) (m :: Nat) (x :: TK). (KnownNat m, KnownSTK x) => ShS sh1 -> ADVal target ('TKX2 (MapJust sh1 ++ Replicate m ('Nothing :: Maybe Nat)) x) -> ADVal target ('TKS2 sh1 ('TKR2 m x)) Source #

snest :: forall (sh1 :: [Nat]) (sh2 :: [Nat]) (x :: TK). (KnownShS sh2, KnownSTK x) => ShS sh1 -> ADVal target ('TKS2 (sh1 ++ sh2) x) -> ADVal target ('TKS2 sh1 ('TKS2 sh2 x)) Source #

snestX :: forall (sh1 :: [Nat]) (sh2 :: [Maybe Nat]) (x :: TK). (KnownShX sh2, KnownSTK x) => ShS sh1 -> ADVal target ('TKX2 (MapJust sh1 ++ sh2) x) -> ADVal target ('TKS2 sh1 ('TKX2 sh2 x)) Source #

xnestR :: forall (sh1 :: [Maybe Nat]) (m :: Nat) (x :: TK). (KnownNat m, KnownSTK x) => StaticShX sh1 -> ADVal target ('TKX2 (sh1 ++ Replicate m ('Nothing :: Maybe Nat)) x) -> ADVal target ('TKX2 sh1 ('TKR2 m x)) Source #

xnestS :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Nat]) (x :: TK). (KnownShS sh2, KnownSTK x) => StaticShX sh1 -> ADVal target ('TKX2 (sh1 ++ MapJust sh2) x) -> ADVal target ('TKX2 sh1 ('TKS2 sh2 x)) Source #

xnest :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) (x :: TK). (KnownShX sh2, KnownSTK x) => StaticShX sh1 -> ADVal target ('TKX2 (sh1 ++ sh2) x) -> ADVal target ('TKX2 sh1 ('TKX2 sh2 x)) Source #

runNest :: forall (n :: Nat) (m :: Nat) (x :: TK). (KnownNat n, KnownNat m, KnownSTK x) => ADVal target ('TKR2 n ('TKR2 m x)) -> ADVal target ('TKR2 (n + m) x) Source #

runNestS :: forall (n :: Nat) (sh2 :: [Nat]) (x :: TK). (KnownNat n, KnownShS sh2, KnownSTK x) => ADVal target ('TKR2 n ('TKS2 sh2 x)) -> ADVal target ('TKX2 (Replicate n ('Nothing :: Maybe Nat) ++ MapJust sh2) x) Source #

runNestX :: forall (n :: Nat) (sh2 :: [Maybe Nat]) (x :: TK). (KnownNat n, KnownShX sh2, KnownSTK x) => ADVal target ('TKR2 n ('TKX2 sh2 x)) -> ADVal target ('TKX2 (Replicate n ('Nothing :: Maybe Nat) ++ sh2) x) Source #

sunNestR :: forall (sh1 :: [Nat]) (m :: Nat) (x :: TK). (KnownShS sh1, KnownNat m, KnownSTK x) => ADVal target ('TKS2 sh1 ('TKR2 m x)) -> ADVal target ('TKX2 (MapJust sh1 ++ Replicate m ('Nothing :: Maybe Nat)) x) Source #

sunNest :: forall (sh1 :: [Nat]) (sh2 :: [Nat]) (x :: TK). (KnownShS sh1, KnownShS sh2, KnownSTK x) => ADVal target ('TKS2 sh1 ('TKS2 sh2 x)) -> ADVal target ('TKS2 (sh1 ++ sh2) x) Source #

sunNestX :: forall (sh1 :: [Nat]) (sh2 :: [Maybe Nat]) (x :: TK). (KnownShS sh1, KnownShX sh2, KnownSTK x) => ADVal target ('TKS2 sh1 ('TKX2 sh2 x)) -> ADVal target ('TKX2 (MapJust sh1 ++ sh2) x) Source #

xunNestR :: forall (sh1 :: [Maybe Nat]) (m :: Nat) (x :: TK). (KnownShX sh1, KnownNat m, KnownSTK x) => ADVal target ('TKX2 sh1 ('TKR2 m x)) -> ADVal target ('TKX2 (sh1 ++ Replicate m ('Nothing :: Maybe Nat)) x) Source #

xunNestS :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Nat]) (x :: TK). (KnownShX sh1, KnownShS sh2, KnownSTK x) => ADVal target ('TKX2 sh1 ('TKS2 sh2 x)) -> ADVal target ('TKX2 (sh1 ++ MapJust sh2) x) Source #

xunNest :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) (x :: TK). (KnownShX sh1, KnownShX sh2, KnownSTK x) => ADVal target ('TKX2 sh1 ('TKX2 sh2 x)) -> ADVal target ('TKX2 (sh1 ++ sh2) x) Source #

tpairConv :: forall (x :: TK) (z :: TK). ADVal target x -> ADVal target z -> ADVal target ('TKProduct x z) Source #

tunpairConv :: forall (x :: TK) (z :: TK). ADVal target ('TKProduct x z) -> (ADVal target x, ADVal target z) Source #

(ADReadyNoLet target, ShareTensor target, ShareTensor (PrimalOf target)) => BaseTensor (ADVal target) Source # 
Instance details

Defined in HordeAd.Core.OpsADVal

Methods

rshape :: forall (n :: Nat) (x :: TK). KnownSTK x => ADVal target ('TKR2 n x) -> IShR n Source #

rlength :: forall (n :: Nat) (x :: TK). KnownSTK x => ADVal target ('TKR2 n x) -> Int Source #

rsize :: forall (n :: Nat) (x :: TK). KnownSTK x => ADVal target ('TKR2 n x) -> Int Source #

rwidth :: forall (n :: Natural) (x :: TK). KnownSTK x => ADVal target ('TKR2 (1 + n) x) -> Int Source #

sshape :: forall (sh :: [Nat]) (x :: TK). KnownSTK x => ADVal target ('TKS2 sh x) -> ShS sh Source #

slength :: forall (sh :: [Nat]) (x :: TK). KnownSTK x => ADVal target ('TKS2 sh x) -> Int Source #

ssize :: forall (sh :: [Nat]) (x :: TK). KnownSTK x => ADVal target ('TKS2 sh x) -> Int Source #

swidth :: forall (n :: Nat) (sh :: [Nat]) (x :: TK). KnownSTK x => ADVal target ('TKS2 (n ': sh) x) -> Int Source #

xshape :: forall (sh :: [Maybe Nat]) (x :: TK). KnownSTK x => ADVal target ('TKX2 sh x) -> IShX sh Source #

xlength :: forall (sh :: [Maybe Nat]) (x :: TK). KnownSTK x => ADVal target ('TKX2 sh x) -> Int Source #

xsize :: forall (sh :: [Maybe Nat]) (x :: TK). KnownSTK x => ADVal target ('TKX2 sh x) -> Int Source #

xwidth :: forall (mn :: Maybe Nat) (sh :: [Maybe Nat]) (x :: TK). KnownSTK x => ADVal target ('TKX2 (mn ': sh) x) -> Int Source #

tsize :: forall (y :: TK). SingletonTK y -> ADVal target y -> Int Source #

tftk :: forall (y :: TK). SingletonTK y -> ADVal target y -> FullShapeTK y Source #

tpair :: forall (x :: TK) (z :: TK). ADVal target x -> ADVal target z -> ADVal target ('TKProduct x z) Source #

tproject1 :: forall (x :: TK) (z :: TK). ADVal target ('TKProduct x z) -> ADVal target x Source #

tproject2 :: forall (x :: TK) (z :: TK). ADVal target ('TKProduct x z) -> ADVal target z Source #

tcond :: forall (y :: TK). Boolean (BoolOf (ADVal target)) => SingletonTK y -> BoolOf (ADVal target) -> ADVal target y -> ADVal target y -> ADVal target y Source #

trconcrete :: forall r (n :: Nat). GoodScalar r => Ranked n r -> ADVal target (TKR n r) Source #

tsconcrete :: forall r (sh :: [Nat]). GoodScalar r => Shaped sh r -> ADVal target (TKS sh r) Source #

txconcrete :: forall r (sh :: [Maybe Nat]). GoodScalar r => Mixed sh r -> ADVal target (TKX sh r) Source #

tkconcrete :: GoodScalar r => r -> ADVal target ('TKScalar r) Source #

tconcrete :: forall (y :: TK). FullShapeTK y -> Concrete y -> ADVal target y Source #

trfromVector :: forall (n :: Nat) (x :: TK). (KnownNat n, KnownSTK x) => Vector (ADVal target ('TKR2 n x)) -> ADVal target ('TKR2 (1 + n) x) Source #

trfromVector0N :: forall (n :: Nat) (x :: TK). KnownSTK x => IShR n -> Vector (ADVal target ('TKR2 0 x)) -> ADVal target ('TKR2 n x) Source #

trunravelToList :: forall (n :: Nat) (x :: TK). (KnownNat n, KnownSTK x) => ADVal target ('TKR2 (1 + n) x) -> [ADVal target ('TKR2 n x)] Source #

tsfromVector :: forall (n :: Nat) (sh :: [Nat]) (x :: TK). (KnownNat n, KnownShS sh, KnownSTK x) => Vector (ADVal target ('TKS2 sh x)) -> ADVal target ('TKS2 (n ': sh) x) Source #

tsfromVector0N :: forall (sh :: [Nat]) (x :: TK). (KnownShS sh, KnownSTK x) => Vector (ADVal target ('TKS2 ('[] :: [Nat]) x)) -> ADVal target ('TKS2 sh x) Source #

tsunravelToList :: forall (n :: Nat) (sh :: [Nat]) (x :: TK). (KnownNat n, KnownShS sh, KnownSTK x) => ADVal target ('TKS2 (n ': sh) x) -> [ADVal target ('TKS2 sh x)] Source #

txfromVector :: forall (n :: Nat) (sh :: [Maybe Nat]) (x :: TK). (KnownNat n, KnownShX sh, KnownSTK x) => Vector (ADVal target ('TKX2 sh x)) -> ADVal target ('TKX2 ('Just n ': sh) x) Source #

txfromVector0N :: forall (sh :: [Maybe Nat]) (x :: TK). KnownSTK x => IShX sh -> Vector (ADVal target ('TKX2 ('[] :: [Maybe Nat]) x)) -> ADVal target ('TKX2 sh x) Source #

txunravelToList :: forall (n :: Nat) (sh :: [Maybe Nat]) (x :: TK). (KnownNat n, KnownShX sh, KnownSTK x) => ADVal target ('TKX2 ('Just n ': sh) x) -> [ADVal target ('TKX2 sh x)] Source #

tfromVector :: forall (y :: TK) (k :: Nat). SNat k -> SingletonTK y -> Vector (ADVal target y) -> ADVal target (BuildTensorKind k y) Source #

tfromListR :: forall (y :: TK) (k :: Nat). SingletonTK y -> ListR k (ADVal target y) -> ADVal target (BuildTensorKind k y) Source #

trsum :: forall (n :: Nat) (x :: TK). (KnownNat n, KnownSTK x) => ADVal target ('TKR2 (1 + n) x) -> ADVal target ('TKR2 n x) Source #

trsum0 :: forall (n :: Nat) (x :: TK). (KnownNat n, KnownSTK x) => ADVal target ('TKR2 n x) -> ADVal target ('TKR2 0 x) Source #

trdot0 :: forall (n :: Nat) r. (KnownNat n, GoodScalar r) => ADVal target (TKR n r) -> ADVal target (TKR n r) -> ADVal target (TKR 0 r) Source #

trdot1In :: forall (n :: Nat) r. (KnownNat n, GoodScalar r) => ADVal target (TKR (1 + n) r) -> ADVal target (TKR (1 + n) r) -> ADVal target (TKR n r) Source #

trmatvecmul :: GoodScalar r => ADVal target (TKR 2 r) -> ADVal target (TKR 1 r) -> ADVal target (TKR 1 r) Source #

trmatmul2 :: GoodScalar r => ADVal target (TKR 2 r) -> ADVal target (TKR 2 r) -> ADVal target (TKR 2 r) Source #

trreplicate :: forall (n :: Nat) (x :: TK). (KnownNat n, KnownSTK x) => Int -> ADVal target ('TKR2 n x) -> ADVal target ('TKR2 (1 + n) x) Source #

trreplicate0N :: forall (n :: Nat) (x :: TK). (KnownNat n, KnownSTK x) => IShR n -> ADVal target ('TKR2 0 x) -> ADVal target ('TKR2 n x) Source #

tssum :: forall (n :: Nat) (sh :: [Nat]) (x :: TK). (KnownNat n, KnownShS sh, KnownSTK x) => ADVal target ('TKS2 (n ': sh) x) -> ADVal target ('TKS2 sh x) Source #

tssum0 :: forall (sh :: [Nat]) (x :: TK). (KnownShS sh, KnownSTK x) => ADVal target ('TKS2 sh x) -> ADVal target ('TKS2 ('[] :: [Nat]) x) Source #

tsdot0 :: forall (sh :: [Nat]) r. (KnownShS sh, GoodScalar r) => ADVal target (TKS sh r) -> ADVal target (TKS sh r) -> ADVal target (TKS ('[] :: [Nat]) r) Source #

tsdot1In :: forall (sh :: [Nat]) r (n :: Nat). (KnownShS sh, GoodScalar r) => SNat n -> ADVal target (TKS (sh ++ '[n]) r) -> ADVal target (TKS (sh ++ '[n]) r) -> ADVal target (TKS sh r) Source #

tsmatvecmul :: forall (m :: Nat) (n :: Nat) r. (KnownNat m, KnownNat n, GoodScalar r) => ADVal target (TKS '[m, n] r) -> ADVal target (TKS '[n] r) -> ADVal target (TKS '[m] r) Source #

tsmatmul2 :: forall (m :: Nat) (n :: Nat) (p :: Nat) r. (KnownNat m, KnownNat n, KnownNat p, GoodScalar r) => ADVal target (TKS '[m, n] r) -> ADVal target (TKS '[n, p] r) -> ADVal target (TKS '[m, p] r) Source #

tsreplicate :: forall (sh :: [Nat]) (k :: Nat) (x :: TK). KnownSTK x => SNat k -> ShS sh -> ADVal target ('TKS2 sh x) -> ADVal target ('TKS2 (k ': sh) x) Source #

tsreplicate0N :: forall (sh :: [Nat]) (x :: TK). KnownSTK x => ShS sh -> ADVal target ('TKS2 ('[] :: [Nat]) x) -> ADVal target ('TKS2 sh x) Source #

txsum :: forall (n :: Nat) (sh :: [Maybe Nat]) (x :: TK). (KnownNat n, KnownShX sh, KnownSTK x) => ADVal target ('TKX2 ('Just n ': sh) x) -> ADVal target ('TKX2 sh x) Source #

txsum0 :: forall (sh :: [Maybe Nat]) (x :: TK). (KnownShX sh, KnownSTK x, ConvertTensor (ADVal target)) => ADVal target ('TKX2 sh x) -> ADVal target ('TKX2 ('[] :: [Maybe Nat]) x) Source #

txdot0 :: forall (sh :: [Maybe Nat]) r. (KnownShX sh, GoodScalar r, ConvertTensor (ADVal target)) => ADVal target (TKX sh r) -> ADVal target (TKX sh r) -> ADVal target (TKX ('[] :: [Maybe Nat]) r) Source #

txdot1In :: forall (sh :: [Maybe Nat]) r (n :: Nat). (KnownShX sh, GoodScalar r) => SNat n -> ADVal target (TKX (sh ++ '['Just n]) r) -> ADVal target (TKX (sh ++ '['Just n]) r) -> ADVal target (TKX sh r) Source #

txmatvecmul :: forall (mm :: Maybe Nat) (mn :: Maybe Nat) r. (GoodScalar r, ConvertTensor (ADVal target)) => SMayNat Int SNat mm -> SMayNat Int SNat mn -> ADVal target (TKX '[mm, mn] r) -> ADVal target (TKX '[mn] r) -> ADVal target (TKX '[mm] r) Source #

txmatmul2 :: forall (m :: Nat) (n :: Nat) (p :: Nat) r. (KnownNat m, KnownNat n, KnownNat p, GoodScalar r, ConvertTensor (ADVal target)) => ADVal target (TKX '['Just m, 'Just n] r) -> ADVal target (TKX '['Just n, 'Just p] r) -> ADVal target (TKX '['Just m, 'Just p] r) Source #

txreplicate :: forall (sh :: [Maybe Nat]) (k :: Nat) (x :: TK). KnownSTK x => SNat k -> StaticShX sh -> ADVal target ('TKX2 sh x) -> ADVal target ('TKX2 ('Just k ': sh) x) Source #

txreplicate0N :: forall (sh :: [Maybe Nat]) (x :: TK). (KnownShX sh, KnownSTK x) => IShX sh -> ADVal target ('TKX2 ('[] :: [Maybe Nat]) x) -> ADVal target ('TKX2 sh x) Source #

trindex :: forall (m :: Nat) (n :: Nat) (x :: TK). (KnownNat m, KnownNat n, KnownSTK x) => ADVal target ('TKR2 (m + n) x) -> IxROf (ADVal target) m -> ADVal target ('TKR2 n x) Source #

trindex0 :: forall (m :: Nat) (x :: TK). (KnownNat m, KnownSTK x) => ADVal target ('TKR2 m x) -> IxROf (ADVal target) m -> ADVal target ('TKR2 0 x) Source #

troneHot :: forall (m :: Nat) (n :: Nat) (x :: TK). (KnownNat m, KnownNat n, KnownSTK x, BoolOf (PrimalOf (ADVal target)) ~ BoolOf (ADVal target), EqH (PrimalOf (ADVal target)) ('TKScalar Int64)) => IShR m -> ADVal target ('TKR2 n x) -> IxROf (ADVal target) m -> ADVal target ('TKR2 (m + n) x) Source #

trscatter :: forall (m :: Nat) (n :: Nat) (p :: Nat) (x :: TK). (KnownNat m, KnownNat n, KnownNat p, KnownSTK x) => IShR (p + n) -> ADVal target ('TKR2 (m + n) x) -> (IxROf (ADVal target) m -> IxROf (ADVal target) p) -> ADVal target ('TKR2 (p + n) x) Source #

trscatter1 :: forall (n :: Nat) (p :: Nat) (x :: TK). (KnownNat n, KnownNat p, KnownSTK x) => IShR (p + n) -> ADVal target ('TKR2 (1 + n) x) -> (IntOf (ADVal target) -> IxROf (ADVal target) p) -> ADVal target ('TKR2 (p + n) x) Source #

trgather :: forall (m :: Nat) (n :: Nat) (p :: Nat) (x :: TK). (KnownNat m, KnownNat n, KnownNat p, KnownSTK x) => IShR (m + n) -> ADVal target ('TKR2 (p + n) x) -> (IxROf (ADVal target) m -> IxROf (ADVal target) p) -> ADVal target ('TKR2 (m + n) x) Source #

trgather1 :: forall (n :: Nat) (p :: Nat) (x :: TK). (KnownNat n, KnownNat p, KnownSTK x) => Int -> ADVal target ('TKR2 (p + n) x) -> (IntOf (ADVal target) -> IxROf (ADVal target) p) -> ADVal target ('TKR2 (1 + n) x) Source #

tsindex :: forall (shm :: [Nat]) (shn :: [Nat]) (x :: TK). (KnownShS shm, KnownShS shn, KnownSTK x) => ADVal target ('TKS2 (shm ++ shn) x) -> IxSOf (ADVal target) shm -> ADVal target ('TKS2 shn x) Source #

tsindex0 :: forall (sh1 :: [Nat]) (x :: TK). (KnownShS sh1, KnownSTK x) => ADVal target ('TKS2 sh1 x) -> IxSOf (ADVal target) sh1 -> ADVal target ('TKS2 ('[] :: [Nat]) x) Source #

tsoneHot :: forall (sh1 :: [Nat]) (sh2 :: [Nat]) (x :: TK). (KnownShS sh1, KnownShS sh2, KnownSTK x, BoolOf (PrimalOf (ADVal target)) ~ BoolOf (ADVal target), EqH (PrimalOf (ADVal target)) ('TKScalar Int64)) => ADVal target ('TKS2 sh2 x) -> IxSOf (ADVal target) sh1 -> ADVal target ('TKS2 (sh1 ++ sh2) x) Source #

tsscatter :: forall (shm :: [Nat]) (shn :: [Nat]) (shp :: [Nat]) (x :: TK). (KnownShS shm, KnownShS shn, KnownShS shp, KnownSTK x) => ADVal target ('TKS2 (shm ++ shn) x) -> (IxSOf (ADVal target) shm -> IxSOf (ADVal target) shp) -> ADVal target ('TKS2 (shp ++ shn) x) Source #

tsscatter1 :: forall (n2 :: Nat) (shn :: [Nat]) (shp :: [Nat]) (x :: TK). (KnownNat n2, KnownShS shn, KnownShS shp, KnownSTK x) => ADVal target ('TKS2 (n2 ': shn) x) -> (IntOf (ADVal target) -> IxSOf (ADVal target) shp) -> ADVal target ('TKS2 (shp ++ shn) x) Source #

tsgather :: forall (shm :: [Nat]) (shn :: [Nat]) (shp :: [Nat]) (x :: TK). (KnownShS shm, KnownShS shn, KnownShS shp, KnownSTK x) => ADVal target ('TKS2 (shp ++ shn) x) -> (IxSOf (ADVal target) shm -> IxSOf (ADVal target) shp) -> ADVal target ('TKS2 (shm ++ shn) x) Source #

tsgather1 :: forall (n2 :: Nat) (shn :: [Nat]) (shp :: [Nat]) (x :: TK). (KnownNat n2, KnownShS shn, KnownShS shp, KnownSTK x) => ADVal target ('TKS2 (shp ++ shn) x) -> (IntOf (ADVal target) -> IxSOf (ADVal target) shp) -> ADVal target ('TKS2 (n2 ': shn) x) Source #

txindex :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) (x :: TK). (KnownShX sh1, KnownShX sh2, KnownSTK x) => ADVal target ('TKX2 (sh1 ++ sh2) x) -> IxXOf (ADVal target) sh1 -> ADVal target ('TKX2 sh2 x) Source #

txindex0 :: forall (sh1 :: [Maybe Nat]) (x :: TK). (KnownShX sh1, KnownSTK x) => ADVal target ('TKX2 sh1 x) -> IxXOf (ADVal target) sh1 -> ADVal target ('TKX2 ('[] :: [Maybe Nat]) x) Source #

txoneHot :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) (x :: TK). (KnownShX sh1, KnownShX sh2, KnownSTK x, BoolOf (PrimalOf (ADVal target)) ~ BoolOf (ADVal target), EqH (PrimalOf (ADVal target)) ('TKScalar Int64), ConvertTensor (ADVal target)) => IShX sh1 -> ADVal target ('TKX2 sh2 x) -> IxXOf (ADVal target) sh1 -> ADVal target ('TKX2 (sh1 ++ sh2) x) Source #

txscatter :: forall (shm :: [Maybe Nat]) (shn :: [Maybe Nat]) (shp :: [Maybe Nat]) (x :: TK). (KnownShX shm, KnownShX shn, KnownShX shp, KnownSTK x) => IShX (shp ++ shn) -> ADVal target ('TKX2 (shm ++ shn) x) -> (IxXOf (ADVal target) shm -> IxXOf (ADVal target) shp) -> ADVal target ('TKX2 (shp ++ shn) x) Source #

txscatter1 :: forall (n2 :: Nat) (shn :: [Maybe Nat]) (shp :: [Maybe Nat]) (x :: TK). (KnownNat n2, KnownShX shn, KnownShX shp, KnownSTK x) => IShX (shp ++ shn) -> ADVal target ('TKX2 ('Just n2 ': shn) x) -> (IntOf (ADVal target) -> IxXOf (ADVal target) shp) -> ADVal target ('TKX2 (shp ++ shn) x) Source #

txgather :: forall (shm :: [Maybe Nat]) (shn :: [Maybe Nat]) (shp :: [Maybe Nat]) (x :: TK). (KnownShX shm, KnownShX shn, KnownShX shp, KnownSTK x) => IShX (shm ++ shn) -> ADVal target ('TKX2 (shp ++ shn) x) -> (IxXOf (ADVal target) shm -> IxXOf (ADVal target) shp) -> ADVal target ('TKX2 (shm ++ shn) x) Source #

txgather1 :: forall (n2 :: Nat) (shn :: [Maybe Nat]) (shp :: [Maybe Nat]) (x :: TK). (KnownNat n2, KnownShX shn, KnownShX shp, KnownSTK x) => SNat n2 -> ADVal target ('TKX2 (shp ++ shn) x) -> (IntOf (ADVal target) -> IxXOf (ADVal target) shp) -> ADVal target ('TKX2 ('Just n2 ': shn) x) Source #

trfloor :: forall r r2 (n :: Nat). (GoodScalar r, RealFrac r, GoodScalar r2, Integral r2) => ADVal target (TKR n r) -> ADVal target (TKR n r2) Source #

trfromIntegral :: forall r1 r2 (n :: Nat). (GoodScalar r1, Integral r1, GoodScalar r2) => ADVal target (TKR n r1) -> ADVal target (TKR n r2) Source #

trcast :: forall r1 r2 (n :: Nat). (RealFrac r1, GoodScalar r1, RealFrac r2, GoodScalar r2) => ADVal target (TKR n r1) -> ADVal target (TKR n r2) Source #

trminIndex :: forall (n :: Natural) r r2. (GoodScalar r, GoodScalar r2) => ADVal target (TKR (1 + n) r) -> ADVal target (TKR n r2) Source #

trmaxIndex :: forall (n :: Natural) r r2. (GoodScalar r, GoodScalar r2) => ADVal target (TKR (1 + n) r) -> ADVal target (TKR n r2) Source #

triota :: GoodScalar r => Int -> ADVal target (TKR 1 r) Source #

tsfloor :: forall r r2 (sh :: [Nat]). (GoodScalar r, RealFrac r, GoodScalar r2, Integral r2) => ADVal target (TKS sh r) -> ADVal target (TKS sh r2) Source #

tsfromIntegral :: forall r1 r2 (sh :: [Nat]). (GoodScalar r1, Integral r1, GoodScalar r2) => ADVal target (TKS sh r1) -> ADVal target (TKS sh r2) Source #

tscast :: forall r1 r2 (sh :: [Nat]). (RealFrac r1, GoodScalar r1, RealFrac r2, GoodScalar r2) => ADVal target (TKS sh r1) -> ADVal target (TKS sh r2) Source #

tsminIndex :: forall (n :: Nat) (sh :: [Nat]) r r2. (GoodScalar r, GoodScalar r2) => ADVal target (TKS (n ': sh) r) -> ADVal target (TKS (Init (n ': sh)) r2) Source #

tsmaxIndex :: forall (n :: Nat) (sh :: [Nat]) r r2. (GoodScalar r, GoodScalar r2) => ADVal target (TKS (n ': sh) r) -> ADVal target (TKS (Init (n ': sh)) r2) Source #

tsiota :: forall (n :: Nat) r. (KnownNat n, GoodScalar r) => ADVal target (TKS '[n] r) Source #

txfloor :: forall r r2 (sh :: [Maybe Nat]). (GoodScalar r, RealFrac r, GoodScalar r2, Integral r2) => ADVal target (TKX sh r) -> ADVal target (TKX sh r2) Source #

txfromIntegral :: forall r1 r2 (sh :: [Maybe Nat]). (GoodScalar r1, Integral r1, GoodScalar r2) => ADVal target (TKX sh r1) -> ADVal target (TKX sh r2) Source #

txcast :: forall r1 r2 (sh :: [Maybe Nat]). (RealFrac r1, GoodScalar r1, RealFrac r2, GoodScalar r2) => ADVal target (TKX sh r1) -> ADVal target (TKX sh r2) Source #

txminIndex :: forall (mn :: Maybe Nat) (sh :: [Maybe Nat]) r r2. (GoodScalar r, GoodScalar r2) => ADVal target (TKX (mn ': sh) r) -> ADVal target (TKX (Init (mn ': sh)) r2) Source #

txmaxIndex :: forall (mn :: Maybe Nat) (sh :: [Maybe Nat]) r r2. (GoodScalar r, GoodScalar r2) => ADVal target (TKX (mn ': sh) r) -> ADVal target (TKX (Init (mn ': sh)) r2) Source #

txiota :: forall (n :: Nat) r. (KnownNat n, GoodScalar r) => ADVal target (TKX '['Just n] r) Source #

tkfloor :: (GoodScalar r, RealFrac r, GoodScalar r2, Integral r2) => ADVal target ('TKScalar r) -> ADVal target ('TKScalar r2) Source #

tkfromIntegral :: (GoodScalar r1, Integral r1, GoodScalar r2) => ADVal target ('TKScalar r1) -> ADVal target ('TKScalar r2) Source #

tkcast :: (RealFrac r1, GoodScalar r1, RealFrac r2, GoodScalar r2) => ADVal target ('TKScalar r1) -> ADVal target ('TKScalar r2) Source #

trappend :: forall (n :: Natural) (x :: TK). KnownSTK x => ADVal target ('TKR2 (1 + n) x) -> ADVal target ('TKR2 (1 + n) x) -> ADVal target ('TKR2 (1 + n) x) Source #

trslice :: forall (n :: Natural) (x :: TK). KnownSTK x => Int -> Int -> ADVal target ('TKR2 (1 + n) x) -> ADVal target ('TKR2 (1 + n) x) Source #

trreverse :: forall (n :: Natural) (x :: TK). KnownSTK x => ADVal target ('TKR2 (1 + n) x) -> ADVal target ('TKR2 (1 + n) x) Source #

trtranspose :: forall (n :: Nat) (x :: TK). KnownSTK x => PermR -> ADVal target ('TKR2 n x) -> ADVal target ('TKR2 n x) Source #

trreshape :: forall (n :: Nat) (m :: Nat) (x :: TK). KnownSTK x => IShR m -> ADVal target ('TKR2 n x) -> ADVal target ('TKR2 m x) Source #

tsappend :: forall (m :: Nat) (n :: Nat) (sh :: [Nat]) (x :: TK). KnownSTK x => ADVal target ('TKS2 (m ': sh) x) -> ADVal target ('TKS2 (n ': sh) x) -> ADVal target ('TKS2 ((m + n) ': sh) x) Source #

tsslice :: forall (i :: Nat) (n :: Nat) (k :: Nat) (sh :: [Natural]) (x :: TK). KnownSTK x => SNat i -> SNat n -> SNat k -> ADVal target ('TKS2 (((i + n) + k) ': sh) x) -> ADVal target ('TKS2 (n ': sh) x) Source #

tsreverse :: forall (n :: Nat) (sh :: [Nat]) (x :: TK). KnownSTK x => ADVal target ('TKS2 (n ': sh) x) -> ADVal target ('TKS2 (n ': sh) x) Source #

tstranspose :: forall (perm :: [Natural]) (sh :: [Nat]) (x :: TK). (IsPermutation perm, Rank perm <= Rank sh, KnownSTK x) => Perm perm -> ADVal target ('TKS2 sh x) -> ADVal target ('TKS2 (PermutePrefix perm sh) x) Source #

tsreshape :: forall (sh :: [Natural]) (sh2 :: [Natural]) (x :: TK). (Product sh ~ Product sh2, KnownSTK x) => ShS sh2 -> ADVal target ('TKS2 sh x) -> ADVal target ('TKS2 sh2 x) Source #

txappend :: forall (m :: Nat) (n :: Nat) (sh :: [Maybe Nat]) (x :: TK). KnownSTK x => ADVal target ('TKX2 ('Just m ': sh) x) -> ADVal target ('TKX2 ('Just n ': sh) x) -> ADVal target ('TKX2 ('Just (m + n) ': sh) x) Source #

txslice :: forall (i :: Nat) (n :: Nat) (k :: Nat) (sh :: [Maybe Natural]) (x :: TK). KnownSTK x => SNat i -> SNat n -> SNat k -> ADVal target ('TKX2 ('Just ((i + n) + k) ': sh) x) -> ADVal target ('TKX2 ('Just n ': sh) x) Source #

txreverse :: forall (mn :: Maybe Nat) (sh :: [Maybe Nat]) (x :: TK). KnownSTK x => ADVal target ('TKX2 (mn ': sh) x) -> ADVal target ('TKX2 (mn ': sh) x) Source #

txtranspose :: forall (perm :: [Natural]) (sh :: [Maybe Nat]) (x :: TK). (IsPermutation perm, Rank perm <= Rank sh, KnownSTK x) => Perm perm -> ADVal target ('TKX2 sh x) -> ADVal target ('TKX2 (PermutePrefix perm sh) x) Source #

txreshape :: forall (sh :: [Maybe Nat]) (sh2 :: [Maybe Nat]) (x :: TK). KnownSTK x => IShX sh2 -> ADVal target ('TKX2 sh x) -> ADVal target ('TKX2 sh2 x) Source #

trbuild1 :: forall (n :: Nat) (x :: TK). (KnownNat n, KnownSTK x) => Int -> (IntOf (ADVal target) -> ADVal target ('TKR2 n x)) -> ADVal target ('TKR2 (1 + n) x) Source #

trmap0N :: forall (n :: Nat) (x :: TK) (x1 :: TK). (KnownNat n, KnownSTK x, KnownSTK x1) => (ADVal target ('TKR2 0 x1) -> ADVal target ('TKR2 0 x)) -> ADVal target ('TKR2 n x1) -> ADVal target ('TKR2 n x) Source #

trzipWith0N :: forall (n :: Nat) (x :: TK) (x1 :: TK) (x2 :: TK). (KnownNat n, KnownSTK x, KnownSTK x1, KnownSTK x2) => (ADVal target ('TKR2 0 x1) -> ADVal target ('TKR2 0 x2) -> ADVal target ('TKR2 0 x)) -> ADVal target ('TKR2 n x1) -> ADVal target ('TKR2 n x2) -> ADVal target ('TKR2 n x) Source #

tsbuild1 :: forall (k :: Nat) (sh :: [Nat]) (x :: TK). (KnownNat k, KnownShS sh, KnownSTK x) => (IntOf (ADVal target) -> ADVal target ('TKS2 sh x)) -> ADVal target ('TKS2 (k ': sh) x) Source #

tsmap0N :: forall (sh :: [Nat]) (x :: TK) (x1 :: TK). (KnownShS sh, KnownSTK x, KnownSTK x1) => (ADVal target ('TKS2 ('[] :: [Nat]) x1) -> ADVal target ('TKS2 ('[] :: [Nat]) x)) -> ADVal target ('TKS2 sh x1) -> ADVal target ('TKS2 sh x) Source #

tszipWith0N :: forall (sh :: [Nat]) (x :: TK) (x1 :: TK) (x2 :: TK). (KnownShS sh, KnownSTK x, KnownSTK x1, KnownSTK x2) => (ADVal target ('TKS2 ('[] :: [Nat]) x1) -> ADVal target ('TKS2 ('[] :: [Nat]) x2) -> ADVal target ('TKS2 ('[] :: [Nat]) x)) -> ADVal target ('TKS2 sh x1) -> ADVal target ('TKS2 sh x2) -> ADVal target ('TKS2 sh x) Source #

txbuild1 :: forall (k :: Nat) (sh :: [Maybe Nat]) (x :: TK). (KnownNat k, KnownShX sh, KnownSTK x) => (IntOf (ADVal target) -> ADVal target ('TKX2 sh x)) -> ADVal target ('TKX2 ('Just k ': sh) x) Source #

tbuild1 :: forall (y :: TK) (k :: Nat). ConvertTensor (ADVal target) => SNat k -> SingletonTK y -> (IntOf (ADVal target) -> ADVal target y) -> ADVal target (BuildTensorKind k y) Source #

tmapAccumRDer :: forall (accy :: TK) (by :: TK) (ey :: TK) (k :: Nat). Proxy (ADVal target) -> SNat k -> FullShapeTK accy -> FullShapeTK by -> FullShapeTK ey -> HFunOf (ADVal target) ('TKProduct accy ey) ('TKProduct accy by) -> HFunOf (ADVal target) ('TKProduct (ADTensorKind ('TKProduct accy ey)) ('TKProduct accy ey)) (ADTensorKind ('TKProduct accy by)) -> HFunOf (ADVal target) ('TKProduct (ADTensorKind ('TKProduct accy by)) ('TKProduct accy ey)) (ADTensorKind ('TKProduct accy ey)) -> ADVal target accy -> ADVal target (BuildTensorKind k ey) -> ADVal target ('TKProduct accy (BuildTensorKind k by)) Source #

tmapAccumLDer :: forall (accy :: TK) (by :: TK) (ey :: TK) (k :: Nat). Proxy (ADVal target) -> SNat k -> FullShapeTK accy -> FullShapeTK by -> FullShapeTK ey -> HFunOf (ADVal target) ('TKProduct accy ey) ('TKProduct accy by) -> HFunOf (ADVal target) ('TKProduct (ADTensorKind ('TKProduct accy ey)) ('TKProduct accy ey)) (ADTensorKind ('TKProduct accy by)) -> HFunOf (ADVal target) ('TKProduct (ADTensorKind ('TKProduct accy by)) ('TKProduct accy ey)) (ADTensorKind ('TKProduct accy ey)) -> ADVal target accy -> ADVal target (BuildTensorKind k ey) -> ADVal target ('TKProduct accy (BuildTensorKind k by)) Source #

tApply :: forall (x :: TK) (z :: TK). HFunOf (ADVal target) x z -> ADVal target x -> ADVal target z Source #

tlambda :: forall (x :: TK) (z :: TK). FullShapeTK x -> HFun x z -> HFunOf (ADVal target) x z Source #

tgrad :: forall (x :: TK) r. FullShapeTK x -> HFun x ('TKScalar r) -> HFunOf (ADVal target) x (ADTensorKind x) Source #

tvjp :: forall (x :: TK) (z :: TK). FullShapeTK x -> HFun x z -> HFunOf (ADVal target) ('TKProduct (ADTensorKind z) x) (ADTensorKind x) Source #

tjvp :: forall (x :: TK) (z :: TK). FullShapeTK x -> HFun x z -> HFunOf (ADVal target) ('TKProduct (ADTensorKind x) x) (ADTensorKind z) Source #

tprimalPart :: forall (y :: TK). ADVal target y -> PrimalOf (ADVal target) y Source #

tdualPart :: forall (y :: TK). SingletonTK y -> ADVal target y -> DualOf (ADVal target) y Source #

tfromPrimal :: forall (y :: TK). SingletonTK y -> PrimalOf (ADVal target) y -> ADVal target y Source #

tfromDual :: forall (y :: TK). DualOf (ADVal target) y -> ADVal target y Source #

tScale :: forall (y :: TK). (Num (ADVal target y), Num (PrimalOf (ADVal target) y)) => SingletonTK y -> PrimalOf (ADVal target) y -> DualOf (ADVal target) y -> DualOf (ADVal target) y Source #

tsum :: forall (z :: TK) (k :: Nat). ConvertTensor (ADVal target) => SNat k -> SingletonTK z -> ADVal target (BuildTensorKind k z) -> ADVal target z Source #

treplicate :: forall (z :: TK) (k :: Nat). ConvertTensor (ADVal target) => SNat k -> SingletonTK z -> ADVal target z -> ADVal target (BuildTensorKind k z) Source #

tindexBuild :: forall (z :: TK) (k :: Nat). ConvertTensor (ADVal target) => SNat k -> SingletonTK z -> ADVal target (BuildTensorKind k z) -> IntOf (ADVal target) -> ADVal target z Source #

treplTarget :: forall (y :: TK). (forall r. GoodScalar r => r) -> FullShapeTK y -> ADVal target y Source #

tdefTarget :: forall (y :: TK). FullShapeTK y -> ADVal target y Source #

taddTarget :: forall (y :: TK). SingletonTK y -> ADVal target y -> ADVal target y -> ADVal target y Source #

tmultTarget :: forall (y :: TK). SingletonTK y -> ADVal target y -> ADVal target y -> ADVal target y Source #

tsum0Target :: forall (y :: TK). FullShapeTK y -> ADVal target y -> ADVal target ('TKScalar Double) Source #

tdot0Target :: forall (y :: TK). FullShapeTK y -> ADVal target y -> ADVal target y -> ADVal target ('TKScalar Double) Source #

xmcast :: forall (x :: TK) (sh :: [Maybe Nat]) (sh2 :: [Maybe Nat]). (KnownSTK x, KnownShX sh, Rank sh ~ Rank sh2, ConvertTensor (ADVal target)) => StaticShX sh2 -> ADVal target ('TKX2 sh x) -> ADVal target ('TKX2 sh2 x) Source #

(ADReadyNoLet target, ShareTensor target, ShareTensor (PrimalOf target)) => LetTensor (ADVal target) Source # 
Instance details

Defined in HordeAd.Core.OpsADVal

Methods

ttlet :: forall (x :: TK) (z :: TK). ADVal target x -> (ADVal target x -> ADVal target z) -> ADVal target z Source #

ttletPrimal :: forall (x :: TK) (z :: TK). PrimalOf (ADVal target) x -> (PrimalOf (ADVal target) x -> ADVal target z) -> ADVal target z Source #

toShare :: forall (y :: TK). ADVal target y -> ShareOf (ADVal target) y Source #

tunshare :: forall (y :: TK). ShareOf (ADVal target) y -> ADVal target y Source #

tappend :: forall (m :: Nat) (n :: Nat) (y :: TK). BaseTensor (ADVal target) => SNat m -> SNat n -> SingletonTK y -> ADVal target (BuildTensorKind m y) -> ADVal target (BuildTensorKind n y) -> ADVal target (BuildTensorKind (m + n) y) Source #

tD :: forall (y :: TK). BaseTensor (ADVal target) => SingletonTK y -> PrimalOf (ADVal target) y -> DualOf (ADVal target) y -> ADVal target y Source #

tfold :: forall (yn :: TK) (ym :: TK) (k :: Nat). BaseTensor (ADVal target) => SNat k -> SingletonTK yn -> SingletonTK ym -> (forall (f :: Target). ADReady f => f yn -> f ym -> f yn) -> ADVal target yn -> ADVal target (BuildTensorKind k ym) -> ADVal target yn Source #

tscan :: forall (yn :: TK) (ym :: TK) (k :: Nat). BaseTensor (ADVal target) => SNat k -> SingletonTK yn -> SingletonTK ym -> (forall (f :: Target). ADReady f => f yn -> f ym -> f yn) -> ADVal target yn -> ADVal target (BuildTensorKind k ym) -> ADVal target (BuildTensorKind (1 + k) yn) Source #

(ADReadyNoLet target, ShareTensor target) => ShareTensor (ADVal target) Source # 
Instance details

Defined in HordeAd.Core.OpsADVal

Methods

tshare :: forall (y :: TK). ADVal target y -> ADVal target y Source #

tunpair :: forall (x :: TK) (z :: TK). ADVal target ('TKProduct x z) -> (ADVal target x, ADVal target z) Source #

tunravelToListShare :: forall (y :: TK) (k :: Nat). (BaseTensor (ADVal target), ConvertTensor (ADVal target)) => SNat k -> SingletonTK y -> ADVal target (BuildTensorKind k y) -> [ADVal target y] Source #

EqH f ('TKScalar r) => EqH (ADVal f) ('TKScalar r) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

(==.) :: ADVal f ('TKScalar r) -> ADVal f ('TKScalar r) -> BoolOf (ADVal f) Source #

(/=.) :: ADVal f ('TKScalar r) -> ADVal f ('TKScalar r) -> BoolOf (ADVal f) Source #

OrdH f ('TKScalar r) => OrdH (ADVal f) ('TKScalar r) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

(<.) :: ADVal f ('TKScalar r) -> ADVal f ('TKScalar r) -> BoolOf (ADVal f) Source #

(<=.) :: ADVal f ('TKScalar r) -> ADVal f ('TKScalar r) -> BoolOf (ADVal f) Source #

(>.) :: ADVal f ('TKScalar r) -> ADVal f ('TKScalar r) -> BoolOf (ADVal f) Source #

(>=.) :: ADVal f ('TKScalar r) -> ADVal f ('TKScalar r) -> BoolOf (ADVal f) Source #

EqH f (TKR n r) => EqH (ADVal f) (TKR n r) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

(==.) :: ADVal f (TKR n r) -> ADVal f (TKR n r) -> BoolOf (ADVal f) Source #

(/=.) :: ADVal f (TKR n r) -> ADVal f (TKR n r) -> BoolOf (ADVal f) Source #

EqH f (TKS sh r) => EqH (ADVal f) (TKS sh r) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

(==.) :: ADVal f (TKS sh r) -> ADVal f (TKS sh r) -> BoolOf (ADVal f) Source #

(/=.) :: ADVal f (TKS sh r) -> ADVal f (TKS sh r) -> BoolOf (ADVal f) Source #

EqH f (TKX sh r) => EqH (ADVal f) (TKX sh r) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

(==.) :: ADVal f (TKX sh r) -> ADVal f (TKX sh r) -> BoolOf (ADVal f) Source #

(/=.) :: ADVal f (TKX sh r) -> ADVal f (TKX sh r) -> BoolOf (ADVal f) Source #

OrdH f (TKR n r) => OrdH (ADVal f) (TKR n r) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

(<.) :: ADVal f (TKR n r) -> ADVal f (TKR n r) -> BoolOf (ADVal f) Source #

(<=.) :: ADVal f (TKR n r) -> ADVal f (TKR n r) -> BoolOf (ADVal f) Source #

(>.) :: ADVal f (TKR n r) -> ADVal f (TKR n r) -> BoolOf (ADVal f) Source #

(>=.) :: ADVal f (TKR n r) -> ADVal f (TKR n r) -> BoolOf (ADVal f) Source #

OrdH f (TKS sh r) => OrdH (ADVal f) (TKS sh r) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

(<.) :: ADVal f (TKS sh r) -> ADVal f (TKS sh r) -> BoolOf (ADVal f) Source #

(<=.) :: ADVal f (TKS sh r) -> ADVal f (TKS sh r) -> BoolOf (ADVal f) Source #

(>.) :: ADVal f (TKS sh r) -> ADVal f (TKS sh r) -> BoolOf (ADVal f) Source #

(>=.) :: ADVal f (TKS sh r) -> ADVal f (TKS sh r) -> BoolOf (ADVal f) Source #

OrdH f (TKX sh r) => OrdH (ADVal f) (TKX sh r) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

(<.) :: ADVal f (TKX sh r) -> ADVal f (TKX sh r) -> BoolOf (ADVal f) Source #

(<=.) :: ADVal f (TKX sh r) -> ADVal f (TKX sh r) -> BoolOf (ADVal f) Source #

(>.) :: ADVal f (TKX sh r) -> ADVal f (TKX sh r) -> BoolOf (ADVal f) Source #

(>=.) :: ADVal f (TKX sh r) -> ADVal f (TKX sh r) -> BoolOf (ADVal f) Source #

(Floating (f z), ShareTensor f, ADReadyNoLet f) => Floating (ADVal f z) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

pi :: ADVal f z #

exp :: ADVal f z -> ADVal f z #

log :: ADVal f z -> ADVal f z #

sqrt :: ADVal f z -> ADVal f z #

(**) :: ADVal f z -> ADVal f z -> ADVal f z #

logBase :: ADVal f z -> ADVal f z -> ADVal f z #

sin :: ADVal f z -> ADVal f z #

cos :: ADVal f z -> ADVal f z #

tan :: ADVal f z -> ADVal f z #

asin :: ADVal f z -> ADVal f z #

acos :: ADVal f z -> ADVal f z #

atan :: ADVal f z -> ADVal f z #

sinh :: ADVal f z -> ADVal f z #

cosh :: ADVal f z -> ADVal f z #

tanh :: ADVal f z -> ADVal f z #

asinh :: ADVal f z -> ADVal f z #

acosh :: ADVal f z -> ADVal f z #

atanh :: ADVal f z -> ADVal f z #

log1p :: ADVal f z -> ADVal f z #

expm1 :: ADVal f z -> ADVal f z #

log1pexp :: ADVal f z -> ADVal f z #

log1mexp :: ADVal f z -> ADVal f z #

(RealFloat (f z), ShareTensor f, ADReadyNoLet f) => RealFloat (ADVal f z) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

floatRadix :: ADVal f z -> Integer #

floatDigits :: ADVal f z -> Int #

floatRange :: ADVal f z -> (Int, Int) #

decodeFloat :: ADVal f z -> (Integer, Int) #

encodeFloat :: Integer -> Int -> ADVal f z #

exponent :: ADVal f z -> Int #

significand :: ADVal f z -> ADVal f z #

scaleFloat :: Int -> ADVal f z -> ADVal f z #

isNaN :: ADVal f z -> Bool #

isInfinite :: ADVal f z -> Bool #

isDenormalized :: ADVal f z -> Bool #

isNegativeZero :: ADVal f z -> Bool #

isIEEE :: ADVal f z -> Bool #

atan2 :: ADVal f z -> ADVal f z -> ADVal f z #

(GoodScalar r, ShareTensor f, ADReadyNoLet f) => Num (ADVal f ('TKScalar r)) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

(+) :: ADVal f ('TKScalar r) -> ADVal f ('TKScalar r) -> ADVal f ('TKScalar r) #

(-) :: ADVal f ('TKScalar r) -> ADVal f ('TKScalar r) -> ADVal f ('TKScalar r) #

(*) :: ADVal f ('TKScalar r) -> ADVal f ('TKScalar r) -> ADVal f ('TKScalar r) #

negate :: ADVal f ('TKScalar r) -> ADVal f ('TKScalar r) #

abs :: ADVal f ('TKScalar r) -> ADVal f ('TKScalar r) #

signum :: ADVal f ('TKScalar r) -> ADVal f ('TKScalar r) #

fromInteger :: Integer -> ADVal f ('TKScalar r) #

(Num (f z), ShareTensor f, ADReadyNoLet f) => Num (ADVal f z) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

(+) :: ADVal f z -> ADVal f z -> ADVal f z #

(-) :: ADVal f z -> ADVal f z -> ADVal f z #

(*) :: ADVal f z -> ADVal f z -> ADVal f z #

negate :: ADVal f z -> ADVal f z #

abs :: ADVal f z -> ADVal f z #

signum :: ADVal f z -> ADVal f z #

fromInteger :: Integer -> ADVal f z #

(GoodScalar r, Fractional (f ('TKScalar r)), ShareTensor f, ADReadyNoLet f) => Fractional (ADVal f ('TKScalar r)) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

(/) :: ADVal f ('TKScalar r) -> ADVal f ('TKScalar r) -> ADVal f ('TKScalar r) #

recip :: ADVal f ('TKScalar r) -> ADVal f ('TKScalar r) #

fromRational :: Rational -> ADVal f ('TKScalar r) #

(Fractional (f z), ShareTensor f, ADReadyNoLet f) => Fractional (ADVal f z) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

(/) :: ADVal f z -> ADVal f z -> ADVal f z #

recip :: ADVal f z -> ADVal f z #

fromRational :: Rational -> ADVal f z #

(Real (f z), ShareTensor f, ADReadyNoLet f) => Real (ADVal f z) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

toRational :: ADVal f z -> Rational #

(RealFrac (f z), ShareTensor f, ADReadyNoLet f) => RealFrac (ADVal f z) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

properFraction :: Integral b => ADVal f z -> (b, ADVal f z) #

truncate :: Integral b => ADVal f z -> b #

round :: Integral b => ADVal f z -> b #

ceiling :: Integral b => ADVal f z -> b #

floor :: Integral b => ADVal f z -> b #

(Show (f z), Show (Delta f z)) => Show (ADVal f z) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

showsPrec :: Int -> ADVal f z -> ShowS #

show :: ADVal f z -> String #

showList :: [ADVal f z] -> ShowS #

Eq (ADVal f z) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

(==) :: ADVal f z -> ADVal f z -> Bool #

(/=) :: ADVal f z -> ADVal f z -> Bool #

Ord (ADVal f z) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

compare :: ADVal f z -> ADVal f z -> Ordering #

(<) :: ADVal f z -> ADVal f z -> Bool #

(<=) :: ADVal f z -> ADVal f z -> Bool #

(>) :: ADVal f z -> ADVal f z -> Bool #

(>=) :: ADVal f z -> ADVal f z -> Bool #

max :: ADVal f z -> ADVal f z -> ADVal f z #

min :: ADVal f z -> ADVal f z -> ADVal f z #

(IntegralH (f z), ShareTensor f, ADReadyNoLet f) => IntegralH (ADVal f z) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

quotH :: ADVal f z -> ADVal f z -> ADVal f z Source #

remH :: ADVal f z -> ADVal f z -> ADVal f z Source #

(Fractional (f z), RealFloatH (f z), ShareTensor f, ADReadyNoLet f) => RealFloatH (ADVal f z) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

Methods

atan2H :: ADVal f z -> ADVal f z -> ADVal f z Source #

type BoolOf (ADVal f) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

type BoolOf (ADVal f) = BoolOf f
type DualOf (ADVal f) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

type DualOf (ADVal f) = Delta f
type PrimalOf (ADVal f) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

type PrimalOf (ADVal f) = f
type ShareOf (ADVal f) Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

type ShareOf (ADVal f) = ADVal f
type HFunOf (ADVal f) x y Source # 
Instance details

Defined in HordeAd.Core.CarriersADVal

type HFunOf (ADVal f) x y = HFun x y

pattern D :: f z -> Delta f z -> ADVal f z Source #

dD :: forall f (z :: TK). f z -> Delta f z -> ADVal f z Source #

Smart constructor for ADVal that additionally records delta expression sharing information (regardless if the primal part of the dual number is an AST term or not). The bare constructor should not (and cannot) be used for constructing values, but only for deconstructing dual numbers via pattern-matching.

dDnotShared :: forall f (z :: TK). f z -> Delta f z -> ADVal f z Source #

This is a not so smart constructor for ADVal that does not record sharing information. If used in contexts where duplication occurs, it may cause exponential blowup when a delta expression is evaluated in backpropagation phase. In contexts without duplication, it saves some evaluation time and memory (in delta term structure, but even more in the per-node data stored while evaluating).

Auxiliary definitions

unDeltaPair :: forall (target :: Target) (x :: TK) (y :: TK). Delta target ('TKProduct x y) -> (Delta target x, Delta target y) Source #

unDeltaPairUnshared :: forall (target :: Target) (x :: TK) (y :: TK). Delta target ('TKProduct x y) -> (Delta target x, Delta target y) Source #

dScale :: forall f (z :: TK). Num (f z) => f z -> Delta f z -> Delta f z Source #

dAdd :: forall (f :: TK -> Type) (z :: TK). Num (f z) => Delta f z -> Delta f z -> Delta f z Source #

dSFromR :: forall (sh :: [Nat]) (x :: TK) (target :: Target). ShS sh -> Delta target ('TKR2 (Rank sh) x) -> Delta target ('TKS2 sh x) Source #

dSFromX :: forall (sh :: [Nat]) (sh' :: [Maybe Nat]) (x :: TK) (target :: Target). Rank sh ~ Rank sh' => ShS sh -> Delta target ('TKX2 sh' x) -> Delta target ('TKS2 sh x) Source #

dXFromS :: forall (sh :: [Nat]) (sh' :: [Maybe Nat]) (x :: TK) (target :: Target). Rank sh ~ Rank sh' => StaticShX sh' -> Delta target ('TKS2 sh x) -> Delta target ('TKX2 sh' x) Source #

ensureToplevelSharing :: forall (f :: Target) (z :: TK). ADVal f z -> ADVal f z Source #

Add sharing information to the top level of a term, presumably constructed using multiple applications of the dDnotShared operation. The resulting term may not have sharing information inside, but is ready to be shared as a whole.

scaleNotShared :: forall f (z :: TK). Num (f z) => f z -> ADVal f z -> ADVal f z Source #

addNotShared :: forall (f :: TK -> Type) (z :: TK). Num (f z) => ADVal f z -> ADVal f z -> ADVal f z Source #

multNotShared :: forall (f :: TK -> Type) (z :: TK). Num (f z) => ADVal f z -> ADVal f z -> ADVal f z Source #

generateDeltaInputs :: forall (x :: TK) (target :: Target). FullShapeTK x -> Delta target x Source #