| Portability | GHC only |
|---|---|
| Stability | experimental |
| Maintainer | ekmett@gmail.com |
| Safe Haskell | None |
Numeric.AD.Internal.Chain
Description
Reverse-Mode Automatic Differentiation using a single tape.
This version uses Data.Reflection to find and update the tape
This is asymptotically faster than using Reverse, which
is forced to reify and topologically sort the graph, but it requires
a fairly expensive rendezvous during construction.
- data Chain s a where
- newtype Tape = Tape {}
- data Head = Head !Int Cells
- data Cells where
- reifyTape :: Int -> (forall s. Reifies s Tape => Proxy s -> r) -> r
- partials :: forall s a. (Reifies s Tape, Num a) => AD (Chain s) a -> [a]
- partialArrayOf :: (Reifies s Tape, Num a) => Proxy s -> (Int, Int) -> AD (Chain s) a -> Array Int a
- partialMapOf :: (Reifies s Tape, Num a) => Proxy s -> AD (Chain s) a -> IntMap a
- derivativeOf :: (Reifies s Tape, Num a) => Proxy s -> AD (Chain s) a -> a
- derivativeOf' :: (Reifies s Tape, Num a) => Proxy s -> AD (Chain s) a -> (a, a)
Documentation
reifyTape :: Int -> (forall s. Reifies s Tape => Proxy s -> r) -> rSource
Construct a tape that starts with n variables.
partials :: forall s a. (Reifies s Tape, Num a) => AD (Chain s) a -> [a]Source
Extract the partials from the current chain for a given AD variable.
partialArrayOf :: (Reifies s Tape, Num a) => Proxy s -> (Int, Int) -> AD (Chain s) a -> Array Int aSource
partialMapOf :: (Reifies s Tape, Num a) => Proxy s -> AD (Chain s) a -> IntMap aSource
Return an IntMap of sparse partials