packages feed

backprop 0.2.7.0 → 0.2.7.1

raw patch · 3 files changed

+53/−8 lines, 3 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Numeric.Backprop.Internal: data W
+ Numeric.Backprop.Internal: BRC :: BRef s
+ Numeric.Backprop.Internal: BRInp :: !Int -> BRef s
+ Numeric.Backprop.Internal: BRIx :: !Int -> BRef s
+ Numeric.Backprop.Internal: BV :: !BRef s -> !a -> BVar s a
+ Numeric.Backprop.Internal: R :: !MVector s (Maybe (Any :: Type)) -> !MVector s (Maybe (Any :: Type)) -> Runner s
+ Numeric.Backprop.Internal: W :: IORef (Int, [SomeTapeNode]) -> W
+ Numeric.Backprop.Internal: [STN] :: forall a. !TapeNode a -> SomeTapeNode
+ Numeric.Backprop.Internal: [TN] :: forall (as :: [Type]) a. !Rec InpRef as -> !a -> Rec Identity as -> TapeNode a
+ Numeric.Backprop.Internal: [_bvRef] :: BVar s a -> !BRef s
+ Numeric.Backprop.Internal: [_bvVal] :: BVar s a -> !a
+ Numeric.Backprop.Internal: [_rDelta] :: Runner s -> !MVector s (Maybe (Any :: Type))
+ Numeric.Backprop.Internal: [_rInputs] :: Runner s -> !MVector s (Maybe (Any :: Type))
+ Numeric.Backprop.Internal: [wRef] :: W -> IORef (Int, [SomeTapeNode])
+ Numeric.Backprop.Internal: bumpMaybe :: a -> (a -> b -> b) -> (a -> b) -> Maybe b -> Maybe b
+ Numeric.Backprop.Internal: bvConst :: BVar s a -> Maybe a
+ Numeric.Backprop.Internal: data BRef s
+ Numeric.Backprop.Internal: data Runner s
+ Numeric.Backprop.Internal: data SomeTapeNode
+ Numeric.Backprop.Internal: data TapeNode a
+ Numeric.Backprop.Internal: fillWengert :: forall (as :: [Type]) b. (forall s. Reifies s W => Rec (BVar s) as -> BVar s b) -> Rec Identity as -> IO (Either Int (Int, [SomeTapeNode]), b)
+ Numeric.Backprop.Internal: forceBVar :: BVar s a -> ()
+ Numeric.Backprop.Internal: forceInpRef :: InpRef a -> ()
+ Numeric.Backprop.Internal: forceSomeTapeNode :: SomeTapeNode -> ()
+ Numeric.Backprop.Internal: forceTapeNode :: TapeNode a -> ()
+ Numeric.Backprop.Internal: gradRunner :: b -> Runner s -> (Int, [SomeTapeNode]) -> ST s ()
+ Numeric.Backprop.Internal: initRunner :: (Int, [SomeTapeNode]) -> (Int, [Maybe (Any :: Type)]) -> ST s (Runner s)
+ Numeric.Backprop.Internal: initWengert :: IO W
+ Numeric.Backprop.Internal: insertNode :: TapeNode a -> a -> W -> IO (BVar s a)
+ Numeric.Backprop.Internal: newtype W

Files

