numeric-optimization-ad-0.1.0.1: Wrapper of numeric-optimization package for using with AD package
Copyright(c) Masahiro Sakai 2023
LicenseBSD-style
Maintainermasahiro.sakai@gmail.com
Stabilityprovisional
Portabilitynon-portable
Safe HaskellSafe-Inferred
LanguageHaskell2010

Numeric.Optimization.AD

Description

This module is a wrapper of Numeric.Optimization that uses ad's automatic differentiation.

Synopsis

Main function

minimize Source #

Arguments

:: forall f. Traversable f 
=> Method

Numerical optimization algorithm to use

-> Params (f Double)

Parameters for optimization algorithms. Use def as a default.

-> (forall s. Reifies s Tape => f (Reverse s Double) -> Reverse s Double)

Function to be minimized.

-> Maybe (f (Double, Double))

Bounds

-> [Constraint]

Constraints

-> f Double

Initial value

-> IO (Result (f Double)) 

Synonym of minimizeReverse

minimizeReverse Source #

Arguments

:: forall f. Traversable f 
=> Method

Numerical optimization algorithm to use

-> Params (f Double)

Parameters for optimization algorithms. Use def as a default.

-> (forall s. Reifies s Tape => f (Reverse s Double) -> Reverse s Double)

Function to be minimized.

-> Maybe (f (Double, Double))

Bounds

-> [Constraint]

Constraints

-> f Double

Initial value

-> IO (Result (f Double)) 

Minimization of scalar function of one or more variables.

This is a wrapper of minimize and use Numeric.AD.Mode.Reverse to compute gradient.

It cannot be used with methods that requires hessian (e.g. Newton).

Example:

