ad 1.2.0.2 → 1.3
raw patch · 6 files changed
+36/−41 lines, 6 filesdep ~template-haskellPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: template-haskell
API changes (from Hackage documentation)
- Numeric.AD.Internal.Classes: (*!) :: (Lifted t, Num a) => t a -> t a -> t a
- Numeric.AD.Internal.Classes: (**!) :: (Lifted t, Floating a) => t a -> t a -> t a
- Numeric.AD.Internal.Classes: (+!) :: (Lifted t, Num a) => t a -> t a -> t a
- Numeric.AD.Internal.Classes: (-!) :: (Lifted t, Num a) => t a -> t a -> t a
- Numeric.AD.Internal.Classes: abs1 :: (Lifted t, Num a) => t a -> t a
- Numeric.AD.Internal.Classes: acos1 :: (Lifted t, Floating a) => t a -> t a
- Numeric.AD.Internal.Classes: acosh1 :: (Lifted t, Floating a) => t a -> t a
- Numeric.AD.Internal.Classes: asin1 :: (Lifted t, Floating a) => t a -> t a
- Numeric.AD.Internal.Classes: asinh1 :: (Lifted t, Floating a) => t a -> t a
- Numeric.AD.Internal.Classes: atan1 :: (Lifted t, Floating a) => t a -> t a
- Numeric.AD.Internal.Classes: atanh1 :: (Lifted t, Floating a) => t a -> t a
- Numeric.AD.Internal.Classes: ceiling1 :: (Lifted t, RealFrac a, Integral b) => t a -> b
- Numeric.AD.Internal.Classes: cos1 :: (Lifted t, Floating a) => t a -> t a
- Numeric.AD.Internal.Classes: cosh1 :: (Lifted t, Floating a) => t a -> t a
- Numeric.AD.Internal.Classes: exp1 :: (Lifted t, Floating a) => t a -> t a
- Numeric.AD.Internal.Classes: floor1 :: (Lifted t, RealFrac a, Integral b) => t a -> b
- Numeric.AD.Internal.Classes: isDenormalized1 :: (Lifted t, RealFloat a) => t a -> Bool
- Numeric.AD.Internal.Classes: isIEEE1 :: (Lifted t, RealFloat a) => t a -> Bool
- Numeric.AD.Internal.Classes: isInfinite1 :: (Lifted t, RealFloat a) => t a -> Bool
- Numeric.AD.Internal.Classes: isNaN1 :: (Lifted t, RealFloat a) => t a -> Bool
- Numeric.AD.Internal.Classes: isNegativeZero1 :: (Lifted t, RealFloat a) => t a -> Bool
- Numeric.AD.Internal.Classes: log1 :: (Lifted t, Floating a) => t a -> t a
- Numeric.AD.Internal.Classes: logBase1 :: (Lifted t, Floating a) => t a -> t a -> t a
- Numeric.AD.Internal.Classes: negate1 :: (Lifted t, Num a) => t a -> t a
- Numeric.AD.Internal.Classes: pred1 :: (Lifted t, Num a, Enum a) => t a -> t a
- Numeric.AD.Internal.Classes: round1 :: (Lifted t, RealFrac a, Integral b) => t a -> b
- Numeric.AD.Internal.Classes: signum1 :: (Lifted t, Num a) => t a -> t a
- Numeric.AD.Internal.Classes: sin1 :: (Lifted t, Floating a) => t a -> t a
- Numeric.AD.Internal.Classes: sinh1 :: (Lifted t, Floating a) => t a -> t a
- Numeric.AD.Internal.Classes: sqrt1 :: (Lifted t, Floating a) => t a -> t a
- Numeric.AD.Internal.Classes: succ1 :: (Lifted t, Num a, Enum a) => t a -> t a
- Numeric.AD.Internal.Classes: tan1 :: (Lifted t, Floating a) => t a -> t a
- Numeric.AD.Internal.Classes: tanh1 :: (Lifted t, Floating a) => t a -> t a
- Numeric.AD.Internal.Classes: truncate1 :: (Lifted t, RealFrac a, Integral b) => t a -> b
+ Numeric.AD.Internal.Classes: (**!, logBase1) :: (Lifted t, Floating a) => t a -> t a -> t a
+ Numeric.AD.Internal.Classes: (+!, *!, -!) :: (Lifted t, Num a) => t a -> t a -> t a
+ Numeric.AD.Internal.Classes: exp1, sqrt1, log1 :: (Lifted t, Floating a) => t a -> t a
+ Numeric.AD.Internal.Classes: isNaN1, isIEEE1, isNegativeZero1, isDenormalized1, isInfinite1 :: (Lifted t, RealFloat a) => t a -> Bool
+ Numeric.AD.Internal.Classes: negate1, signum1, abs1 :: (Lifted t, Num a) => t a -> t a
+ Numeric.AD.Internal.Classes: sin1, atan1, acos1, asin1, tan1, cos1 :: (Lifted t, Floating a) => t a -> t a
+ Numeric.AD.Internal.Classes: sinh1, atanh1, acosh1, asinh1, tanh1, cosh1 :: (Lifted t, Floating a) => t a -> t a
+ Numeric.AD.Internal.Classes: succ1, pred1 :: (Lifted t, Num a, Enum a) => t a -> t a
+ Numeric.AD.Internal.Classes: truncate1, floor1, ceiling1, round1 :: (Lifted t, RealFrac a, Integral b) => t a -> b
- Numeric.AD.Halley: extremum :: Fractional a => UU a -> a -> [a]
+ Numeric.AD.Halley: extremum :: (Fractional a, Eq a) => UU a -> a -> [a]
- Numeric.AD.Halley: findZero :: Fractional a => UU a -> a -> [a]
+ Numeric.AD.Halley: findZero :: (Fractional a, Eq a) => UU a -> a -> [a]
- Numeric.AD.Halley: fixedPoint :: Fractional a => UU a -> a -> [a]
+ Numeric.AD.Halley: fixedPoint :: (Fractional a, Eq a) => UU a -> a -> [a]
- Numeric.AD.Halley: inverse :: Fractional a => UU a -> a -> a -> [a]
+ Numeric.AD.Halley: inverse :: (Fractional a, Eq a) => UU a -> a -> a -> [a]
- Numeric.AD.Internal.Classes: showsPrec1 :: (Lifted t, Num a) => Int -> t a -> ShowS
+ Numeric.AD.Internal.Classes: showsPrec1 :: (Lifted t, Num a, Show a) => Int -> t a -> ShowS
- Numeric.AD.Newton: extremum :: Fractional a => UU a -> a -> [a]
+ Numeric.AD.Newton: extremum :: (Fractional a, Eq a) => UU a -> a -> [a]
- Numeric.AD.Newton: findZero :: Fractional a => UU a -> a -> [a]
+ Numeric.AD.Newton: findZero :: (Fractional a, Eq a) => UU a -> a -> [a]
- Numeric.AD.Newton: fixedPoint :: Fractional a => UU a -> a -> [a]
+ Numeric.AD.Newton: fixedPoint :: (Fractional a, Eq a) => UU a -> a -> [a]
- Numeric.AD.Newton: inverse :: Fractional a => UU a -> a -> a -> [a]
+ Numeric.AD.Newton: inverse :: (Fractional a, Eq a) => UU a -> a -> a -> [a]
Files
- Numeric/AD/Halley.hs +4/−4
- Numeric/AD/Internal/Classes.hs +1/−1
- Numeric/AD/Internal/Composition.hs +3/−3
- Numeric/AD/Internal/Types.hs +2/−2
- Numeric/AD/Newton.hs +4/−4
- ad.cabal +22/−27
Numeric/AD/Halley.hs view
@@ -49,7 +49,7 @@ -- > module Data.Complex -- > take 10 $ findZero ((+1).(^2)) (1 :+ 1) -- converge to (0 :+ 1)@ ---findZero :: Fractional a => UU a -> a -> [a]+findZero :: (Fractional a, Eq a) => UU a -> a -> [a] findZero f = go where go x = x : if y == 0 then [] else go (x - 2*y*y'/(2*y'*y'-y*y''))@@ -64,7 +64,7 @@ -- Note: the @take 10 $ inverse sqrt 1 (sqrt 10)@ example that works for Newton's method -- fails with Halley's method because the preconditions do not hold. -inverse :: Fractional a => UU a -> a -> a -> [a]+inverse :: (Fractional a, Eq a) => UU a -> a -> a -> [a] inverse f x0 y = findZero (\x -> f x - lift y) x0 {-# INLINE inverse #-} @@ -73,7 +73,7 @@ -- increasingly accurate results. (Modulo the usual caveats.) -- -- > take 10 $ fixedPoint cos 1 -- converges to 0.7390851332151607-fixedPoint :: Fractional a => UU a -> a -> [a]+fixedPoint :: (Fractional a, Eq a) => UU a -> a -> [a] fixedPoint f = findZero (\x -> f x - x) {-# INLINE fixedPoint #-} @@ -82,7 +82,7 @@ -- accurate results. (Modulo the usual caveats.) -- -- > take 10 $ extremum cos 1 -- convert to 0 -extremum :: Fractional a => UU a -> a -> [a]+extremum :: (Fractional a, Eq a) => UU a -> a -> [a] extremum f = findZero (diff (decomposeMode . f . composeMode)) {-# INLINE extremum #-}
Numeric/AD/Internal/Classes.hs view
@@ -44,7 +44,7 @@ osi = id class Lifted t where- showsPrec1 :: Num a => Int -> t a -> ShowS+ showsPrec1 :: (Num a, Show a) => Int -> t a -> ShowS (==!) :: (Num a, Eq a) => t a -> t a -> Bool compare1 :: (Num a, Ord a) => t a -> t a -> Ordering fromInteger1 :: Num a => Integer -> t a
Numeric/AD/Internal/Composition.hs view
@@ -20,7 +20,7 @@ import Control.Applicative import Data.Data (Data(..), mkDataType, DataType, mkConstr, Constr, constrIndex, Fixity(..))-import Data.Typeable (Typeable1(..), Typeable(..), TyCon, mkTyCon, mkTyConApp, typeOfDefault, gcast1)+import Data.Typeable (Typeable1(..), Typeable(..), TyCon, mkTyCon3, mkTyConApp, typeOfDefault, gcast1) import Data.Foldable (Foldable(foldMap)) import Data.Traversable (Traversable(traverse)) import Numeric.AD.Internal.Classes@@ -46,7 +46,7 @@ ga = undefined composeFunctorTyCon :: TyCon-composeFunctorTyCon = mkTyCon "Numeric.AD.Internal.Composition.ComposeFunctor"+composeFunctorTyCon = mkTyCon3 "ad" "Numeric.AD.Internal.Composition" "ComposeFunctor" {-# NOINLINE composeFunctorTyCon #-} composeFunctorConstr :: Constr@@ -160,7 +160,7 @@ typeOf = typeOfDefault composeModeTyCon :: TyCon-composeModeTyCon = mkTyCon "Numeric.AD.Internal.Composition.ComposeMode"+composeModeTyCon = mkTyCon3 "ad" "Numeric.AD.Internal.Composition" "ComposeMode" {-# NOINLINE composeModeTyCon #-} composeModeConstr :: Constr
Numeric/AD/Internal/Types.hs view
@@ -16,7 +16,7 @@ ) where import Data.Data (Data(..), mkDataType, DataType, mkConstr, Constr, constrIndex, Fixity(..))-import Data.Typeable (Typeable1(..), Typeable(..), TyCon, mkTyCon, mkTyConApp, gcast1)+import Data.Typeable (Typeable1(..), Typeable(..), TyCon, mkTyCon3, mkTyConApp, gcast1) import Language.Haskell.TH import Numeric.AD.Internal.Classes @@ -48,7 +48,7 @@ asArgsType = const adTyCon :: TyCon-adTyCon = mkTyCon "Numeric.AD.Internal.Types.AD"+adTyCon = mkTyCon3 "ad" "Numeric.AD.Internal.Types" "AD" {-# NOINLINE adTyCon #-} adConstr :: Constr
Numeric/AD/Newton.hs view
@@ -46,7 +46,7 @@ -- > module Data.Complex -- > take 10 $ findZero ((+1).(^2)) (1 :+ 1) -- converge to (0 :+ 1)@ ---findZero :: Fractional a => UU a -> a -> [a]+findZero :: (Fractional a, Eq a) => UU a -> a -> [a] findZero f = go where go x = x : if y == 0 then [] else go (x - y/y') @@ -62,7 +62,7 @@ -- -- > take 10 $ inverseNewton sqrt 1 (sqrt 10) -- converges to 10 ---inverse :: Fractional a => UU a -> a -> a -> [a]+inverse :: (Fractional a, Eq a) => UU a -> a -> a -> [a] inverse f x0 y = findZero (\x -> f x - lift y) x0 {-# INLINE inverse #-} @@ -71,7 +71,7 @@ -- increasingly accurate results. (Modulo the usual caveats.) -- -- > take 10 $ fixedPoint cos 1 -- converges to 0.7390851332151607-fixedPoint :: Fractional a => UU a -> a -> [a]+fixedPoint :: (Fractional a, Eq a) => UU a -> a -> [a] fixedPoint f = findZero (\x -> f x - x) {-# INLINE fixedPoint #-} @@ -80,7 +80,7 @@ -- accurate results. (Modulo the usual caveats.) -- -- > take 10 $ extremum cos 1 -- convert to 0 -extremum :: Fractional a => UU a -> a -> [a]+extremum :: (Fractional a, Eq a) => UU a -> a -> [a] extremum f = findZero (diff (decomposeMode . f . composeMode)) {-# INLINE extremum #-}
ad.cabal view
@@ -1,5 +1,5 @@ name: ad-version: 1.2.0.2+version: 1.3 license: BSD3 license-File: LICENSE copyright: (c) Edward Kmett 2010-2011,@@ -14,10 +14,10 @@ extra-source-files: TODO synopsis: Automatic Differentiation -description: +description: Forward-, reverse- and mixed- mode automatic differentiation combinators with a common API.- . - Type-level \"branding\" is used to both 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. . Each mode has a separate module full of combinators.@@ -32,8 +32,8 @@ . * @Numeric.AD.Mode.Mixed@ computes using whichever mode or combination thereof is suitable to each individual combinator. This mode is the default, re-exported by @Numeric.AD@ .- . - While not every mode can provide all operations, the following basic operations are supported, modified as + .+ While not every mode can provide all operations, the following basic operations are supported, modified as appropriate by the suffixes below: . * 'grad' computes the gradient (partial derivatives) of a function at a point.@@ -60,6 +60,10 @@ . * @0@ means that the resulting derivative list is padded with 0s at the end. .+ Changes since 1.2+ .+ * Compiles with template haskell 2.6, changed interface to comply with the lack of Eq and Show as superclasses of Num in the new GHC.+ . Changes since 1.1.3 . * Made primal calculations strict where possible.@@ -73,7 +77,7 @@ Changes since 1.0.0 . * Changed the way 'Show' was derived to comply with changes in instance resolution in ghc >= 7.0 && <= 7.1- . + . Changes since 0.45.0 . * Converted 'Stream' to use the external 'comonad' package@@ -103,11 +107,7 @@ type: git location: git://github.com/ekmett/ad.git -flag TemplateHaskell24- manual: False- default: False--library +library extensions: CPP other-extensions:@@ -126,47 +126,42 @@ TypeOperators UndecidableInstances - if flag(TemplateHaskell24)- build-depends: template-haskell >= 2.4 && < 2.5- cpp-options: -DOldClassI- else - build-depends: template-haskell >= 2.5 && < 2.6- - build-depends: + build-depends: base >= 4 && < 5,- data-reify >= 0.6 && < 0.7, + data-reify >= 0.6 && < 0.7, containers >= 0.2 && < 0.5, array >= 0.2 && < 0.4, comonad >= 1.1.1 && < 1.2,- free >= 2.0 && < 2.1- + free >= 2.0 && < 2.1,+ template-haskell >= 2.6 && < 2.7+ exposed-modules: Numeric.AD Numeric.AD.Classes Numeric.AD.Types Numeric.AD.Newton Numeric.AD.Halley- + Numeric.AD.Internal.Classes Numeric.AD.Internal.Combinators- + Numeric.AD.Internal.Forward Numeric.AD.Internal.Tower Numeric.AD.Internal.Reverse Numeric.AD.Internal.Sparse Numeric.AD.Internal.Dense Numeric.AD.Internal.Composition- + Numeric.AD.Mode.Directed Numeric.AD.Mode.Forward Numeric.AD.Mode.Mixed Numeric.AD.Mode.Reverse Numeric.AD.Mode.Tower Numeric.AD.Mode.Sparse- + other-modules: Numeric.AD.Internal.Types Numeric.AD.Internal.Tensors Numeric.AD.Internal.Identity- + ghc-options: -Wall -fspec-constr -fdicts-cheap -O2