diff options
author | Tom Smeding <tom@tomsmeding.com> | 2024-11-10 10:04:27 +0100 |
---|---|---|
committer | Tom Smeding <tom@tomsmeding.com> | 2024-11-10 10:04:27 +0100 |
commit | 42d59947356ab51e5a4070b930f02f4909208d35 (patch) | |
tree | 3c8afab888e61c4e3157a257f0a40ae2fd4eb9c1 /src/CHAD.hs | |
parent | 33e0ed21603cbd85d6aba6548811db27480647db (diff) |
Complete GMM implementation
Diffstat (limited to 'src/CHAD.hs')
-rw-r--r-- | src/CHAD.hs | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/CHAD.hs b/src/CHAD.hs index fb6f5e3..59d61a7 100644 --- a/src/CHAD.hs +++ b/src/CHAD.hs @@ -262,6 +262,7 @@ d1op OToFl64 e = EOp ext OToFl64 e d1op (ORecip t) e = EOp ext (ORecip t) e d1op (OExp t) e = EOp ext (OExp t) e d1op (OLog t) e = EOp ext (OLog t) e +d1op (OIDiv t) e = EOp ext (OIDiv t) e -- | Both primal and dual must be duplicable expressions data D2Op a t = Linear (forall env. Ex env (D2 t) -> Ex env (D2 a)) @@ -286,6 +287,7 @@ d2op op = case op of ORecip t -> floatingD2 t $ Nonlinear $ \e d -> EOp ext (OMul t) (EPair ext (EOp ext (ONeg t) (EOp ext (ORecip t) (EOp ext (OMul t) (EPair ext e e)))) d) OExp t -> floatingD2 t $ Nonlinear $ \e d -> EOp ext (OMul t) (EPair ext (EOp ext (OExp t) e) d) OLog t -> floatingD2 t $ Nonlinear $ \e d -> EOp ext (OMul t) (EPair ext (EOp ext (ORecip t) e) d) + OIDiv t -> integralD2 t $ Linear $ \_ -> EInl ext (STPair STNil STNil) (ENil ext) where d2opUnArrangeInt :: SScalTy a -> (D2s a ~ TScal a => D2Op (TScal a) t) @@ -312,6 +314,11 @@ d2op op = case op of floatingD2 STF32 k = k floatingD2 STF64 k = k + integralD2 :: ScalIsIntegral a ~ True + => SScalTy a -> ((D2s a ~ TNil, ScalIsNumeric a ~ True) => r) -> r + integralD2 STI32 k = k + integralD2 STI64 k = k + sD1eEnv :: Descr env sto -> SList STy (D1E env) sD1eEnv DTop = SNil sD1eEnv (DPush d (t, _)) = SCons (d1 t) (sD1eEnv d) |