{-# LANGUAGE FlexibleContexts #-}
import Numeric.Optimization.AD

main :: IO ()
main = do
  (x, result, stat) <- minimizeReverse LBFGS def rosenbrock Nothing [] [-3,-4]
  print (resultSuccess result)  -- True
  print (resultSolution result)  -- [0.999999999009131,0.9999999981094296]
  print (resultValue result)  -- 1.8129771632403013e-18

-- https://en.wikipedia.org/wiki/Rosenbrock_function
rosenbrock :: Floating a => [a] -> a
-- rosenbrock :: Reifies s Tape => [Reverse s Double] -> Reverse s Double
rosenbrock [x,y] = sq (1 - x) + 100 * sq (y - sq x)

sq :: Floating a => a -> a
sq x = x ** 2

minimizeSparse Source #

Arguments

:: forall f. Traversable f 
=> Method

Numerical optimization algorithm to use

-> Params (f Double)

Parameters for optimization algorithms. Use def as a default.

-> (forall s. f (AD s (Sparse Double)) -> AD s (Sparse Double))

Function to be minimized.

-> Maybe (f (Double, Double))

Bounds

-> [Constraint]

Constraints

-> f Double

Initial value

-> IO (Result (f Double)) 

Minimization of scalar function of one or more variables.

This is a wrapper of minimize and use Numeric.AD.Mode.Sparse to compute gradient and hessian.

Unlike minimizeReverse, it can be used with methods that requires hessian (e.g. Newton).

Example:

{-# LANGUAGE FlexibleContexts #-}
import Numeric.Optimization.AD

main :: IO ()
main = do
  (x, result, stat) <- minimizeSparse Newton def rosenbrock Nothing [] [-3,-4]
  print (resultSuccess result)  -- True
  print (resultSolution result)  -- [0.9999999999999999,0.9999999999999998]
  print (resultValue result)  -- 1.232595164407831e-32

-- https://en.wikipedia.org/wiki/Rosenbrock_function
rosenbrock :: Floating a => [a] -> a
-- rosenbrock :: [AD s (Sparse Double)] -> AD s (Sparse Double)
rosenbrock [x,y] = sq (1 - x) + 100 * sq (y - sq x)

sq :: Floating a => a -> a
sq x = x ** 2

Problem specification

data Constraint #

Type of constraint

Currently, no constraints are supported.

Algorithm selection

data Method #

Selection of numerical optimization algorithms

Constructors

CGDescent

Conjugate gradient method based on Hager and Zhang [1].

The implementation is provided by nonlinear-optimization package [3] which is a binding library of [2].

This method requires gradient but does not require hessian.

LBFGS

Limited memory BFGS (L-BFGS) algorithm [1]

The implementtion is provided by lbfgs package [2] which is a binding of liblbfgs [3].

This method requires gradient but does not require hessian.

Newton

Native implementation of Newton method

This method requires both gradient and hessian.

Instances

Instances details
Bounded Method 
Instance details

Defined in Numeric.Optimization

Enum Method 
Instance details

Defined in Numeric.Optimization

Show Method 
Instance details

Defined in Numeric.Optimization

Eq Method 
Instance details

Defined in Numeric.Optimization

Methods

(==) :: Method -> Method -> Bool #

(/=) :: Method -> Method -> Bool #

Ord Method 
Instance details

Defined in Numeric.Optimization

isSupportedMethod :: Method -> Bool #

Whether a Method is supported under the current environment.

data Params a #

Parameters for optimization algorithms

TODO:

  • How to pass algorithm specific parameters?
  • Separate callback from other more concrete serializeable parameters?

Constructors

Params 

Fields

  • paramsCallback :: Maybe (a -> IO Bool)

    If callback function returns True, the algorithm execution is terminated.

  • paramsTol :: Maybe Double

    Tolerance for termination. When tol is specified, the selected algorithm sets some relevant solver-specific tolerance(s) equal to tol.

Instances

Instances details
Contravariant Params 
Instance details

Defined in Numeric.Optimization

Methods

contramap :: (a' -> a) -> Params a -> Params a' #

(>$) :: b -> Params b -> Params a #

Default (Params a) 
Instance details

Defined in Numeric.Optimization

Methods

def :: Params a #

Result

data Result a #

Optimization result

Constructors

Result 

Fields

Instances

Instances details
Functor Result 
Instance details

Defined in Numeric.Optimization

Methods

fmap :: (a -> b) -> Result a -> Result b #

(<$) :: a -> Result b -> Result a #

data Statistics #

Statistics of optimizaion process

Constructors

Statistics 

Fields

Utilities and Re-exports

class Default a where #

A class for types with a default value.

Minimal complete definition

Nothing

Methods

def :: a #

The default value for this type.

Instances

Instances details
Default All 
Instance details

Defined in Data.Default.Class

Methods

def :: All #

Default Any 
Instance details

Defined in Data.Default.Class

Methods

def :: Any #

Default CClock 
Instance details

Defined in Data.Default.Class

Methods

def :: CClock #

Default CDouble 
Instance details

Defined in Data.Default.Class

Methods

def :: CDouble #

Default CFloat 
Instance details

Defined in Data.Default.Class

Methods

def :: CFloat #

Default CInt 
Instance details

Defined in Data.Default.Class

Methods

def :: CInt #

Default CIntMax 
Instance details

Defined in Data.Default.Class

Methods

def :: CIntMax #

Default CIntPtr 
Instance details

Defined in Data.Default.Class

Methods

def :: CIntPtr #

Default CLLong 
Instance details

Defined in Data.Default.Class

Methods

def :: CLLong #

Default CLong 
Instance details

Defined in Data.Default.Class

Methods

def :: CLong #

Default CPtrdiff 
Instance details

Defined in Data.Default.Class

Methods

def :: CPtrdiff #

Default CSUSeconds 
Instance details

Defined in Data.Default.Class

Methods

def :: CSUSeconds #

Default CShort 
Instance details

Defined in Data.Default.Class

Methods

def :: CShort #

Default CSigAtomic 
Instance details

Defined in Data.Default.Class

Methods

def :: CSigAtomic #

Default CSize 
Instance details

Defined in Data.Default.Class

Methods

def :: CSize #

Default CTime 
Instance details

Defined in Data.Default.Class

Methods

def :: CTime #

Default CUInt 
Instance details

Defined in Data.Default.Class

Methods

def :: CUInt #

Default CUIntMax 
Instance details

Defined in Data.Default.Class

Methods

def :: CUIntMax #

Default CUIntPtr 
Instance details

Defined in Data.Default.Class

Methods

def :: CUIntPtr #

Default CULLong 
Instance details

Defined in Data.Default.Class

Methods

def :: CULLong #

Default CULong 
Instance details

Defined in Data.Default.Class

Methods

def :: CULong #

Default CUSeconds 
Instance details

Defined in Data.Default.Class

Methods

def :: CUSeconds #

Default CUShort 
Instance details

Defined in Data.Default.Class

Methods

def :: CUShort #

Default Int16 
Instance details

Defined in Data.Default.Class

Methods

def :: Int16 #

Default Int32 
Instance details

Defined in Data.Default.Class

Methods

def :: Int32 #

Default Int64 
Instance details

Defined in Data.Default.Class

Methods

def :: Int64 #

Default Int8 
Instance details

Defined in Data.Default.Class

Methods

def :: Int8 #

Default Word16 
Instance details

Defined in Data.Default.Class

Methods

def :: Word16 #

Default Word32 
Instance details

Defined in Data.Default.Class

Methods

def :: Word32 #

Default Word64 
Instance details

Defined in Data.Default.Class

Methods

def :: Word64 #

Default Word8 
Instance details

Defined in Data.Default.Class

Methods

def :: Word8 #

Default Ordering 
Instance details

Defined in Data.Default.Class

Methods

def :: Ordering #

Default Integer 
Instance details

Defined in Data.Default.Class

Methods

def :: Integer #

Default () 
Instance details

Defined in Data.Default.Class

Methods

def :: () #

Default Double 
Instance details

Defined in Data.Default.Class

Methods

def :: Double #

Default Float 
Instance details

Defined in Data.Default.Class

Methods

def :: Float #

Default Int 
Instance details

Defined in Data.Default.Class

Methods

def :: Int #

Default Word 
Instance details

Defined in Data.Default.Class

Methods

def :: Word #

(Default a, RealFloat a) => Default (Complex a) 
Instance details

Defined in Data.Default.Class

Methods

def :: Complex a #

Default (First a) 
Instance details

Defined in Data.Default.Class

Methods

def :: First a #

Default (Last a) 
Instance details

Defined in Data.Default.Class

Methods

def :: Last a #

Default a => Default (Dual a) 
Instance details

Defined in Data.Default.Class

Methods

def :: Dual a #

Default (Endo a) 
Instance details

Defined in Data.Default.Class

Methods

def :: Endo a #

Num a => Default (Product a) 
Instance details

Defined in Data.Default.Class

Methods

def :: Product a #

Num a => Default (Sum a) 
Instance details

Defined in Data.Default.Class

Methods

def :: Sum a #

Integral a => Default (Ratio a) 
Instance details

Defined in Data.Default.Class

Methods

def :: Ratio a #

Default a => Default (IO a) 
Instance details

Defined in Data.Default.Class

Methods

def :: IO a #

Default (Params a) 
Instance details

Defined in Numeric.Optimization

Methods

def :: Params a #

Default (Maybe a) 
Instance details

Defined in Data.Default.Class

Methods

def :: Maybe a #

Default [a] 
Instance details

Defined in Data.Default.Class

Methods

def :: [a] #

Default r => Default (e -> r) 
Instance details

Defined in Data.Default.Class

Methods

def :: e -> r #

(Default a, Default b) => Default (a, b) 
Instance details

Defined in Data.Default.Class

Methods

def :: (a, b) #

(Default a, Default b, Default c) => Default (a, b, c) 
Instance details

Defined in Data.Default.Class

Methods

def :: (a, b, c) #

(Default a, Default b, Default c, Default d) => Default (a, b, c, d) 
Instance details

Defined in Data.Default.Class

Methods

def :: (a, b, c, d) #

(Default a, Default b, Default c, Default d, Default e) => Default (a, b, c, d, e) 
Instance details

Defined in Data.Default.Class

Methods

def :: (a, b, c, d, e) #

(Default a, Default b, Default c, Default d, Default e, Default f) => Default (a, b, c, d, e, f) 
Instance details

Defined in Data.Default.Class

Methods

def :: (a, b, c, d, e, f) #

(Default a, Default b, Default c, Default d, Default e, Default f, Default g) => Default (a, b, c, d, e, f, g) 
Instance details

Defined in Data.Default.Class

Methods

def :: (a, b, c, d, e, f, g) #

data AD s a #

Instances

Instances details
Mode a => Mode (AD s a) 
Instance details

Defined in Numeric.AD.Internal.Type

Associated Types

type Scalar (AD s a) #

Methods

isKnownConstant :: AD s a -> Bool #

asKnownConstant :: AD s a -> Maybe (Scalar (AD s a)) #

isKnownZero :: AD s a -> Bool #

auto :: Scalar (AD s a) -> AD s a #

(*^) :: Scalar (AD s a) -> AD s a -> AD s a #

(^*) :: AD s a -> Scalar (AD s a) -> AD s a #

(^/) :: AD s a -> Scalar (AD s a) -> AD s a #

zero :: AD s a #

Bounded a => Bounded (AD s a) 
Instance details

Defined in Numeric.AD.Internal.Type

Methods

minBound :: AD s a #

maxBound :: AD s a #

Enum a => Enum (AD s a) 
Instance details

Defined in Numeric.AD.Internal.Type

Methods

succ :: AD s a -> AD s a #

pred :: AD s a -> AD s a #

toEnum :: Int -> AD s a #

fromEnum :: AD s a -> Int #

enumFrom :: AD s a -> [AD s a] #

enumFromThen :: AD s a -> AD s a -> [AD s a] #

enumFromTo :: AD s a -> AD s a -> [AD s a] #

enumFromThenTo :: AD s a -> AD s a -> AD s a -> [AD s a] #

Floating a => Floating (AD s a) 
Instance details

Defined in Numeric.AD.Internal.Type

Methods

pi :: AD s a #

exp :: AD s a -> AD s a #

log :: AD s a -> AD s a #

sqrt :: AD s a -> AD s a #

(**) :: AD s a -> AD s a -> AD s a #

logBase :: AD s a -> AD s a -> AD s a #

sin :: AD s a -> AD s a #

cos :: AD s a -> AD s a #

tan :: AD s a -> AD s a #

asin :: AD s a -> AD s a #

acos :: AD s a -> AD s a #

atan :: AD s a -> AD s a #

sinh :: AD s a -> AD s a #

cosh :: AD s a -> AD s a #

tanh :: AD s a -> AD s a #

asinh :: AD s a -> AD s a #

acosh :: AD s a -> AD s a #

atanh :: AD s a -> AD s a #

log1p :: AD s a -> AD s a #

expm1 :: AD s a -> AD s a #

log1pexp :: AD s a -> AD s a #

log1mexp :: AD s a -> AD s a #

RealFloat a => RealFloat (AD s a) 
Instance details

Defined in Numeric.AD.Internal.Type

Methods

floatRadix :: AD s a -> Integer #

floatDigits :: AD s a -> Int #

floatRange :: AD s a -> (Int, Int) #

decodeFloat :: AD s a -> (Integer, Int) #

encodeFloat :: Integer -> Int -> AD s a #

exponent :: AD s a -> Int #

significand :: AD s a -> AD s a #

scaleFloat :: Int -> AD s a -> AD s a #

isNaN :: AD s a -> Bool #

isInfinite :: AD s a -> Bool #

isDenormalized :: AD s a -> Bool #

isNegativeZero :: AD s a -> Bool #

isIEEE :: AD s a -> Bool #

atan2 :: AD s a -> AD s a -> AD s a #

Num a => Num (AD s a) 
Instance details

Defined in Numeric.AD.Internal.Type

Methods

(+) :: AD s a -> AD s a -> AD s a #

(-) :: AD s a -> AD s a -> AD s a #

(*) :: AD s a -> AD s a -> AD s a #

negate :: AD s a -> AD s a #

abs :: AD s a -> AD s a #

signum :: AD s a -> AD s a #

fromInteger :: Integer -> AD s a #

Read a => Read (AD s a) 
Instance details

Defined in Numeric.AD.Internal.Type

Methods

readsPrec :: Int -> ReadS (AD s a) #

readList :: ReadS [AD s a] #

readPrec :: ReadPrec (AD s a) #

readListPrec :: ReadPrec [AD s a] #

Fractional a => Fractional (AD s a) 
Instance details

Defined in Numeric.AD.Internal.Type

Methods

(/) :: AD s a -> AD s a -> AD s a #

recip :: AD s a -> AD s a #

fromRational :: Rational -> AD s a #

Real a => Real (AD s a) 
Instance details

Defined in Numeric.AD.Internal.Type

Methods

toRational :: AD s a -> Rational #

RealFrac a => RealFrac (AD s a) 
Instance details

Defined in Numeric.AD.Internal.Type

Methods

properFraction :: Integral b => AD s a -> (b, AD s a) #

truncate :: Integral b => AD s a -> b #

round :: Integral b => AD s a -> b #

ceiling :: Integral b => AD s a -> b #

floor :: Integral b => AD s a -> b #

Show a => Show (AD s a) 
Instance details

Defined in Numeric.AD.Internal.Type

Methods

showsPrec :: Int -> AD s a -> ShowS #

show :: AD s a -> String #

showList :: [AD s a] -> ShowS #

Erf a => Erf (AD s a) 
Instance details

Defined in Numeric.AD.Internal.Type

Methods

erf :: AD s a -> AD s a #

erfc :: AD s a -> AD s a #

erfcx :: AD s a -> AD s a #

normcdf :: AD s a -> AD s a #

InvErf a => InvErf (AD s a) 
Instance details

Defined in Numeric.AD.Internal.Type

Methods

inverf :: AD s a -> AD s a #

inverfc :: AD s a -> AD s a #

invnormcdf :: AD s a -> AD s a #

Eq a => Eq (AD s a) 
Instance details

Defined in Numeric.AD.Internal.Type

Methods

(==) :: AD s a -> AD s a -> Bool #

(/=) :: AD s a -> AD s a -> Bool #

Ord a => Ord (AD s a) 
Instance details

Defined in Numeric.AD.Internal.Type

Methods

compare :: AD s a -> AD s a -> Ordering #

(<) :: AD s a -> AD s a -> Bool #

(<=) :: AD s a -> AD s a -> Bool #

(>) :: AD s a -> AD s a -> Bool #

(>=) :: AD s a -> AD s a -> Bool #

max :: AD s a -> AD s a -> AD s a #

min :: AD s a -> AD s a -> AD s a #

type Scalar (AD s a) 
Instance details

Defined in Numeric.AD.Internal.Type

type Scalar (AD s a) = Scalar a

auto :: Mode t => Scalar t -> t #

Embed a constant

data Reverse s a #

Instances

Instances details
(Reifies s Tape, Num a) => Jacobian (Reverse s a) 
Instance details

Defined in Numeric.AD.Internal.Reverse

Associated Types

type D (Reverse s a) #

Methods

unary :: (Scalar (Reverse s a) -> Scalar (Reverse s a)) -> D (Reverse s a) -> Reverse s a -> Reverse s a #

lift1 :: (Scalar (Reverse s a) -> Scalar (Reverse s a)) -> (D (Reverse s a) -> D (Reverse s a)) -> Reverse s a -> Reverse s a #

lift1_ :: (Scalar (Reverse s a) -> Scalar (Reverse s a)) -> (D (Reverse s a) -> D (Reverse s a) -> D (Reverse s a)) -> Reverse s a -> Reverse s a #

binary :: (Scalar (Reverse s a) -> Scalar (Reverse s a) -> Scalar (Reverse s a)) -> D (Reverse s a) -> D (Reverse s a) -> Reverse s a -> Reverse s a -> Reverse s a #

lift2 :: (Scalar (Reverse s a) -> Scalar (Reverse s a) -> Scalar (Reverse s a)) -> (D (Reverse s a) -> D (Reverse s a) -> (D (Reverse s a), D (Reverse s a))) -> Reverse s a -> Reverse s a -> Reverse s a #

lift2_ :: (Scalar (Reverse s a) -> Scalar (Reverse s a) -> Scalar (Reverse s a)) -> (D (Reverse s a) -> D (Reverse s a) -> D (Reverse s a) -> (D (Reverse s a), D (Reverse s a))) -> Reverse s a -> Reverse s a -> Reverse s a #

(Reifies s Tape, Num a) => Mode (Reverse s a) 
Instance details

Defined in Numeric.AD.Internal.Reverse

Associated Types

type Scalar (Reverse s a) #

Methods

isKnownConstant :: Reverse s a -> Bool #

asKnownConstant :: Reverse s a -> Maybe (Scalar (Reverse s a)) #

isKnownZero :: Reverse s a -> Bool #

auto :: Scalar (Reverse s a) -> Reverse s a #

(*^) :: Scalar (Reverse s a) -> Reverse s a -> Reverse s a #

(^*) :: Reverse s a -> Scalar (Reverse s a) -> Reverse s a #

(^/) :: Reverse s a -> Scalar (Reverse s a) -> Reverse s a #

zero :: Reverse s a #

(Reifies s Tape, Num a, Bounded a) => Bounded (Reverse s a) 
Instance details

Defined in Numeric.AD.Internal.Reverse

Methods

minBound :: Reverse s a #

maxBound :: Reverse s a #

(Reifies s Tape, Num a, Enum a) => Enum (Reverse s a) 
Instance details

Defined in Numeric.AD.Internal.Reverse

Methods

succ :: Reverse s a -> Reverse s a #

pred :: Reverse s a -> Reverse s a #

toEnum :: Int -> Reverse s a #

fromEnum :: Reverse s a -> Int #

enumFrom :: Reverse s a -> [Reverse s a] #

enumFromThen :: Reverse s a -> Reverse s a -> [Reverse s a] #

enumFromTo :: Reverse s a -> Reverse s a -> [Reverse s a] #

enumFromThenTo :: Reverse s a -> Reverse s a -> Reverse s a -> [Reverse s a] #

(Reifies s Tape, Floating a) => Floating (Reverse s a) 
Instance details

Defined in Numeric.AD.Internal.Reverse

Methods

pi :: Reverse s a #

exp :: Reverse s a -> Reverse s a #

log :: Reverse s a -> Reverse s a #

sqrt :: Reverse s a -> Reverse s a #

(**) :: Reverse s a -> Reverse s a -> Reverse s a #

logBase :: Reverse s a -> Reverse s a -> Reverse s a #

sin :: Reverse s a -> Reverse s a #

cos :: Reverse s a -> Reverse s a #

tan :: Reverse s a -> Reverse s a #

asin :: Reverse s a -> Reverse s a #

acos :: Reverse s a -> Reverse s a #

atan :: Reverse s a -> Reverse s a #

sinh :: Reverse s a -> Reverse s a #

cosh :: Reverse s a -> Reverse s a #

tanh :: Reverse s a -> Reverse s a #

asinh :: Reverse s a -> Reverse s a #

acosh :: Reverse s a -> Reverse s a #

atanh :: Reverse s a -> Reverse s a #

log1p :: Reverse s a -> Reverse s a #

expm1 :: Reverse s a -> Reverse s a #

log1pexp :: Reverse s a -> Reverse s a #

log1mexp :: Reverse s a -> Reverse s a #

(Reifies s Tape, RealFloat a) => RealFloat (Reverse s a) 
Instance details

Defined in Numeric.AD.Internal.Reverse

(Reifies s Tape, Num a) => Num (Reverse s a) 
Instance details

Defined in Numeric.AD.Internal.Reverse

Methods

(+) :: Reverse s a -> Reverse s a -> Reverse s a #

(-) :: Reverse s a -> Reverse s a -> Reverse s a #

(*) :: Reverse s a -> Reverse s a -> Reverse s a #

negate :: Reverse s a -> Reverse s a #

abs :: Reverse s a -> Reverse s a #

signum :: Reverse s a -> Reverse s a #

fromInteger :: Integer -> Reverse s a #

(Reifies s Tape, Fractional a) => Fractional (Reverse s a) 
Instance details

Defined in Numeric.AD.Internal.Reverse

Methods

(/) :: Reverse s a -> Reverse s a -> Reverse s a #

recip :: Reverse s a -> Reverse s a #

fromRational :: Rational -> Reverse s a #

(Reifies s Tape, Real a) => Real (Reverse s a) 
Instance details

Defined in Numeric.AD.Internal.Reverse

Methods

toRational :: Reverse s a -> Rational #

(Reifies s Tape, RealFrac a) => RealFrac (Reverse s a) 
Instance details

Defined in Numeric.AD.Internal.Reverse

Methods

properFraction :: Integral b => Reverse s a -> (b, Reverse s a) #

truncate :: Integral b => Reverse s a -> b #

round :: Integral b => Reverse s a -> b #

ceiling :: Integral b => Reverse s a -> b #

floor :: Integral b => Reverse s a -> b #

Show a => Show (Reverse s a) 
Instance details

Defined in Numeric.AD.Internal.Reverse

Methods

showsPrec :: Int -> Reverse s a -> ShowS #

show :: Reverse s a -> String #

showList :: [Reverse s a] -> ShowS #

(Reifies s Tape, Erf a) => Erf (Reverse s a) 
Instance details

Defined in Numeric.AD.Internal.Reverse

Methods

erf :: Reverse s a -> Reverse s a #

erfc :: Reverse s a -> Reverse s a #

erfcx :: Reverse s a -> Reverse s a #

normcdf :: Reverse s a -> Reverse s a #

(Reifies s Tape, InvErf a) => InvErf (Reverse s a) 
Instance details

Defined in Numeric.AD.Internal.Reverse

Methods

inverf :: Reverse s a -> Reverse s a #

inverfc :: Reverse s a -> Reverse s a #

invnormcdf :: Reverse s a -> Reverse s a #

(Reifies s Tape, Num a, Eq a) => Eq (Reverse s a) 
Instance details

Defined in Numeric.AD.Internal.Reverse

Methods

(==) :: Reverse s a -> Reverse s a -> Bool #

(/=) :: Reverse s a -> Reverse s a -> Bool #

(Reifies s Tape, Num a, Ord a) => Ord (Reverse s a) 
Instance details

Defined in Numeric.AD.Internal.Reverse

Methods

compare :: Reverse s a -> Reverse s a -> Ordering #

(<) :: Reverse s a -> Reverse s a -> Bool #

(<=) :: Reverse s a -> Reverse s a -> Bool #

(>) :: Reverse s a -> Reverse s a -> Bool #

(>=) :: Reverse s a -> Reverse s a -> Bool #

max :: Reverse s a -> Reverse s a -> Reverse s a #

min :: Reverse s a -> Reverse s a -> Reverse s a #

type D (Reverse s a) 
Instance details

Defined in Numeric.AD.Internal.Reverse

type D (Reverse s a) = Id a
type Scalar (Reverse s a) 
Instance details

Defined in Numeric.AD.Internal.Reverse

type Scalar (Reverse s a) = a

class Reifies (s :: k) a | s -> a #

Minimal complete definition

reflect

Instances

Instances details
KnownNat n => Reifies (n :: Nat) Integer 
Instance details

Defined in Data.Reflection

Methods

reflect :: proxy n -> Integer #

KnownSymbol n => Reifies (n :: Symbol) String 
Instance details

Defined in Data.Reflection

Methods

reflect :: proxy n -> String #

Reifies Z Int 
Instance details

Defined in Data.Reflection

Methods

reflect :: proxy Z -> Int #

Reifies n Int => Reifies (D n :: Type) Int 
Instance details

Defined in Data.Reflection

Methods

reflect :: proxy (D n) -> Int #

Reifies n Int => Reifies (PD n :: Type) Int 
Instance details

Defined in Data.Reflection

Methods

reflect :: proxy (PD n) -> Int #

Reifies n Int => Reifies (SD n :: Type) Int 
Instance details

Defined in Data.Reflection

Methods

reflect :: proxy (SD n) -> Int #

(B b0, B b1, B b2, B b3, B b4, B b5, B b6, B b7, w0 ~ W b0 b1 b2 b3, w1 ~ W b4 b5 b6 b7) => Reifies (Stable w0 w1 a :: Type) a 
Instance details

Defined in Data.Reflection

Methods

reflect :: proxy (Stable w0 w1 a) -> a #

data Tape #

data Sparse a #

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 function with k inputs.

Instances

Instances details
Num a => Jacobian (Sparse a) 
Instance details

Defined in Numeric.AD.Internal.Sparse

Associated Types

type D (Sparse a) #

Methods

unary :: (Scalar (Sparse a) -> Scalar (Sparse a)) -> D (Sparse a) -> Sparse a -> Sparse a #

lift1 :: (Scalar (Sparse a) -> Scalar (Sparse a)) -> (D (Sparse a) -> D (Sparse a)) -> Sparse a -> Sparse a #

lift1_ :: (Scalar (Sparse a) -> Scalar (Sparse a)) -> (D (Sparse a) -> D (Sparse a) -> D (Sparse a)) -> Sparse a -> Sparse a #

binary :: (Scalar (Sparse a) -> Scalar (Sparse a) -> Scalar (Sparse a)) -> D (Sparse a) -> D (Sparse a) -> Sparse a -> Sparse a -> Sparse a #

lift2 :: (Scalar (Sparse a) -> Scalar (Sparse a) -> Scalar (Sparse a)) -> (D (Sparse a) -> D (Sparse a) -> (D (Sparse a), D (Sparse a))) -> Sparse a -> Sparse a -> Sparse a #

lift2_ :: (Scalar (Sparse a) -> Scalar (Sparse a) -> Scalar (Sparse a)) -> (D (Sparse a) -> D (Sparse a) -> D (Sparse a) -> (D (Sparse a), D (Sparse a))) -> Sparse a -> Sparse a -> Sparse a #

Num a => Mode (Sparse a) 
Instance details

Defined in Numeric.AD.Internal.Sparse

Associated Types

type Scalar (Sparse a) #

Data a => Data (Sparse a) 
Instance details

Defined in Numeric.AD.Internal.Sparse

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Sparse a -> c (Sparse a) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Sparse a) #

toConstr :: Sparse a -> Constr #

dataTypeOf :: Sparse a -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Sparse a)) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Sparse a)) #

