diff options
Diffstat (limited to 'src/CHAD/Types')
| -rw-r--r-- | src/CHAD/Types/ToTan.hs | 43 |
1 files changed, 0 insertions, 43 deletions
diff --git a/src/CHAD/Types/ToTan.hs b/src/CHAD/Types/ToTan.hs deleted file mode 100644 index 888fed4..0000000 --- a/src/CHAD/Types/ToTan.hs +++ /dev/null @@ -1,43 +0,0 @@ -{-# LANGUAGE GADTs #-} -module CHAD.Types.ToTan where - -import Data.Bifunctor (bimap) - -import Array -import AST.Types -import CHAD.Types -import Data -import ForwardAD -import Interpreter.Rep - - -toTanE :: SList STy env -> SList Value env -> SList Value (D2E env) -> SList Value (TanE env) -toTanE SNil SNil SNil = SNil -toTanE (t `SCons` env) (Value p `SCons` primal) (Value x `SCons` inp) = - Value (toTan t p x) `SCons` toTanE env primal inp - -toTan :: STy t -> Rep t -> Rep (D2 t) -> Rep (Tan t) -toTan typ primal der = case typ of - STNil -> der - STPair t1 t2 -> bimap (\p1 -> toTan t1 p1 (fst der)) (\p2 -> toTan t2 p2 (snd der)) primal - STEither t1 t2 -> case der of - Nothing -> bimap (zeroTan t1) (zeroTan t2) primal - Just d -> case (primal, d) of - (Left p, Left d') -> Left (toTan t1 p d') - (Right p, Right d') -> Right (toTan t2 p d') - _ -> error "Primal and cotangent disagree on Either alternative" - STLEither t1 t2 -> case (primal, der) of - (_, Nothing) -> Nothing - (Just (Left p), Just (Left d)) -> Just (Left (toTan t1 p d)) - (Just (Right p), Just (Right d)) -> Just (Right (toTan t2 p d)) - _ -> error "Primal and cotangent disagree on LEither alternative" - STMaybe t -> liftA2 (toTan t) primal der - STArr _ t - | arrayShape primal == arrayShape der -> - arrayGenerateLin (arrayShape primal) $ \i -> - toTan t (arrayIndexLinear primal i) (arrayIndexLinear der i) - | otherwise -> - error "Primal and cotangent disagree on array shape" - STScal sty -> case sty of - STI32 -> der ; STI64 -> der ; STF32 -> der ; STF64 -> der ; STBool -> der - STAccum{} -> error "Accumulators not allowed in input program" |
