packages feed

srtree-3.0.0.0: src/Algorithm/SRTree/AD/CompiledAD.hs

-----------------------------------------------------------------------------
-- |
-- Module      :  Data.SRTree.AD.CompiledAD
-- Copyright   :  (c) Fabricio Olivetti 2021 - 2024
-- License     :  BSD3
-- Maintainer  :  fabricio.olivetti@gmail.com
-- Stability   :  experimental
-- Portability :  FlexibleInstances, DeriveFunctor, ScopedTypeVariables
--
-- Automatic Differentiation for Expression trees
--
-----------------------------------------------------------------------------

module Algorithm.SRTree.AD.CompiledAD
         ( CompiledTree(..)
         ) where

import Data.SRTree.Internal
import qualified Data.Vector.Unboxed          as VU
import qualified Data.Vector as VB

-- ---------------------------------------------------------------------
-- Public entry point -- same signature/behaviour as before.
-- ---------------------------------------------------------------------
data CompiledTree = CompiledTree
  { ctNodes  :: !(VB.Vector (SRTree Int))            -- id -> node, children already resolved to ids
  , ctRoot   :: !Int
  , ctDyn    :: !(VU.Vector Bool)                    -- id -> depends on theta?
  , ctStatic :: VU.Vector Double                     -- flat [staticSlot * m + row]; only static nodes
  , ctStaticBase :: !(VU.Vector Int)                 -- id -> staticSlot * m (0 for dynamic ids and Var leaves)
  , ctM      :: !Int
  , ctNPred  :: !Int                                 -- root + 1 (stride for flat static)
  , ctKind   :: !(VU.Vector Int)                     -- id -> node kind: 0 Var, 1 Param, 2 Const, 3 Uni, 4 Bin
  , ctArg    :: !(VU.Vector Int)                     -- id -> Param: param ix; Var: var ix (-1 = y, -2 = yErr); Uni: child id; Bin: left id
  , ctArg2   :: !(VU.Vector Int)                     -- id -> Bin: right id; else 0
  , ctFcode  :: !(VU.Vector Int)                     -- id -> Uni: fromEnum Function
  , ctOcode  :: !(VU.Vector Int)                     -- id -> Bin: fromEnum Op
  , ctVars   :: !(VB.Vector (VU.Vector Double))      -- leaf source columns xss ++ [y, yErr] (referenced, not copied)
  }