gmapT :: (forall b. Data b => b -> b) -> Sparse a -> Sparse a #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Sparse a -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Sparse a -> r #

gmapQ :: (forall d. Data d => d -> u) -> Sparse a -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Sparse a -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Sparse a -> m (Sparse a) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Sparse a -> m (Sparse a) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Sparse a -> m (Sparse a) #

(Num a, Bounded a) => Bounded (Sparse a) 
Instance details

Defined in Numeric.AD.Internal.Sparse

Methods

minBound :: Sparse a #

maxBound :: Sparse a #

(Num a, Enum a) => Enum (Sparse a) 
Instance details

Defined in Numeric.AD.Internal.Sparse

Methods

succ :: Sparse a -> Sparse a #

pred :: Sparse a -> Sparse a #

toEnum :: Int -> Sparse a #

fromEnum :: Sparse a -> Int #

enumFrom :: Sparse a -> [Sparse a] #

enumFromThen :: Sparse a -> Sparse a -> [Sparse a] #

enumFromTo :: Sparse a -> Sparse a -> [Sparse a] #

enumFromThenTo :: Sparse a -> Sparse a -> Sparse a -> [Sparse a] #

Floating a => Floating (Sparse a) 
Instance details

Defined in Numeric.AD.Internal.Sparse

Methods

