aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Smeding <tom@tomsmeding.com>2026-02-12 20:41:39 +0100
committerTom Smeding <tom@tomsmeding.com>2026-02-12 20:41:39 +0100
commitf5b1b405fa4ba63bdffe0f2998f655f0b06534bf (patch)
tree12f85c50ef7fdee1e7967db9a9835ebb78b7efd9 /src
parent5c756bc9eefcd98ed8448f491ddbc3197eaa4127 (diff)
UnMonoid: EAccum is an interesting caseHEADmaster
Just moved the code, nothing else
Diffstat (limited to 'src')
-rw-r--r--src/CHAD/AST/UnMonoid.hs12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/CHAD/AST/UnMonoid.hs b/src/CHAD/AST/UnMonoid.hs
index a249979..3f8fd2b 100644
--- a/src/CHAD/AST/UnMonoid.hs
+++ b/src/CHAD/AST/UnMonoid.hs
@@ -19,6 +19,12 @@ unMonoid = \case
EDeepZero _ t e -> deepZero t e
EPlus _ t a b -> plus t (unMonoid a) (unMonoid b)
EOneHot _ t p a b -> onehot t p (unMonoid a) (unMonoid b)
+ EAccum _ t p eidx sp eval eacc ->
+ elet (unMonoid eacc) $
+ elet (weakenExpr WSink (unMonoid eidx)) $
+ accumulateSparse (acPrjTy p t) sp (weakenExpr (WSink .> WSink) (unMonoid eval)) $ \w prj2 idx2 val2 ->
+ acPrjCompose SAID p (evar (w @> IZ)) prj2 idx2 $ \prj' idx' ->
+ EAccum ext t prj' (unMonoid idx') (spDense (acPrjTy prj' t)) (unMonoid val2) (evar (w @> IS IZ))
EVar _ t i -> EVar ext t i
ELet _ rhs body -> ELet ext (unMonoid rhs) (unMonoid body)
@@ -58,12 +64,6 @@ unMonoid = \case
ECustom _ t1 t2 t3 a b c e1 e2 -> ECustom ext t1 t2 t3 (unMonoid a) (unMonoid b) (unMonoid c) (unMonoid e1) (unMonoid e2)
ERecompute _ e -> ERecompute ext (unMonoid e)
EWith _ t a b -> EWith ext t (unMonoid a) (unMonoid b)
- EAccum _ t p eidx sp eval eacc ->
- elet (unMonoid eacc) $
- elet (weakenExpr WSink (unMonoid eidx)) $
- accumulateSparse (acPrjTy p t) sp (weakenExpr (WSink .> WSink) (unMonoid eval)) $ \w prj2 idx2 val2 ->
- acPrjCompose SAID p (evar (w @> IZ)) prj2 idx2 $ \prj' idx' ->
- EAccum ext t prj' (unMonoid idx') (spDense (acPrjTy prj' t)) (unMonoid val2) (evar (w @> IS IZ))
EError _ t s -> EError ext t s
zero :: SMTy t -> Ex env (ZeroInfo t) -> Ex env t