module Bindings.LevMar
( _LM_VERSION
, _LM_OPTS_SZ
, _LM_INFO_SZ
, _LM_ERROR_LAPACK_ERROR
, _LM_ERROR_NO_JACOBIAN
, _LM_ERROR_NO_BOX_CONSTRAINTS
, _LM_ERROR_FAILED_BOX_CHECK
, _LM_ERROR_MEMORY_ALLOCATION_FAILURE
, _LM_ERROR_CONSTRAINT_MATRIX_ROWS_GT_COLS
, _LM_ERROR_CONSTRAINT_MATRIX_NOT_FULL_ROW_RANK
, _LM_ERROR_TOO_FEW_MEASUREMENTS
, _LM_ERROR_SINGULAR_MATRIX
, _LM_ERROR_SUM_OF_SQUARES_NOT_FINITE
, _LM_INIT_MU
, _LM_STOP_THRESH
, _LM_DIFF_DELTA
, Model
, Jacobian
, withModel
, withJacobian
, LevMarDer
, LevMarDif
, LevMarBCDer
, LevMarBCDif
, LevMarLecDer
, LevMarLecDif
, LevMarBLecDer
, LevMarBLecDif
, dlevmar_der
, slevmar_der
, dlevmar_dif
, slevmar_dif
, dlevmar_bc_der
, slevmar_bc_der
, dlevmar_bc_dif
, slevmar_bc_dif
, dlevmar_lec_der
, slevmar_lec_der
, dlevmar_lec_dif
, slevmar_lec_dif
, dlevmar_blec_der
, slevmar_blec_der
, dlevmar_blec_dif
, slevmar_blec_dif
) where
import Foreign.C.Types (CInt, CFloat, CDouble)
import Foreign.Ptr (Ptr, FunPtr, freeHaskellFunPtr)
import Control.Exception (bracket)
_LM_VERSION :: String
_LM_VERSION = "2.4 (April 2009)"
_LM_OPTS_SZ :: Int
_LM_OPTS_SZ = 5
_LM_INFO_SZ :: Int
_LM_INFO_SZ = 10
_LM_ERROR_LAPACK_ERROR :: CInt
_LM_ERROR_LAPACK_ERROR = (1)
_LM_ERROR_NO_JACOBIAN :: CInt
_LM_ERROR_NO_JACOBIAN = (2)
_LM_ERROR_NO_BOX_CONSTRAINTS :: CInt
_LM_ERROR_NO_BOX_CONSTRAINTS = (3)
_LM_ERROR_FAILED_BOX_CHECK :: CInt
_LM_ERROR_FAILED_BOX_CHECK = (4)
_LM_ERROR_MEMORY_ALLOCATION_FAILURE :: CInt
_LM_ERROR_MEMORY_ALLOCATION_FAILURE = (5)
_LM_ERROR_CONSTRAINT_MATRIX_ROWS_GT_COLS :: CInt
_LM_ERROR_CONSTRAINT_MATRIX_ROWS_GT_COLS = (6)
_LM_ERROR_CONSTRAINT_MATRIX_NOT_FULL_ROW_RANK :: CInt
_LM_ERROR_CONSTRAINT_MATRIX_NOT_FULL_ROW_RANK = (7)
_LM_ERROR_TOO_FEW_MEASUREMENTS :: CInt
_LM_ERROR_TOO_FEW_MEASUREMENTS = (8)
_LM_ERROR_SINGULAR_MATRIX :: CInt
_LM_ERROR_SINGULAR_MATRIX = (9)
_LM_ERROR_SUM_OF_SQUARES_NOT_FINITE :: CInt
_LM_ERROR_SUM_OF_SQUARES_NOT_FINITE = (10)
_LM_INIT_MU, _LM_STOP_THRESH, _LM_DIFF_DELTA :: Fractional a => a
_LM_INIT_MU = 1.000000e-03
_LM_STOP_THRESH = 1.000000e-17
_LM_DIFF_DELTA = 1.000000e-06
type Model r = Ptr r
-> Ptr r
-> CInt
-> CInt
-> Ptr ()
-> IO ()
type Jacobian a = Model a
foreign import ccall "wrapper" mkModel :: Model a -> IO (FunPtr (Model a))
mkJacobian :: Jacobian a -> IO (FunPtr (Jacobian a))
mkJacobian = mkModel
withModel :: Model a -> (FunPtr (Model a) -> IO b) -> IO b
withModel m = bracket (mkModel m) freeHaskellFunPtr
withJacobian :: Jacobian a -> (FunPtr (Jacobian a) -> IO b) -> IO b
withJacobian j = bracket (mkJacobian j) freeHaskellFunPtr
type LevMarDer cr = FunPtr (Model cr)
-> FunPtr (Jacobian cr)
-> Ptr cr
-> Ptr cr
-> CInt
-> CInt
-> CInt
-> Ptr cr
-> Ptr cr
-> Ptr cr
-> Ptr cr
-> Ptr ()
-> IO CInt
type LevMarDif cr = FunPtr (Model cr)
-> Ptr cr
-> Ptr cr
-> CInt
-> CInt
-> CInt
-> Ptr cr
-> Ptr cr
-> Ptr cr
-> Ptr cr
-> Ptr ()
-> IO CInt
type LevMarBCDer cr = FunPtr (Model cr)
-> FunPtr (Jacobian cr)
-> Ptr cr
-> Ptr cr
-> CInt
-> CInt
-> Ptr cr
-> Ptr cr
-> CInt
-> Ptr cr
-> Ptr cr
-> Ptr cr
-> Ptr cr
-> Ptr ()
-> IO CInt
type LevMarBCDif cr = FunPtr (Model cr)
-> Ptr cr
-> Ptr cr
-> CInt
-> CInt
-> Ptr cr
-> Ptr cr
-> CInt
-> Ptr cr
-> Ptr cr
-> Ptr cr
-> Ptr cr
-> Ptr ()
-> IO CInt
type LevMarLecDer cr = FunPtr (Model cr)
-> FunPtr (Jacobian cr)
-> Ptr cr
-> Ptr cr
-> CInt
-> CInt
-> Ptr cr
-> Ptr cr
-> CInt
-> CInt
-> Ptr cr
-> Ptr cr
-> Ptr cr
-> Ptr cr
-> Ptr ()
-> IO CInt
type LevMarLecDif cr = FunPtr (Model cr)
-> Ptr cr
-> Ptr cr
-> CInt
-> CInt
-> Ptr cr
-> Ptr cr
-> CInt
-> CInt
-> Ptr cr
-> Ptr cr
-> Ptr cr
-> Ptr cr
-> Ptr ()
-> IO CInt
type LevMarBLecDer cr = FunPtr (Model cr)
-> FunPtr (Jacobian cr)
-> Ptr cr
-> Ptr cr
-> CInt
-> CInt
-> Ptr cr
-> Ptr cr
-> Ptr cr
-> Ptr cr
-> CInt
-> Ptr cr
-> CInt
-> Ptr cr
-> Ptr cr
-> Ptr cr
-> Ptr cr
-> Ptr ()
-> IO CInt
type LevMarBLecDif cr = FunPtr (Model cr)
-> Ptr cr
-> Ptr cr
-> CInt
-> CInt
-> Ptr cr
-> Ptr cr
-> Ptr cr
-> Ptr cr
-> CInt
-> Ptr cr
-> CInt
-> Ptr cr
-> Ptr cr
-> Ptr cr
-> Ptr cr
-> Ptr ()
-> IO CInt
foreign import ccall "slevmar_der" slevmar_der :: LevMarDer CFloat
foreign import ccall "dlevmar_der" dlevmar_der :: LevMarDer CDouble
foreign import ccall "slevmar_dif" slevmar_dif :: LevMarDif CFloat
foreign import ccall "dlevmar_dif" dlevmar_dif :: LevMarDif CDouble
foreign import ccall "slevmar_bc_der" slevmar_bc_der :: LevMarBCDer CFloat
foreign import ccall "dlevmar_bc_der" dlevmar_bc_der :: LevMarBCDer CDouble
foreign import ccall "slevmar_bc_dif" slevmar_bc_dif :: LevMarBCDif CFloat
foreign import ccall "dlevmar_bc_dif" dlevmar_bc_dif :: LevMarBCDif CDouble
foreign import ccall "slevmar_lec_der" slevmar_lec_der :: LevMarLecDer CFloat
foreign import ccall "dlevmar_lec_der" dlevmar_lec_der :: LevMarLecDer CDouble
foreign import ccall "slevmar_lec_dif" slevmar_lec_dif :: LevMarLecDif CFloat
foreign import ccall "dlevmar_lec_dif" dlevmar_lec_dif :: LevMarLecDif CDouble
foreign import ccall "slevmar_blec_der" slevmar_blec_der :: LevMarBLecDer CFloat
foreign import ccall "dlevmar_blec_der" dlevmar_blec_der :: LevMarBLecDer CDouble
foreign import ccall "slevmar_blec_dif" slevmar_blec_dif :: LevMarBLecDif CFloat
foreign import ccall "dlevmar_blec_dif" dlevmar_blec_dif :: LevMarBLecDif CDouble