pi :: Sparse a #

exp :: Sparse a -> Sparse a #

log :: Sparse a -> Sparse a #

sqrt :: Sparse a -> Sparse a #

(**) :: Sparse a -> Sparse a -> Sparse a #

logBase :: Sparse a -> Sparse a -> Sparse a #

sin :: Sparse a -> Sparse a #

cos :: Sparse a -> Sparse a #

tan :: Sparse a -> Sparse a #

asin :: Sparse a -> Sparse a #

acos :: Sparse a -> Sparse a #

atan :: Sparse a -> Sparse a #

sinh :: Sparse a -> Sparse a #

cosh :: Sparse a -> Sparse a #

tanh :: Sparse a -> Sparse a #

asinh :: Sparse a -> Sparse a #

acosh :: Sparse a -> Sparse a #

atanh :: Sparse a -> Sparse a #

log1p :: Sparse a -> Sparse a #

expm1 :: Sparse a -> Sparse a #

log1pexp :: Sparse a -> Sparse a #

log1mexp :: Sparse a -> Sparse a #

RealFloat a => RealFloat (Sparse a) 
Instance details

Defined in Numeric.AD.Internal.Sparse

Num a => Num (Sparse a) 
Instance details

Defined in Numeric.AD.Internal.Sparse

Methods

