{-# LINE 1 "./QuantLib/Method.chs" #-}
module QuantLib.Method
(
PathGenerator
, SamplePath
, GaussianRsg
, Fdm1dMesher
, FdmMesher
, FdmInnerValueCalculator
, pathGenerator
, sobolPathGenerator
, gaussianRsg
, sobolGaussianRsg
, predefined1dMesher
, uniform1dMesher
, concentrating1dMesher
, concentrating1dMesherMulti
, gluedMesher
, fdmBlackScholesMesher
, fdmCev1dMesher
, exponentialJump1dMesher
, fdmSimpleProcess1dMesher
, fdmHestonVarianceMesher
, fdmHestonLocalVolatilityVarianceMesher
, fdmMesherComposite
, withCustomFdmInnerValueCalculator
, fdmZeroInnerValue
, fdmCellAveragingInnerValue
, withCustomCellAveragingInnerValue
, fdmLogInnerValue
, fdmLogBasketInnerValue
, fdmAffineG2ModelSwapInnerValue
, fdmAffineHullWhiteModelSwapInnerValue
, next
, antithetic
, nextSequence
, lsmRegress
, lsmBasisSize
, lsmRegressMulti
, fdmRollback
, fdmInnerValue
, fdmAvgInnerValue
, fdmSolve
, weight
, assetNumber
, pathSize
, assetAt
, asset
, rsgDimension
, lastSequence
, fdmMesherLocations
) where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.ForeignPtr as C2HSImp
import qualified Foreign.Marshal.Utils as C2HSImp
import qualified Foreign.Ptr as C2HSImp
import qualified Foreign.Storable as C2HSImp
import qualified System.IO.Unsafe as C2HSImp
import QuantLib.Internal
import QuantLib.Internal.Type
import QuantLib.Internal.Common
import QuantLib.Math
{-# LINE 294 "./QuantLib/Method.chs" #-}
import Foreign.C.String(CString)
import Foreign.C.Types(CUInt, CDouble)
import Foreign.Ptr(Ptr, FunPtr, nullFunPtr, freeHaskellFunPtr, plusPtr, castPtr)
import Foreign.Marshal.Alloc(alloca)
import Foreign.Marshal.Array(copyArray)
import Foreign.Marshal.Utils(fillBytes)
import Foreign.Storable(sizeOf)
import Control.Exception(finally, mask)
import Control.Monad(when)
import qualified Data.Vector.Storable as V
{-# LINE 306 "./QuantLib/Method.chs" #-}
{-# LINE 307 "./QuantLib/Method.chs" #-}
{-# LINE 308 "./QuantLib/Method.chs" #-}
{-# LINE 309 "./QuantLib/Method.chs" #-}
{-# LINE 310 "./QuantLib/Method.chs" #-}
{-# LINE 311 "./QuantLib/Method.chs" #-}
{-# LINE 312 "./QuantLib/Method.chs" #-}
{-# LINE 313 "./QuantLib/Method.chs" #-}
{-# LINE 314 "./QuantLib/Method.chs" #-}
{-# LINE 315 "./QuantLib/Method.chs" #-}
{-# LINE 316 "./QuantLib/Method.chs" #-}
{-# LINE 317 "./QuantLib/Method.chs" #-}
{-# LINE 318 "./QuantLib/Method.chs" #-}
{-# LINE 319 "./QuantLib/Method.chs" #-}
{-# LINE 320 "./QuantLib/Method.chs" #-}
{-# LINE 321 "./QuantLib/Method.chs" #-}
{-# LINE 322 "./QuantLib/Method.chs" #-}
{-# LINE 323 "./QuantLib/Method.chs" #-}
{-# LINE 324 "./QuantLib/Method.chs" #-}
data CFdmCallbackArgs
type FdmCallbackFun = Ptr () -> IO ()
foreign import ccall "wrapper" mkFdmCallbackFunPtr :: FdmCallbackFun -> IO (FunPtr FdmCallbackFun)
pokeBoundedFdmResult :: CUInt -> Ptr CDouble -> RealVector -> IO ()
pokeBoundedFdmResult :: CUInt -> Ptr CDouble -> RealVector -> IO ()
pokeBoundedFdmResult CUInt
n Ptr CDouble
out RealVector
result = do
let expected :: Int
expected = CUInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral CUInt
n
copied :: Int
copied = Int -> Int -> Int
forall a. Ord a => a -> a -> a
min Int
expected (RealVector -> Int
forall a. Storable a => Vector a -> Int
V.length RealVector
result)
RealVector -> (Ptr Double -> IO ()) -> IO ()
forall a b. Storable a => Vector a -> (Ptr a -> IO b) -> IO b
V.unsafeWith RealVector
result ((Ptr Double -> IO ()) -> IO ()) -> (Ptr Double -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr Double
p -> Ptr CDouble -> Ptr CDouble -> Int -> IO ()
forall a. Storable a => Ptr a -> Ptr a -> Int -> IO ()
copyArray Ptr CDouble
out (Ptr Double -> Ptr CDouble
forall a b. Ptr a -> Ptr b
castPtr Ptr Double
p) Int
copied
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Int
copied Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
expected) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (ZonkAny 0) -> Word8 -> Int -> IO ()
forall a. Ptr a -> Word8 -> Int -> IO ()
fillBytes (Ptr CDouble
out Ptr CDouble -> Int -> Ptr (ZonkAny 0)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
copied Int -> Int -> Int
forall a. Num a => a -> a -> a
* CDouble -> Int
forall a. Storable a => a -> Int
sizeOf (CDouble
forall a. HasCallStack => a
undefined :: CDouble))) Word8
0 ((Int
expected Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
copied) Int -> Int -> Int
forall a. Num a => a -> a -> a
* CDouble -> Int
forall a. Storable a => a -> Int
sizeOf (CDouble
forall a. HasCallStack => a
undefined :: CDouble))
withFdmCallbackArgs :: Ptr CFdmCallbackArgs -> (Ptr CDouble -> CUInt -> CUInt -> CDouble -> CDouble -> CDouble -> Ptr CDouble -> IO a) -> IO a
withFdmCallbackArgs :: forall a.
Ptr CFdmCallbackArgs
-> (Ptr CDouble
-> CUInt
-> CUInt
-> CDouble
-> CDouble
-> CDouble
-> Ptr CDouble
-> IO a)
-> IO a
withFdmCallbackArgs Ptr CFdmCallbackArgs
p Ptr CDouble
-> CUInt
-> CUInt
-> CDouble
-> CDouble
-> CDouble
-> Ptr CDouble
-> IO a
f = do
s <- (\Ptr CFdmCallbackArgs
ptr -> do {Ptr CFdmCallbackArgs -> Int -> IO CDouble
forall b. Ptr b -> Int -> IO CDouble
forall a b. Storable a => Ptr b -> Int -> IO a
C2HSImp.peekByteOff Ptr CFdmCallbackArgs
ptr Int
0 :: IO C2HSImp.CDouble}) Ptr CFdmCallbackArgs
p
t1 <- (\Ptr CFdmCallbackArgs
ptr -> do {Ptr CFdmCallbackArgs -> Int -> IO CDouble
forall b. Ptr b -> Int -> IO CDouble
forall a b. Storable a => Ptr b -> Int -> IO a
C2HSImp.peekByteOff Ptr CFdmCallbackArgs
ptr Int
8 :: IO C2HSImp.CDouble}) p
t2 <- (\Ptr CFdmCallbackArgs
ptr -> do {Ptr CFdmCallbackArgs -> Int -> IO CDouble
forall b. Ptr b -> Int -> IO CDouble
forall a b. Storable a => Ptr b -> Int -> IO a
C2HSImp.peekByteOff Ptr CFdmCallbackArgs
ptr Int
16 :: IO C2HSImp.CDouble}) p
input <- (\Ptr CFdmCallbackArgs
ptr -> do {Ptr CFdmCallbackArgs -> Int -> IO (Ptr CDouble)
forall b. Ptr b -> Int -> IO (Ptr CDouble)
forall a b. Storable a => Ptr b -> Int -> IO a
C2HSImp.peekByteOff Ptr CFdmCallbackArgs
ptr Int
24 :: IO (C2HSImp.Ptr C2HSImp.CDouble)}) p
output <- (\Ptr CFdmCallbackArgs
ptr -> do {Ptr CFdmCallbackArgs -> Int -> IO (Ptr CDouble)
forall b. Ptr b -> Int -> IO (Ptr CDouble)
forall a b. Storable a => Ptr b -> Int -> IO a
C2HSImp.peekByteOff Ptr CFdmCallbackArgs
ptr Int
32 :: IO (C2HSImp.Ptr C2HSImp.CDouble)}) p
n <- (\Ptr CFdmCallbackArgs
ptr -> do {Ptr CFdmCallbackArgs -> Int -> IO CUInt
forall b. Ptr b -> Int -> IO CUInt
forall a b. Storable a => Ptr b -> Int -> IO a
C2HSImp.peekByteOff Ptr CFdmCallbackArgs
ptr Int
40 :: IO C2HSImp.CUInt}) p
direction <- (\Ptr CFdmCallbackArgs
ptr -> do {Ptr CFdmCallbackArgs -> Int -> IO CUInt
forall b. Ptr b -> Int -> IO CUInt
forall a b. Storable a => Ptr b -> Int -> IO a
C2HSImp.peekByteOff Ptr CFdmCallbackArgs
ptr Int
44 :: IO C2HSImp.CUInt}) p
f input n direction s t1 t2 output
withFdmApply :: ((Double, Double) -> RealVector -> RealVector) -> (FunPtr FdmCallbackFun -> IO b) -> IO b
withFdmApply :: forall b.
((Double, Double) -> RealVector -> RealVector)
-> (FunPtr FdmCallbackFun -> IO b) -> IO b
withFdmApply (Double, Double) -> RealVector -> RealVector
f FunPtr FdmCallbackFun -> IO b
g = ((forall a. IO a -> IO a) -> IO b) -> IO b
forall b. ((forall a. IO a -> IO a) -> IO b) -> IO b
mask (((forall a. IO a -> IO a) -> IO b) -> IO b)
-> ((forall a. IO a -> IO a) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \forall a. IO a -> IO a
restore -> do
fp <- FdmCallbackFun -> IO (FunPtr FdmCallbackFun)
mkFdmCallbackFunPtr FdmCallbackFun
forall {a}. Ptr a -> IO ()
call
restore (g fp) `finally` freeHaskellFunPtr fp
where
call :: Ptr a -> IO ()
call Ptr a
args = Ptr CFdmCallbackArgs
-> (Ptr CDouble
-> CUInt
-> CUInt
-> CDouble
-> CDouble
-> CDouble
-> Ptr CDouble
-> IO ())
-> IO ()
forall a.
Ptr CFdmCallbackArgs
-> (Ptr CDouble
-> CUInt
-> CUInt
-> CDouble
-> CDouble
-> CDouble
-> Ptr CDouble
-> IO a)
-> IO a
withFdmCallbackArgs (Ptr a -> Ptr CFdmCallbackArgs
forall a b. Ptr a -> Ptr b
castPtr Ptr a
args) ((Ptr CDouble
-> CUInt
-> CUInt
-> CDouble
-> CDouble
-> CDouble
-> Ptr CDouble
-> IO ())
-> IO ())
-> (Ptr CDouble
-> CUInt
-> CUInt
-> CDouble
-> CDouble
-> CDouble
-> Ptr CDouble
-> IO ())
-> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CDouble
xs CUInt
n CUInt
_dir CDouble
_s CDouble
t1 CDouble
t2 Ptr CDouble
out -> do
x <- Ptr CDouble -> CUInt -> IO RealVector
borrowRealVector Ptr CDouble
xs CUInt
n
pokeBoundedFdmResult n out (f (realToFrac t1, realToFrac t2) x)
withFdmApplyDirection :: (Int -> (Double, Double) -> RealVector -> RealVector) -> (FunPtr FdmCallbackFun -> IO b) -> IO b
withFdmApplyDirection :: forall b.
(Int -> (Double, Double) -> RealVector -> RealVector)
-> (FunPtr FdmCallbackFun -> IO b) -> IO b
withFdmApplyDirection Int -> (Double, Double) -> RealVector -> RealVector
f FunPtr FdmCallbackFun -> IO b
g = ((forall a. IO a -> IO a) -> IO b) -> IO b
forall b. ((forall a. IO a -> IO a) -> IO b) -> IO b
mask (((forall a. IO a -> IO a) -> IO b) -> IO b)
-> ((forall a. IO a -> IO a) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \forall a. IO a -> IO a
restore -> do
fp <- FdmCallbackFun -> IO (FunPtr FdmCallbackFun)
mkFdmCallbackFunPtr FdmCallbackFun
forall {a}. Ptr a -> IO ()
call
restore (g fp) `finally` freeHaskellFunPtr fp
where
call :: Ptr a -> IO ()
call Ptr a
args = Ptr CFdmCallbackArgs
-> (Ptr CDouble
-> CUInt
-> CUInt
-> CDouble
-> CDouble
-> CDouble
-> Ptr CDouble
-> IO ())
-> IO ()
forall a.
Ptr CFdmCallbackArgs
-> (Ptr CDouble
-> CUInt
-> CUInt
-> CDouble
-> CDouble
-> CDouble
-> Ptr CDouble
-> IO a)
-> IO a
withFdmCallbackArgs (Ptr a -> Ptr CFdmCallbackArgs
forall a b. Ptr a -> Ptr b
castPtr Ptr a
args) ((Ptr CDouble
-> CUInt
-> CUInt
-> CDouble
-> CDouble
-> CDouble
-> Ptr CDouble
-> IO ())
-> IO ())
-> (Ptr CDouble
-> CUInt
-> CUInt
-> CDouble
-> CDouble
-> CDouble
-> Ptr CDouble
-> IO ())
-> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CDouble
xs CUInt
n CUInt
dir CDouble
_s CDouble
t1 CDouble
t2 Ptr CDouble
out -> do
x <- Ptr CDouble -> CUInt -> IO RealVector
borrowRealVector Ptr CDouble
xs CUInt
n
pokeBoundedFdmResult n out (f (fromIntegral dir) (realToFrac t1, realToFrac t2) x)
withFdmSolveSplitting :: (Int -> Double -> (Double, Double) -> RealVector -> RealVector) -> (FunPtr FdmCallbackFun -> IO b) -> IO b
withFdmSolveSplitting :: forall b.
(Int -> Double -> (Double, Double) -> RealVector -> RealVector)
-> (FunPtr FdmCallbackFun -> IO b) -> IO b
withFdmSolveSplitting Int -> Double -> (Double, Double) -> RealVector -> RealVector
f FunPtr FdmCallbackFun -> IO b
g = ((forall a. IO a -> IO a) -> IO b) -> IO b
forall b. ((forall a. IO a -> IO a) -> IO b) -> IO b
mask (((forall a. IO a -> IO a) -> IO b) -> IO b)
-> ((forall a. IO a -> IO a) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \forall a. IO a -> IO a
restore -> do
fp <- FdmCallbackFun -> IO (FunPtr FdmCallbackFun)
mkFdmCallbackFunPtr FdmCallbackFun
forall {a}. Ptr a -> IO ()
call
restore (g fp) `finally` freeHaskellFunPtr fp
where
call :: Ptr a -> IO ()
call Ptr a
args = Ptr CFdmCallbackArgs
-> (Ptr CDouble
-> CUInt
-> CUInt
-> CDouble
-> CDouble
-> CDouble
-> Ptr CDouble
-> IO ())
-> IO ()
forall a.
Ptr CFdmCallbackArgs
-> (Ptr CDouble
-> CUInt
-> CUInt
-> CDouble
-> CDouble
-> CDouble
-> Ptr CDouble
-> IO a)
-> IO a
withFdmCallbackArgs (Ptr a -> Ptr CFdmCallbackArgs
forall a b. Ptr a -> Ptr b
castPtr Ptr a
args) ((Ptr CDouble
-> CUInt
-> CUInt
-> CDouble
-> CDouble
-> CDouble
-> Ptr CDouble
-> IO ())
-> IO ())
-> (Ptr CDouble
-> CUInt
-> CUInt
-> CDouble
-> CDouble
-> CDouble
-> Ptr CDouble
-> IO ())
-> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CDouble
xs CUInt
n CUInt
dir CDouble
s CDouble
t1 CDouble
t2 Ptr CDouble
out -> do
x <- Ptr CDouble -> CUInt -> IO RealVector
borrowRealVector Ptr CDouble
xs CUInt
n
pokeBoundedFdmResult n out (f (fromIntegral dir) (realToFrac s) (realToFrac t1, realToFrac t2) x)
withMaybeFdmStepCondition :: Maybe (Double -> RealVector -> RealVector) -> (FunPtr FdmCallbackFun -> IO b) -> IO b
withMaybeFdmStepCondition :: forall b.
Maybe (Double -> RealVector -> RealVector)
-> (FunPtr FdmCallbackFun -> IO b) -> IO b
withMaybeFdmStepCondition Maybe (Double -> RealVector -> RealVector)
Nothing FunPtr FdmCallbackFun -> IO b
g = FunPtr FdmCallbackFun -> IO b
g FunPtr FdmCallbackFun
forall a. FunPtr a
nullFunPtr
withMaybeFdmStepCondition (Just Double -> RealVector -> RealVector
f) FunPtr FdmCallbackFun -> IO b
g = ((forall a. IO a -> IO a) -> IO b) -> IO b
forall b. ((forall a. IO a -> IO a) -> IO b) -> IO b
mask (((forall a. IO a -> IO a) -> IO b) -> IO b)
-> ((forall a. IO a -> IO a) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \forall a. IO a -> IO a
restore -> do
fp <- FdmCallbackFun -> IO (FunPtr FdmCallbackFun)
mkFdmCallbackFunPtr FdmCallbackFun
forall {a}. Ptr a -> IO ()
call
restore (g fp) `finally` freeHaskellFunPtr fp
where
call :: Ptr a -> IO ()
call Ptr a
args = Ptr CFdmCallbackArgs
-> (Ptr CDouble
-> CUInt
-> CUInt
-> CDouble
-> CDouble
-> CDouble
-> Ptr CDouble
-> IO ())
-> IO ()
forall a.
Ptr CFdmCallbackArgs
-> (Ptr CDouble
-> CUInt
-> CUInt
-> CDouble
-> CDouble
-> CDouble
-> Ptr CDouble
-> IO a)
-> IO a
withFdmCallbackArgs (Ptr a -> Ptr CFdmCallbackArgs
forall a b. Ptr a -> Ptr b
castPtr Ptr a
args) ((Ptr CDouble
-> CUInt
-> CUInt
-> CDouble
-> CDouble
-> CDouble
-> Ptr CDouble
-> IO ())
-> IO ())
-> (Ptr CDouble
-> CUInt
-> CUInt
-> CDouble
-> CDouble
-> CDouble
-> Ptr CDouble
-> IO ())
-> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CDouble
xs CUInt
n CUInt
_dir CDouble
_s CDouble
t CDouble
_t2 Ptr CDouble
out -> do
x <- Ptr CDouble -> CUInt -> IO RealVector
borrowRealVector Ptr CDouble
xs CUInt
n
pokeBoundedFdmResult n out (f (realToFrac t) x)
pathGenerator :: (RngTrait) -> (GenStochasticProcess p) -> (TimeGrid) -> (Word)
-> (Word)
-> (Bool)
-> IO ((PathGenerator))
pathGenerator :: forall p.
RngTrait
-> GenStochasticProcess p
-> TimeGrid
-> Word
-> Word
-> Bool
-> IO PathGenerator
pathGenerator RngTrait
a1 GenStochasticProcess p
a2 TimeGrid
a3 Word
a4 Word
a5 Bool
a6 =
let {a1' :: CInt
a1' = RngTrait -> CInt
forall a b. (Enum a, Integral b) => a -> b
fromEnumC RngTrait
a1} in
GenStochasticProcess p
-> (Ptr CStochasticProcess' -> IO PathGenerator)
-> IO PathGenerator
forall p b.
GenStochasticProcess p -> (Ptr CStochasticProcess' -> IO b) -> IO b
withStochasticProcess GenStochasticProcess p
a2 ((Ptr CStochasticProcess' -> IO PathGenerator) -> IO PathGenerator)
-> (Ptr CStochasticProcess' -> IO PathGenerator)
-> IO PathGenerator
forall a b. (a -> b) -> a -> b
$ \Ptr CStochasticProcess'
a2' ->
TimeGrid -> (Ptr CTimeGrid -> IO PathGenerator) -> IO PathGenerator
forall b. TimeGrid -> (Ptr CTimeGrid -> IO b) -> IO b
withTimeGrid TimeGrid
a3 ((Ptr CTimeGrid -> IO PathGenerator) -> IO PathGenerator)
-> (Ptr CTimeGrid -> IO PathGenerator) -> IO PathGenerator
forall a b. (a -> b) -> a -> b
$ \Ptr CTimeGrid
a3' ->
let {a4' :: CUInt
a4' = Word -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
a4} in
let {a5' :: CUInt
a5' = Word -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
a5} in
let {a6' :: CInt
a6' = Bool -> CInt
forall a. Num a => Bool -> a
C2HSImp.fromBool Bool
a6} in
(Ptr (Ptr CChar) -> IO PathGenerator) -> IO PathGenerator
forall a b. (Ptr (Ptr a) -> IO b) -> IO b
preErrorCheck ((Ptr (Ptr CChar) -> IO PathGenerator) -> IO PathGenerator)
-> (Ptr (Ptr CChar) -> IO PathGenerator) -> IO PathGenerator
forall a b. (a -> b) -> a -> b
$ \Ptr (Ptr CChar)
a7' ->
CInt
-> Ptr CStochasticProcess'
-> Ptr CTimeGrid
-> CUInt
-> CUInt
-> CInt
-> Ptr (Ptr CChar)
-> IO (Ptr CPathGenerator)
pathGenerator'_ CInt
a1' Ptr CStochasticProcess'
a2' Ptr CTimeGrid
a3' CUInt
a4' CUInt
a5' CInt
a6' Ptr (Ptr CChar)
a7' IO (Ptr CPathGenerator)
-> (Ptr CPathGenerator -> IO PathGenerator) -> IO PathGenerator
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Ptr CPathGenerator
res ->
Ptr CPathGenerator -> IO PathGenerator
peekPathGenerator Ptr CPathGenerator
res IO PathGenerator
-> (PathGenerator -> IO PathGenerator) -> IO PathGenerator
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \PathGenerator
res' ->
Ptr (Ptr CChar) -> IO ()
errorCheck Ptr (Ptr CChar)
a7'IO () -> IO PathGenerator -> IO PathGenerator
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
PathGenerator -> IO PathGenerator
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (PathGenerator
res')
{-# LINE 394 "./QuantLib/Method.chs" #-}
sobolPathGenerator :: (SobolDirectionIntegers) -> (GenStochasticProcess p) -> (TimeGrid) -> (Word)
-> (Word)
-> (Bool)
-> IO ((PathGenerator))
sobolPathGenerator a1 a2 a3 a4 a5 a6 =
let {a1' = fromEnumC a1} in
withStochasticProcess a2 $ \a2' ->
withTimeGrid a3 $ \a3' ->
let {a4' = fromIntegral a4} in
let {a5' = fromIntegral a5} in
let {a6' = C2HSImp.fromBool a6} in
preErrorCheck $ \a7' ->
sobolPathGenerator'_ a1' a2' a3' a4' a5' a6' a7' >>= \res ->
peekPathGenerator res >>= \res' ->
errorCheck a7'>>
return (res')
{-# LINE 401 "./QuantLib/Method.chs" #-}
gaussianRsg :: (RngTrait) -> (Word)
-> (Word)
-> IO ((GaussianRsg))
gaussianRsg :: RngTrait -> Word -> Word -> IO GaussianRsg
gaussianRsg RngTrait
a1 Word
a2 Word
a3 =
let {a1' :: CInt
a1' = RngTrait -> CInt
forall a b. (Enum a, Integral b) => a -> b
fromEnumC RngTrait
a1} in
let {a2' :: CUInt
a2' = Word -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
a2} in
let {a3' :: CUInt
a3' = Word -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
a3} in
(Ptr (Ptr CChar) -> IO GaussianRsg) -> IO GaussianRsg
forall a b. (Ptr (Ptr a) -> IO b) -> IO b
preErrorCheck ((Ptr (Ptr CChar) -> IO GaussianRsg) -> IO GaussianRsg)
-> (Ptr (Ptr CChar) -> IO GaussianRsg) -> IO GaussianRsg
forall a b. (a -> b) -> a -> b
$ \Ptr (Ptr CChar)
a4' ->
CInt -> CUInt -> CUInt -> Ptr (Ptr CChar) -> IO (Ptr CGaussianRsg)
gaussianRsg'_ CInt
a1' CUInt
a2' CUInt
a3' Ptr (Ptr CChar)
a4' IO (Ptr CGaussianRsg)
-> (Ptr CGaussianRsg -> IO GaussianRsg) -> IO GaussianRsg
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Ptr CGaussianRsg
res ->
Ptr CGaussianRsg -> IO GaussianRsg
peekGaussianRsg Ptr CGaussianRsg
res IO GaussianRsg -> (GaussianRsg -> IO GaussianRsg) -> IO GaussianRsg
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \GaussianRsg
res' ->
Ptr (Ptr CChar) -> IO ()
errorCheck Ptr (Ptr CChar)
a4'IO () -> IO GaussianRsg -> IO GaussianRsg
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
GaussianRsg -> IO GaussianRsg
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (GaussianRsg
res')
{-# LINE 424 "./QuantLib/Method.chs" #-}
sobolGaussianRsg :: (SobolDirectionIntegers) -> (Word)
-> (Word)
-> IO ((GaussianRsg))
sobolGaussianRsg a1 a2 a3 =
let {a1' = fromEnumC a1} in
let {a2' = fromIntegral a2} in
let {a3' = fromIntegral a3} in
preErrorCheck $ \a4' ->
sobolGaussianRsg'_ a1' a2' a3' a4' >>= \res ->
peekGaussianRsg res >>= \res' ->
errorCheck a4'>>
return (res')
{-# LINE 431 "./QuantLib/Method.chs" #-}
rsgDimension :: (GaussianRsg) -> (Word)
rsgDimension a1 =
C2HSImp.unsafePerformIO $
withGaussianRsg a1 $ \a1' ->
rsgDimension'_ a1' >>= \res ->
let {res' = fromIntegral res} in
return (res')
{-# LINE 434 "./QuantLib/Method.chs" #-}
nextSequence :: (GaussianRsg) -> IO ((RealVector), (Double))
nextSequence a1 =
withGaussianRsg a1 $ \a1' ->
preArray $ \(a2'1, a2'2) ->
alloca $ \a3' ->
preErrorCheck $ \a4' ->
nextSequence'_ a1' a2'1 a2'2 a3' a4' >>
peekRealVector a2'1 a2'2>>= \a2'' ->
peekDouble a3'>>= \a3'' ->
errorCheck a4'>>
return (a2'', a3'')
{-# LINE 441 "./QuantLib/Method.chs" #-}
lastSequence :: (GaussianRsg) -> IO ((RealVector), (Double))
lastSequence a1 =
withGaussianRsg a1 $ \a1' ->
preArray $ \(a2'1, a2'2) ->
alloca $ \a3' ->
preErrorCheck $ \a4' ->
lastSequence'_ a1' a2'1 a2'2 a3' a4' >>
peekRealVector a2'1 a2'2>>= \a2'' ->
peekDouble a3'>>= \a3'' ->
errorCheck a4'>>
return (a2'', a3'')
{-# LINE 447 "./QuantLib/Method.chs" #-}
next :: (PathGenerator) -> IO ((SamplePath))
next a1 =
withPathGenerator a1 $ \a1' ->
preErrorCheck $ \a2' ->
next'_ a1' a2' >>= \res ->
peekSamplePath res >>= \res' ->
errorCheck a2'>>
return (res')
{-# LINE 450 "./QuantLib/Method.chs" #-}
antithetic :: (PathGenerator) -> IO ((SamplePath))
antithetic a1 =
withPathGenerator a1 $ \a1' ->
preErrorCheck $ \a2' ->
antithetic'_ a1' a2' >>= \res ->
peekSamplePath res >>= \res' ->
errorCheck a2'>>
return (res')
{-# LINE 453 "./QuantLib/Method.chs" #-}
weight :: (SamplePath) -> (Double)
weight a1 =
C2HSImp.unsafePerformIO $
withSamplePath a1 $ \a1' ->
weight'_ a1' >>= \res ->
let {res' = realToFrac res} in
return (res')
{-# LINE 456 "./QuantLib/Method.chs" #-}
assetNumber :: (SamplePath) -> (Word)
assetNumber a1 =
C2HSImp.unsafePerformIO $
withSamplePath a1 $ \a1' ->
assetNumber'_ a1' >>= \res ->
let {res' = fromIntegral res} in
return (res')
{-# LINE 459 "./QuantLib/Method.chs" #-}
pathSize :: (SamplePath) -> (Word)
pathSize a1 =
C2HSImp.unsafePerformIO $
withSamplePath a1 $ \a1' ->
pathSize'_ a1' >>= \res ->
let {res' = fromIntegral res} in
return (res')
{-# LINE 462 "./QuantLib/Method.chs" #-}
assetAt :: (SamplePath) -> (Word)
-> (Word)
-> IO ((Double))
assetAt a1 a2 a3 =
withSamplePath a1 $ \a1' ->
let {a2' = fromIntegral a2} in
let {a3' = fromIntegral a3} in
preErrorCheck $ \a4' ->
assetAt'_ a1' a2' a3' a4' >>= \res ->
let {res' = realToFrac res} in
errorCheck a4'>>
return (res')
{-# LINE 467 "./QuantLib/Method.chs" #-}
asset :: (SamplePath) -> (Word) -> IO ((RealVector))
asset a1 a2 =
withSamplePath a1 $ \a1' ->
let {a2' = fromIntegral a2} in
preArray $ \(a3'1, a3'2) ->
preErrorCheck $ \a4' ->
asset'_ a1' a2' a3'1 a3'2 a4' >>
peekRealVector a3'1 a3'2>>= \a3'' ->
errorCheck a4'>>
return (a3'')
{-# LINE 470 "./QuantLib/Method.chs" #-}
lsmRegress :: (PolynomialType) -> (Word)
-> (RealVector)
-> (RealVector)
-> (RealVector)
-> IO ((RealVector))
lsmRegress :: PolynomialType
-> Word -> RealVector -> RealVector -> RealVector -> IO RealVector
lsmRegress PolynomialType
a1 Word
a2 RealVector
a3 RealVector
a4 RealVector
a5 =
let {a1' :: CInt
a1' = (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CInt) -> (PolynomialType -> Int) -> PolynomialType -> CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PolynomialType -> Int
forall a. Enum a => a -> Int
fromEnum) PolynomialType
a1} in
let {a2' :: CUInt
a2' = Word -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
a2} in
RealVector
-> ((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector
forall b. RealVector -> ((CUInt, Ptr CDouble) -> IO b) -> IO b
withRealVector RealVector
a3 (((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector)
-> ((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \(CUInt
a3'1, Ptr CDouble
a3'2) ->
RealVector
-> ((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector
forall b. RealVector -> ((CUInt, Ptr CDouble) -> IO b) -> IO b
withRealVector RealVector
a4 (((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector)
-> ((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \(CUInt
a4'1, Ptr CDouble
a4'2) ->
RealVector
-> ((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector
forall b. RealVector -> ((CUInt, Ptr CDouble) -> IO b) -> IO b
withRealVector RealVector
a5 (((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector)
-> ((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \(CUInt
a5'1, Ptr CDouble
a5'2) ->
((Ptr CUInt, Ptr (Ptr CDouble)) -> IO RealVector) -> IO RealVector
forall a b. ((Ptr CUInt, Ptr (Ptr a)) -> IO b) -> IO b
preArray (((Ptr CUInt, Ptr (Ptr CDouble)) -> IO RealVector)
-> IO RealVector)
-> ((Ptr CUInt, Ptr (Ptr CDouble)) -> IO RealVector)
-> IO RealVector
forall a b. (a -> b) -> a -> b
$ \(Ptr CUInt
a6'1, Ptr (Ptr CDouble)
a6'2) ->
(Ptr (Ptr CChar) -> IO RealVector) -> IO RealVector
forall a b. (Ptr (Ptr a) -> IO b) -> IO b
preErrorCheck ((Ptr (Ptr CChar) -> IO RealVector) -> IO RealVector)
-> (Ptr (Ptr CChar) -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \Ptr (Ptr CChar)
a7' ->
CInt
-> CUInt
-> CUInt
-> Ptr CDouble
-> CUInt
-> Ptr CDouble
-> CUInt
-> Ptr CDouble
-> Ptr CUInt
-> Ptr (Ptr CDouble)
-> Ptr (Ptr CChar)
-> IO ()
lsmRegress'_ CInt
a1' CUInt
a2' CUInt
a3'1 Ptr CDouble
a3'2 CUInt
a4'1 Ptr CDouble
a4'2 CUInt
a5'1 Ptr CDouble
a5'2 Ptr CUInt
a6'1 Ptr (Ptr CDouble)
a6'2 Ptr (Ptr CChar)
a7' IO () -> IO RealVector -> IO RealVector
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
Ptr CUInt -> Ptr (Ptr CDouble) -> IO RealVector
peekRealVector Ptr CUInt
a6'1 Ptr (Ptr CDouble)
a6'2IO RealVector -> (RealVector -> IO RealVector) -> IO RealVector
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RealVector
a6'' ->
Ptr (Ptr CChar) -> IO ()
errorCheck Ptr (Ptr CChar)
a7'IO () -> IO RealVector -> IO RealVector
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
RealVector -> IO RealVector
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (RealVector
a6'')
{-# LINE 484 "./QuantLib/Method.chs" #-}
lsmBasisSize :: Word -> Word -> Word
lsmBasisSize dim order = fromInteger $ binomial (toInteger dim + toInteger order) (toInteger order)
where binomial n k = product [n - k + 1 .. n] `div` product [1 .. k]
lsmRegressMulti :: PolynomialType -> Word -> RealMatrix
-> RealVector
-> RealMatrix
-> IO RealVector
lsmRegressMulti :: PolynomialType
-> Word -> RealMatrix -> RealVector -> RealMatrix -> IO RealVector
lsmRegressMulti PolynomialType
p Word
order (RealMatrix Word
fr Word
fc RealVector
fd) RealVector
t (RealMatrix Word
er Word
ec RealVector
ed) = PolynomialType
-> Word
-> Word
-> Word
-> RealVector
-> RealVector
-> Word
-> Word
-> RealVector
-> IO RealVector
qlLsmRegressMulti PolynomialType
p Word
order Word
fr Word
fc RealVector
fd RealVector
t Word
er Word
ec RealVector
ed
qlLsmRegressMulti :: (PolynomialType) -> (Word)
-> (Word)
-> (Word)
-> (RealVector)
-> (RealVector)
-> (Word)
-> (Word)
-> (RealVector)
-> IO ((RealVector))
qlLsmRegressMulti :: PolynomialType
-> Word
-> Word
-> Word
-> RealVector
-> RealVector
-> Word
-> Word
-> RealVector
-> IO RealVector
qlLsmRegressMulti PolynomialType
a1 Word
a2 Word
a3 Word
a4 RealVector
a5 RealVector
a6 Word
a7 Word
a8 RealVector
a9 =
let {a1' :: CInt
a1' = (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CInt) -> (PolynomialType -> Int) -> PolynomialType -> CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PolynomialType -> Int
forall a. Enum a => a -> Int
fromEnum) PolynomialType
a1} in
let {a2' :: CUInt
a2' = Word -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
a2} in
let {a3' :: CUInt
a3' = Word -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
a3} in
let {a4' :: CUInt
a4' = Word -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
a4} in
RealVector -> (Ptr CDouble -> IO RealVector) -> IO RealVector
forall b. RealVector -> (Ptr CDouble -> IO b) -> IO b
withRealVectorRaw RealVector
a5 ((Ptr CDouble -> IO RealVector) -> IO RealVector)
-> (Ptr CDouble -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \Ptr CDouble
a5' ->
RealVector
-> ((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector
forall b. RealVector -> ((CUInt, Ptr CDouble) -> IO b) -> IO b
withRealVector RealVector
a6 (((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector)
-> ((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \(CUInt
a6'1, Ptr CDouble
a6'2) ->
let {a7' :: CUInt
a7' = Word -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
a7} in
let {a8' :: CUInt
a8' = Word -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
a8} in
RealVector -> (Ptr CDouble -> IO RealVector) -> IO RealVector
forall b. RealVector -> (Ptr CDouble -> IO b) -> IO b
withRealVectorRaw RealVector
a9 ((Ptr CDouble -> IO RealVector) -> IO RealVector)
-> (Ptr CDouble -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \Ptr CDouble
a9' ->
((Ptr CUInt, Ptr (Ptr CDouble)) -> IO RealVector) -> IO RealVector
forall a b. ((Ptr CUInt, Ptr (Ptr a)) -> IO b) -> IO b
preArray (((Ptr CUInt, Ptr (Ptr CDouble)) -> IO RealVector)
-> IO RealVector)
-> ((Ptr CUInt, Ptr (Ptr CDouble)) -> IO RealVector)
-> IO RealVector
forall a b. (a -> b) -> a -> b
$ \(Ptr CUInt
a10'1, Ptr (Ptr CDouble)
a10'2) ->
(Ptr (Ptr CChar) -> IO RealVector) -> IO RealVector
forall a b. (Ptr (Ptr a) -> IO b) -> IO b
preErrorCheck ((Ptr (Ptr CChar) -> IO RealVector) -> IO RealVector)
-> (Ptr (Ptr CChar) -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \Ptr (Ptr CChar)
a11' ->
CInt
-> CUInt
-> CUInt
-> CUInt
-> Ptr CDouble
-> CUInt
-> Ptr CDouble
-> CUInt
-> CUInt
-> Ptr CDouble
-> Ptr CUInt
-> Ptr (Ptr CDouble)
-> Ptr (Ptr CChar)
-> IO ()
qlLsmRegressMulti'_ CInt
a1' CUInt
a2' CUInt
a3' CUInt
a4' Ptr CDouble
a5' CUInt
a6'1 Ptr CDouble
a6'2 CUInt
a7' CUInt
a8' Ptr CDouble
a9' Ptr CUInt
a10'1 Ptr (Ptr CDouble)
a10'2 Ptr (Ptr CChar)
a11' IO () -> IO RealVector -> IO RealVector
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
Ptr CUInt -> Ptr (Ptr CDouble) -> IO RealVector
peekRealVector Ptr CUInt
a10'1 Ptr (Ptr CDouble)
a10'2IO RealVector -> (RealVector -> IO RealVector) -> IO RealVector
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RealVector
a10'' ->
Ptr (Ptr CChar) -> IO ()
errorCheck Ptr (Ptr CChar)
a11'IO () -> IO RealVector -> IO RealVector
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
RealVector -> IO RealVector
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (RealVector
a10'')
{-# LINE 517 "./QuantLib/Method.chs" #-}
fdmRollback :: (Int)
-> ((Double,Double) -> RealVector -> RealVector)
-> (Int -> (Double,Double) -> RealVector -> RealVector)
-> (Int -> Double -> (Double,Double) -> RealVector -> RealVector)
-> (Maybe (Double -> RealVector -> RealVector))
-> (RealVector)
-> (FdmScheme)
-> (RealVector)
-> (Double)
-> (Double)
-> (Int)
-> (Int)
-> IO ((RealVector))
fdmRollback :: Int
-> ((Double, Double) -> RealVector -> RealVector)
-> (Int -> (Double, Double) -> RealVector -> RealVector)
-> (Int -> Double -> (Double, Double) -> RealVector -> RealVector)
-> Maybe (Double -> RealVector -> RealVector)
-> RealVector
-> FdmScheme
-> RealVector
-> Double
-> Double
-> Int
-> Int
-> IO RealVector
fdmRollback Int
a1 (Double, Double) -> RealVector -> RealVector
a2 Int -> (Double, Double) -> RealVector -> RealVector
a3 Int -> Double -> (Double, Double) -> RealVector -> RealVector
a4 Maybe (Double -> RealVector -> RealVector)
a5 RealVector
a6 FdmScheme
a7 RealVector
a8 Double
a9 Double
a10 Int
a11 Int
a12 =
let {a1' :: CUInt
a1' = Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a1} in
((Double, Double) -> RealVector -> RealVector)
-> (FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector
forall b.
((Double, Double) -> RealVector -> RealVector)
-> (FunPtr FdmCallbackFun -> IO b) -> IO b
withFdmApply (Double, Double) -> RealVector -> RealVector
a2 ((FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector)
-> (FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \FunPtr FdmCallbackFun
a2' ->
(Int -> (Double, Double) -> RealVector -> RealVector)
-> (FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector
forall b.
(Int -> (Double, Double) -> RealVector -> RealVector)
-> (FunPtr FdmCallbackFun -> IO b) -> IO b
withFdmApplyDirection Int -> (Double, Double) -> RealVector -> RealVector
a3 ((FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector)
-> (FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \FunPtr FdmCallbackFun
a3' ->
(Int -> Double -> (Double, Double) -> RealVector -> RealVector)
-> (FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector
forall b.
(Int -> Double -> (Double, Double) -> RealVector -> RealVector)
-> (FunPtr FdmCallbackFun -> IO b) -> IO b
withFdmSolveSplitting Int -> Double -> (Double, Double) -> RealVector -> RealVector
a4 ((FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector)
-> (FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \FunPtr FdmCallbackFun
a4' ->
Maybe (Double -> RealVector -> RealVector)
-> (FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector
forall b.
Maybe (Double -> RealVector -> RealVector)
-> (FunPtr FdmCallbackFun -> IO b) -> IO b
withMaybeFdmStepCondition Maybe (Double -> RealVector -> RealVector)
a5 ((FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector)
-> (FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \FunPtr FdmCallbackFun
a5' ->
RealVector
-> ((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector
forall b. RealVector -> ((CUInt, Ptr CDouble) -> IO b) -> IO b
withRealVector RealVector
a6 (((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector)
-> ((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \(CUInt
a6'1, Ptr CDouble
a6'2) ->
FdmScheme -> (Ptr CFdmSchemeDesc -> IO RealVector) -> IO RealVector
forall a. FdmScheme -> (Ptr CFdmSchemeDesc -> IO a) -> IO a
withFdmSchemeDesc FdmScheme
a7 ((Ptr CFdmSchemeDesc -> IO RealVector) -> IO RealVector)
-> (Ptr CFdmSchemeDesc -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \Ptr CFdmSchemeDesc
a7' ->
RealVector
-> ((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector
forall b. RealVector -> ((CUInt, Ptr CDouble) -> IO b) -> IO b
withRealVector RealVector
a8 (((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector)
-> ((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \(CUInt
a8'1, Ptr CDouble
a8'2) ->
let {a9' :: CDouble
a9' = Double -> CDouble
forall a b. (Real a, Fractional b) => a -> b
realToFrac Double
a9} in
let {a10' :: CDouble
a10' = Double -> CDouble
forall a b. (Real a, Fractional b) => a -> b
realToFrac Double
a10} in
let {a11' :: CUInt
a11' = Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a11} in
let {a12' :: CUInt
a12' = Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a12} in
((Ptr CUInt, Ptr (Ptr CDouble)) -> IO RealVector) -> IO RealVector
forall a b. ((Ptr CUInt, Ptr (Ptr a)) -> IO b) -> IO b
preArray (((Ptr CUInt, Ptr (Ptr CDouble)) -> IO RealVector)
-> IO RealVector)
-> ((Ptr CUInt, Ptr (Ptr CDouble)) -> IO RealVector)
-> IO RealVector
forall a b. (a -> b) -> a -> b
$ \(Ptr CUInt
a13'1, Ptr (Ptr CDouble)
a13'2) ->
(Ptr (Ptr CChar) -> IO RealVector) -> IO RealVector
forall a b. (Ptr (Ptr a) -> IO b) -> IO b
preErrorCheck ((Ptr (Ptr CChar) -> IO RealVector) -> IO RealVector)
-> (Ptr (Ptr CChar) -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \Ptr (Ptr CChar)
a14' ->
CUInt
-> FunPtr FdmCallbackFun
-> FunPtr FdmCallbackFun
-> FunPtr FdmCallbackFun
-> FunPtr FdmCallbackFun
-> CUInt
-> Ptr CDouble
-> Ptr CFdmSchemeDesc
-> CUInt
-> Ptr CDouble
-> CDouble
-> CDouble
-> CUInt
-> CUInt
-> Ptr CUInt
-> Ptr (Ptr CDouble)
-> Ptr (Ptr CChar)
-> IO ()
fdmRollback'_ CUInt
a1' FunPtr FdmCallbackFun
a2' FunPtr FdmCallbackFun
a3' FunPtr FdmCallbackFun
a4' FunPtr FdmCallbackFun
a5' CUInt
a6'1 Ptr CDouble
a6'2 Ptr CFdmSchemeDesc
a7' CUInt
a8'1 Ptr CDouble
a8'2 CDouble
a9' CDouble
a10' CUInt
a11' CUInt
a12' Ptr CUInt
a13'1 Ptr (Ptr CDouble)
a13'2 Ptr (Ptr CChar)
a14' IO () -> IO RealVector -> IO RealVector
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
Ptr CUInt -> Ptr (Ptr CDouble) -> IO RealVector
peekRealVector Ptr CUInt
a13'1 Ptr (Ptr CDouble)
a13'2IO RealVector -> (RealVector -> IO RealVector) -> IO RealVector
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RealVector
a13'' ->
Ptr (Ptr CChar) -> IO ()
errorCheck Ptr (Ptr CChar)
a14'IO () -> IO RealVector -> IO RealVector
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
RealVector -> IO RealVector
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (RealVector
a13'')
{-# LINE 554 "./QuantLib/Method.chs" #-}
predefined1dMesher :: (RealVector)
-> IO ((Fdm1dMesher))
predefined1dMesher a1 =
withRealVector a1 $ \(a1'1, a1'2) ->
preErrorCheck $ \a2' ->
predefined1dMesher'_ a1'1 a1'2 a2' >>= \res ->
peekFdm1dMesher res >>= \res' ->
errorCheck a2'>>
return (res')
{-# LINE 558 "./QuantLib/Method.chs" #-}
uniform1dMesher :: (Double)
-> (Double)
-> (Word)
-> IO ((Fdm1dMesher))
uniform1dMesher a1 a2 a3 =
let {a1' = realToFrac a1} in
let {a2' = realToFrac a2} in
let {a3' = fromIntegral a3} in
preErrorCheck $ \a4' ->
uniform1dMesher'_ a1' a2' a3' a4' >>= \res ->
peekFdm1dMesher res >>= \res' ->
errorCheck a4'>>
return (res')
{-# LINE 564 "./QuantLib/Method.chs" #-}
concentrating1dMesher :: (Double)
-> (Double)
-> (Word)
-> (Maybe Double)
-> (Maybe Double)
-> (Bool)
-> IO ((Fdm1dMesher))
concentrating1dMesher :: Double
-> Double
-> Word
-> Maybe Double
-> Maybe Double
-> Bool
-> IO Fdm1dMesher
concentrating1dMesher Double
a1 Double
a2 Word
a3 Maybe Double
a4 Maybe Double
a5 Bool
a6 =
let {a1' :: CDouble
a1' = Double -> CDouble
forall a b. (Real a, Fractional b) => a -> b
realToFrac Double
a1} in
let {a2' :: CDouble
a2' = Double -> CDouble
forall a b. (Real a, Fractional b) => a -> b
realToFrac Double
a2} in
let {a3' :: CUInt
a3' = Word -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
a3} in
let {a4' :: CDouble
a4' = Maybe Double -> CDouble
fromMaybeDouble Maybe Double
a4} in
let {a5' :: CDouble
a5' = Maybe Double -> CDouble
fromMaybeDouble Maybe Double
a5} in
let {a6' :: CInt
a6' = Bool -> CInt
forall a. Num a => Bool -> a
C2HSImp.fromBool Bool
a6} in
(Ptr (Ptr CChar) -> IO Fdm1dMesher) -> IO Fdm1dMesher
forall a b. (Ptr (Ptr a) -> IO b) -> IO b
preErrorCheck ((Ptr (Ptr CChar) -> IO Fdm1dMesher) -> IO Fdm1dMesher)
-> (Ptr (Ptr CChar) -> IO Fdm1dMesher) -> IO Fdm1dMesher
forall a b. (a -> b) -> a -> b
$ \Ptr (Ptr CChar)
a7' ->
CDouble
-> CDouble
-> CUInt
-> CDouble
-> CDouble
-> CInt
-> Ptr (Ptr CChar)
-> IO (Ptr CFdm1dMesher)
concentrating1dMesher'_ CDouble
a1' CDouble
a2' CUInt
a3' CDouble
a4' CDouble
a5' CInt
a6' Ptr (Ptr CChar)
a7' IO (Ptr CFdm1dMesher)
-> (Ptr CFdm1dMesher -> IO Fdm1dMesher) -> IO Fdm1dMesher
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Ptr CFdm1dMesher
res ->
Ptr CFdm1dMesher -> IO Fdm1dMesher
peekFdm1dMesher Ptr CFdm1dMesher
res IO Fdm1dMesher -> (Fdm1dMesher -> IO Fdm1dMesher) -> IO Fdm1dMesher
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Fdm1dMesher
res' ->
Ptr (Ptr CChar) -> IO ()
errorCheck Ptr (Ptr CChar)
a7'IO () -> IO Fdm1dMesher -> IO Fdm1dMesher
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
Fdm1dMesher -> IO Fdm1dMesher
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Fdm1dMesher
res')
{-# LINE 575 "./QuantLib/Method.chs" #-}
concentrating1dMesherMulti :: Double -> Double -> Word
-> [(Double, Double, Bool)]
-> Double
-> IO Fdm1dMesher
concentrating1dMesherMulti start end sz cPoints tol =
let (locs, densities, reqs) = unzip3 cPoints
in qlConcentrating1dMesherMulti start end sz (fromIntegral (length cPoints)) locs densities reqs tol
qlConcentrating1dMesherMulti :: (Double) -> (Double) -> (Word) -> (Word)
-> ([Double])
-> ([Double])
-> ([Bool])
-> (Double)
-> IO ((Fdm1dMesher))
qlConcentrating1dMesherMulti :: Double
-> Double
-> Word
-> Word
-> [Double]
-> [Double]
-> [Bool]
-> Double
-> IO Fdm1dMesher
qlConcentrating1dMesherMulti Double
a1 Double
a2 Word
a3 Word
a4 [Double]
a5 [Double]
a6 [Bool]
a7 Double
a8 =
let {a1' :: CDouble
a1' = Double -> CDouble
forall a b. (Real a, Fractional b) => a -> b
realToFrac Double
a1} in
let {a2' :: CDouble
a2' = Double -> CDouble
forall a b. (Real a, Fractional b) => a -> b
realToFrac Double
a2} in
let {a3' :: CUInt
a3' = Word -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
a3} in
let {a4' :: CUInt
a4' = Word -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
a4} in
[Double] -> (Ptr CDouble -> IO Fdm1dMesher) -> IO Fdm1dMesher
forall b. [Double] -> (Ptr CDouble -> IO b) -> IO b
withDoubleArrayRaw [Double]
a5 ((Ptr CDouble -> IO Fdm1dMesher) -> IO Fdm1dMesher)
-> (Ptr CDouble -> IO Fdm1dMesher) -> IO Fdm1dMesher
forall a b. (a -> b) -> a -> b
$ \Ptr CDouble
a5' ->
[Double] -> (Ptr CDouble -> IO Fdm1dMesher) -> IO Fdm1dMesher
forall b. [Double] -> (Ptr CDouble -> IO b) -> IO b
withDoubleArrayRaw [Double]
a6 ((Ptr CDouble -> IO Fdm1dMesher) -> IO Fdm1dMesher)
-> (Ptr CDouble -> IO Fdm1dMesher) -> IO Fdm1dMesher
forall a b. (a -> b) -> a -> b
$ \Ptr CDouble
a6' ->
[Bool] -> (Ptr CInt -> IO Fdm1dMesher) -> IO Fdm1dMesher
forall b. [Bool] -> (Ptr CInt -> IO b) -> IO b
withBoolArrayRaw [Bool]
a7 ((Ptr CInt -> IO Fdm1dMesher) -> IO Fdm1dMesher)
-> (Ptr CInt -> IO Fdm1dMesher) -> IO Fdm1dMesher
forall a b. (a -> b) -> a -> b
$ \Ptr CInt
a7' ->
let {a8' :: CDouble
a8' = Double -> CDouble
forall a b. (Real a, Fractional b) => a -> b
realToFrac Double
a8} in
(Ptr (Ptr CChar) -> IO Fdm1dMesher) -> IO Fdm1dMesher
forall a b. (Ptr (Ptr a) -> IO b) -> IO b
preErrorCheck ((Ptr (Ptr CChar) -> IO Fdm1dMesher) -> IO Fdm1dMesher)
-> (Ptr (Ptr CChar) -> IO Fdm1dMesher) -> IO Fdm1dMesher
forall a b. (a -> b) -> a -> b
$ \Ptr (Ptr CChar)
a9' ->
CDouble
-> CDouble
-> CUInt
-> CUInt
-> Ptr CDouble
-> Ptr CDouble
-> Ptr CInt
-> CDouble
-> Ptr (Ptr CChar)
-> IO (Ptr CFdm1dMesher)
qlConcentrating1dMesherMulti'_ CDouble
a1' CDouble
a2' CUInt
a3' CUInt
a4' Ptr CDouble
a5' Ptr CDouble
a6' Ptr CInt
a7' CDouble
a8' Ptr (Ptr CChar)
a9' IO (Ptr CFdm1dMesher)
-> (Ptr CFdm1dMesher -> IO Fdm1dMesher) -> IO Fdm1dMesher
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Ptr CFdm1dMesher
res ->
Ptr CFdm1dMesher -> IO Fdm1dMesher
peekFdm1dMesher Ptr CFdm1dMesher
res IO Fdm1dMesher -> (Fdm1dMesher -> IO Fdm1dMesher) -> IO Fdm1dMesher
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Fdm1dMesher
res' ->
Ptr (Ptr CChar) -> IO ()
errorCheck Ptr (Ptr CChar)
a9'IO () -> IO Fdm1dMesher -> IO Fdm1dMesher
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
Fdm1dMesher -> IO Fdm1dMesher
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Fdm1dMesher
res')
{-# LINE 593 "./QuantLib/Method.chs" #-}
gluedMesher :: (Fdm1dMesher)
-> (Fdm1dMesher)
-> IO ((Fdm1dMesher))
gluedMesher a1 a2 =
withFdm1dMesher a1 $ \a1' ->
withFdm1dMesher a2 $ \a2' ->
preErrorCheck $ \a3' ->
gluedMesher'_ a1' a2' a3' >>= \res ->
peekFdm1dMesher res >>= \res' ->
errorCheck a3'>>
return (res')
{-# LINE 602 "./QuantLib/Method.chs" #-}
fdmBlackScholesMesher :: (Word)
-> (GeneralizedBlackScholesProcess) -> (Double)
-> (Double)
-> (Maybe Double)
-> (Maybe Double)
-> (Double)
-> (Double)
-> (Maybe Double)
-> (Maybe Double)
-> ([Dividend]) -> (Maybe FdmQuantoHelper) -> (Double)
-> IO ((Fdm1dMesher))
fdmBlackScholesMesher :: Word
-> GeneralizedBlackScholesProcess
-> Double
-> Double
-> Maybe Double
-> Maybe Double
-> Double
-> Double
-> Maybe Double
-> Maybe Double
-> [Dividend]
-> Maybe FdmQuantoHelper
-> Double
-> IO Fdm1dMesher
fdmBlackScholesMesher Word
a1 GeneralizedBlackScholesProcess
a2 Double
a3 Double
a4 Maybe Double
a5 Maybe Double
a6 Double
a7 Double
a8 Maybe Double
a9 Maybe Double
a10 [Dividend]
a11 Maybe FdmQuantoHelper
a12 Double
a13 =
let {a1' :: CUInt
a1' = Word -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
a1} in
GeneralizedBlackScholesProcess
-> (Ptr CGeneralizedBlackScholesProcess' -> IO Fdm1dMesher)
-> IO Fdm1dMesher
forall gbs b.
GenGeneralizedBlackScholesProcess gbs
-> (Ptr CGeneralizedBlackScholesProcess' -> IO b) -> IO b
withGeneralizedBlackScholesProcess GeneralizedBlackScholesProcess
a2 ((Ptr CGeneralizedBlackScholesProcess' -> IO Fdm1dMesher)
-> IO Fdm1dMesher)
-> (Ptr CGeneralizedBlackScholesProcess' -> IO Fdm1dMesher)
-> IO Fdm1dMesher
forall a b. (a -> b) -> a -> b
$ \Ptr CGeneralizedBlackScholesProcess'
a2' ->
let {a3' :: CDouble
a3' = Double -> CDouble
forall a b. (Real a, Fractional b) => a -> b
realToFrac Double
a3} in
let {a4' :: CDouble
a4' = Double -> CDouble
forall a b. (Real a, Fractional b) => a -> b
realToFrac Double
a4} in
let {a5' :: CDouble
a5' = Maybe Double -> CDouble
fromMaybeDouble Maybe Double
a5} in
let {a6' :: CDouble
a6' = Maybe Double -> CDouble
fromMaybeDouble Maybe Double
a6} in
let {a7' :: CDouble
a7' = Double -> CDouble
forall a b. (Real a, Fractional b) => a -> b
realToFrac Double
a7} in
let {a8' :: CDouble
a8' = Double -> CDouble
forall a b. (Real a, Fractional b) => a -> b
realToFrac Double
a8} in
let {a9' :: CDouble
a9' = Maybe Double -> CDouble
fromMaybeDouble Maybe Double
a9} in
let {a10' :: CDouble
a10' = Maybe Double -> CDouble
fromMaybeDouble Maybe Double
a10} in
[Dividend]
-> ((CUInt, Ptr (Ptr CDividend)) -> IO Fdm1dMesher)
-> IO Fdm1dMesher
forall b.
[Dividend] -> ((CUInt, Ptr (Ptr CDividend)) -> IO b) -> IO b
withDividendArray [Dividend]
a11 (((CUInt, Ptr (Ptr CDividend)) -> IO Fdm1dMesher)
-> IO Fdm1dMesher)
-> ((CUInt, Ptr (Ptr CDividend)) -> IO Fdm1dMesher)
-> IO Fdm1dMesher
forall a b. (a -> b) -> a -> b
$ \(CUInt
a11'1, Ptr (Ptr CDividend)
a11'2) ->
Maybe FdmQuantoHelper
-> (Ptr CFdmQuantoHelper -> IO Fdm1dMesher) -> IO Fdm1dMesher
forall b.
Maybe FdmQuantoHelper -> (Ptr CFdmQuantoHelper -> IO b) -> IO b
withMaybeFdmQuantoHelper Maybe FdmQuantoHelper
a12 ((Ptr CFdmQuantoHelper -> IO Fdm1dMesher) -> IO Fdm1dMesher)
-> (Ptr CFdmQuantoHelper -> IO Fdm1dMesher) -> IO Fdm1dMesher
forall a b. (a -> b) -> a -> b
$ \Ptr CFdmQuantoHelper
a12' ->
let {a13' :: CDouble
a13' = Double -> CDouble
forall a b. (Real a, Fractional b) => a -> b
realToFrac Double
a13} in
(Ptr (Ptr CChar) -> IO Fdm1dMesher) -> IO Fdm1dMesher
forall a b. (Ptr (Ptr a) -> IO b) -> IO b
preErrorCheck ((Ptr (Ptr CChar) -> IO Fdm1dMesher) -> IO Fdm1dMesher)
-> (Ptr (Ptr CChar) -> IO Fdm1dMesher) -> IO Fdm1dMesher
forall a b. (a -> b) -> a -> b
$ \Ptr (Ptr CChar)
a14' ->
CUInt
-> Ptr CGeneralizedBlackScholesProcess'
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CUInt
-> Ptr (Ptr CDividend)
-> Ptr CFdmQuantoHelper
-> CDouble
-> Ptr (Ptr CChar)
-> IO (Ptr CFdm1dMesher)
fdmBlackScholesMesher'_ CUInt
a1' Ptr CGeneralizedBlackScholesProcess'
a2' CDouble
a3' CDouble
a4' CDouble
a5' CDouble
a6' CDouble
a7' CDouble
a8' CDouble
a9' CDouble
a10' CUInt
a11'1 Ptr (Ptr CDividend)
a11'2 Ptr CFdmQuantoHelper
a12' CDouble
a13' Ptr (Ptr CChar)
a14' IO (Ptr CFdm1dMesher)
-> (Ptr CFdm1dMesher -> IO Fdm1dMesher) -> IO Fdm1dMesher
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Ptr CFdm1dMesher
res ->
Ptr CFdm1dMesher -> IO Fdm1dMesher
peekFdm1dMesher Ptr CFdm1dMesher
res IO Fdm1dMesher -> (Fdm1dMesher -> IO Fdm1dMesher) -> IO Fdm1dMesher
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Fdm1dMesher
res' ->
Ptr (Ptr CChar) -> IO ()
errorCheck Ptr (Ptr CChar)
a14'IO () -> IO Fdm1dMesher -> IO Fdm1dMesher
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
Fdm1dMesher -> IO Fdm1dMesher
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Fdm1dMesher
res')
{-# LINE 620 "./QuantLib/Method.chs" #-}
fdmCev1dMesher :: (Word)
-> (Double)
-> (Double)
-> (Double)
-> (Double)
-> (Double)
-> (Double)
-> (Maybe Double)
-> (Maybe Double)
-> IO ((Fdm1dMesher))
fdmCev1dMesher a1 a2 a3 a4 a5 a6 a7 a8 a9 =
let {a1' = fromIntegral a1} in
let {a2' = realToFrac a2} in
let {a3' = realToFrac a3} in
let {a4' = realToFrac a4} in
let {a5' = realToFrac a5} in
let {a6' = realToFrac a6} in
let {a7' = realToFrac a7} in
let {a8' = fromMaybeDouble a8} in
let {a9' = fromMaybeDouble a9} in
preErrorCheck $ \a10' ->
fdmCev1dMesher'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' >>= \res ->
peekFdm1dMesher res >>= \res' ->
errorCheck a10'>>
return (res')
{-# LINE 633 "./QuantLib/Method.chs" #-}
exponentialJump1dMesher :: (Word)
-> (Double)
-> (Double)
-> (Double)
-> (Double)
-> IO ((Fdm1dMesher))
exponentialJump1dMesher a1 a2 a3 a4 a5 =
let {a1' = fromIntegral a1} in
let {a2' = realToFrac a2} in
let {a3' = realToFrac a3} in
let {a4' = realToFrac a4} in
let {a5' = realToFrac a5} in
preErrorCheck $ \a6' ->
exponentialJump1dMesher'_ a1' a2' a3' a4' a5' a6' >>= \res ->
peekFdm1dMesher res >>= \res' ->
errorCheck a6'>>
return (res')
{-# LINE 642 "./QuantLib/Method.chs" #-}
fdmSimpleProcess1dMesher :: (Word)
-> (StochasticProcess1D) -> (Double)
-> (Word)
-> (Double)
-> (Maybe Double)
-> IO ((Fdm1dMesher))
fdmSimpleProcess1dMesher a1 a2 a3 a4 a5 a6 =
let {a1' = fromIntegral a1} in
withStochasticProcess1D a2 $ \a2' ->
let {a3' = realToFrac a3} in
let {a4' = fromIntegral a4} in
let {a5' = realToFrac a5} in
let {a6' = fromMaybeDouble a6} in
preErrorCheck $ \a7' ->
fdmSimpleProcess1dMesher'_ a1' a2' a3' a4' a5' a6' a7' >>= \res ->
peekFdm1dMesher res >>= \res' ->
errorCheck a7'>>
return (res')
{-# LINE 652 "./QuantLib/Method.chs" #-}
fdmHestonVarianceMesher :: (Word)
-> (GenHestonProcess hp) -> (Double)
-> (Word)
-> (Double)
-> (Double)
-> IO ((Fdm1dMesher))
fdmHestonVarianceMesher a1 a2 a3 a4 a5 a6 =
let {a1' = fromIntegral a1} in
withHestonProcess a2 $ \a2' ->
let {a3' = realToFrac a3} in
let {a4' = fromIntegral a4} in
let {a5' = realToFrac a5} in
let {a6' = realToFrac a6} in
preErrorCheck $ \a7' ->
fdmHestonVarianceMesher'_ a1' a2' a3' a4' a5' a6' a7' >>= \res ->
peekFdm1dMesher res >>= \res' ->
errorCheck a7'>>
return (res')
{-# LINE 662 "./QuantLib/Method.chs" #-}
fdmHestonLocalVolatilityVarianceMesher :: (Word)
-> (GenHestonProcess hp) -> (GenLocalVolTermStructure lv)
-> (Double)
-> (Word)
-> (Double)
-> (Double)
-> IO ((Fdm1dMesher))
fdmHestonLocalVolatilityVarianceMesher a1 a2 a3 a4 a5 a6 a7 =
let {a1' = fromIntegral a1} in
withHestonProcess a2 $ \a2' ->
withGenLocalVolTermStructure a3 $ \a3' ->
let {a4' = realToFrac a4} in
let {a5' = fromIntegral a5} in
let {a6' = realToFrac a6} in
let {a7' = realToFrac a7} in
preErrorCheck $ \a8' ->
fdmHestonLocalVolatilityVarianceMesher'_ a1' a2' a3' a4' a5' a6' a7' a8' >>= \res ->
peekFdm1dMesher res >>= \res' ->
errorCheck a8'>>
return (res')
{-# LINE 673 "./QuantLib/Method.chs" #-}
fdmMesherComposite :: ([Fdm1dMesher]) -> IO ((FdmMesher))
fdmMesherComposite a1 =
withFdm1dMesherArray a1 $ \(a1'1, a1'2) ->
preErrorCheck $ \a2' ->
fdmMesherComposite'_ a1'1 a1'2 a2' >>= \res ->
peekFdmMesher res >>= \res' ->
errorCheck a2'>>
return (res')
{-# LINE 679 "./QuantLib/Method.chs" #-}
fdmMesherLocations :: (FdmMesher) -> (Int)
-> IO ((RealVector))
fdmMesherLocations a1 a2 =
withFdmMesher a1 $ \a1' ->
let {a2' = fromIntegral a2} in
preArray $ \(a3'1, a3'2) ->
preErrorCheck $ \a4' ->
fdmMesherLocations'_ a1' a2' a3'1 a3'2 a4' >>
peekRealVector a3'1 a3'2>>= \a3'' ->
errorCheck a4'>>
return (a3'')
{-# LINE 687 "./QuantLib/Method.chs" #-}
foreign import ccall "ql.h qlFdmInnerValueCalculatorFromFunctions"
c_qlFdmInnerValueCalculatorFromFunctions :: Ptr CFdmMesher -> FunPtr FdmInnerValueFun -> FunPtr FdmInnerValueFun
-> Ptr CString -> IO (Ptr CFdmInnerValueCalculator)
withCustomFdmInnerValueCalculator :: FdmMesher
-> (Double -> [Double] -> Double)
-> (Double -> [Double] -> Double)
-> (FdmInnerValueCalculator -> IO b) -> IO b
withCustomFdmInnerValueCalculator :: forall b.
FdmMesher
-> (Double -> [Double] -> Double)
-> (Double -> [Double] -> Double)
-> (FdmInnerValueCalculator -> IO b)
-> IO b
withCustomFdmInnerValueCalculator FdmMesher
mesher Double -> [Double] -> Double
iv Double -> [Double] -> Double
aiv FdmInnerValueCalculator -> IO b
k =
FdmMesher -> (Ptr CFdmMesher -> IO b) -> IO b
forall b. FdmMesher -> (Ptr CFdmMesher -> IO b) -> IO b
withFdmMesher FdmMesher
mesher ((Ptr CFdmMesher -> IO b) -> IO b)
-> (Ptr CFdmMesher -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr CFdmMesher
mesher' ->
(Double -> [Double] -> Double)
-> (FunPtr FdmInnerValueFun -> IO b) -> IO b
forall b.
(Double -> [Double] -> Double)
-> (FunPtr FdmInnerValueFun -> IO b) -> IO b
withFdmInnerValue Double -> [Double] -> Double
iv ((FunPtr FdmInnerValueFun -> IO b) -> IO b)
-> (FunPtr FdmInnerValueFun -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \FunPtr FdmInnerValueFun
ivFp ->
(Double -> [Double] -> Double)
-> (FunPtr FdmInnerValueFun -> IO b) -> IO b
forall b.
(Double -> [Double] -> Double)
-> (FunPtr FdmInnerValueFun -> IO b) -> IO b
withFdmInnerValue Double -> [Double] -> Double
aiv ((FunPtr FdmInnerValueFun -> IO b) -> IO b)
-> (FunPtr FdmInnerValueFun -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \FunPtr FdmInnerValueFun
aivFp ->
(Ptr (Ptr CChar) -> IO b) -> IO b
forall a b. (Ptr (Ptr a) -> IO b) -> IO b
preErrorCheck ((Ptr (Ptr CChar) -> IO b) -> IO b)
-> (Ptr (Ptr CChar) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (Ptr CChar)
errPtr -> do
res <- Ptr CFdmMesher
-> FunPtr FdmInnerValueFun
-> FunPtr FdmInnerValueFun
-> Ptr (Ptr CChar)
-> IO (Ptr CFdmInnerValueCalculator)
c_qlFdmInnerValueCalculatorFromFunctions Ptr CFdmMesher
mesher' FunPtr FdmInnerValueFun
ivFp FunPtr FdmInnerValueFun
aivFp Ptr (Ptr CChar)
errPtr
errorCheck errPtr
peekFdmInnerValueCalculator res >>= k
fdmZeroInnerValue :: IO ((FdmInnerValueCalculator))
fdmZeroInnerValue :: IO FdmInnerValueCalculator
fdmZeroInnerValue =
(Ptr (Ptr CChar) -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (Ptr (Ptr a) -> IO b) -> IO b
preErrorCheck ((Ptr (Ptr CChar) -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (Ptr (Ptr CChar) -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \Ptr (Ptr CChar)
a1' ->
Ptr (Ptr CChar) -> IO (Ptr CFdmInnerValueCalculator)
fdmZeroInnerValue'_ Ptr (Ptr CChar)
a1' IO (Ptr CFdmInnerValueCalculator)
-> (Ptr CFdmInnerValueCalculator -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Ptr CFdmInnerValueCalculator
res ->
Ptr CFdmInnerValueCalculator -> IO FdmInnerValueCalculator
peekFdmInnerValueCalculator Ptr CFdmInnerValueCalculator
res IO FdmInnerValueCalculator
-> (FdmInnerValueCalculator -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \FdmInnerValueCalculator
res' ->
Ptr (Ptr CChar) -> IO ()
errorCheck Ptr (Ptr CChar)
a1'IO () -> IO FdmInnerValueCalculator -> IO FdmInnerValueCalculator
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
FdmInnerValueCalculator -> IO FdmInnerValueCalculator
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (FdmInnerValueCalculator
res')
{-# LINE 723 "./QuantLib/Method.chs" #-}
fdmCellAveragingInnerValue :: (Payoff) -> (FdmMesher) -> (Int)
-> IO ((FdmInnerValueCalculator))
fdmCellAveragingInnerValue :: Payoff -> FdmMesher -> Int -> IO FdmInnerValueCalculator
fdmCellAveragingInnerValue Payoff
a1 FdmMesher
a2 Int
a3 =
Payoff
-> (QlPayoff -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a. Payoff -> (QlPayoff -> IO a) -> IO a
withPayoff Payoff
a1 ((QlPayoff -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (QlPayoff -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \QlPayoff
a1' ->
FdmMesher
-> (Ptr CFdmMesher -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall b. FdmMesher -> (Ptr CFdmMesher -> IO b) -> IO b
withFdmMesher FdmMesher
a2 ((Ptr CFdmMesher -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (Ptr CFdmMesher -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \Ptr CFdmMesher
a2' ->
let {a3' :: CUInt
a3' = Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a3} in
(Ptr (Ptr CChar) -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (Ptr (Ptr a) -> IO b) -> IO b
preErrorCheck ((Ptr (Ptr CChar) -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (Ptr (Ptr CChar) -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \Ptr (Ptr CChar)
a4' ->
QlPayoff
-> Ptr CFdmMesher
-> CUInt
-> Ptr (Ptr CChar)
-> IO (Ptr CFdmInnerValueCalculator)
fdmCellAveragingInnerValue'_ QlPayoff
a1' Ptr CFdmMesher
a2' CUInt
a3' Ptr (Ptr CChar)
a4' IO (Ptr CFdmInnerValueCalculator)
-> (Ptr CFdmInnerValueCalculator -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Ptr CFdmInnerValueCalculator
res ->
Ptr CFdmInnerValueCalculator -> IO FdmInnerValueCalculator
peekFdmInnerValueCalculator Ptr CFdmInnerValueCalculator
res IO FdmInnerValueCalculator
-> (FdmInnerValueCalculator -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \FdmInnerValueCalculator
res' ->
Ptr (Ptr CChar) -> IO ()
errorCheck Ptr (Ptr CChar)
a4'IO () -> IO FdmInnerValueCalculator -> IO FdmInnerValueCalculator
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
FdmInnerValueCalculator -> IO FdmInnerValueCalculator
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (FdmInnerValueCalculator
res')
{-# LINE 734 "./QuantLib/Method.chs" #-}
foreign import ccall "ql.h qlFdmCellAveragingInnerValueMapped"
c_qlFdmCellAveragingInnerValueMapped :: QlPayoff -> Ptr CFdmMesher -> CUInt -> FunPtr FdmGridMappingFun
-> Ptr CString -> IO (Ptr CFdmInnerValueCalculator)
withCustomCellAveragingInnerValue :: Payoff -> FdmMesher -> Int -> (Double -> Double)
-> (FdmInnerValueCalculator -> IO b) -> IO b
withCustomCellAveragingInnerValue :: forall b.
Payoff
-> FdmMesher
-> Int
-> (Double -> Double)
-> (FdmInnerValueCalculator -> IO b)
-> IO b
withCustomCellAveragingInnerValue Payoff
payoff FdmMesher
mesher Int
direction Double -> Double
mapping FdmInnerValueCalculator -> IO b
k =
Payoff -> (QlPayoff -> IO b) -> IO b
forall a. Payoff -> (QlPayoff -> IO a) -> IO a
withPayoff Payoff
payoff ((QlPayoff -> IO b) -> IO b) -> (QlPayoff -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \QlPayoff
payoff' ->
FdmMesher -> (Ptr CFdmMesher -> IO b) -> IO b
forall b. FdmMesher -> (Ptr CFdmMesher -> IO b) -> IO b
withFdmMesher FdmMesher
mesher ((Ptr CFdmMesher -> IO b) -> IO b)
-> (Ptr CFdmMesher -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr CFdmMesher
mesher' ->
(Double -> Double) -> (FunPtr FdmGridMappingFun -> IO b) -> IO b
forall b.
(Double -> Double) -> (FunPtr FdmGridMappingFun -> IO b) -> IO b
withFdmGridMapping Double -> Double
mapping ((FunPtr FdmGridMappingFun -> IO b) -> IO b)
-> (FunPtr FdmGridMappingFun -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \FunPtr FdmGridMappingFun
mappingFp ->
(Ptr (Ptr CChar) -> IO b) -> IO b
forall a b. (Ptr (Ptr a) -> IO b) -> IO b
preErrorCheck ((Ptr (Ptr CChar) -> IO b) -> IO b)
-> (Ptr (Ptr CChar) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (Ptr CChar)
errPtr -> do
res <- QlPayoff
-> Ptr CFdmMesher
-> CUInt
-> FunPtr FdmGridMappingFun
-> Ptr (Ptr CChar)
-> IO (Ptr CFdmInnerValueCalculator)
c_qlFdmCellAveragingInnerValueMapped QlPayoff
payoff' Ptr CFdmMesher
mesher' (Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
direction) FunPtr FdmGridMappingFun
mappingFp Ptr (Ptr CChar)
errPtr
errorCheck errPtr
peekFdmInnerValueCalculator res >>= k
fdmLogInnerValue :: (Payoff) -> (FdmMesher) -> (Int)
-> IO ((FdmInnerValueCalculator))
fdmLogInnerValue :: Payoff -> FdmMesher -> Int -> IO FdmInnerValueCalculator
fdmLogInnerValue Payoff
a1 FdmMesher
a2 Int
a3 =
Payoff
-> (QlPayoff -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a. Payoff -> (QlPayoff -> IO a) -> IO a
withPayoff Payoff
a1 ((QlPayoff -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (QlPayoff -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \QlPayoff
a1' ->
FdmMesher
-> (Ptr CFdmMesher -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall b. FdmMesher -> (Ptr CFdmMesher -> IO b) -> IO b
withFdmMesher FdmMesher
a2 ((Ptr CFdmMesher -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (Ptr CFdmMesher -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \Ptr CFdmMesher
a2' ->
let {a3' :: CUInt
a3' = Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a3} in
(Ptr (Ptr CChar) -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (Ptr (Ptr a) -> IO b) -> IO b
preErrorCheck ((Ptr (Ptr CChar) -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (Ptr (Ptr CChar) -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \Ptr (Ptr CChar)
a4' ->
QlPayoff
-> Ptr CFdmMesher
-> CUInt
-> Ptr (Ptr CChar)
-> IO (Ptr CFdmInnerValueCalculator)
fdmLogInnerValue'_ QlPayoff
a1' Ptr CFdmMesher
a2' CUInt
a3' Ptr (Ptr CChar)
a4' IO (Ptr CFdmInnerValueCalculator)
-> (Ptr CFdmInnerValueCalculator -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Ptr CFdmInnerValueCalculator
res ->
Ptr CFdmInnerValueCalculator -> IO FdmInnerValueCalculator
peekFdmInnerValueCalculator Ptr CFdmInnerValueCalculator
res IO FdmInnerValueCalculator
-> (FdmInnerValueCalculator -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \FdmInnerValueCalculator
res' ->
Ptr (Ptr CChar) -> IO ()
errorCheck Ptr (Ptr CChar)
a4'IO () -> IO FdmInnerValueCalculator -> IO FdmInnerValueCalculator
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
FdmInnerValueCalculator -> IO FdmInnerValueCalculator
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (FdmInnerValueCalculator
res')
{-# LINE 766 "./QuantLib/Method.chs" #-}
fdmLogBasketInnerValue :: (BasketPayoff) -> (FdmMesher) -> IO ((FdmInnerValueCalculator))
fdmLogBasketInnerValue a1 a2 =
withBasketPayoff a1 $ \a1' ->
withFdmMesher a2 $ \a2' ->
preErrorCheck $ \a3' ->
fdmLogBasketInnerValue'_ a1' a2' a3' >>= \res ->
peekFdmInnerValueCalculator res >>= \res' ->
errorCheck a3'>>
return (res')
{-# LINE 773 "./QuantLib/Method.chs" #-}
fdmAffineG2ModelSwapInnerValue :: G2 -> G2 -> GenFixedVsFloatingSwap f -> [(Double, Day)] -> FdmMesher -> Int -> IO FdmInnerValueCalculator
fdmAffineG2ModelSwapInnerValue disModel fwdModel swap exerciseDates =
let (times, dates) = unzip exerciseDates
in qlFdmAffineG2ModelSwapInnerValue disModel fwdModel swap (length exerciseDates) times dates
qlFdmAffineG2ModelSwapInnerValue :: (G2) -> (G2) -> (GenFixedVsFloatingSwap f) -> (Int)
-> ([Double])
-> ([Day])
-> (FdmMesher) -> (Int)
-> IO ((FdmInnerValueCalculator))
qlFdmAffineG2ModelSwapInnerValue :: forall f.
G2
-> G2
-> GenFixedVsFloatingSwap f
-> Int
-> [Double]
-> [Day]
-> FdmMesher
-> Int
-> IO FdmInnerValueCalculator
qlFdmAffineG2ModelSwapInnerValue G2
a1 G2
a2 GenFixedVsFloatingSwap f
a3 Int
a4 [Double]
a5 [Day]
a6 FdmMesher
a7 Int
a8 =
G2
-> (Ptr CG2' -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall b. G2 -> (Ptr CG2' -> IO b) -> IO b
withG2 G2
a1 ((Ptr CG2' -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (Ptr CG2' -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \Ptr CG2'
a1' ->
G2
-> (Ptr CG2' -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall b. G2 -> (Ptr CG2' -> IO b) -> IO b
withG2 G2
a2 ((Ptr CG2' -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (Ptr CG2' -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \Ptr CG2'
a2' ->
GenFixedVsFloatingSwap f
-> (Ptr CFixedVsFloatingSwap' -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall f b.
GenFixedVsFloatingSwap f
-> (Ptr CFixedVsFloatingSwap' -> IO b) -> IO b
withFixedVsFloatingSwap GenFixedVsFloatingSwap f
a3 ((Ptr CFixedVsFloatingSwap' -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (Ptr CFixedVsFloatingSwap' -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \Ptr CFixedVsFloatingSwap'
a3' ->
let {a4' :: CUInt
a4' = Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a4} in
[Double]
-> (Ptr CDouble -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall b. [Double] -> (Ptr CDouble -> IO b) -> IO b
withDoubleArrayRaw [Double]
a5 ((Ptr CDouble -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (Ptr CDouble -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \Ptr CDouble
a5' ->
[Day]
-> (Ptr CInt -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a. [Day] -> (Ptr CInt -> IO a) -> IO a
withDayPtr [Day]
a6 ((Ptr CInt -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (Ptr CInt -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \Ptr CInt
a6' ->
FdmMesher
-> (Ptr CFdmMesher -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall b. FdmMesher -> (Ptr CFdmMesher -> IO b) -> IO b
withFdmMesher FdmMesher
a7 ((Ptr CFdmMesher -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (Ptr CFdmMesher -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \Ptr CFdmMesher
a7' ->
let {a8' :: CUInt
a8' = Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a8} in
(Ptr (Ptr CChar) -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (Ptr (Ptr a) -> IO b) -> IO b
preErrorCheck ((Ptr (Ptr CChar) -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (Ptr (Ptr CChar) -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \Ptr (Ptr CChar)
a9' ->
Ptr CG2'
-> Ptr CG2'
-> Ptr CFixedVsFloatingSwap'
-> CUInt
-> Ptr CDouble
-> Ptr CInt
-> Ptr CFdmMesher
-> CUInt
-> Ptr (Ptr CChar)
-> IO (Ptr CFdmInnerValueCalculator)
qlFdmAffineG2ModelSwapInnerValue'_ Ptr CG2'
a1' Ptr CG2'
a2' Ptr CFixedVsFloatingSwap'
a3' CUInt
a4' Ptr CDouble
a5' Ptr CInt
a6' Ptr CFdmMesher
a7' CUInt
a8' Ptr (Ptr CChar)
a9' IO (Ptr CFdmInnerValueCalculator)
-> (Ptr CFdmInnerValueCalculator -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Ptr CFdmInnerValueCalculator
res ->
Ptr CFdmInnerValueCalculator -> IO FdmInnerValueCalculator
peekFdmInnerValueCalculator Ptr CFdmInnerValueCalculator
res IO FdmInnerValueCalculator
-> (FdmInnerValueCalculator -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \FdmInnerValueCalculator
res' ->
Ptr (Ptr CChar) -> IO ()
errorCheck Ptr (Ptr CChar)
a9'IO () -> IO FdmInnerValueCalculator -> IO FdmInnerValueCalculator
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
FdmInnerValueCalculator -> IO FdmInnerValueCalculator
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (FdmInnerValueCalculator
res')
{-# LINE 792 "./QuantLib/Method.chs" #-}
fdmAffineHullWhiteModelSwapInnerValue :: HullWhite -> HullWhite -> GenFixedVsFloatingSwap f -> [(Double, Day)] -> FdmMesher -> Int -> IO FdmInnerValueCalculator
fdmAffineHullWhiteModelSwapInnerValue disModel fwdModel swap exerciseDates =
let (times, dates) = unzip exerciseDates
in qlFdmAffineHullWhiteModelSwapInnerValue disModel fwdModel swap (length exerciseDates) times dates
qlFdmAffineHullWhiteModelSwapInnerValue :: (HullWhite) -> (HullWhite) -> (GenFixedVsFloatingSwap f) -> (Int)
-> ([Double])
-> ([Day])
-> (FdmMesher) -> (Int)
-> IO ((FdmInnerValueCalculator))
qlFdmAffineHullWhiteModelSwapInnerValue :: forall f.
HullWhite
-> HullWhite
-> GenFixedVsFloatingSwap f
-> Int
-> [Double]
-> [Day]
-> FdmMesher
-> Int
-> IO FdmInnerValueCalculator
qlFdmAffineHullWhiteModelSwapInnerValue HullWhite
a1 HullWhite
a2 GenFixedVsFloatingSwap f
a3 Int
a4 [Double]
a5 [Day]
a6 FdmMesher
a7 Int
a8 =
HullWhite
-> (Ptr CHullWhite' -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall b. HullWhite -> (Ptr CHullWhite' -> IO b) -> IO b
withHullWhite HullWhite
a1 ((Ptr CHullWhite' -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (Ptr CHullWhite' -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \Ptr CHullWhite'
a1' ->
HullWhite
-> (Ptr CHullWhite' -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall b. HullWhite -> (Ptr CHullWhite' -> IO b) -> IO b
withHullWhite HullWhite
a2 ((Ptr CHullWhite' -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (Ptr CHullWhite' -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \Ptr CHullWhite'
a2' ->
GenFixedVsFloatingSwap f
-> (Ptr CFixedVsFloatingSwap' -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall f b.
GenFixedVsFloatingSwap f
-> (Ptr CFixedVsFloatingSwap' -> IO b) -> IO b
withFixedVsFloatingSwap GenFixedVsFloatingSwap f
a3 ((Ptr CFixedVsFloatingSwap' -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (Ptr CFixedVsFloatingSwap' -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \Ptr CFixedVsFloatingSwap'
a3' ->
let {a4' :: CUInt
a4' = Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a4} in
[Double]
-> (Ptr CDouble -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall b. [Double] -> (Ptr CDouble -> IO b) -> IO b
withDoubleArrayRaw [Double]
a5 ((Ptr CDouble -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (Ptr CDouble -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \Ptr CDouble
a5' ->
[Day]
-> (Ptr CInt -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a. [Day] -> (Ptr CInt -> IO a) -> IO a
withDayPtr [Day]
a6 ((Ptr CInt -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (Ptr CInt -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \Ptr CInt
a6' ->
FdmMesher
-> (Ptr CFdmMesher -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall b. FdmMesher -> (Ptr CFdmMesher -> IO b) -> IO b
withFdmMesher FdmMesher
a7 ((Ptr CFdmMesher -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (Ptr CFdmMesher -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \Ptr CFdmMesher
a7' ->
let {a8' :: CUInt
a8' = Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a8} in
(Ptr (Ptr CChar) -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (Ptr (Ptr a) -> IO b) -> IO b
preErrorCheck ((Ptr (Ptr CChar) -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator)
-> (Ptr (Ptr CChar) -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. (a -> b) -> a -> b
$ \Ptr (Ptr CChar)
a9' ->
Ptr CHullWhite'
-> Ptr CHullWhite'
-> Ptr CFixedVsFloatingSwap'
-> CUInt
-> Ptr CDouble
-> Ptr CInt
-> Ptr CFdmMesher
-> CUInt
-> Ptr (Ptr CChar)
-> IO (Ptr CFdmInnerValueCalculator)
qlFdmAffineHullWhiteModelSwapInnerValue'_ Ptr CHullWhite'
a1' Ptr CHullWhite'
a2' Ptr CFixedVsFloatingSwap'
a3' CUInt
a4' Ptr CDouble
a5' Ptr CInt
a6' Ptr CFdmMesher
a7' CUInt
a8' Ptr (Ptr CChar)
a9' IO (Ptr CFdmInnerValueCalculator)
-> (Ptr CFdmInnerValueCalculator -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Ptr CFdmInnerValueCalculator
res ->
Ptr CFdmInnerValueCalculator -> IO FdmInnerValueCalculator
peekFdmInnerValueCalculator Ptr CFdmInnerValueCalculator
res IO FdmInnerValueCalculator
-> (FdmInnerValueCalculator -> IO FdmInnerValueCalculator)
-> IO FdmInnerValueCalculator
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \FdmInnerValueCalculator
res' ->
Ptr (Ptr CChar) -> IO ()
errorCheck Ptr (Ptr CChar)
a9'IO () -> IO FdmInnerValueCalculator -> IO FdmInnerValueCalculator
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
FdmInnerValueCalculator -> IO FdmInnerValueCalculator
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (FdmInnerValueCalculator
res')
{-# LINE 808 "./QuantLib/Method.chs" #-}
fdmInnerValue :: (FdmInnerValueCalculator) -> (FdmMesher) -> ([Int])
-> (Double)
-> IO ((Double))
fdmInnerValue a1 a2 a3 a4 =
withFdmInnerValueCalculator a1 $ \a1' ->
withFdmMesher a2 $ \a2' ->
withIntArray a3 $ \(a3'1, a3'2) ->
let {a4' = realToFrac a4} in
preErrorCheck $ \a5' ->
fdmInnerValue'_ a1' a2' a3'1 a3'2 a4' a5' >>= \res ->
let {res' = realToFrac res} in
errorCheck a5'>>
return (res')
{-# LINE 818 "./QuantLib/Method.chs" #-}
fdmAvgInnerValue :: (FdmInnerValueCalculator) -> (FdmMesher) -> ([Int])
-> (Double)
-> IO ((Double))
fdmAvgInnerValue a1 a2 a3 a4 =
withFdmInnerValueCalculator a1 $ \a1' ->
withFdmMesher a2 $ \a2' ->
withIntArray a3 $ \(a3'1, a3'2) ->
let {a4' = realToFrac a4} in
preErrorCheck $ \a5' ->
fdmAvgInnerValue'_ a1' a2' a3'1 a3'2 a4' a5' >>= \res ->
let {res' = realToFrac res} in
errorCheck a5'>>
return (res')
{-# LINE 825 "./QuantLib/Method.chs" #-}
fdmSolve :: (FdmMesher) -> (FdmInnerValueCalculator) -> (Int)
-> ((Double,Double) -> RealVector -> RealVector)
-> (Int -> (Double,Double) -> RealVector -> RealVector)
-> (Int -> Double -> (Double,Double) -> RealVector -> RealVector)
-> (Maybe (Double -> RealVector -> RealVector))
-> (RealVector)
-> (FdmScheme)
-> (Double)
-> (Double)
-> (Int)
-> (Int)
-> IO ((RealVector))
fdmSolve :: FdmMesher
-> FdmInnerValueCalculator
-> Int
-> ((Double, Double) -> RealVector -> RealVector)
-> (Int -> (Double, Double) -> RealVector -> RealVector)
-> (Int -> Double -> (Double, Double) -> RealVector -> RealVector)
-> Maybe (Double -> RealVector -> RealVector)
-> RealVector
-> FdmScheme
-> Double
-> Double
-> Int
-> Int
-> IO RealVector
fdmSolve FdmMesher
a1 FdmInnerValueCalculator
a2 Int
a3 (Double, Double) -> RealVector -> RealVector
a4 Int -> (Double, Double) -> RealVector -> RealVector
a5 Int -> Double -> (Double, Double) -> RealVector -> RealVector
a6 Maybe (Double -> RealVector -> RealVector)
a7 RealVector
a8 FdmScheme
a9 Double
a10 Double
a11 Int
a12 Int
a13 =
FdmMesher -> (Ptr CFdmMesher -> IO RealVector) -> IO RealVector
forall b. FdmMesher -> (Ptr CFdmMesher -> IO b) -> IO b
withFdmMesher FdmMesher
a1 ((Ptr CFdmMesher -> IO RealVector) -> IO RealVector)
-> (Ptr CFdmMesher -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \Ptr CFdmMesher
a1' ->
FdmInnerValueCalculator
-> (Ptr CFdmInnerValueCalculator -> IO RealVector) -> IO RealVector
forall b.
FdmInnerValueCalculator
-> (Ptr CFdmInnerValueCalculator -> IO b) -> IO b
withFdmInnerValueCalculator FdmInnerValueCalculator
a2 ((Ptr CFdmInnerValueCalculator -> IO RealVector) -> IO RealVector)
-> (Ptr CFdmInnerValueCalculator -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \Ptr CFdmInnerValueCalculator
a2' ->
let {a3' :: CUInt
a3' = Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a3} in
((Double, Double) -> RealVector -> RealVector)
-> (FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector
forall b.
((Double, Double) -> RealVector -> RealVector)
-> (FunPtr FdmCallbackFun -> IO b) -> IO b
withFdmApply (Double, Double) -> RealVector -> RealVector
a4 ((FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector)
-> (FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \FunPtr FdmCallbackFun
a4' ->
(Int -> (Double, Double) -> RealVector -> RealVector)
-> (FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector
forall b.
(Int -> (Double, Double) -> RealVector -> RealVector)
-> (FunPtr FdmCallbackFun -> IO b) -> IO b
withFdmApplyDirection Int -> (Double, Double) -> RealVector -> RealVector
a5 ((FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector)
-> (FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \FunPtr FdmCallbackFun
a5' ->
(Int -> Double -> (Double, Double) -> RealVector -> RealVector)
-> (FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector
forall b.
(Int -> Double -> (Double, Double) -> RealVector -> RealVector)
-> (FunPtr FdmCallbackFun -> IO b) -> IO b
withFdmSolveSplitting Int -> Double -> (Double, Double) -> RealVector -> RealVector
a6 ((FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector)
-> (FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \FunPtr FdmCallbackFun
a6' ->
Maybe (Double -> RealVector -> RealVector)
-> (FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector
forall b.
Maybe (Double -> RealVector -> RealVector)
-> (FunPtr FdmCallbackFun -> IO b) -> IO b
withMaybeFdmStepCondition Maybe (Double -> RealVector -> RealVector)
a7 ((FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector)
-> (FunPtr FdmCallbackFun -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \FunPtr FdmCallbackFun
a7' ->
RealVector
-> ((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector
forall b. RealVector -> ((CUInt, Ptr CDouble) -> IO b) -> IO b
withRealVector RealVector
a8 (((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector)
-> ((CUInt, Ptr CDouble) -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \(CUInt
a8'1, Ptr CDouble
a8'2) ->
FdmScheme -> (Ptr CFdmSchemeDesc -> IO RealVector) -> IO RealVector
forall a. FdmScheme -> (Ptr CFdmSchemeDesc -> IO a) -> IO a
withFdmSchemeDesc FdmScheme
a9 ((Ptr CFdmSchemeDesc -> IO RealVector) -> IO RealVector)
-> (Ptr CFdmSchemeDesc -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \Ptr CFdmSchemeDesc
a9' ->
let {a10' :: CDouble
a10' = Double -> CDouble
forall a b. (Real a, Fractional b) => a -> b
realToFrac Double
a10} in
let {a11' :: CDouble
a11' = Double -> CDouble
forall a b. (Real a, Fractional b) => a -> b
realToFrac Double
a11} in
let {a12' :: CUInt
a12' = Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a12} in
let {a13' :: CUInt
a13' = Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a13} in
((Ptr CUInt, Ptr (Ptr CDouble)) -> IO RealVector) -> IO RealVector
forall a b. ((Ptr CUInt, Ptr (Ptr a)) -> IO b) -> IO b
preArray (((Ptr CUInt, Ptr (Ptr CDouble)) -> IO RealVector)
-> IO RealVector)
-> ((Ptr CUInt, Ptr (Ptr CDouble)) -> IO RealVector)
-> IO RealVector
forall a b. (a -> b) -> a -> b
$ \(Ptr CUInt
a14'1, Ptr (Ptr CDouble)
a14'2) ->
(Ptr (Ptr CChar) -> IO RealVector) -> IO RealVector
forall a b. (Ptr (Ptr a) -> IO b) -> IO b
preErrorCheck ((Ptr (Ptr CChar) -> IO RealVector) -> IO RealVector)
-> (Ptr (Ptr CChar) -> IO RealVector) -> IO RealVector
forall a b. (a -> b) -> a -> b
$ \Ptr (Ptr CChar)
a15' ->
Ptr CFdmMesher
-> Ptr CFdmInnerValueCalculator
-> CUInt
-> FunPtr FdmCallbackFun
-> FunPtr FdmCallbackFun
-> FunPtr FdmCallbackFun
-> FunPtr FdmCallbackFun
-> CUInt
-> Ptr CDouble
-> Ptr CFdmSchemeDesc
-> CDouble
-> CDouble
-> CUInt
-> CUInt
-> Ptr CUInt
-> Ptr (Ptr CDouble)
-> Ptr (Ptr CChar)
-> IO ()
fdmSolve'_ Ptr CFdmMesher
a1' Ptr CFdmInnerValueCalculator
a2' CUInt
a3' FunPtr FdmCallbackFun
a4' FunPtr FdmCallbackFun
a5' FunPtr FdmCallbackFun
a6' FunPtr FdmCallbackFun
a7' CUInt
a8'1 Ptr CDouble
a8'2 Ptr CFdmSchemeDesc
a9' CDouble
a10' CDouble
a11' CUInt
a12' CUInt
a13' Ptr CUInt
a14'1 Ptr (Ptr CDouble)
a14'2 Ptr (Ptr CChar)
a15' IO () -> IO RealVector -> IO RealVector
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
Ptr CUInt -> Ptr (Ptr CDouble) -> IO RealVector
peekRealVector Ptr CUInt
a14'1 Ptr (Ptr CDouble)
a14'2IO RealVector -> (RealVector -> IO RealVector) -> IO RealVector
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \RealVector
a14'' ->
Ptr (Ptr CChar) -> IO ()
errorCheck Ptr (Ptr CChar)
a15'IO () -> IO RealVector -> IO RealVector
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
RealVector -> IO RealVector
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (RealVector
a14'')
{-# LINE 851 "./QuantLib/Method.chs" #-}
foreign import ccall safe "QuantLib/Method.chs.h qlPathGenerator"
pathGenerator'_ :: (C2HSImp.CInt -> ((C2HSImp.Ptr (CStochasticProcess')) -> ((C2HSImp.Ptr (CTimeGrid)) -> (C2HSImp.CUInt -> (C2HSImp.CUInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CPathGenerator))))))))))
foreign import ccall safe "QuantLib/Method.chs.h qlSobolPathGenerator"
sobolPathGenerator'_ :: (C2HSImp.CInt -> ((C2HSImp.Ptr (CStochasticProcess')) -> ((C2HSImp.Ptr (CTimeGrid)) -> (C2HSImp.CUInt -> (C2HSImp.CUInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CPathGenerator))))))))))
foreign import ccall safe "QuantLib/Method.chs.h qlGaussianRsg"
gaussianRsg'_ :: (C2HSImp.CInt -> (C2HSImp.CUInt -> (C2HSImp.CUInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CGaussianRsg)))))))
foreign import ccall safe "QuantLib/Method.chs.h qlSobolGaussianRsg"
sobolGaussianRsg'_ :: (C2HSImp.CInt -> (C2HSImp.CUInt -> (C2HSImp.CUInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CGaussianRsg)))))))
foreign import ccall safe "QuantLib/Method.chs.h qlGaussianRsgDimension"
rsgDimension'_ :: ((C2HSImp.Ptr (CGaussianRsg)) -> (IO C2HSImp.CUInt))
foreign import ccall safe "QuantLib/Method.chs.h qlGaussianRsgNextSequence"
nextSequence'_ :: ((C2HSImp.Ptr (CGaussianRsg)) -> ((C2HSImp.Ptr C2HSImp.CUInt) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CDouble)) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO ()))))))
foreign import ccall safe "QuantLib/Method.chs.h qlGaussianRsgLastSequence"
lastSequence'_ :: ((C2HSImp.Ptr (CGaussianRsg)) -> ((C2HSImp.Ptr C2HSImp.CUInt) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CDouble)) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO ()))))))
foreign import ccall safe "QuantLib/Method.chs.h qlPathGeneratorNext"
next'_ :: ((C2HSImp.Ptr (CPathGenerator)) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CSamplePath)))))
foreign import ccall safe "QuantLib/Method.chs.h qlPathGeneratorAntithetic"
antithetic'_ :: ((C2HSImp.Ptr (CPathGenerator)) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CSamplePath)))))
foreign import ccall safe "QuantLib/Method.chs.h qlSamplePathWeight"
weight'_ :: ((C2HSImp.Ptr (CSamplePath)) -> (IO C2HSImp.CDouble))
foreign import ccall safe "QuantLib/Method.chs.h qlSamplePathAssetNumber"
assetNumber'_ :: ((C2HSImp.Ptr (CSamplePath)) -> (IO C2HSImp.CUInt))
foreign import ccall safe "QuantLib/Method.chs.h qlSamplePathSize"
pathSize'_ :: ((C2HSImp.Ptr (CSamplePath)) -> (IO C2HSImp.CUInt))
foreign import ccall safe "QuantLib/Method.chs.h qlSamplePathAt"
assetAt'_ :: ((C2HSImp.Ptr (CSamplePath)) -> (C2HSImp.CUInt -> (C2HSImp.CUInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO C2HSImp.CDouble)))))
foreign import ccall safe "QuantLib/Method.chs.h qlSamplePathAssetPath"
asset'_ :: ((C2HSImp.Ptr (CSamplePath)) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CUInt) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CDouble)) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO ()))))))
foreign import ccall safe "QuantLib/Method.chs.h qlLsmRegress"
lsmRegress'_ :: (C2HSImp.CInt -> (C2HSImp.CUInt -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CUInt) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CDouble)) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO ()))))))))))))
foreign import ccall safe "QuantLib/Method.chs.h qlLsmRegressMulti"
qlLsmRegressMulti'_ :: (C2HSImp.CInt -> (C2HSImp.CUInt -> (C2HSImp.CUInt -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> (C2HSImp.CUInt -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CUInt) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CDouble)) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO ()))))))))))))))
foreign import ccall safe "QuantLib/Method.chs.h qlFdmRollback"
fdmRollback'_ :: (C2HSImp.CUInt -> ((C2HSImp.FunPtr ((C2HSImp.Ptr ()) -> (IO ()))) -> ((C2HSImp.FunPtr ((C2HSImp.Ptr ()) -> (IO ()))) -> ((C2HSImp.FunPtr ((C2HSImp.Ptr ()) -> (IO ()))) -> ((C2HSImp.FunPtr ((C2HSImp.Ptr ()) -> (IO ()))) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr (CFdmSchemeDesc)) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CUInt -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CUInt) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CDouble)) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO ()))))))))))))))))))
foreign import ccall safe "QuantLib/Method.chs.h qlPredefined1dMesher"
predefined1dMesher'_ :: (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CFdm1dMesher))))))
foreign import ccall safe "QuantLib/Method.chs.h qlUniform1dMesher"
uniform1dMesher'_ :: (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CUInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CFdm1dMesher)))))))
foreign import ccall safe "QuantLib/Method.chs.h qlConcentrating1dMesher"
concentrating1dMesher'_ :: (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CUInt -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CFdm1dMesher))))))))))
foreign import ccall safe "QuantLib/Method.chs.h qlConcentrating1dMesherMulti"
qlConcentrating1dMesherMulti'_ :: (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CUInt -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CDouble -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CFdm1dMesher))))))))))))
foreign import ccall safe "QuantLib/Method.chs.h qlGluedMesher"
gluedMesher'_ :: ((C2HSImp.Ptr (CFdm1dMesher)) -> ((C2HSImp.Ptr (CFdm1dMesher)) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CFdm1dMesher))))))
foreign import ccall safe "QuantLib/Method.chs.h qlFdmBlackScholesMesher"
fdmBlackScholesMesher'_ :: (C2HSImp.CUInt -> ((C2HSImp.Ptr (CGeneralizedBlackScholesProcess')) -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CUInt -> ((C2HSImp.Ptr (C2HSImp.Ptr (CDividend))) -> ((C2HSImp.Ptr (CFdmQuantoHelper)) -> (C2HSImp.CDouble -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CFdm1dMesher))))))))))))))))))
foreign import ccall safe "QuantLib/Method.chs.h qlFdmCev1dMesher"
fdmCev1dMesher'_ :: (C2HSImp.CUInt -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CFdm1dMesher)))))))))))))
foreign import ccall safe "QuantLib/Method.chs.h qlExponentialJump1dMesher"
exponentialJump1dMesher'_ :: (C2HSImp.CUInt -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CFdm1dMesher)))))))))
foreign import ccall safe "QuantLib/Method.chs.h qlFdmSimpleProcess1dMesher"
fdmSimpleProcess1dMesher'_ :: (C2HSImp.CUInt -> ((C2HSImp.Ptr (CStochasticProcess1D')) -> (C2HSImp.CDouble -> (C2HSImp.CUInt -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CFdm1dMesher))))))))))
foreign import ccall safe "QuantLib/Method.chs.h qlFdmHestonVarianceMesher"
fdmHestonVarianceMesher'_ :: (C2HSImp.CUInt -> ((C2HSImp.Ptr (CHestonProcess')) -> (C2HSImp.CDouble -> (C2HSImp.CUInt -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CFdm1dMesher))))))))))
foreign import ccall safe "QuantLib/Method.chs.h qlFdmHestonLocalVolatilityVarianceMesher"
fdmHestonLocalVolatilityVarianceMesher'_ :: (C2HSImp.CUInt -> ((C2HSImp.Ptr (CHestonProcess')) -> ((C2HSImp.Ptr (CLocalVolTermStructure')) -> (C2HSImp.CDouble -> (C2HSImp.CUInt -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CFdm1dMesher)))))))))))
foreign import ccall safe "QuantLib/Method.chs.h qlFdmMesherComposite"
fdmMesherComposite'_ :: (C2HSImp.CUInt -> ((C2HSImp.Ptr (C2HSImp.Ptr (CFdm1dMesher))) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CFdmMesher))))))
foreign import ccall safe "QuantLib/Method.chs.h qlFdmMesherLocations"
fdmMesherLocations'_ :: ((C2HSImp.Ptr (CFdmMesher)) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CUInt) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CDouble)) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO ()))))))
foreign import ccall safe "QuantLib/Method.chs.h qlFdmZeroInnerValue"
fdmZeroInnerValue'_ :: ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CFdmInnerValueCalculator))))
foreign import ccall safe "QuantLib/Method.chs.h qlFdmCellAveragingInnerValue"
fdmCellAveragingInnerValue'_ :: ((QlPayoff) -> ((C2HSImp.Ptr (CFdmMesher)) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CFdmInnerValueCalculator)))))))
foreign import ccall safe "QuantLib/Method.chs.h qlFdmLogInnerValue"
fdmLogInnerValue'_ :: ((QlPayoff) -> ((C2HSImp.Ptr (CFdmMesher)) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CFdmInnerValueCalculator)))))))
foreign import ccall safe "QuantLib/Method.chs.h qlFdmLogBasketInnerValue"
fdmLogBasketInnerValue'_ :: ((QlBasketPayoff) -> ((C2HSImp.Ptr (CFdmMesher)) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CFdmInnerValueCalculator))))))
foreign import ccall safe "QuantLib/Method.chs.h qlFdmAffineG2ModelSwapInnerValue"
qlFdmAffineG2ModelSwapInnerValue'_ :: ((C2HSImp.Ptr (CG2')) -> ((C2HSImp.Ptr (CG2')) -> ((C2HSImp.Ptr (CFixedVsFloatingSwap')) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr (CFdmMesher)) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CFdmInnerValueCalculator))))))))))))
foreign import ccall safe "QuantLib/Method.chs.h qlFdmAffineHullWhiteModelSwapInnerValue"
qlFdmAffineHullWhiteModelSwapInnerValue'_ :: ((C2HSImp.Ptr (CHullWhite')) -> ((C2HSImp.Ptr (CHullWhite')) -> ((C2HSImp.Ptr (CFixedVsFloatingSwap')) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr (CFdmMesher)) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO (C2HSImp.Ptr (CFdmInnerValueCalculator))))))))))))
foreign import ccall safe "QuantLib/Method.chs.h qlFdmInnerValueCalculatorEval"
fdmInnerValue'_ :: ((C2HSImp.Ptr (CFdmInnerValueCalculator)) -> ((C2HSImp.Ptr (CFdmMesher)) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CUInt) -> (C2HSImp.CDouble -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO C2HSImp.CDouble)))))))
foreign import ccall safe "QuantLib/Method.chs.h qlFdmInnerValueCalculatorAvgEval"
fdmAvgInnerValue'_ :: ((C2HSImp.Ptr (CFdmInnerValueCalculator)) -> ((C2HSImp.Ptr (CFdmMesher)) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CUInt) -> (C2HSImp.CDouble -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO C2HSImp.CDouble)))))))
foreign import ccall safe "QuantLib/Method.chs.h qlFdmSolve"
fdmSolve'_ :: ((C2HSImp.Ptr (CFdmMesher)) -> ((C2HSImp.Ptr (CFdmInnerValueCalculator)) -> (C2HSImp.CUInt -> ((C2HSImp.FunPtr ((C2HSImp.Ptr ()) -> (IO ()))) -> ((C2HSImp.FunPtr ((C2HSImp.Ptr ()) -> (IO ()))) -> ((C2HSImp.FunPtr ((C2HSImp.Ptr ()) -> (IO ()))) -> ((C2HSImp.FunPtr ((C2HSImp.Ptr ()) -> (IO ()))) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr (CFdmSchemeDesc)) -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (C2HSImp.CUInt -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CUInt) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CDouble)) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CChar)) -> (IO ()))))))))))))))))))