packages feed

ad 4.2.4 → 4.3

raw patch · 12 files changed

+247/−34 lines, 12 filesdep +HerbiePluginPVP ok

version bump matches the API change (PVP)

Dependencies added: HerbiePlugin

API changes (from Hackage documentation)

- Numeric.AD.Internal.Dense: instance (Num a, Traversable f) => Mode (Dense f a)
- Numeric.AD.Internal.Dense: instance (Traversable f, Erf a) => Erf (Dense f a)
- Numeric.AD.Internal.Dense: instance (Traversable f, Floating a) => Floating (Dense f a)
- Numeric.AD.Internal.Dense: instance (Traversable f, Fractional a) => Fractional (Dense f a)
- Numeric.AD.Internal.Dense: instance (Traversable f, InvErf a) => InvErf (Dense f a)
- Numeric.AD.Internal.Dense: instance (Traversable f, Num a) => Jacobian (Dense f a)
- Numeric.AD.Internal.Dense: instance (Traversable f, Num a) => Num (Dense f a)
- Numeric.AD.Internal.Dense: instance (Traversable f, Num a, Bounded a) => Bounded (Dense f a)
- Numeric.AD.Internal.Dense: instance (Traversable f, Num a, Enum a) => Enum (Dense f a)
- Numeric.AD.Internal.Dense: instance (Traversable f, Num a, Eq a) => Eq (Dense f a)
- Numeric.AD.Internal.Dense: instance (Traversable f, Num a, Ord a) => Ord (Dense f a)
- Numeric.AD.Internal.Dense: instance (Traversable f, Real a) => Real (Dense f a)
- Numeric.AD.Internal.Dense: instance (Traversable f, RealFloat a) => RealFloat (Dense f a)
- Numeric.AD.Internal.Dense: instance (Traversable f, RealFrac a) => RealFrac (Dense f a)
- Numeric.AD.Internal.Dense: instance Show a => Show (Dense f a)
- Numeric.AD.Internal.Forward: instance (Num a, Bounded a) => Bounded (Forward a)
- Numeric.AD.Internal.Forward: instance (Num a, Enum a) => Enum (Forward a)
- Numeric.AD.Internal.Forward: instance (Num a, Eq a) => Eq (Forward a)
- Numeric.AD.Internal.Forward: instance (Num a, Ord a) => Ord (Forward a)
- Numeric.AD.Internal.Forward: instance Data a => Data (Forward a)
- Numeric.AD.Internal.Forward: instance Erf a => Erf (Forward a)
- Numeric.AD.Internal.Forward: instance Floating a => Floating (Forward a)
- Numeric.AD.Internal.Forward: instance Fractional a => Fractional (Forward a)
- Numeric.AD.Internal.Forward: instance InvErf a => InvErf (Forward a)
- Numeric.AD.Internal.Forward: instance Num a => Jacobian (Forward a)
- Numeric.AD.Internal.Forward: instance Num a => Mode (Forward a)
- Numeric.AD.Internal.Forward: instance Num a => Num (Forward a)
- Numeric.AD.Internal.Forward: instance Real a => Real (Forward a)
- Numeric.AD.Internal.Forward: instance RealFloat a => RealFloat (Forward a)
- Numeric.AD.Internal.Forward: instance RealFrac a => RealFrac (Forward a)
- Numeric.AD.Internal.Forward: instance Show a => Show (Forward a)
- Numeric.AD.Internal.Forward: instance Typeable Forward
- Numeric.AD.Internal.Forward.Double: instance Enum ForwardDouble
- Numeric.AD.Internal.Forward.Double: instance Eq ForwardDouble
- Numeric.AD.Internal.Forward.Double: instance Erf ForwardDouble
- Numeric.AD.Internal.Forward.Double: instance Floating ForwardDouble
- Numeric.AD.Internal.Forward.Double: instance Fractional ForwardDouble
- Numeric.AD.Internal.Forward.Double: instance InvErf ForwardDouble
- Numeric.AD.Internal.Forward.Double: instance Jacobian ForwardDouble
- Numeric.AD.Internal.Forward.Double: instance Mode ForwardDouble
- Numeric.AD.Internal.Forward.Double: instance Num ForwardDouble
- Numeric.AD.Internal.Forward.Double: instance Ord ForwardDouble
- Numeric.AD.Internal.Forward.Double: instance Read ForwardDouble
- Numeric.AD.Internal.Forward.Double: instance Real ForwardDouble
- Numeric.AD.Internal.Forward.Double: instance RealFloat ForwardDouble
- Numeric.AD.Internal.Forward.Double: instance RealFrac ForwardDouble
- Numeric.AD.Internal.Forward.Double: instance Show ForwardDouble
- Numeric.AD.Internal.Forward.Double: primal :: ForwardDouble -> {-# UNPACK #-} !Double
- Numeric.AD.Internal.Forward.Double: tangent :: ForwardDouble -> {-# UNPACK #-} !Double
- Numeric.AD.Internal.Identity: instance Bounded a => Bounded (Id a)
- Numeric.AD.Internal.Identity: instance Data a => Data (Id a)
- Numeric.AD.Internal.Identity: instance Enum a => Enum (Id a)
- Numeric.AD.Internal.Identity: instance Eq a => Eq (Id a)
- Numeric.AD.Internal.Identity: instance Erf a => Erf (Id a)
- Numeric.AD.Internal.Identity: instance Floating a => Floating (Id a)
- Numeric.AD.Internal.Identity: instance Fractional a => Fractional (Id a)
- Numeric.AD.Internal.Identity: instance InvErf a => InvErf (Id a)
- Numeric.AD.Internal.Identity: instance Monoid a => Monoid (Id a)
- Numeric.AD.Internal.Identity: instance Num a => Mode (Id a)
- Numeric.AD.Internal.Identity: instance Num a => Num (Id a)
- Numeric.AD.Internal.Identity: instance Ord a => Ord (Id a)
- Numeric.AD.Internal.Identity: instance Real a => Real (Id a)
- Numeric.AD.Internal.Identity: instance RealFloat a => RealFloat (Id a)
- Numeric.AD.Internal.Identity: instance RealFrac a => RealFrac (Id a)
- Numeric.AD.Internal.Identity: instance Show a => Show (Id a)
- Numeric.AD.Internal.Identity: instance Typeable Id
- Numeric.AD.Internal.Identity: runId :: Id a -> a
- Numeric.AD.Internal.Kahn: instance (Data a, Data t) => Data (Tape a t)
- Numeric.AD.Internal.Kahn: instance (Num a, Bounded a) => Bounded (Kahn a)
- Numeric.AD.Internal.Kahn: instance (Num a, Enum a) => Enum (Kahn a)
- Numeric.AD.Internal.Kahn: instance (Num a, Eq a) => Eq (Kahn a)
- Numeric.AD.Internal.Kahn: instance (Num a, Ord a) => Ord (Kahn a)
- Numeric.AD.Internal.Kahn: instance (Show a, Show t) => Show (Tape a t)
- Numeric.AD.Internal.Kahn: instance Erf a => Erf (Kahn a)
- Numeric.AD.Internal.Kahn: instance Floating a => Floating (Kahn a)
- Numeric.AD.Internal.Kahn: instance Fractional a => Fractional (Kahn a)
- Numeric.AD.Internal.Kahn: instance Grad i o o' a => Grad (Kahn a -> i) (a -> o) (a -> o') a
- Numeric.AD.Internal.Kahn: instance InvErf a => InvErf (Kahn a)
- Numeric.AD.Internal.Kahn: instance MuRef (Kahn a)
- Numeric.AD.Internal.Kahn: instance Num a => Grad (Kahn a) [a] (a, [a]) a
- Numeric.AD.Internal.Kahn: instance Num a => Jacobian (Kahn a)
- Numeric.AD.Internal.Kahn: instance Num a => Mode (Kahn a)
- Numeric.AD.Internal.Kahn: instance Num a => Num (Kahn a)
- Numeric.AD.Internal.Kahn: instance Real a => Real (Kahn a)
- Numeric.AD.Internal.Kahn: instance RealFloat a => RealFloat (Kahn a)
- Numeric.AD.Internal.Kahn: instance RealFrac a => RealFrac (Kahn a)
- Numeric.AD.Internal.Kahn: instance Show a => Show (Kahn a)
- Numeric.AD.Internal.Kahn: instance Typeable Kahn
- Numeric.AD.Internal.Kahn: instance Typeable Tape
- Numeric.AD.Internal.On: instance (Mode t, Mode (Scalar t)) => Mode (On t)
- Numeric.AD.Internal.On: instance Bounded t => Bounded (On t)
- Numeric.AD.Internal.On: instance Enum t => Enum (On t)
- Numeric.AD.Internal.On: instance Eq t => Eq (On t)
- Numeric.AD.Internal.On: instance Erf t => Erf (On t)
- Numeric.AD.Internal.On: instance Floating t => Floating (On t)
- Numeric.AD.Internal.On: instance Fractional t => Fractional (On t)
- Numeric.AD.Internal.On: instance InvErf t => InvErf (On t)
- Numeric.AD.Internal.On: instance Num t => Num (On t)
- Numeric.AD.Internal.On: instance Ord t => Ord (On t)
- Numeric.AD.Internal.On: instance Real t => Real (On t)
- Numeric.AD.Internal.On: instance RealFloat t => RealFloat (On t)
- Numeric.AD.Internal.On: instance RealFrac t => RealFrac (On t)
- Numeric.AD.Internal.On: instance Typeable On
- Numeric.AD.Internal.On: off :: On t -> t
- Numeric.AD.Internal.Or: instance (Bounded a, Bounded b, Chosen s) => Bounded (Or s a b)
- Numeric.AD.Internal.Or: instance (Enum a, Enum b, Chosen s) => Enum (Or s a b)
- Numeric.AD.Internal.Or: instance (Eq a, Eq b) => Eq (Or s a b)
- Numeric.AD.Internal.Or: instance (Erf a, Erf b, Chosen s) => Erf (Or s a b)
- Numeric.AD.Internal.Or: instance (Floating a, Floating b, Chosen s) => Floating (Or s a b)
- Numeric.AD.Internal.Or: instance (Fractional a, Fractional b, Chosen s) => Fractional (Or s a b)
- Numeric.AD.Internal.Or: instance (InvErf a, InvErf b, Chosen s) => InvErf (Or s a b)
- Numeric.AD.Internal.Or: instance (Mode a, Mode b, Chosen s, Scalar a ~ Scalar b) => Mode (Or s a b)
- Numeric.AD.Internal.Or: instance (Num a, Num b, Chosen s) => Num (Or s a b)
- Numeric.AD.Internal.Or: instance (Ord a, Ord b) => Ord (Or s a b)
- Numeric.AD.Internal.Or: instance (Real a, Real b, Chosen s) => Real (Or s a b)
- Numeric.AD.Internal.Or: instance (RealFloat a, RealFloat b, Chosen s) => RealFloat (Or s a b)
- Numeric.AD.Internal.Or: instance (RealFrac a, RealFrac b, Chosen s) => RealFrac (Or s a b)
- Numeric.AD.Internal.Or: instance Chosen F
- Numeric.AD.Internal.Or: instance Chosen T
- Numeric.AD.Internal.Or: instance Typeable Or
- Numeric.AD.Internal.Reverse: getTape :: Tape -> IORef Head
- Numeric.AD.Internal.Reverse: instance (Reifies s Tape, Erf a) => Erf (Reverse s a)
- Numeric.AD.Internal.Reverse: instance (Reifies s Tape, Floating a) => Floating (Reverse s a)
- Numeric.AD.Internal.Reverse: instance (Reifies s Tape, Fractional a) => Fractional (Reverse s a)
- Numeric.AD.Internal.Reverse: instance (Reifies s Tape, InvErf a) => InvErf (Reverse s a)
- Numeric.AD.Internal.Reverse: instance (Reifies s Tape, Num a) => Jacobian (Reverse s a)
- Numeric.AD.Internal.Reverse: instance (Reifies s Tape, Num a) => Mode (Reverse s a)
- Numeric.AD.Internal.Reverse: instance (Reifies s Tape, Num a) => Num (Reverse s a)
- Numeric.AD.Internal.Reverse: instance (Reifies s Tape, Num a, Bounded a) => Bounded (Reverse s a)
- Numeric.AD.Internal.Reverse: instance (Reifies s Tape, Num a, Enum a) => Enum (Reverse s a)
- Numeric.AD.Internal.Reverse: instance (Reifies s Tape, Num a, Eq a) => Eq (Reverse s a)
- Numeric.AD.Internal.Reverse: instance (Reifies s Tape, Num a, Ord a) => Ord (Reverse s a)
- Numeric.AD.Internal.Reverse: instance (Reifies s Tape, Real a) => Real (Reverse s a)
- Numeric.AD.Internal.Reverse: instance (Reifies s Tape, RealFloat a) => RealFloat (Reverse s a)
- Numeric.AD.Internal.Reverse: instance (Reifies s Tape, RealFrac a) => RealFrac (Reverse s a)
- Numeric.AD.Internal.Reverse: instance Show a => Show (Reverse s a)
- Numeric.AD.Internal.Reverse: instance Typeable Reverse
- Numeric.AD.Internal.Sparse: instance (Num a, Bounded a) => Bounded (Sparse a)
- Numeric.AD.Internal.Sparse: instance (Num a, Enum a) => Enum (Sparse a)
- Numeric.AD.Internal.Sparse: instance (Num a, Eq a) => Eq (Sparse a)
- Numeric.AD.Internal.Sparse: instance (Num a, Ord a) => Ord (Sparse a)
- Numeric.AD.Internal.Sparse: instance Data a => Data (Sparse a)
- Numeric.AD.Internal.Sparse: instance Erf a => Erf (Sparse a)
- Numeric.AD.Internal.Sparse: instance Floating a => Floating (Sparse a)
- Numeric.AD.Internal.Sparse: instance Fractional a => Fractional (Sparse a)
- Numeric.AD.Internal.Sparse: instance Grad i o o' a => Grad (Sparse a -> i) (a -> o) (a -> o') a
- Numeric.AD.Internal.Sparse: instance Grads i o a => Grads (Sparse a -> i) (a -> o) a
- Numeric.AD.Internal.Sparse: instance InvErf a => InvErf (Sparse a)
- Numeric.AD.Internal.Sparse: instance Num a => Grad (Sparse a) [a] (a, [a]) a
- Numeric.AD.Internal.Sparse: instance Num a => Grads (Sparse a) (Cofree [] a) a
- Numeric.AD.Internal.Sparse: instance Num a => Jacobian (Sparse a)
- Numeric.AD.Internal.Sparse: instance Num a => Mode (Sparse a)
- Numeric.AD.Internal.Sparse: instance Num a => Num (Sparse a)
- Numeric.AD.Internal.Sparse: instance Real a => Real (Sparse a)
- Numeric.AD.Internal.Sparse: instance RealFloat a => RealFloat (Sparse a)
- Numeric.AD.Internal.Sparse: instance RealFrac a => RealFrac (Sparse a)
- Numeric.AD.Internal.Sparse: instance Show a => Show (Sparse a)
- Numeric.AD.Internal.Sparse: instance Typeable Sparse
- Numeric.AD.Internal.Tower: getTower :: Tower a -> [a]
- Numeric.AD.Internal.Tower: instance (Num a, Bounded a) => Bounded (Tower a)
- Numeric.AD.Internal.Tower: instance (Num a, Enum a) => Enum (Tower a)
- Numeric.AD.Internal.Tower: instance (Num a, Eq a) => Eq (Tower a)
- Numeric.AD.Internal.Tower: instance (Num a, Ord a) => Ord (Tower a)
- Numeric.AD.Internal.Tower: instance Data a => Data (Tower a)
- Numeric.AD.Internal.Tower: instance Erf a => Erf (Tower a)
- Numeric.AD.Internal.Tower: instance Floating a => Floating (Tower a)
- Numeric.AD.Internal.Tower: instance Fractional a => Fractional (Tower a)
- Numeric.AD.Internal.Tower: instance InvErf a => InvErf (Tower a)
- Numeric.AD.Internal.Tower: instance Num a => Jacobian (Tower a)
- Numeric.AD.Internal.Tower: instance Num a => Mode (Tower a)
- Numeric.AD.Internal.Tower: instance Num a => Num (Tower a)
- Numeric.AD.Internal.Tower: instance Real a => Real (Tower a)
- Numeric.AD.Internal.Tower: instance RealFloat a => RealFloat (Tower a)
- Numeric.AD.Internal.Tower: instance RealFrac a => RealFrac (Tower a)
- Numeric.AD.Internal.Tower: instance Show a => Show (Tower a)
- Numeric.AD.Internal.Tower: instance Typeable Tower
- Numeric.AD.Internal.Type: instance Bounded a => Bounded (AD s a)
- Numeric.AD.Internal.Type: instance Enum a => Enum (AD s a)
- Numeric.AD.Internal.Type: instance Eq a => Eq (AD s a)
- Numeric.AD.Internal.Type: instance Erf a => Erf (AD s a)
- Numeric.AD.Internal.Type: instance Floating a => Floating (AD s a)
- Numeric.AD.Internal.Type: instance Fractional a => Fractional (AD s a)
- Numeric.AD.Internal.Type: instance InvErf a => InvErf (AD s a)
- Numeric.AD.Internal.Type: instance Mode a => Mode (AD s a)
- Numeric.AD.Internal.Type: instance Num a => Num (AD s a)
- Numeric.AD.Internal.Type: instance Ord a => Ord (AD s a)
- Numeric.AD.Internal.Type: instance Read a => Read (AD s a)
- Numeric.AD.Internal.Type: instance Real a => Real (AD s a)
- Numeric.AD.Internal.Type: instance RealFloat a => RealFloat (AD s a)
- Numeric.AD.Internal.Type: instance RealFrac a => RealFrac (AD s a)
- Numeric.AD.Internal.Type: instance Show a => Show (AD s a)
- Numeric.AD.Internal.Type: instance Typeable AD
- Numeric.AD.Internal.Type: runAD :: AD s a -> a
- Numeric.AD.Jet: instance (Functor f, Show (f Showable), Show a) => Show (Jet f a)
- Numeric.AD.Jet: instance Foldable f => Foldable (Jet f)
- Numeric.AD.Jet: instance Functor f => Functor (Jet f)
- Numeric.AD.Jet: instance Show Showable
- Numeric.AD.Jet: instance Traversable f => Traversable (Jet f)
- Numeric.AD.Jet: instance Typeable Jet
- Numeric.AD.Mode: instance Integral a => Mode (Ratio a)
- Numeric.AD.Mode: instance Mode Double
- Numeric.AD.Mode: instance Mode Float
- Numeric.AD.Mode: instance Mode Int
- Numeric.AD.Mode: instance Mode Int16
- Numeric.AD.Mode: instance Mode Int32
- Numeric.AD.Mode: instance Mode Int64
- Numeric.AD.Mode: instance Mode Int8
- Numeric.AD.Mode: instance Mode Integer
- Numeric.AD.Mode: instance Mode Natural
- Numeric.AD.Mode: instance Mode Word
- Numeric.AD.Mode: instance Mode Word16
- Numeric.AD.Mode: instance Mode Word32
- Numeric.AD.Mode: instance Mode Word64
- Numeric.AD.Mode: instance Mode Word8
- Numeric.AD.Mode: instance RealFloat a => Mode (Complex a)
+ Numeric.AD.Internal.Dense: instance (Data.Traversable.Traversable f, Data.Number.Erf.Erf a) => Data.Number.Erf.Erf (Numeric.AD.Internal.Dense.Dense f a)
+ Numeric.AD.Internal.Dense: instance (Data.Traversable.Traversable f, Data.Number.Erf.InvErf a) => Data.Number.Erf.InvErf (Numeric.AD.Internal.Dense.Dense f a)
+ Numeric.AD.Internal.Dense: instance (Data.Traversable.Traversable f, GHC.Float.Floating a) => GHC.Float.Floating (Numeric.AD.Internal.Dense.Dense f a)
+ Numeric.AD.Internal.Dense: instance (Data.Traversable.Traversable f, GHC.Float.RealFloat a) => GHC.Float.RealFloat (Numeric.AD.Internal.Dense.Dense f a)
+ Numeric.AD.Internal.Dense: instance (Data.Traversable.Traversable f, GHC.Num.Num a) => GHC.Num.Num (Numeric.AD.Internal.Dense.Dense f a)
+ Numeric.AD.Internal.Dense: instance (Data.Traversable.Traversable f, GHC.Num.Num a) => Numeric.AD.Jacobian.Jacobian (Numeric.AD.Internal.Dense.Dense f a)
+ Numeric.AD.Internal.Dense: instance (Data.Traversable.Traversable f, GHC.Num.Num a, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.AD.Internal.Dense.Dense f a)
+ Numeric.AD.Internal.Dense: instance (Data.Traversable.Traversable f, GHC.Num.Num a, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.AD.Internal.Dense.Dense f a)
+ Numeric.AD.Internal.Dense: instance (Data.Traversable.Traversable f, GHC.Num.Num a, GHC.Enum.Bounded a) => GHC.Enum.Bounded (Numeric.AD.Internal.Dense.Dense f a)
+ Numeric.AD.Internal.Dense: instance (Data.Traversable.Traversable f, GHC.Num.Num a, GHC.Enum.Enum a) => GHC.Enum.Enum (Numeric.AD.Internal.Dense.Dense f a)
+ Numeric.AD.Internal.Dense: instance (Data.Traversable.Traversable f, GHC.Real.Fractional a) => GHC.Real.Fractional (Numeric.AD.Internal.Dense.Dense f a)
+ Numeric.AD.Internal.Dense: instance (Data.Traversable.Traversable f, GHC.Real.Real a) => GHC.Real.Real (Numeric.AD.Internal.Dense.Dense f a)
+ Numeric.AD.Internal.Dense: instance (Data.Traversable.Traversable f, GHC.Real.RealFrac a) => GHC.Real.RealFrac (Numeric.AD.Internal.Dense.Dense f a)
+ Numeric.AD.Internal.Dense: instance (GHC.Num.Num a, Data.Traversable.Traversable f) => Numeric.AD.Mode.Mode (Numeric.AD.Internal.Dense.Dense f a)
+ Numeric.AD.Internal.Dense: instance GHC.Show.Show a => GHC.Show.Show (Numeric.AD.Internal.Dense.Dense f a)
+ Numeric.AD.Internal.Forward: instance (GHC.Num.Num a, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.AD.Internal.Forward.Forward a)
+ Numeric.AD.Internal.Forward: instance (GHC.Num.Num a, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.AD.Internal.Forward.Forward a)
+ Numeric.AD.Internal.Forward: instance (GHC.Num.Num a, GHC.Enum.Bounded a) => GHC.Enum.Bounded (Numeric.AD.Internal.Forward.Forward a)
+ Numeric.AD.Internal.Forward: instance (GHC.Num.Num a, GHC.Enum.Enum a) => GHC.Enum.Enum (Numeric.AD.Internal.Forward.Forward a)
+ Numeric.AD.Internal.Forward: instance Data.Data.Data a => Data.Data.Data (Numeric.AD.Internal.Forward.Forward a)
+ Numeric.AD.Internal.Forward: instance Data.Number.Erf.Erf a => Data.Number.Erf.Erf (Numeric.AD.Internal.Forward.Forward a)
+ Numeric.AD.Internal.Forward: instance Data.Number.Erf.InvErf a => Data.Number.Erf.InvErf (Numeric.AD.Internal.Forward.Forward a)
+ Numeric.AD.Internal.Forward: instance GHC.Float.Floating a => GHC.Float.Floating (Numeric.AD.Internal.Forward.Forward a)
+ Numeric.AD.Internal.Forward: instance GHC.Float.RealFloat a => GHC.Float.RealFloat (Numeric.AD.Internal.Forward.Forward a)
+ Numeric.AD.Internal.Forward: instance GHC.Num.Num a => GHC.Num.Num (Numeric.AD.Internal.Forward.Forward a)
+ Numeric.AD.Internal.Forward: instance GHC.Num.Num a => Numeric.AD.Jacobian.Jacobian (Numeric.AD.Internal.Forward.Forward a)
+ Numeric.AD.Internal.Forward: instance GHC.Num.Num a => Numeric.AD.Mode.Mode (Numeric.AD.Internal.Forward.Forward a)
+ Numeric.AD.Internal.Forward: instance GHC.Real.Fractional a => GHC.Real.Fractional (Numeric.AD.Internal.Forward.Forward a)
+ Numeric.AD.Internal.Forward: instance GHC.Real.Real a => GHC.Real.Real (Numeric.AD.Internal.Forward.Forward a)
+ Numeric.AD.Internal.Forward: instance GHC.Real.RealFrac a => GHC.Real.RealFrac (Numeric.AD.Internal.Forward.Forward a)
+ Numeric.AD.Internal.Forward: instance GHC.Show.Show a => GHC.Show.Show (Numeric.AD.Internal.Forward.Forward a)
+ Numeric.AD.Internal.Forward.Double: [primal, tangent] :: ForwardDouble -> {-# UNPACK #-} !Double
+ Numeric.AD.Internal.Forward.Double: instance Data.Number.Erf.Erf Numeric.AD.Internal.Forward.Double.ForwardDouble
+ Numeric.AD.Internal.Forward.Double: instance Data.Number.Erf.InvErf Numeric.AD.Internal.Forward.Double.ForwardDouble
+ Numeric.AD.Internal.Forward.Double: instance GHC.Classes.Eq Numeric.AD.Internal.Forward.Double.ForwardDouble
+ Numeric.AD.Internal.Forward.Double: instance GHC.Classes.Ord Numeric.AD.Internal.Forward.Double.ForwardDouble
+ Numeric.AD.Internal.Forward.Double: instance GHC.Enum.Enum Numeric.AD.Internal.Forward.Double.ForwardDouble
+ Numeric.AD.Internal.Forward.Double: instance GHC.Float.Floating Numeric.AD.Internal.Forward.Double.ForwardDouble
+ Numeric.AD.Internal.Forward.Double: instance GHC.Float.RealFloat Numeric.AD.Internal.Forward.Double.ForwardDouble
+ Numeric.AD.Internal.Forward.Double: instance GHC.Num.Num Numeric.AD.Internal.Forward.Double.ForwardDouble
+ Numeric.AD.Internal.Forward.Double: instance GHC.Read.Read Numeric.AD.Internal.Forward.Double.ForwardDouble
+ Numeric.AD.Internal.Forward.Double: instance GHC.Real.Fractional Numeric.AD.Internal.Forward.Double.ForwardDouble
+ Numeric.AD.Internal.Forward.Double: instance GHC.Real.Real Numeric.AD.Internal.Forward.Double.ForwardDouble
+ Numeric.AD.Internal.Forward.Double: instance GHC.Real.RealFrac Numeric.AD.Internal.Forward.Double.ForwardDouble
+ Numeric.AD.Internal.Forward.Double: instance GHC.Show.Show Numeric.AD.Internal.Forward.Double.ForwardDouble
+ Numeric.AD.Internal.Forward.Double: instance Numeric.AD.Jacobian.Jacobian Numeric.AD.Internal.Forward.Double.ForwardDouble
+ Numeric.AD.Internal.Forward.Double: instance Numeric.AD.Mode.Mode Numeric.AD.Internal.Forward.Double.ForwardDouble
+ Numeric.AD.Internal.Identity: [runId] :: Id a -> a
+ Numeric.AD.Internal.Identity: instance Data.Data.Data a => Data.Data.Data (Numeric.AD.Internal.Identity.Id a)
+ Numeric.AD.Internal.Identity: instance Data.Number.Erf.Erf a => Data.Number.Erf.Erf (Numeric.AD.Internal.Identity.Id a)
+ Numeric.AD.Internal.Identity: instance Data.Number.Erf.InvErf a => Data.Number.Erf.InvErf (Numeric.AD.Internal.Identity.Id a)
+ Numeric.AD.Internal.Identity: instance GHC.Base.Monoid a => GHC.Base.Monoid (Numeric.AD.Internal.Identity.Id a)
+ Numeric.AD.Internal.Identity: instance GHC.Classes.Eq a => GHC.Classes.Eq (Numeric.AD.Internal.Identity.Id a)
+ Numeric.AD.Internal.Identity: instance GHC.Classes.Ord a => GHC.Classes.Ord (Numeric.AD.Internal.Identity.Id a)
+ Numeric.AD.Internal.Identity: instance GHC.Enum.Bounded a => GHC.Enum.Bounded (Numeric.AD.Internal.Identity.Id a)
+ Numeric.AD.Internal.Identity: instance GHC.Enum.Enum a => GHC.Enum.Enum (Numeric.AD.Internal.Identity.Id a)
+ Numeric.AD.Internal.Identity: instance GHC.Float.Floating a => GHC.Float.Floating (Numeric.AD.Internal.Identity.Id a)
+ Numeric.AD.Internal.Identity: instance GHC.Float.RealFloat a => GHC.Float.RealFloat (Numeric.AD.Internal.Identity.Id a)
+ Numeric.AD.Internal.Identity: instance GHC.Num.Num a => GHC.Num.Num (Numeric.AD.Internal.Identity.Id a)
+ Numeric.AD.Internal.Identity: instance GHC.Num.Num a => Numeric.AD.Mode.Mode (Numeric.AD.Internal.Identity.Id a)
+ Numeric.AD.Internal.Identity: instance GHC.Real.Fractional a => GHC.Real.Fractional (Numeric.AD.Internal.Identity.Id a)
+ Numeric.AD.Internal.Identity: instance GHC.Real.Real a => GHC.Real.Real (Numeric.AD.Internal.Identity.Id a)
+ Numeric.AD.Internal.Identity: instance GHC.Real.RealFrac a => GHC.Real.RealFrac (Numeric.AD.Internal.Identity.Id a)
+ Numeric.AD.Internal.Identity: instance GHC.Show.Show a => GHC.Show.Show (Numeric.AD.Internal.Identity.Id a)
+ Numeric.AD.Internal.Kahn: instance (Data.Data.Data a, Data.Data.Data t) => Data.Data.Data (Numeric.AD.Internal.Kahn.Tape a t)
+ Numeric.AD.Internal.Kahn: instance (GHC.Num.Num a, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.AD.Internal.Kahn.Kahn a)
+ Numeric.AD.Internal.Kahn: instance (GHC.Num.Num a, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.AD.Internal.Kahn.Kahn a)
+ Numeric.AD.Internal.Kahn: instance (GHC.Num.Num a, GHC.Enum.Bounded a) => GHC.Enum.Bounded (Numeric.AD.Internal.Kahn.Kahn a)
+ Numeric.AD.Internal.Kahn: instance (GHC.Num.Num a, GHC.Enum.Enum a) => GHC.Enum.Enum (Numeric.AD.Internal.Kahn.Kahn a)
+ Numeric.AD.Internal.Kahn: instance (GHC.Show.Show a, GHC.Show.Show t) => GHC.Show.Show (Numeric.AD.Internal.Kahn.Tape a t)
+ Numeric.AD.Internal.Kahn: instance Data.Number.Erf.Erf a => Data.Number.Erf.Erf (Numeric.AD.Internal.Kahn.Kahn a)
+ Numeric.AD.Internal.Kahn: instance Data.Number.Erf.InvErf a => Data.Number.Erf.InvErf (Numeric.AD.Internal.Kahn.Kahn a)
+ Numeric.AD.Internal.Kahn: instance Data.Reify.MuRef (Numeric.AD.Internal.Kahn.Kahn a)
+ Numeric.AD.Internal.Kahn: instance GHC.Float.Floating a => GHC.Float.Floating (Numeric.AD.Internal.Kahn.Kahn a)
+ Numeric.AD.Internal.Kahn: instance GHC.Float.RealFloat a => GHC.Float.RealFloat (Numeric.AD.Internal.Kahn.Kahn a)
+ Numeric.AD.Internal.Kahn: instance GHC.Num.Num a => GHC.Num.Num (Numeric.AD.Internal.Kahn.Kahn a)
+ Numeric.AD.Internal.Kahn: instance GHC.Num.Num a => Numeric.AD.Internal.Kahn.Grad (Numeric.AD.Internal.Kahn.Kahn a) [a] (a, [a]) a
+ Numeric.AD.Internal.Kahn: instance GHC.Num.Num a => Numeric.AD.Jacobian.Jacobian (Numeric.AD.Internal.Kahn.Kahn a)
+ Numeric.AD.Internal.Kahn: instance GHC.Num.Num a => Numeric.AD.Mode.Mode (Numeric.AD.Internal.Kahn.Kahn a)
+ Numeric.AD.Internal.Kahn: instance GHC.Real.Fractional a => GHC.Real.Fractional (Numeric.AD.Internal.Kahn.Kahn a)
+ Numeric.AD.Internal.Kahn: instance GHC.Real.Real a => GHC.Real.Real (Numeric.AD.Internal.Kahn.Kahn a)
+ Numeric.AD.Internal.Kahn: instance GHC.Real.RealFrac a => GHC.Real.RealFrac (Numeric.AD.Internal.Kahn.Kahn a)
+ Numeric.AD.Internal.Kahn: instance GHC.Show.Show a => GHC.Show.Show (Numeric.AD.Internal.Kahn.Kahn a)
+ Numeric.AD.Internal.Kahn: instance Numeric.AD.Internal.Kahn.Grad i o o' a => Numeric.AD.Internal.Kahn.Grad (Numeric.AD.Internal.Kahn.Kahn a -> i) (a -> o) (a -> o') a
+ Numeric.AD.Internal.On: [off] :: On t -> t
+ Numeric.AD.Internal.On: instance (Numeric.AD.Mode.Mode t, Numeric.AD.Mode.Mode (Numeric.AD.Mode.Scalar t)) => Numeric.AD.Mode.Mode (Numeric.AD.Internal.On.On t)
+ Numeric.AD.Internal.On: instance Data.Number.Erf.Erf t => Data.Number.Erf.Erf (Numeric.AD.Internal.On.On t)
+ Numeric.AD.Internal.On: instance Data.Number.Erf.InvErf t => Data.Number.Erf.InvErf (Numeric.AD.Internal.On.On t)
+ Numeric.AD.Internal.On: instance GHC.Classes.Eq t => GHC.Classes.Eq (Numeric.AD.Internal.On.On t)
+ Numeric.AD.Internal.On: instance GHC.Classes.Ord t => GHC.Classes.Ord (Numeric.AD.Internal.On.On t)
+ Numeric.AD.Internal.On: instance GHC.Enum.Bounded t => GHC.Enum.Bounded (Numeric.AD.Internal.On.On t)
+ Numeric.AD.Internal.On: instance GHC.Enum.Enum t => GHC.Enum.Enum (Numeric.AD.Internal.On.On t)
+ Numeric.AD.Internal.On: instance GHC.Float.Floating t => GHC.Float.Floating (Numeric.AD.Internal.On.On t)
+ Numeric.AD.Internal.On: instance GHC.Float.RealFloat t => GHC.Float.RealFloat (Numeric.AD.Internal.On.On t)
+ Numeric.AD.Internal.On: instance GHC.Num.Num t => GHC.Num.Num (Numeric.AD.Internal.On.On t)
+ Numeric.AD.Internal.On: instance GHC.Real.Fractional t => GHC.Real.Fractional (Numeric.AD.Internal.On.On t)
+ Numeric.AD.Internal.On: instance GHC.Real.Real t => GHC.Real.Real (Numeric.AD.Internal.On.On t)
+ Numeric.AD.Internal.On: instance GHC.Real.RealFrac t => GHC.Real.RealFrac (Numeric.AD.Internal.On.On t)
+ Numeric.AD.Internal.Or: instance (Data.Number.Erf.Erf a, Data.Number.Erf.Erf b, Numeric.AD.Internal.Or.Chosen s) => Data.Number.Erf.Erf (Numeric.AD.Internal.Or.Or s a b)
+ Numeric.AD.Internal.Or: instance (Data.Number.Erf.InvErf a, Data.Number.Erf.InvErf b, Numeric.AD.Internal.Or.Chosen s) => Data.Number.Erf.InvErf (Numeric.AD.Internal.Or.Or s a b)
+ Numeric.AD.Internal.Or: instance (GHC.Classes.Eq a, GHC.Classes.Eq b) => GHC.Classes.Eq (Numeric.AD.Internal.Or.Or s a b)
+ Numeric.AD.Internal.Or: instance (GHC.Classes.Ord a, GHC.Classes.Ord b) => GHC.Classes.Ord (Numeric.AD.Internal.Or.Or s a b)
+ Numeric.AD.Internal.Or: instance (GHC.Enum.Bounded a, GHC.Enum.Bounded b, Numeric.AD.Internal.Or.Chosen s) => GHC.Enum.Bounded (Numeric.AD.Internal.Or.Or s a b)
+ Numeric.AD.Internal.Or: instance (GHC.Enum.Enum a, GHC.Enum.Enum b, Numeric.AD.Internal.Or.Chosen s) => GHC.Enum.Enum (Numeric.AD.Internal.Or.Or s a b)
+ Numeric.AD.Internal.Or: instance (GHC.Float.Floating a, GHC.Float.Floating b, Numeric.AD.Internal.Or.Chosen s) => GHC.Float.Floating (Numeric.AD.Internal.Or.Or s a b)
+ Numeric.AD.Internal.Or: instance (GHC.Float.RealFloat a, GHC.Float.RealFloat b, Numeric.AD.Internal.Or.Chosen s) => GHC.Float.RealFloat (Numeric.AD.Internal.Or.Or s a b)
+ Numeric.AD.Internal.Or: instance (GHC.Num.Num a, GHC.Num.Num b, Numeric.AD.Internal.Or.Chosen s) => GHC.Num.Num (Numeric.AD.Internal.Or.Or s a b)
+ Numeric.AD.Internal.Or: instance (GHC.Real.Fractional a, GHC.Real.Fractional b, Numeric.AD.Internal.Or.Chosen s) => GHC.Real.Fractional (Numeric.AD.Internal.Or.Or s a b)
+ Numeric.AD.Internal.Or: instance (GHC.Real.Real a, GHC.Real.Real b, Numeric.AD.Internal.Or.Chosen s) => GHC.Real.Real (Numeric.AD.Internal.Or.Or s a b)
+ Numeric.AD.Internal.Or: instance (GHC.Real.RealFrac a, GHC.Real.RealFrac b, Numeric.AD.Internal.Or.Chosen s) => GHC.Real.RealFrac (Numeric.AD.Internal.Or.Or s a b)
+ Numeric.AD.Internal.Or: instance (Numeric.AD.Mode.Mode a, Numeric.AD.Mode.Mode b, Numeric.AD.Internal.Or.Chosen s, Numeric.AD.Mode.Scalar a ~ Numeric.AD.Mode.Scalar b) => Numeric.AD.Mode.Mode (Numeric.AD.Internal.Or.Or s a b)
+ Numeric.AD.Internal.Or: instance Numeric.AD.Internal.Or.Chosen Numeric.AD.Internal.Or.F
+ Numeric.AD.Internal.Or: instance Numeric.AD.Internal.Or.Chosen Numeric.AD.Internal.Or.T
+ Numeric.AD.Internal.Reverse: [getTape] :: Tape -> IORef Head
+ Numeric.AD.Internal.Reverse: instance (Data.Reflection.Reifies s Numeric.AD.Internal.Reverse.Tape, Data.Number.Erf.Erf a) => Data.Number.Erf.Erf (Numeric.AD.Internal.Reverse.Reverse s a)
+ Numeric.AD.Internal.Reverse: instance (Data.Reflection.Reifies s Numeric.AD.Internal.Reverse.Tape, Data.Number.Erf.InvErf a) => Data.Number.Erf.InvErf (Numeric.AD.Internal.Reverse.Reverse s a)
+ Numeric.AD.Internal.Reverse: instance (Data.Reflection.Reifies s Numeric.AD.Internal.Reverse.Tape, GHC.Float.Floating a) => GHC.Float.Floating (Numeric.AD.Internal.Reverse.Reverse s a)
+ Numeric.AD.Internal.Reverse: instance (Data.Reflection.Reifies s Numeric.AD.Internal.Reverse.Tape, GHC.Float.RealFloat a) => GHC.Float.RealFloat (Numeric.AD.Internal.Reverse.Reverse s a)
+ Numeric.AD.Internal.Reverse: instance (Data.Reflection.Reifies s Numeric.AD.Internal.Reverse.Tape, GHC.Num.Num a) => GHC.Num.Num (Numeric.AD.Internal.Reverse.Reverse s a)
+ Numeric.AD.Internal.Reverse: instance (Data.Reflection.Reifies s Numeric.AD.Internal.Reverse.Tape, GHC.Num.Num a) => Numeric.AD.Jacobian.Jacobian (Numeric.AD.Internal.Reverse.Reverse s a)
+ Numeric.AD.Internal.Reverse: instance (Data.Reflection.Reifies s Numeric.AD.Internal.Reverse.Tape, GHC.Num.Num a) => Numeric.AD.Mode.Mode (Numeric.AD.Internal.Reverse.Reverse s a)
+ Numeric.AD.Internal.Reverse: instance (Data.Reflection.Reifies s Numeric.AD.Internal.Reverse.Tape, GHC.Num.Num a, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.AD.Internal.Reverse.Reverse s a)
+ Numeric.AD.Internal.Reverse: instance (Data.Reflection.Reifies s Numeric.AD.Internal.Reverse.Tape, GHC.Num.Num a, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.AD.Internal.Reverse.Reverse s a)
+ Numeric.AD.Internal.Reverse: instance (Data.Reflection.Reifies s Numeric.AD.Internal.Reverse.Tape, GHC.Num.Num a, GHC.Enum.Bounded a) => GHC.Enum.Bounded (Numeric.AD.Internal.Reverse.Reverse s a)
+ Numeric.AD.Internal.Reverse: instance (Data.Reflection.Reifies s Numeric.AD.Internal.Reverse.Tape, GHC.Num.Num a, GHC.Enum.Enum a) => GHC.Enum.Enum (Numeric.AD.Internal.Reverse.Reverse s a)
+ Numeric.AD.Internal.Reverse: instance (Data.Reflection.Reifies s Numeric.AD.Internal.Reverse.Tape, GHC.Real.Fractional a) => GHC.Real.Fractional (Numeric.AD.Internal.Reverse.Reverse s a)
+ Numeric.AD.Internal.Reverse: instance (Data.Reflection.Reifies s Numeric.AD.Internal.Reverse.Tape, GHC.Real.Real a) => GHC.Real.Real (Numeric.AD.Internal.Reverse.Reverse s a)
+ Numeric.AD.Internal.Reverse: instance (Data.Reflection.Reifies s Numeric.AD.Internal.Reverse.Tape, GHC.Real.RealFrac a) => GHC.Real.RealFrac (Numeric.AD.Internal.Reverse.Reverse s a)
+ Numeric.AD.Internal.Reverse: instance GHC.Show.Show a => GHC.Show.Show (Numeric.AD.Internal.Reverse.Reverse s a)
+ Numeric.AD.Internal.Sparse: deriv :: Sparse a -> [Int] -> Sparse a
+ Numeric.AD.Internal.Sparse: instance (GHC.Num.Num a, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.AD.Internal.Sparse.Sparse a)
+ Numeric.AD.Internal.Sparse: instance (GHC.Num.Num a, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.AD.Internal.Sparse.Sparse a)
+ Numeric.AD.Internal.Sparse: instance (GHC.Num.Num a, GHC.Enum.Bounded a) => GHC.Enum.Bounded (Numeric.AD.Internal.Sparse.Sparse a)
+ Numeric.AD.Internal.Sparse: instance (GHC.Num.Num a, GHC.Enum.Enum a) => GHC.Enum.Enum (Numeric.AD.Internal.Sparse.Sparse a)
+ Numeric.AD.Internal.Sparse: instance Data.Data.Data a => Data.Data.Data (Numeric.AD.Internal.Sparse.Sparse a)
+ Numeric.AD.Internal.Sparse: instance Data.Number.Erf.Erf a => Data.Number.Erf.Erf (Numeric.AD.Internal.Sparse.Sparse a)
+ Numeric.AD.Internal.Sparse: instance Data.Number.Erf.InvErf a => Data.Number.Erf.InvErf (Numeric.AD.Internal.Sparse.Sparse a)
+ Numeric.AD.Internal.Sparse: instance GHC.Float.Floating a => GHC.Float.Floating (Numeric.AD.Internal.Sparse.Sparse a)
+ Numeric.AD.Internal.Sparse: instance GHC.Float.RealFloat a => GHC.Float.RealFloat (Numeric.AD.Internal.Sparse.Sparse a)
+ Numeric.AD.Internal.Sparse: instance GHC.Num.Num a => GHC.Num.Num (Numeric.AD.Internal.Sparse.Sparse a)
+ Numeric.AD.Internal.Sparse: instance GHC.Num.Num a => Numeric.AD.Internal.Sparse.Grad (Numeric.AD.Internal.Sparse.Sparse a) [a] (a, [a]) a
+ Numeric.AD.Internal.Sparse: instance GHC.Num.Num a => Numeric.AD.Internal.Sparse.Grads (Numeric.AD.Internal.Sparse.Sparse a) (Control.Comonad.Cofree.Cofree [] a) a
+ Numeric.AD.Internal.Sparse: instance GHC.Num.Num a => Numeric.AD.Jacobian.Jacobian (Numeric.AD.Internal.Sparse.Sparse a)
+ Numeric.AD.Internal.Sparse: instance GHC.Num.Num a => Numeric.AD.Mode.Mode (Numeric.AD.Internal.Sparse.Sparse a)
+ Numeric.AD.Internal.Sparse: instance GHC.Real.Fractional a => GHC.Real.Fractional (Numeric.AD.Internal.Sparse.Sparse a)
+ Numeric.AD.Internal.Sparse: instance GHC.Real.Real a => GHC.Real.Real (Numeric.AD.Internal.Sparse.Sparse a)
+ Numeric.AD.Internal.Sparse: instance GHC.Real.RealFrac a => GHC.Real.RealFrac (Numeric.AD.Internal.Sparse.Sparse a)
+ Numeric.AD.Internal.Sparse: instance GHC.Show.Show a => GHC.Show.Show (Numeric.AD.Internal.Sparse.Sparse a)
+ Numeric.AD.Internal.Sparse: instance Numeric.AD.Internal.Sparse.Grad i o o' a => Numeric.AD.Internal.Sparse.Grad (Numeric.AD.Internal.Sparse.Sparse a -> i) (a -> o) (a -> o') a
+ Numeric.AD.Internal.Sparse: instance Numeric.AD.Internal.Sparse.Grads i o a => Numeric.AD.Internal.Sparse.Grads (Numeric.AD.Internal.Sparse.Sparse a -> i) (a -> o) a
+ Numeric.AD.Internal.Sparse: primal :: Num a => Sparse a -> a
+ Numeric.AD.Internal.Sparse: terms :: [Int] -> [(Integer, [Int], [Int])]
+ Numeric.AD.Internal.Tower: [getTower] :: Tower a -> [a]
+ Numeric.AD.Internal.Tower: instance (GHC.Num.Num a, GHC.Classes.Eq a) => GHC.Classes.Eq (Numeric.AD.Internal.Tower.Tower a)
+ Numeric.AD.Internal.Tower: instance (GHC.Num.Num a, GHC.Classes.Ord a) => GHC.Classes.Ord (Numeric.AD.Internal.Tower.Tower a)
+ Numeric.AD.Internal.Tower: instance (GHC.Num.Num a, GHC.Enum.Bounded a) => GHC.Enum.Bounded (Numeric.AD.Internal.Tower.Tower a)
+ Numeric.AD.Internal.Tower: instance (GHC.Num.Num a, GHC.Enum.Enum a) => GHC.Enum.Enum (Numeric.AD.Internal.Tower.Tower a)
+ Numeric.AD.Internal.Tower: instance Data.Data.Data a => Data.Data.Data (Numeric.AD.Internal.Tower.Tower a)
+ Numeric.AD.Internal.Tower: instance Data.Number.Erf.Erf a => Data.Number.Erf.Erf (Numeric.AD.Internal.Tower.Tower a)
+ Numeric.AD.Internal.Tower: instance Data.Number.Erf.InvErf a => Data.Number.Erf.InvErf (Numeric.AD.Internal.Tower.Tower a)
+ Numeric.AD.Internal.Tower: instance GHC.Float.Floating a => GHC.Float.Floating (Numeric.AD.Internal.Tower.Tower a)
+ Numeric.AD.Internal.Tower: instance GHC.Float.RealFloat a => GHC.Float.RealFloat (Numeric.AD.Internal.Tower.Tower a)
+ Numeric.AD.Internal.Tower: instance GHC.Num.Num a => GHC.Num.Num (Numeric.AD.Internal.Tower.Tower a)
+ Numeric.AD.Internal.Tower: instance GHC.Num.Num a => Numeric.AD.Jacobian.Jacobian (Numeric.AD.Internal.Tower.Tower a)
+ Numeric.AD.Internal.Tower: instance GHC.Num.Num a => Numeric.AD.Mode.Mode (Numeric.AD.Internal.Tower.Tower a)
+ Numeric.AD.Internal.Tower: instance GHC.Real.Fractional a => GHC.Real.Fractional (Numeric.AD.Internal.Tower.Tower a)
+ Numeric.AD.Internal.Tower: instance GHC.Real.Real a => GHC.Real.Real (Numeric.AD.Internal.Tower.Tower a)
+ Numeric.AD.Internal.Tower: instance GHC.Real.RealFrac a => GHC.Real.RealFrac (Numeric.AD.Internal.Tower.Tower a)
+ Numeric.AD.Internal.Tower: instance GHC.Show.Show a => GHC.Show.Show (Numeric.AD.Internal.Tower.Tower a)
+ Numeric.AD.Internal.Type: [runAD] :: AD s a -> a
+ Numeric.AD.Internal.Type: instance Data.Number.Erf.Erf a => Data.Number.Erf.Erf (Numeric.AD.Internal.Type.AD s a)
+ Numeric.AD.Internal.Type: instance Data.Number.Erf.InvErf a => Data.Number.Erf.InvErf (Numeric.AD.Internal.Type.AD s a)
+ Numeric.AD.Internal.Type: instance GHC.Classes.Eq a => GHC.Classes.Eq (Numeric.AD.Internal.Type.AD s a)
+ Numeric.AD.Internal.Type: instance GHC.Classes.Ord a => GHC.Classes.Ord (Numeric.AD.Internal.Type.AD s a)
+ Numeric.AD.Internal.Type: instance GHC.Enum.Bounded a => GHC.Enum.Bounded (Numeric.AD.Internal.Type.AD s a)
+ Numeric.AD.Internal.Type: instance GHC.Enum.Enum a => GHC.Enum.Enum (Numeric.AD.Internal.Type.AD s a)
+ Numeric.AD.Internal.Type: instance GHC.Float.Floating a => GHC.Float.Floating (Numeric.AD.Internal.Type.AD s a)
+ Numeric.AD.Internal.Type: instance GHC.Float.RealFloat a => GHC.Float.RealFloat (Numeric.AD.Internal.Type.AD s a)
+ Numeric.AD.Internal.Type: instance GHC.Num.Num a => GHC.Num.Num (Numeric.AD.Internal.Type.AD s a)
+ Numeric.AD.Internal.Type: instance GHC.Read.Read a => GHC.Read.Read (Numeric.AD.Internal.Type.AD s a)
+ Numeric.AD.Internal.Type: instance GHC.Real.Fractional a => GHC.Real.Fractional (Numeric.AD.Internal.Type.AD s a)
+ Numeric.AD.Internal.Type: instance GHC.Real.Real a => GHC.Real.Real (Numeric.AD.Internal.Type.AD s a)
+ Numeric.AD.Internal.Type: instance GHC.Real.RealFrac a => GHC.Real.RealFrac (Numeric.AD.Internal.Type.AD s a)
+ Numeric.AD.Internal.Type: instance GHC.Show.Show a => GHC.Show.Show (Numeric.AD.Internal.Type.AD s a)
+ Numeric.AD.Internal.Type: instance Numeric.AD.Mode.Mode a => Numeric.AD.Mode.Mode (Numeric.AD.Internal.Type.AD s a)
+ Numeric.AD.Jet: instance (GHC.Base.Functor f, GHC.Show.Show (f Numeric.AD.Jet.Showable), GHC.Show.Show a) => GHC.Show.Show (Numeric.AD.Jet.Jet f a)
+ Numeric.AD.Jet: instance Data.Foldable.Foldable f => Data.Foldable.Foldable (Numeric.AD.Jet.Jet f)
+ Numeric.AD.Jet: instance Data.Traversable.Traversable f => Data.Traversable.Traversable (Numeric.AD.Jet.Jet f)
+ Numeric.AD.Jet: instance GHC.Base.Functor f => GHC.Base.Functor (Numeric.AD.Jet.Jet f)
+ Numeric.AD.Jet: instance GHC.Show.Show Numeric.AD.Jet.Showable
+ Numeric.AD.Mode: instance GHC.Float.RealFloat a => Numeric.AD.Mode.Mode (Data.Complex.Complex a)
+ Numeric.AD.Mode: instance GHC.Real.Integral a => Numeric.AD.Mode.Mode (GHC.Real.Ratio a)
+ Numeric.AD.Mode: instance Numeric.AD.Mode.Mode GHC.Int.Int16
+ Numeric.AD.Mode: instance Numeric.AD.Mode.Mode GHC.Int.Int32
+ Numeric.AD.Mode: instance Numeric.AD.Mode.Mode GHC.Int.Int64
+ Numeric.AD.Mode: instance Numeric.AD.Mode.Mode GHC.Int.Int8
+ Numeric.AD.Mode: instance Numeric.AD.Mode.Mode GHC.Integer.Type.Integer
+ Numeric.AD.Mode: instance Numeric.AD.Mode.Mode GHC.Natural.Natural
+ Numeric.AD.Mode: instance Numeric.AD.Mode.Mode GHC.Types.Double
+ Numeric.AD.Mode: instance Numeric.AD.Mode.Mode GHC.Types.Float
+ Numeric.AD.Mode: instance Numeric.AD.Mode.Mode GHC.Types.Int
+ Numeric.AD.Mode: instance Numeric.AD.Mode.Mode GHC.Types.Word
+ Numeric.AD.Mode: instance Numeric.AD.Mode.Mode GHC.Word.Word16
+ Numeric.AD.Mode: instance Numeric.AD.Mode.Mode GHC.Word.Word32
+ Numeric.AD.Mode: instance Numeric.AD.Mode.Mode GHC.Word.Word64
+ Numeric.AD.Mode: instance Numeric.AD.Mode.Mode GHC.Word.Word8
+ Numeric.AD.Newton: CC :: (forall s. Reifies s Tape => f (Reverse s a) -> Reverse s a) -> CC f a
+ Numeric.AD.Newton: constrainedDescent :: (Traversable f, RealFloat a, Floating a, Ord a) => (forall s. Reifies s Tape => f (Reverse s a) -> Reverse s a) -> [CC f a] -> f a -> [(a, f a)]
+ Numeric.AD.Newton: data CC f a
+ Numeric.AD.Newton: eval :: (Traversable f, Fractional a, Ord a) => (forall s. Reifies s Tape => f (Reverse s a) -> Reverse s a) -> f a -> a
+ Numeric.AD.Newton: instance Data.Foldable.Foldable f => Data.Foldable.Foldable (Numeric.AD.Newton.SEnv f)
+ Numeric.AD.Newton: instance Data.Traversable.Traversable f => Data.Traversable.Traversable (Numeric.AD.Newton.SEnv f)
+ Numeric.AD.Newton: instance GHC.Base.Functor f => GHC.Base.Functor (Numeric.AD.Newton.SEnv f)
- Numeric.AD.Internal.Forward.Double: ForwardDouble :: {-# UNPACK #-} !Double -> {-# UNPACK #-} !Double -> ForwardDouble
+ Numeric.AD.Internal.Forward.Double: ForwardDouble :: {-# UNPACK #-} !Double -> ForwardDouble

Files

CHANGELOG.markdown view
@@ -1,3 +1,9 @@+4.3+---+* Made drastic improvements in the performance of `Tower` and `Sparse` modes thanks to the help of Björn von Sydow.+* Added constrained convex optimization.+* Incorporated some suggestions from [herbie](http://herbie.uwplse.org/z) for improving floating point accuracy.+ 4.2.4 ----- * Added `Newton.Double` modules for performance.
README.markdown view
@@ -31,10 +31,10 @@     Prelude Numeric.AD> diff' (exp . log) 2     (2.0,1.0) -You can compute the derivative of a function with a constant parameter using `auto` from Numeric.AD.Types:+You can compute the derivative of a function with a constant parameter using `auto`: -    Prelude Numeric.AD Numeric.AD.Types> let t = 2.0 :: Double-    Prelude Numeric.AD Numeric.AD.Types> diff (\ x -> auto t * sin x) 0+    Prelude Numeric.AD> let t = 2.0 :: Double+    Prelude Numeric.AD> diff (\ x -> auto t * sin x) 0     2.0  You can use a symbolic numeric type, like the one from `simple-reflect` to obtain symbolic derivatives:@@ -65,22 +65,22 @@  The answer: -    Prelude Numeric.AD Numeric.AD.Types> headJet $ jet $  grads (\[x,y] -> exp (x * y)) [1,2]+    Prelude Numeric.AD> headJet $ jet $  grads (\[x,y] -> exp (x * y)) [1,2]     7.38905609893065  The gradient: -    Prelude Numeric.AD Numeric.AD.Types> headJet $ tailJet $ jet $  grads (\[x,y] -> exp (x * y)) [1,2]+    Prelude Numeric.AD> headJet $ tailJet $ jet $  grads (\[x,y] -> exp (x * y)) [1,2]     [14.7781121978613,7.38905609893065]  The hessian (n * n matrix of 2nd derivatives) -    Prelude Numeric.AD Numeric.AD.Types> headJet $ tailJet $ tailJet $ jet $  grads (\[x,y] -> exp (x * y)) [1,2]+    Prelude Numeric.AD> headJet $ tailJet $ tailJet $ jet $  grads (\[x,y] -> exp (x * y)) [1,2]     [[29.5562243957226,22.16716829679195],[22.16716829679195,7.38905609893065]]  Or even higher order tensors of derivatives as a jet. -    Prelude Numeric.AD Numeric.AD.Types> headJet $ tailJet $ tailJet $ tailJet $ jet $  grads (\[x,y] -> exp (x * y)) [1,2]+    Prelude Numeric.AD> headJet $ tailJet $ tailJet $ tailJet $ jet $  grads (\[x,y] -> exp (x * y)) [1,2]     [[[59.1124487914452,44.3343365935839],[44.3343365935839,14.7781121978613]],[[44.3343365935839,14.7781121978613],[14.7781121978613,7.38905609893065]]]  Note the redundant values caused by the various symmetries in the tensors. The `ad` library is careful to compute
ad.cabal view
@@ -1,5 +1,5 @@ name:          ad-version:       4.2.4+version:       4.3 license:       BSD3 license-File:  LICENSE copyright:     (c) Edward Kmett 2010-2015,@@ -75,6 +75,10 @@   type: git   location: git://github.com/ekmett/ad.git +flag herbie+  default: False+  manual: True+ library   hs-source-dirs: src   include-dirs: include@@ -110,6 +114,11 @@    if impl(ghc < 7.8)     build-depends: tagged >= 0.7 && < 1++  if flag(herbie)+    build-depends: HerbiePlugin >= 0.1 && < 0.2+    cpp-options: -DHERBIE+    ghc-options: -fplugin=Herbie    exposed-modules:     Numeric.AD
include/instances.h view
@@ -21,7 +21,7 @@   fromInteger n = auto (fromInteger n)   (+)          = (<+>) -- binary (+) 1 1   (-)          = binary (-) (auto 1) (auto (-1)) -- TODO: <-> ? as it is, this might be pretty bad for Tower-  (*)          = lift2 (*) (\x y -> (y, x))+  (*)          = mul -- lift2 (*) (\x y -> (y, x))   negate       = lift1 negate (const (auto (-1)))   abs          = lift1 abs signum   signum a     = lift1 signum (const zero) a
src/Numeric/AD/Internal/Dense.hs view
@@ -185,6 +185,9 @@     (Id dadb, Id dadc) = df (Id a) (Id b) (Id c)     productRule dbi dci = dadb * dbi + dci * dadc +mul :: (Traversable f, Num a) => Dense f a -> Dense f a -> Dense f a+mul = lift2 (*) (\x y -> (y, x))+ #define BODY1(x)   (Traversable f, x) #define BODY2(x,y) (Traversable f, x, y) #define HEAD Dense f a
src/Numeric/AD/Internal/Forward.hs view
@@ -214,3 +214,6 @@ transposeWith f as = snd . mapAccumL go xss0 where   go xss b = (tail <$> xss, f b (head <$> xss))   xss0 = toList <$> as++mul :: (Num a) => Forward a -> Forward a -> Forward a+mul = lift2 (*) (\x y -> (y, x))
src/Numeric/AD/Internal/Kahn.hs view
@@ -158,6 +158,10 @@     a = f pb pc     (dadb, dadc) = df (Id a) (Id pb) (Id pc) ++mul :: Num a => Kahn a -> Kahn a -> Kahn a+mul = lift2 (*) (\x y -> (y, x))+ #define HEAD Kahn a #include <instances.h> 
src/Numeric/AD/Internal/Reverse.hs view
@@ -199,6 +199,9 @@     a = f pb pc     (dadb, dadc) = df (Id a) (Id pb) (Id pc) +mul :: (Reifies s Tape, Num a) => Reverse s a -> Reverse s a -> Reverse s a+mul = lift2 (*) (\x y -> (y, x))+ #define BODY1(x) (Reifies s Tape,x) #define BODY2(x,y) (Reifies s Tape,x,y) #define HEAD Reverse s a
src/Numeric/AD/Internal/Sparse.hs view
@@ -39,6 +39,9 @@   , vgrads   , Grad(..)   , Grads(..)+  , terms+  , deriv+  , primal   ) where  import Prelude hiding (lookup)@@ -48,7 +51,7 @@ import Control.Comonad.Cofree import Control.Monad (join) import Data.Data-import Data.IntMap (IntMap, mapWithKey, unionWith, findWithDefault, toAscList, singleton, insertWith, lookup)+import Data.IntMap (IntMap, unionWith, findWithDefault, toAscList, singleton, insertWith, lookup) import qualified Data.IntMap as IntMap import Data.Number.Erf import Data.Traversable@@ -74,13 +77,17 @@ -- | We only store partials in sorted order, so the map contained in a partial -- will only contain partials with equal or greater keys to that of the map in -- which it was found. This should be key for efficiently computing sparse hessians.--- there are only (n + k - 1) choose k distinct nth partial derivatives of a+-- there are only (n + k - 1) choose (k - 1) distinct nth partial derivatives of a -- function with k inputs. data Sparse a   = Sparse !a (IntMap (Sparse a))   | Zero   deriving (Show, Data, Typeable) +{-++These functions are now unused.+ dropMap :: Int -> IntMap a -> IntMap a dropMap n = snd . IntMap.split (n - 1) {-# INLINE dropMap #-}@@ -93,6 +100,7 @@     (fmap (* b) (dropMap n da))     (fmap (a *) (dropMap n db)) {-# INLINE times #-}+-}  vars :: (Traversable f, Num a) => f a -> f (Sparse a) vars = snd . mapAccumL var 0 where@@ -169,45 +177,42 @@ a <+> Zero = a Sparse a as <+> Sparse b bs = Sparse (a + b) $ unionWith (<+>) as bs +-- The instances for Jacobian for Sparse and Tower are almost identical;+-- could easily be made exactly equal by small changes. instance Num a => Jacobian (Sparse a) where   type D (Sparse a) = Sparse a   unary f _ Zero = auto (f 0)-  unary f dadb (Sparse pb bs) = Sparse (f pb) $ mapWithKey (times dadb) bs+  unary f dadb (Sparse pb bs) = Sparse (f pb) $ IntMap.map (* dadb) bs    lift1 f _ Zero = auto (f 0)-  lift1 f df b@(Sparse pb bs) = Sparse (f pb) $ mapWithKey (times (df b)) bs+  lift1 f df b@(Sparse pb bs) = Sparse (f pb) $ IntMap.map (* df b) bs    lift1_ f _  Zero = auto (f 0)   lift1_ f df b@(Sparse pb bs) = a where-    a = Sparse (f pb) $ mapWithKey (times (df a b)) bs+    a = Sparse (f pb) $ IntMap.map ((df a b) *) bs    binary f _    _    Zero           Zero           = auto (f 0 0)-  binary f _    dadc Zero           (Sparse pc dc) = Sparse (f 0  pc) $ mapWithKey (times dadc) dc-  binary f dadb _    (Sparse pb db) Zero           = Sparse (f pb 0 ) $ mapWithKey (times dadb) db+  binary f _    dadc Zero           (Sparse pc dc) = Sparse (f 0  pc) $ IntMap.map (dadc *) dc+  binary f dadb _    (Sparse pb db) Zero           = Sparse (f pb 0 ) $ IntMap.map (dadb *) db   binary f dadb dadc (Sparse pb db) (Sparse pc dc) = Sparse (f pb pc) $-    unionWith (<+>)-      (mapWithKey (times dadb) db)-      (mapWithKey (times dadc) dc)+    unionWith (<+>)  (IntMap.map (dadb *) db) (IntMap.map (dadc *) dc)    lift2 f _  Zero             Zero = auto (f 0 0)-  lift2 f df Zero c@(Sparse pc dc) = Sparse (f 0 pc) $ mapWithKey (times dadc) dc where dadc = snd (df zero c)-  lift2 f df b@(Sparse pb db) Zero = Sparse (f pb 0) $ mapWithKey (times dadb) db where dadb = fst (df b zero)+  lift2 f df Zero c@(Sparse pc dc) = Sparse (f 0 pc) $ IntMap.map (dadc *) dc where dadc = snd (df zero c)+  lift2 f df b@(Sparse pb db) Zero = Sparse (f pb 0) $ IntMap.map (* dadb) db where dadb = fst (df b zero)   lift2 f df b@(Sparse pb db) c@(Sparse pc dc) = Sparse (f pb pc) da where     (dadb, dadc) = df b c-    da = unionWith (<+>)-      (mapWithKey (times dadb) db)-      (mapWithKey (times dadc) dc)+    da = unionWith (<+>) (IntMap.map (dadb *) db) (IntMap.map (dadc *) dc)    lift2_ f _  Zero             Zero = auto (f 0 0)-  lift2_ f df b@(Sparse pb db) Zero = a where a = Sparse (f pb 0) (mapWithKey (times (fst (df a b zero))) db)-  lift2_ f df Zero c@(Sparse pc dc) = a where a = Sparse (f 0 pc) (mapWithKey (times (snd (df a zero c))) dc)+  lift2_ f df b@(Sparse pb db) Zero = a where a = Sparse (f pb 0) (IntMap.map (fst (df a b zero) *) db)+  lift2_ f df Zero c@(Sparse pc dc) = a where a = Sparse (f 0 pc) (IntMap.map (* snd (df a zero c)) dc)   lift2_ f df b@(Sparse pb db) c@(Sparse pc dc) = a where     (dadb, dadc) = df a b c     a = Sparse (f pb pc) da-    da = unionWith (<+>)-      (mapWithKey (times dadb) db)-      (mapWithKey (times dadc) dc)+    da = unionWith (<+>) (IntMap.map (dadb *) db) (IntMap.map (dadc *) dc) + #define HEAD Sparse a #include "instances.h" @@ -254,3 +259,62 @@ vgrads i = unpacks (unsafeGrads (packs i)) where   unsafeGrads f as = ds as $ apply f as {-# INLINE vgrads #-}++isZero :: Sparse a -> Bool+isZero Zero = True+isZero _ = False++-- |+-- A monomial is used to indicate order of differentiation.+-- For a k-ary function, it represented as a list of k non-negative Ints.+-- MI [n_0,n_1...n_{k-1}] denotes differentiation n_0 times with respect+-- to variable 0, n_1 times to variable 1, etc.+-- Trailing zeros omitted for efficiency.+--+-- Add 1 to variable k (i.e.differentiate once more wrt variable k).+incMonomial :: Int -> [Int] -> [Int]+incMonomial k [] = replicate k 0 ++ [1]+incMonomial 0 (a:as) = a+1:as+incMonomial k (a:as) = a:incMonomial (k-1) as++-- deriv f mi is the derivative of f of order mi (including higher derivatives).+deriv :: Sparse a -> [Int] -> Sparse a+deriv f mi = indx 0 mi f where+  indx _ [] f = f+  indx _ _ Zero = Zero+  indx v (0:as) f = indx (v+1) as f+  indx v (a:as) (Sparse _ df) = maybe Zero (indx v (a-1 : as)) (lookup v df)++-- The value of the derivative of (f*g) of order mi is+--       sum [a*primal (deriv f b)*primal (deriv g c) | (a,b,c) <- terms mi ]+-- It is a bit more complicated in mul' below, since we build the whole tree of+-- derivatives and want to prune the tree with Zeros as much as possible.+-- The number of terms in the sum for order MI as of differentiation has+-- sum (map (+1) as) terms, so this is *much* more efficient+-- than the naive recursive differentiation with 2^(sum as) terms.+-- The coefficients a, which collect equivalent derivatives, are suitable products+-- of binomial coefficients.+terms :: [Int]-> [(Integer,[Int],[Int])]+terms [] = [(1,[],[])]+terms (a:as) = concatMap (f ps) (zip (bins!!a) [0..a]) where+  ps = terms as+  bins = iterate next [1]+  next xs@(_:ts) = 1 : zipWith (+) xs ts ++ [1]+  next [] = error "impossible"+  f ps (b,k) = map (\(w,ks,is) -> (w*b,(k:ks),(a-k:is))) ps++mul :: Num a => Sparse a -> Sparse a -> Sparse a+mul Zero _ = Zero+mul _ Zero = Zero+mul f@(Sparse _ am) g@(Sparse _ bm) = Sparse (primal f * primal g) (derivs 0 []) where+  derivs v mi = IntMap.unions (map fn [v..kMax]) where+    fn w+      | and zs = IntMap.empty+      | otherwise = IntMap.singleton w (Sparse (sum ds) (derivs w mi'))+      where+        mi' = incMonomial w mi+        (zs,ds) = unzip (map derVal (terms mi'))+        derVal (bin,mif,mig) = (isZero fder || isZero gder, fromIntegral bin * primal fder * primal gder) where+          fder = deriv f mif+          gder = deriv g mig+  kMax = max (maximum (-1:IntMap.keys am)) (maximum (-1:IntMap.keys bm))
src/Numeric/AD/Internal/Tower.hs view
@@ -34,7 +34,7 @@   , tower   ) where -import Prelude hiding (all)+import Prelude hiding (all, sum) #if __GLASGOW_HASKELL__ < 710 import Control.Applicative hiding ((<**>)) #endif@@ -163,6 +163,23 @@ _        <**> Tower []  = auto 1 x        <**> Tower [y] = lift1 (**y) (\z -> y *^ z <**> Tower [y-1]) x x        <**> y         = lift2_ (**) (\z xi yi -> (yi * z / xi, z * log xi)) x y++-- mul xs ys = [ sum [xs!!j * ys!!(k-j)*bin k j | j <- [0..k]] | k <- [0..] ]+-- adapted for efficiency and to handle finite lists xs, ys+mul:: Num a => Tower a -> Tower a -> Tower a+mul (Tower []) _ = Tower []+mul (Tower (a:as)) (Tower bs) = Tower (convs' [1] [a] as bs)+  where convs' _ _ _ [] = []+        convs' ps ars as bs = sumProd3 ps ars bs :+              case as of+                 [] -> convs'' (next' ps) ars bs+                 a:as -> convs' (next ps) (a:ars) as bs+        convs'' _ _ [] = undefined -- convs'' never called with last argument empty+        convs'' _ _ [_] = []+        convs'' ps ars (_:bs) = sumProd3 ps ars bs : convs'' (next' ps) ars bs+        next xs = 1 : zipWith (+) xs (tail xs) ++ [1] -- next row in Pascal's triangle+        next' xs = zipWith (+) xs (tail xs) ++ [1] -- end part of next row in Pascal's triangle+        sumProd3 as bs cs = sum (zipWith3 (\x y z -> x*y*z) as bs cs)  #define HEAD Tower a #include <instances.h>
src/Numeric/AD/Newton.hs view
@@ -1,8 +1,14 @@-{-# LANGUAGE Rank2Types #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE GADTs #-} {-# LANGUAGE BangPatterns #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE ParallelListComp #-} ----------------------------------------------------------------------------- -- | -- Copyright   :  (c) Edward Kmett 2010-2015@@ -21,14 +27,18 @@   , fixedPoint   , extremum   -- * Gradient Ascent/Descent (Reverse AD)-  , gradientDescent+  , gradientDescent, constrainedDescent, CC(..), eval   , gradientAscent   , conjugateGradientDescent   , conjugateGradientAscent   , stochasticGradientDescent   ) where +#if __GLASGOW_HASKELL__ < 710+import Data.Foldable (Foldable, all, sum)+#else import Data.Foldable (all, sum)+#endif import Data.Reflection (Reifies) import Data.Traversable import Numeric.AD.Internal.Combinators@@ -38,7 +48,7 @@ import Numeric.AD.Internal.Reverse (Reverse, Tape) import Numeric.AD.Internal.Type (AD(..)) import Numeric.AD.Mode-import Numeric.AD.Mode.Reverse as Reverse (gradWith, gradWith')+import Numeric.AD.Mode.Reverse as Reverse (gradWith, gradWith', grad') import Numeric.AD.Rank1.Kahn as Kahn (Kahn, grad) import qualified Numeric.AD.Rank1.Newton as Rank1 import Prelude hiding (all, mapM, sum)@@ -122,6 +132,94 @@         x1 = fmap (\(xi,gxi) -> xi - eta * gxi) xgx         (fx1, xgx1) = Reverse.gradWith' (,) f x1 {-# INLINE gradientDescent #-}++data SEnv (f :: * -> *) a = SEnv { sValue :: a, origEnv :: f a }+  deriving (Functor, Foldable, Traversable)++-- | Convex constraint, CC, is a GADT wrapper that hides the existential+-- ('s') which is so prevalent in the rest of the API.  This is an+-- engineering convenience for managing the skolems.+data CC f a where+  CC :: forall f a. (forall s. Reifies s Tape => f (Reverse s a) -> Reverse s a) -> CC f a++-- |@constrainedDescent obj fs env@ optimizes the convex function @obj@+-- subject to the convex constraints @f <= 0@ where @f `elem` fs@. This is+-- done using a log barrier to model constraints (i.e. Boyd, Chapter 11.3).+-- The returned optimal point for the objective function must satisfy @fs@,+-- but the initial environment, @env@, needn't be feasible.+constrainedDescent :: forall f a. (Traversable f, RealFloat a, Floating a, Ord a)+                   => (forall s. Reifies s Tape => f (Reverse s a)+                                                -> Reverse s a)+                   -> [CC f a]+                   -> f a+                   -> [(a,f a)]+constrainedDescent objF [] env =+  map (\x -> (eval objF x, x)) (gradientDescent objF env)+constrainedDescent objF cs env =+    let s0       = 1 + maximum [eval c env | CC c <- cs]+        -- ^ s0 = max ( f_i(0) )+        cs'      = [CC (\(SEnv sVal rest) -> c rest - sVal) | CC c <- cs]+        -- ^ f_i' = f_i - s0  and thus f_i' <= 0+        envS     = SEnv s0 env+        -- feasible point for f_i', use gd to find feasiblity for f_i+        cc       = constrainedConvex' (CC sValue) cs' envS ((<=0) . sValue)+    in case dropWhile ((0 <) . fst) (take (2^(20::Int)) cc) of+        []                  -> []+        (_,envFeasible) : _ ->+            constrainedConvex' (CC objF) cs (origEnv envFeasible) (const True)+{-# INLINE constrainedDescent #-}++eval :: (Traversable f, Fractional a, Ord a) => (forall s. Reifies s Tape => f (Reverse s a) -> Reverse s a) -> f a -> a+eval f e = fst (grad' f e)+{-# INLINE eval #-}++-- | Like 'constrainedDescent' except the initial point must be feasible.+constrainedConvex' :: forall f a. (Traversable f, RealFloat a, Floating a, Ord a)+                   => CC f a+                   -> [CC f a]+                   -> f a+                   -> (f a -> Bool)+                   -> [(a,f a)]+constrainedConvex' objF cs env term =+  -- 1. Transform cs using a log barrier with increasing t values.+  let os   = map (mkOpt objF cs) tValues+  -- 2. Iteratively run gradientDescent on each os.+      envs =  [(undefined,env)] :+              [gD (snd $ last e) o+                          | o  <- os+                          | e  <- limEnvs+                          ]+      -- Obtain a finite number of elements from the initial len tValues - 1 lists.+      limEnvs = zipWith id nrSteps envs+  in dropWhile (not . term . snd) (concat $ drop 1 limEnvs)+ where+  tValues = map realToFrac $ take 64 $ iterate (*2) (2 :: a)+  nrSteps = [take 20 | _ <- [1..length tValues]] ++ [id]+  -- | `gD f e` is gradient descent with the evaulated result+  gD e (CC f)  = (eval f e, e) :+                 map (\x -> (eval f x, x)) (gradientDescent f e)+{-# INLINE constrainedConvex' #-}++-- @mkOpt u fs t@ converts an inequality convex problem (@u,fs@) into an+-- unconstrained convex problem using log barrier @u + -(1/t)log(-f_i)@.+-- As @t@ increases the approximation is more accurate but the gradient+-- decreases, making the gradient descent more expensive.+mkOpt :: forall f a. (Traversable f, RealFloat a, Floating a, Ord a)+      => CC f a -> [CC f a]+      -> a -> CC f a+mkOpt (CC o) xs t = CC (\e -> o e + sum (map (\(CC c) -> iHat t c e) xs))+{-# INLINE mkOpt #-}++iHat :: forall a f. (Traversable f, RealFloat a, Floating a, Ord a)+     => a+     -> (forall s. Reifies s Tape => f (Reverse s a) -> Reverse s a)+     -> (forall s. Reifies s Tape => f (Reverse s a) -> Reverse s a)+iHat t c e =+   let r = c e+   in if r >= 0 || isNaN r+        then 1  / 0+        else (-1 / auto t) * log( - (c  e))+{-# INLINE iHat #-}  -- | The 'stochasticGradientDescent' function approximates -- the true gradient of the constFunction by a gradient at
src/Numeric/AD/Rank1/Halley.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} ----------------------------------------------------------------------------- -- | -- Copyright   :  (c) Edward Kmett 2010-2015@@ -49,7 +50,12 @@ findZero f = go where   go x = x : if x == xn then [] else go xn where     (y:y':y'':_) = diffs0 f x-    xn = x - 2*y*y'/(2*y'*y'-y*y'')+    xn = x - 2*y*y'/(2*y'*y'-y*y'') -- 9.606671960457536 bits error+       -- = x - recip (y'/y - y''/ y') -- "improved error" = 6.640625e-2 bits+       -- = x - y' / (y'/y/y' - y''/2) -- "improved error" = 1.4+#ifdef HERBIE+{-# ANN findZero "NoHerbie" #-}+#endif {-# INLINE findZero #-}  -- | The 'inverse' function inverts a scalar function using