CHANGELOG.md view
@@ -1,6 +1,16 @@ Changelog ========= +Version 0.2.7.1+---------------++*June 1, 2025*++<https://github.com/mstksg/backprop/releases/tag/v0.2.7.1>++*   Actually export internal constructors and utilities in+    `Numeric.Backprop.Internal`.+ Version 0.2.7.0 --------------- 
backprop.cabal view
@@ -1,6 +1,6 @@ cabal-version:      1.12 name:               backprop-version:            0.2.7.0+version:            0.2.7.1 synopsis:           Heterogeneous automatic differentation description:   Write your functions to compute your result, and the library will
src/Numeric/Backprop/Internal.hs view
@@ -35,8 +35,9 @@ -- -- @since 0.2.7.0 module Numeric.Backprop.Internal (-  BVar,-  W,+  -- * Exported for re-use+  BVar (..),+  W (..),   backpropWithN,   evalBPN,   constVar,@@ -66,6 +67,23 @@   -- * Debug   debugSTN,   debugIR,++  -- * Only used internally+  TapeNode (..),+  SomeTapeNode (..),+  BRef (..),+  Runner (..),+  initWengert,+  insertNode,+  bvConst,+  forceBVar,+  forceInpRef,+  forceSomeTapeNode,+  forceTapeNode,+  fillWengert,+  bumpMaybe,+  initRunner,+  gradRunner, ) where  import Control.DeepSeq@@ -207,10 +225,12 @@ -- -- See "Numeric.Backprop#liftops" and documentation for -- 'Numeric.Backprop.liftOp' for more information.-data BVar s a = BV-  { _bvRef :: !(BRef s)-  , _bvVal :: !a-  }+data BVar s a+  = -- | @since 0.2.7.1+    BV+    { _bvRef :: !(BRef s)+    , _bvVal :: !a+    }  -- | @since 0.1.5.1 deriving instance Typeable (BVar s a)@@ -218,6 +238,7 @@ -- | @since 0.2.6.3 instance X.IsoHKD (BVar s) a +-- | @since 0.2.7.1 data BRef (s :: Type)   = BRInp !Int   | BRIx !Int@@ -240,6 +261,7 @@ forceBVar (BV r !_) = force r `seq` () {-# INLINE forceBVar #-} +-- | @since 0.2.7.1 data InpRef :: Type -> Type where   IR ::     { _irIx :: !(BVar s b)@@ -248,6 +270,7 @@     } ->     InpRef a +-- | @since 0.2.7.1 forceInpRef :: InpRef a -> () forceInpRef (IR v !_ !_) = forceBVar v `seq` () {-# INLINE forceInpRef #-}@@ -256,6 +279,7 @@ debugIR :: InpRef a -> String debugIR IR{..} = show (_bvRef _irIx) +-- | @since 0.2.7.1 data TapeNode :: Type -> Type where   TN ::     { _tnInputs :: !(Rec InpRef as)@@ -263,16 +287,19 @@     } ->     TapeNode a +-- | @since 0.2.7.1 forceTapeNode :: TapeNode a -> () forceTapeNode (TN inps !_) = VR.rfoldMap forceInpRef inps `seq` () {-# INLINE forceTapeNode #-} +-- | @since 0.2.7.1 data SomeTapeNode :: Type where   STN ::     { _stnNode :: !(TapeNode a)     } ->     SomeTapeNode +-- | @since 0.2.7.1 forceSomeTapeNode :: SomeTapeNode -> () forceSomeTapeNode (STN n) = forceTapeNode n @@ -285,12 +312,16 @@ -- -- For the end user, one can just imagine @'Reifies' s 'W'@ as a required -- constraint on @s@ that allows backpropagation to work.-newtype W = W {wRef :: IORef (Int, [SomeTapeNode])}+newtype W+  = -- | @since 0.2.7.1+    W {wRef :: IORef (Int, [SomeTapeNode])} +-- | @since 0.2.7.1 initWengert :: IO W initWengert = W <$> newIORef (0, []) {-# INLINE initWengert #-} +-- | @since 0.2.7.1 insertNode ::   TapeNode a ->   -- | val@@ -659,11 +690,13 @@   BVar s b coerceVar v@(BV r x) = forceBVar v `seq` BV r (coerce x) +-- | @since 0.2.7.1 data Runner s = R   { _rDelta :: !(MV.MVector s (Maybe Any))   , _rInputs :: !(MV.MVector s (Maybe Any))   } +-- | @since 0.2.7.1 initRunner ::   (Int, [SomeTapeNode]) ->   (Int, [Maybe Any]) ->@@ -677,6 +710,7 @@   return $ R delts inps {-# INLINE initRunner #-} +-- | @since 0.2.7.1 gradRunner ::   forall b s.   () =>@@ -709,6 +743,7 @@     {-# INLINE propagate #-} {-# INLINE gradRunner #-} +-- | @since 0.2.7.1 bumpMaybe ::   -- | val   a ->