packages feed

dynobud-1.9.0.0: examples/ExampleDsl/Types.hs

{-# OPTIONS_GHC -Wall -ddump-splices #-}

module ExampleDsl.Types
       ( Constraint(..)
       , Objective(..)
       , HomotopyParam(..)
       , NlpMonadState(..)
       , OcpState(..)
       , DaeState(..)
       , daeX
       , daeXDot
       , daeZ
       , daeU
       , daeP
       , daeO
       ) where

import qualified Data.HashSet as HS
import qualified Data.Sequence as S
import qualified Data.Map as M
import Control.Lens

import Casadi.MX ( MX )
import Dyno.View.View ( S )

data Constraint a = Eq2 a a
                  | Ineq2 a a
                  | Ineq3 a (Double, Double)

data Objective a = ObjectiveUnset | Objective a
data HomotopyParam a = HomotopyParamUnset | HomotopyParam a

type MXElement = S MX

data NlpMonadState =
  NlpMonadState
  { nlpX :: S.Seq (String, MXElement)
  , nlpXSet :: HS.HashSet String
  , nlpConstraints :: S.Seq (Constraint MXElement)
  , nlpObj :: Objective MXElement
  , nlpHomoParam :: HomotopyParam MXElement
  }

data OcpState = OcpState { ocpPathConstraints :: S.Seq (Constraint MXElement)
                         , ocpLagrangeObj :: Objective MXElement
                         , ocpHomoParam :: HomotopyParam MXElement
                         }

data DaeState = DaeState { _daeXDot :: S.Seq (String, MXElement)
                         , _daeX :: S.Seq (String, MXElement)
                         , _daeZ :: S.Seq (String, MXElement)
                         , _daeU :: S.Seq (String, MXElement)
                         , _daeP :: S.Seq (String, MXElement)
                         , _daeO :: M.Map String MXElement
                         , daeNameSet :: HS.HashSet String
                         , daeConstraints :: S.Seq (MXElement, MXElement)
                         }

--makeLenses ''DaeState
daeXDot :: Lens' DaeState (S.Seq (String, MXElement))
daeXDot f (DaeState xdot' x z u p o ss c) =
  (\xdot -> DaeState xdot x z u p o ss c) `fmap` f xdot'
{-# INLINE daeXDot #-}

daeX :: Lens' DaeState (S.Seq (String, MXElement))
daeX f (DaeState xdot x' z u p o ss c) =
  (\x -> DaeState xdot x z u p o ss c) `fmap` f x'
{-# INLINE daeX #-}

daeZ :: Lens' DaeState (S.Seq (String, MXElement))
daeZ f (DaeState xdot x z' u p o ss c) =
  (\z -> DaeState xdot x z u p o ss c) `fmap` f z'
{-# INLINE daeZ #-}

daeU :: Lens' DaeState (S.Seq (String, MXElement))
daeU f (DaeState xdot x z u' p o ss c) =
  (\u -> DaeState xdot x z u p o ss c) `fmap` f u'
{-# INLINE daeU #-}

daeP :: Lens' DaeState (S.Seq (String, MXElement))
daeP f (DaeState xdot x z u p' o ss c) =
  (\p -> DaeState xdot x z u p o ss c) `fmap` f p'
{-# INLINE daeP #-}

daeO :: Lens' DaeState (M.Map String MXElement)
daeO f (DaeState xdot x z u p o' ss c) =
  (\o -> DaeState xdot x z u p o ss c) `fmap` f o'
{-# INLINE daeO #-}