(+) :: Sparse a -> Sparse a -> Sparse a #

(-) :: Sparse a -> Sparse a -> Sparse a #

(*) :: Sparse a -> Sparse a -> Sparse a #

negate :: Sparse a -> Sparse a #

abs :: Sparse a -> Sparse a #

signum :: Sparse a -> Sparse a #

fromInteger :: Integer -> Sparse a #

Fractional a => Fractional (Sparse a) 
Instance details

Defined in Numeric.AD.Internal.Sparse

Methods

(/) :: Sparse a -> Sparse a -> Sparse a #

recip :: Sparse a -> Sparse a #

fromRational :: Rational -> Sparse a #

Real a => Real (Sparse a) 
Instance details

Defined in Numeric.AD.Internal.Sparse

Methods

toRational :: Sparse a -> Rational #

RealFrac a => RealFrac (Sparse a) 
Instance details

Defined in Numeric.AD.Internal.Sparse

Methods

properFraction :: Integral b => Sparse a -> (b, Sparse a) #

truncate :: Integral b => Sparse a -> b #

round :: Integral b => Sparse a -> b #

ceiling :: Integral b => Sparse a -> b #

floor :: Integral b => Sparse a -> b #

Show a => Show (Sparse a) 
Instance details

Defined in Numeric.AD.Internal.Sparse

