ad 0.28 → 0.30.0
raw patch · 10 files changed
+231/−167 lines, 10 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Numeric.AD.Internal: AD :: f a -> AD f a
- Numeric.AD.Internal: Id :: a -> Id a
- Numeric.AD.Internal: Pair :: a -> b -> Pair a b
- Numeric.AD.Internal: data Pair a b
- Numeric.AD.Internal: instance (Bounded a) => Bounded (Id a)
- Numeric.AD.Internal: instance (Enum a) => Enum (Id a)
- Numeric.AD.Internal: instance (Eq a) => Eq (Id a)
- Numeric.AD.Internal: instance (Eq a, Eq b) => Eq (Pair a b)
- Numeric.AD.Internal: instance (Floating a) => Floating (Id a)
- Numeric.AD.Internal: instance (Fractional a) => Fractional (Id a)
- Numeric.AD.Internal: instance (Lifted f) => Lifted (AD f)
- Numeric.AD.Internal: instance (Lifted f, Floating a) => Floating (AD f a)
- Numeric.AD.Internal: instance (Lifted f, Fractional a) => Fractional (AD f a)
- Numeric.AD.Internal: instance (Lifted f, Num a) => Num (AD f a)
- Numeric.AD.Internal: instance (Lifted f, Real a) => Real (AD f a)
- Numeric.AD.Internal: instance (Lifted f, RealFloat a) => RealFloat (AD f a)
- Numeric.AD.Internal: instance (Lifted f, RealFrac a) => RealFrac (AD f a)
- Numeric.AD.Internal: instance (Lifted f, Show a) => Show (AD f a)
- Numeric.AD.Internal: instance (Mode f) => Mode (AD f)
- Numeric.AD.Internal: instance (Monoid a) => Monoid (Id a)
- Numeric.AD.Internal: instance (Num a) => Num (Id a)
- Numeric.AD.Internal: instance (Num a, Lifted f, Bounded a) => Bounded (AD f a)
- Numeric.AD.Internal: instance (Num a, Lifted f, Enum a) => Enum (AD f a)
- Numeric.AD.Internal: instance (Num a, Lifted f, Eq a) => Eq (AD f a)
- Numeric.AD.Internal: instance (Num a, Lifted f, Ord a) => Ord (AD f a)
- Numeric.AD.Internal: instance (Ord a) => Ord (Id a)
- Numeric.AD.Internal: instance (Ord a, Ord b) => Ord (Pair a b)
- Numeric.AD.Internal: instance (Primal f) => Primal (AD f)
- Numeric.AD.Internal: instance (Read a, Read b) => Read (Pair a b)
- Numeric.AD.Internal: instance (Real a) => Real (Id a)
- Numeric.AD.Internal: instance (RealFloat a) => RealFloat (Id a)
- Numeric.AD.Internal: instance (RealFrac a) => RealFrac (Id a)
- Numeric.AD.Internal: instance (Show a) => Show (Id a)
- Numeric.AD.Internal: instance (Show a, Show b) => Show (Pair a b)
- Numeric.AD.Internal: instance Applicative Id
- Numeric.AD.Internal: instance Foldable (Pair a)
- Numeric.AD.Internal: instance Functor (Pair a)
- Numeric.AD.Internal: instance Functor Id
- Numeric.AD.Internal: instance Iso (f a) (AD f a)
- Numeric.AD.Internal: instance Iso a (Id a)
- Numeric.AD.Internal: instance Iso a a
- Numeric.AD.Internal: instance Lifted Id
- Numeric.AD.Internal: instance Mode Id
- Numeric.AD.Internal: instance Monad Id
- Numeric.AD.Internal: instance Primal Id
- Numeric.AD.Internal: instance Traversable (Pair a)
- Numeric.AD.Internal: newtype AD f a
- Numeric.AD.Internal: newtype Id a
- Numeric.AD.Internal: on :: (a -> a -> b) -> (c -> a) -> c -> c -> b
- Numeric.AD.Internal: probe :: a -> AD Id a
- Numeric.AD.Internal: probed :: f a -> f (AD Id a)
- Numeric.AD.Internal: runAD :: AD f a -> f a
- Numeric.AD.Internal: type UF f a = forall s. (Mode s) => AD s a -> f (AD s a)
- Numeric.AD.Internal: type FF f g a = forall s. (Mode s) => f (AD s a) -> g (AD s a)
- Numeric.AD.Internal: unprobe :: AD Id a -> a
- Numeric.AD.Internal: unprobed :: f (AD Id a) -> f a
- Numeric.AD.Internal: zipWithDefaultT :: (Foldable f, Traversable g) => a -> (a -> b -> c) -> f a -> g b -> g c
- Numeric.AD.Internal: zipWithT :: (Foldable f, Traversable g) => (a -> b -> c) -> f a -> g b -> g c
+ Numeric.AD.Internal.Classes: class Iso a b
+ Numeric.AD.Internal.Classes: instance Iso a a
+ Numeric.AD.Internal.Classes: iso :: (Iso a b) => f a -> f b
+ Numeric.AD.Internal.Classes: osi :: (Iso a b) => f b -> f a
+ Numeric.AD.Internal.Combinators: on :: (a -> a -> b) -> (c -> a) -> c -> c -> b
+ Numeric.AD.Internal.Combinators: zipWithDefaultT :: (Foldable f, Traversable g) => a -> (a -> b -> c) -> f a -> g b -> g c
+ Numeric.AD.Internal.Combinators: zipWithT :: (Foldable f, Traversable g) => (a -> b -> c) -> f a -> g b -> g c
+ Numeric.AD.Internal.Identity: Id :: a -> Id a
+ Numeric.AD.Internal.Identity: instance (Bounded a) => Bounded (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 (Floating a) => Floating (Id a)
+ Numeric.AD.Internal.Identity: instance (Fractional a) => Fractional (Id a)
+ Numeric.AD.Internal.Identity: instance (Monoid a) => Monoid (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 Applicative Id
+ Numeric.AD.Internal.Identity: instance Foldable Id
+ Numeric.AD.Internal.Identity: instance Functor Id
+ Numeric.AD.Internal.Identity: instance Iso a (Id a)
+ Numeric.AD.Internal.Identity: instance Lifted Id
+ Numeric.AD.Internal.Identity: instance Mode Id
+ Numeric.AD.Internal.Identity: instance Monad Id
+ Numeric.AD.Internal.Identity: instance Primal Id
+ Numeric.AD.Internal.Identity: instance Traversable Id
+ Numeric.AD.Internal.Identity: newtype Id a
+ Numeric.AD.Internal.Identity: probe :: a -> AD Id a
+ Numeric.AD.Internal.Identity: probed :: f a -> f (AD Id a)
+ Numeric.AD.Internal.Identity: unprobe :: AD Id a -> a
+ Numeric.AD.Internal.Identity: unprobed :: f (AD Id a) -> f a
+ Numeric.AD.Internal.Types: AD :: f a -> AD f a
+ Numeric.AD.Internal.Types: instance (Lifted f) => Lifted (AD f)
+ Numeric.AD.Internal.Types: instance (Lifted f, Floating a) => Floating (AD f a)
+ Numeric.AD.Internal.Types: instance (Lifted f, Fractional a) => Fractional (AD f a)
+ Numeric.AD.Internal.Types: instance (Lifted f, Num a) => Num (AD f a)
+ Numeric.AD.Internal.Types: instance (Lifted f, Real a) => Real (AD f a)
+ Numeric.AD.Internal.Types: instance (Lifted f, RealFloat a) => RealFloat (AD f a)
+ Numeric.AD.Internal.Types: instance (Lifted f, RealFrac a) => RealFrac (AD f a)
+ Numeric.AD.Internal.Types: instance (Lifted f, Show a) => Show (AD f a)
+ Numeric.AD.Internal.Types: instance (Mode f) => Mode (AD f)
+ Numeric.AD.Internal.Types: instance (Num a, Lifted f, Bounded a) => Bounded (AD f a)
+ Numeric.AD.Internal.Types: instance (Num a, Lifted f, Enum a) => Enum (AD f a)
+ Numeric.AD.Internal.Types: instance (Num a, Lifted f, Eq a) => Eq (AD f a)
+ Numeric.AD.Internal.Types: instance (Num a, Lifted f, Ord a) => Ord (AD f a)
+ Numeric.AD.Internal.Types: instance (Primal f) => Primal (AD f)
+ Numeric.AD.Internal.Types: instance Iso (f a) (AD f a)
+ Numeric.AD.Internal.Types: newtype AD f a
+ Numeric.AD.Internal.Types: runAD :: AD f a -> f a
+ Numeric.AD.Internal.Types: type UF f a = forall s. (Mode s) => AD s a -> f (AD s a)
+ Numeric.AD.Internal.Types: type FF f g a = forall s. (Mode s) => f (AD s a) -> g (AD s a)
Files
- Numeric/AD.hs +2/−1
- Numeric/AD/Internal.hs +2/−162
- Numeric/AD/Internal/Classes.hs +9/−0
- Numeric/AD/Internal/Combinators.hs +27/−0
- Numeric/AD/Internal/Forward.hs +1/−0
- Numeric/AD/Internal/Identity.hs +135/−0
- Numeric/AD/Internal/Iterated.hs +1/−0
- Numeric/AD/Internal/Reverse.hs +1/−0
- Numeric/AD/Internal/Types.hs +42/−0
- ad.cabal +11/−4
Numeric/AD.hs view
@@ -100,7 +100,8 @@ import Data.Traversable (Traversable) import Data.Foldable (Foldable, foldr') import Control.Applicative-import Numeric.AD.Internal (AD(..), probed, unprobe, UU, UF, FU, FF)+import Numeric.AD.Internal (AD(..), UU, UF, FU, FF)+import Numeric.AD.Internal.Identity (probed, unprobe) import Numeric.AD.Internal.Classes (Mode(..)) import Numeric.AD.Forward (diff, diff', diffF, diffF', du, du', duF, duF', diffM, diffM', jacobianT, jacobianWithT) import Numeric.AD.Tower (diffsF, diffs0F , diffs, diffs0, taylor, taylor0, maclaurin, maclaurin0, dus, dus0, dusF, dus0F)
Numeric/AD/Internal.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE Rank2Types, GeneralizedNewtypeDeriving, TemplateHaskell, FlexibleContexts, FlexibleInstances, MultiParamTypeClasses, DeriveFunctor, DeriveFoldable, DeriveTraversable #-} -- {-# OPTIONS_HADDOCK hide, prune #-} ----------------------------------------------------------------------------- -- |@@ -12,168 +11,9 @@ ----------------------------------------------------------------------------- module Numeric.AD.Internal ( module Numeric.AD.Internal.Classes- , UU, UF, FU, FF- , zipWithT- , zipWithDefaultT- , on- , AD(..)- , Id(..)- , probe- , unprobe- , probed- , unprobed- , Pair(..)+ , module Numeric.AD.Internal.Types ) where -import Control.Applicative-import Language.Haskell.TH import Numeric.AD.Internal.Classes-import Data.Monoid-import Data.Traversable (Traversable, mapAccumL)-import Data.Foldable (Foldable, toList)---- | A scalar-to-scalar automatically-differentiable function.-type UU a = forall s. Mode s => AD s a -> AD s a--- | A scalar-to-non-scalar automatically-differentiable function.-type UF f a = forall s. Mode s => AD s a -> f (AD s a)--- | A non-scalar-to-scalar automatically-differentiable function.-type FU f a = forall s. Mode s => f (AD s a) -> AD s a--- | A non-scalar-to-non-scalar automatically-differentiable function.-type FF f g a = forall s. Mode s => f (AD s a) -> g (AD s a)--on :: (a -> a -> b) -> (c -> a) -> c -> c -> b-on f g a b = f (g a) (g b)--data Pair a b = Pair a b deriving (Eq, Ord, Show, Read, Functor, Foldable, Traversable)--zipWithT :: (Foldable f, Traversable g) => (a -> b -> c) -> f a -> g b -> g c-zipWithT f as = snd . mapAccumL (\(a:as') b -> (as', f a b)) (toList as)--zipWithDefaultT :: (Foldable f, Traversable g) => a -> (a -> b -> c) -> f a -> g b -> g c-zipWithDefaultT z f as = zipWithT f (toList as ++ repeat z)--class Iso a b where- iso :: f a -> f b- osi :: f b -> f a--instance Iso a a where- iso = id- osi = id---- | 'AD' serves as a common wrapper for different 'Mode' instances, exposing a traditional--- numerical tower. Universal quantification is used to limit the actions in user code to--- machinery that will return the same answers under all AD modes, allowing us to use modes--- interchangeably as both the type level \"brand\" and dictionary, providing a common API.-newtype AD f a = AD { runAD :: f a } deriving (Iso (f a), Lifted, Mode, Primal)----- > instance (Lifted f, Num a) => Num (AD f a)--- etc.-let f = varT (mkName "f") in - deriveNumeric - (classP ''Lifted [f]:) - (conT ''AD `appT` f)--newtype Id a = Id a deriving- (Iso a, Eq, Ord, Show, Enum, Bounded, Num, Real, Fractional, Floating, RealFrac, RealFloat, Monoid)--probe :: a -> AD Id a-probe a = AD (Id a)--unprobe :: AD Id a -> a-unprobe (AD (Id a)) = a--pid :: f a -> f (Id a)-pid = iso--unpid :: f (Id a) -> f a-unpid = osi--probed :: f a -> f (AD Id a)-probed = iso . pid--unprobed :: f (AD Id a) -> f a-unprobed = unpid . osi--instance Functor Id where- fmap f (Id a) = Id (f a)--instance Applicative Id where- pure = Id- Id f <*> Id a = Id (f a)--instance Monad Id where- return = Id- Id a >>= f = f a--instance Lifted Id where- (==!) = (==)- compare1 = compare- showsPrec1 = showsPrec- fromInteger1 = fromInteger- (+!) = (+)- (-!) = (-)- (*!) = (*)- negate1 = negate- abs1 = abs- signum1 = signum- (/!) = (/)- recip1 = recip- fromRational1 = fromRational- toRational1 = toRational- pi1 = pi- exp1 = exp- log1 = log- sqrt1 = sqrt- (**!) = (**)- logBase1 = logBase- sin1 = sin- cos1 = cos- tan1 = tan- asin1 = asin- acos1 = acos- atan1 = atan- sinh1 = sinh- cosh1 = cosh- tanh1 = tanh- asinh1 = asinh- acosh1 = acosh- atanh1 = atanh- properFraction1 = properFraction- truncate1 = truncate- round1 = round- ceiling1 = ceiling- floor1 = floor- floatRadix1 = floatRadix- floatDigits1 = floatDigits- floatRange1 = floatRange- decodeFloat1 = decodeFloat- encodeFloat1 = encodeFloat- exponent1 = exponent- significand1 = significand- scaleFloat1 = scaleFloat- isNaN1 = isNaN- isInfinite1 = isInfinite- isDenormalized1 = isDenormalized- isNegativeZero1 = isNegativeZero- isIEEE1 = isIEEE- atan21 = atan2- succ1 = succ- pred1 = pred- toEnum1 = toEnum- fromEnum1 = fromEnum- enumFrom1 = enumFrom- enumFromThen1 = enumFromThen- enumFromTo1 = enumFromTo- enumFromThenTo1 = enumFromThenTo- minBound1 = minBound- maxBound1 = maxBound--instance Mode Id where- lift = Id- Id a ^* b = Id (a * b)- a *^ Id b = Id (a * b)- Id a <+> Id b = Id (a + b)+import Numeric.AD.Internal.Types -instance Primal Id where- primal (Id a) = a
Numeric/AD/Internal/Classes.hs view
@@ -22,6 +22,7 @@ , deriveLifted , deriveNumeric , Lifted(..)+ , Iso(..) ) where import Control.Applicative@@ -32,6 +33,14 @@ infixl 7 *!, /!, ^*, *^, ^/ infixl 6 +!, -!, <+> infix 4 ==!++class Iso a b where+ iso :: f a -> f b+ osi :: f b -> f a++instance Iso a a where+ iso = id+ osi = id class Lifted t where showsPrec1 :: Show a => Int -> t a -> ShowS
+ Numeric/AD/Internal/Combinators.hs view
@@ -0,0 +1,27 @@+-----------------------------------------------------------------------------+-- |+-- Module : Numeric.AD.Internal.Combinators+-- Copyright : (c) Edward Kmett 2010+-- License : BSD3+-- Maintainer : ekmett@gmail.com+-- Stability : experimental+-- Portability : GHC only+--+-----------------------------------------------------------------------------+module Numeric.AD.Internal.Combinators+ ( zipWithT+ , zipWithDefaultT+ , on+ ) where++import Data.Traversable (Traversable, mapAccumL)+import Data.Foldable (Foldable, toList)++on :: (a -> a -> b) -> (c -> a) -> c -> c -> b+on f g a b = f (g a) (g b)++zipWithT :: (Foldable f, Traversable g) => (a -> b -> c) -> f a -> g b -> g c+zipWithT f as = snd . mapAccumL (\(a:as') b -> (as', f a b)) (toList as)++zipWithDefaultT :: (Foldable f, Traversable g) => a -> (a -> b -> c) -> f a -> g b -> g c+zipWithDefaultT z f as = zipWithT f (toList as ++ repeat z)
Numeric/AD/Internal/Forward.hs view
@@ -34,6 +34,7 @@ import Data.Data import Control.Applicative import Numeric.AD.Internal+import Numeric.AD.Internal.Identity data Forward a = Forward a a deriving (Show, Data, Typeable)
+ Numeric/AD/Internal/Identity.hs view
@@ -0,0 +1,135 @@+{-# LANGUAGE GeneralizedNewtypeDeriving, FlexibleContexts, FlexibleInstances, MultiParamTypeClasses #-}+-----------------------------------------------------------------------------+-- |+-- Module : Numeric.AD.Internal.Identity+-- Copyright : (c) Edward Kmett 2010+-- License : BSD3+-- Maintainer : ekmett@gmail.com+-- Stability : experimental+-- Portability : GHC only+--+-----------------------------------------------------------------------------+module Numeric.AD.Internal.Identity+ ( Id(..)+ , probe+ , unprobe+ , probed+ , unprobed+ ) where++import Control.Applicative+import Numeric.AD.Internal.Classes+import Numeric.AD.Internal.Types+import Data.Monoid+import Data.Traversable (Traversable, traverse)+import Data.Foldable (Foldable, foldMap)++newtype Id a = Id a deriving+ (Iso a, Eq, Ord, Show, Enum, Bounded, Num, Real, Fractional, Floating, RealFrac, RealFloat, Monoid)++probe :: a -> AD Id a+probe a = AD (Id a)++unprobe :: AD Id a -> a+unprobe (AD (Id a)) = a++pid :: f a -> f (Id a)+pid = iso++unpid :: f (Id a) -> f a+unpid = osi++probed :: f a -> f (AD Id a)+probed = iso . pid++unprobed :: f (AD Id a) -> f a+unprobed = unpid . osi++instance Functor Id where+ fmap f (Id a) = Id (f a)++instance Foldable Id where+ foldMap f (Id a) = f a++instance Traversable Id where+ traverse f (Id a) = Id <$> f a++instance Applicative Id where+ pure = Id+ Id f <*> Id a = Id (f a)++instance Monad Id where+ return = Id+ Id a >>= f = f a++instance Lifted Id where+ (==!) = (==)+ compare1 = compare+ showsPrec1 = showsPrec+ fromInteger1 = fromInteger+ (+!) = (+)+ (-!) = (-)+ (*!) = (*)+ negate1 = negate+ abs1 = abs+ signum1 = signum+ (/!) = (/)+ recip1 = recip+ fromRational1 = fromRational+ toRational1 = toRational+ pi1 = pi+ exp1 = exp+ log1 = log+ sqrt1 = sqrt+ (**!) = (**)+ logBase1 = logBase+ sin1 = sin+ cos1 = cos+ tan1 = tan+ asin1 = asin+ acos1 = acos+ atan1 = atan+ sinh1 = sinh+ cosh1 = cosh+ tanh1 = tanh+ asinh1 = asinh+ acosh1 = acosh+ atanh1 = atanh+ properFraction1 = properFraction+ truncate1 = truncate+ round1 = round+ ceiling1 = ceiling+ floor1 = floor+ floatRadix1 = floatRadix+ floatDigits1 = floatDigits+ floatRange1 = floatRange+ decodeFloat1 = decodeFloat+ encodeFloat1 = encodeFloat+ exponent1 = exponent+ significand1 = significand+ scaleFloat1 = scaleFloat+ isNaN1 = isNaN+ isInfinite1 = isInfinite+ isDenormalized1 = isDenormalized+ isNegativeZero1 = isNegativeZero+ isIEEE1 = isIEEE+ atan21 = atan2+ succ1 = succ+ pred1 = pred+ toEnum1 = toEnum+ fromEnum1 = fromEnum+ enumFrom1 = enumFrom+ enumFromThen1 = enumFromThen+ enumFromTo1 = enumFromTo+ enumFromThenTo1 = enumFromThenTo+ minBound1 = minBound+ maxBound1 = maxBound++instance Mode Id where+ lift = Id+ Id a ^* b = Id (a * b)+ a *^ Id b = Id (a * b)+ Id a <+> Id b = Id (a + b)++instance Primal Id where+ primal (Id a) = a
Numeric/AD/Internal/Iterated.hs view
@@ -25,6 +25,7 @@ -- import Data.Typeable import Numeric.AD.Internal import Numeric.AD.Internal.Comonad+import Numeric.AD.Internal.Combinators (on) import Language.Haskell.TH infixl 3 :|
Numeric/AD/Internal/Reverse.hs view
@@ -49,6 +49,7 @@ import System.IO.Unsafe (unsafePerformIO) import Language.Haskell.TH import Numeric.AD.Internal+import Numeric.AD.Internal.Identity -- | A @Tape@ records the information needed back propagate from the output to each input during 'Reverse' 'Mode' AD. data Tape a t
+ Numeric/AD/Internal/Types.hs view
@@ -0,0 +1,42 @@+{-# LANGUAGE Rank2Types, GeneralizedNewtypeDeriving, TemplateHaskell, FlexibleContexts, FlexibleInstances, MultiParamTypeClasses, DeriveFunctor, DeriveFoldable, DeriveTraversable #-}+-- {-# OPTIONS_HADDOCK hide, prune #-}+-----------------------------------------------------------------------------+-- |+-- Module : Numeric.AD.Internal.Types+-- Copyright : (c) Edward Kmett 2010+-- License : BSD3+-- Maintainer : ekmett@gmail.com+-- Stability : experimental+-- Portability : GHC only+--+-----------------------------------------------------------------------------+module Numeric.AD.Internal.Types+ ( AD(..)+ , UU, UF, FU, FF+ ) where++import Language.Haskell.TH+import Numeric.AD.Internal.Classes++-- | 'AD' serves as a common wrapper for different 'Mode' instances, exposing a traditional+-- numerical tower. Universal quantification is used to limit the actions in user code to+-- machinery that will return the same answers under all AD modes, allowing us to use modes+-- interchangeably as both the type level \"brand\" and dictionary, providing a common API.+newtype AD f a = AD { runAD :: f a } deriving (Iso (f a), Lifted, Mode, Primal)++-- > instance (Lifted f, Num a) => Num (AD f a)+-- etc.+let f = varT (mkName "f") in + deriveNumeric + (classP ''Lifted [f]:) + (conT ''AD `appT` f)++-- | A scalar-to-scalar automatically-differentiable function.+type UU a = forall s. Mode s => AD s a -> AD s a+-- | A scalar-to-non-scalar automatically-differentiable function.+type UF f a = forall s. Mode s => AD s a -> f (AD s a)+-- | A non-scalar-to-scalar automatically-differentiable function.+type FU f a = forall s. Mode s => f (AD s a) -> AD s a+-- | A non-scalar-to-non-scalar automatically-differentiable function.+type FF f g a = forall s. Mode s => f (AD s a) -> g (AD s a)+
ad.cabal view
@@ -1,5 +1,5 @@ Name: ad-Version: 0.28+Version: 0.30.0 License: BSD3 License-File: LICENSE Copyright: (c) Edward Kmett 2010,@@ -11,9 +11,13 @@ Homepage: http://comonad.com/reader/ Synopsis: Automatic Differentiation Description: - Forward, reverse, and higher-order automatic differentiation combinators with a common API.+ Forward-, reverse- and mixed- mode automatic differentiation combinators with a common API. . - Type-level \"branding\" is used to prevent the end user from confusing infinitesimals.+ Type-level \"branding\" is used to both prevent the end user from confusing infinitesimals + and to limit unsafe access to the implementation details of each Mode.+ .+ The combinators in "Numeric.AD" choose from a variety of automatic differentiation modes,+ based on the arity of their inputs and outputs. Build-Type: Simple Build-Depends: @@ -35,6 +39,8 @@ Numeric.AD.Internal Numeric.AD.Internal.Classes+ Numeric.AD.Internal.Types+ Numeric.AD.Internal.Combinators Numeric.AD.Internal.Comonad Numeric.AD.Internal.Stream Numeric.AD.Internal.Tensors@@ -43,7 +49,8 @@ Numeric.AD.Internal.Forward Numeric.AD.Internal.Reverse Numeric.AD.Internal.Tower+ Numeric.AD.Internal.Identity Numeric.AD.Internal.Iterated Extra-Source-Files: TODO-GHC-Options: -Wall+GHC-Options: -Wall -fspec-constr -O2