Methods

showsPrec :: Int -> Sparse a -> ShowS #

show :: Sparse a -> String #

showList :: [Sparse a] -> ShowS #

Erf a => Erf (Sparse a) 
Instance details

Defined in Numeric.AD.Internal.Sparse

Methods

erf :: Sparse a -> Sparse a #

erfc :: Sparse a -> Sparse a #

erfcx :: Sparse a -> Sparse a #

normcdf :: Sparse a -> Sparse a #

InvErf a => InvErf (Sparse a) 
Instance details

Defined in Numeric.AD.Internal.Sparse

Methods

inverf :: Sparse a -> Sparse a #

inverfc :: Sparse a -> Sparse a #

invnormcdf :: Sparse a -> Sparse a #

(Num a, Eq a) => Eq (Sparse a) 
Instance details

Defined in Numeric.AD.Internal.Sparse

Methods

(==) :: Sparse a -> Sparse a -> Bool #

(/=) :: Sparse a -> Sparse a -> Bool #

(Num a, Ord a) => Ord (Sparse a) 
Instance details

Defined in Numeric.AD.Internal.Sparse

Methods

compare :: Sparse a -> Sparse a -> Ordering #

(<) :: Sparse a -> Sparse a -> Bool #

(<=) :: Sparse a -> Sparse a -> Bool #

(>) :: Sparse a -> Sparse a -> Bool #

(>=) :: Sparse a -> Sparse a -> Bool #

max :: Sparse a -> Sparse a -> Sparse a #

min :: Sparse a -> Sparse a -> Sparse a #

Num a => Grad (Sparse a) [a] (a, [a]) a 
Instance details

Defined in Numeric.AD.Internal.Sparse

Methods

pack :: Sparse a -> [Sparse a] -> Sparse a #

unpack :: ([a] -> [a]) -> [a] #

unpack' :: ([a] -> (a, [a])) -> (a, [a]) #

Num a => Grads (Sparse a) (Cofree [] a) a 
Instance details

Defined in Numeric.AD.Internal.Sparse

Methods

packs :: Sparse a -> [Sparse a] -> Sparse a #

unpacks :: ([a] -> Cofree [] a) -> Cofree [] a #

Grads i o a => Grads (Sparse a -> i) (a -> o) a 
Instance details

Defined in Numeric.AD.Internal.Sparse

Methods

packs :: (Sparse a -> i) -> [Sparse a] -> Sparse a #

unpacks :: ([a] -> Cofree [] a) -> a -> o #

Grad i o o' a => Grad (Sparse a -> i) (a -> o) (a -> o') a 
Instance details

Defined in Numeric.AD.Internal.Sparse

Methods

pack :: (Sparse a -> i) -> [Sparse a] -> Sparse a #

unpack :: ([a] -> [a]) -> a -> o #

unpack' :: ([a] -> (a, [a])) -> a -> o' #

type D (Sparse a) 
Instance details

Defined in Numeric.AD.Internal.Sparse

type D (Sparse a) = Sparse a
type Scalar (Sparse a) 
Instance details

Defined in Numeric.AD.Internal.Sparse

type Scalar (Sparse a) = a