packages feed

casadi-bindings-3.4.5.0: src/Casadi/MX.hs

{-# OPTIONS_GHC -Wall -fno-cse -fno-warn-orphans #-}

module Casadi.MX
       ( MX
       , attachAssert
       ) where

import qualified Data.Vector as V
import Linear.Conjugate ( Conjugate(..) )
import System.IO.Unsafe ( unsafePerformIO )

import qualified Casadi.Core.Classes.Function as C
import Casadi.Core.Classes.MX
import qualified Casadi.Core.Tools as C

import Casadi.DM ()
import Casadi.GenericType ( fromGType )
import Casadi.Matrix ( CMatrix(..), SMatrix(..) )
import Casadi.Overloading ( Fmod(..), ArcTan2(..), SymOrd(..), Erf(..) )
import Casadi.SharedObject ( castSharedObject )
import Casadi.Viewable ( Viewable(..) )

instance Conjugate MX where
  conjugate = id

instance Eq MX where
  x == y = unsafePerformIO (C.casadi_is_equal__8 x y)
  {-# NOINLINE (==) #-}

instance Show MX where
  show x = show (castSharedObject x)
  {-# NOINLINE show #-}

instance Viewable MX where
  vvertcat = vertcat
  vvertsplit = vertsplit
  vsize1 = size1
  vsize2 = size2
  vrecoverDimension _ dim = zeros dim

attachAssert :: MX -> MX -> String -> MX
attachAssert x y msg = unsafePerformIO (mx_attachAssert__1 x y msg)
{-# NOINLINE attachAssert #-}

--sparsify :: MX -> MX
--sparsify x = unsafePerformIO (C.casadi_sparsify__0__3 x)
--{-# NOINLINE sparsify #-}

instance CMatrix MX where
  blocksplit x ix iy = unsafePerformIO (C.casadi_blocksplit__15 x ix iy)
  {-# NOINLINE blocksplit #-}
  blockcat x = unsafePerformIO (C.casadi_blockcat__3 x)
  {-# NOINLINE blockcat #-}
  veccat x = unsafePerformIO (C.casadi_veccat__3 x)
  {-# NOINLINE veccat #-}
  --  vertsplit = vertslice
  vertsplit x ks = unsafePerformIO (C.casadi_vertsplit__11 x ks)
  {-# NOINLINE vertsplit #-}
  vertcat x = unsafePerformIO (C.casadi_vertcat__3 x)
  {-# NOINLINE vertcat #-}
  --  horzsplit = horzslice
  horzsplit x ks = unsafePerformIO (C.casadi_horzsplit__11 x ks)
  {-# NOINLINE horzsplit #-}
  horzcat x = unsafePerformIO (C.casadi_horzcat__3 x)
  {-# NOINLINE horzcat #-}
  size1 x = unsafePerformIO (mx_size1 x)
  {-# NOINLINE size1 #-}
  size2 x = unsafePerformIO (mx_size2 x)
  {-# NOINLINE size2 #-}
  numel x = unsafePerformIO (mx_numel x)
  {-# NOINLINE numel #-}
  mtimes x y = unsafePerformIO (C.casadi_mtimes__7 x y)
  {-# NOINLINE mtimes #-}
  dot x y = unsafePerformIO (C.casadi_dot__3 x y)
  {-# NOINLINE dot #-}
  sum1 x = unsafePerformIO (C.casadi_sum1__3 x)
  {-# NOINLINE sum1 #-}
  sum2 x = unsafePerformIO (C.casadi_sum2__3 x)
  {-# NOINLINE sum2 #-}
  trans x = unsafePerformIO (mx_T x)
  {-# NOINLINE trans #-}
  diag x = unsafePerformIO (C.casadi_diag__3 x)
  {-# NOINLINE diag #-}
  eye n = unsafePerformIO (mx_eye n)
  {-# NOINLINE eye #-}
  ones (r,c) = unsafePerformIO (mx_ones__4 r c)
  {-# NOINLINE ones #-}
  zeros (r,c) = unsafePerformIO (mx_zeros__4 r c)
  {-# NOINLINE zeros #-}
  zerosSp sp = unsafePerformIO (mx_zeros__1 sp)
  {-# NOINLINE zerosSp #-}
  solve x y s m = unsafePerformIO (mapM fromGType m >>= C.casadi_solve__10 x y s)
  {-# NOINLINE solve #-}
  solve' x y = unsafePerformIO (C.casadi_solve__11 x y)
  {-# NOINLINE solve' #-}
  indexed m spx spy = unsafePerformIO (mx_get__3 m False spx spy)
  {-# NOINLINE indexed #-}
  sparsity x = unsafePerformIO (mx_get_sparsity x)
  {-# NOINLINE sparsity #-}
  getNZ m sp = unsafePerformIO (mx_get_nz__1 m False sp)
  {-# NOINLINE getNZ #-}
  setNZ m y s = mx_set_nz__1 m y False s
  triu x = unsafePerformIO (C.casadi_triu__6 x)
  {-# NOINLINE triu #-}
  tril x = unsafePerformIO (C.casadi_tril__6 x)
  {-# NOINLINE tril #-}
  triu2symm x = unsafePerformIO (C.casadi_triu2symm__3 x)
  {-# NOINLINE triu2symm #-}
  tril2symm x = unsafePerformIO (C.casadi_tril2symm__3 x)
  {-# NOINLINE tril2symm #-}
  copy m = mx__2 m
  densify x = unsafePerformIO (C.casadi_densify__3 x)
  {-# NOINLINE densify #-}
  fromDM x = unsafePerformIO (mx__0 x)
  {-# NOINLINE fromDM #-}
  fromDVector x = fromDM (fromDVector x)
  {-# NOINLINE fromDVector #-}
  fromDouble x = unsafePerformIO (mx__3 x)
  {-# NOINLINE fromDouble #-}
  reshape x s = unsafePerformIO (C.casadi_reshape__10 x s)
  {-# NOINLINE reshape #-}
  conditional x0 x1 x2 = unsafePerformIO (C.casadi_conditional__6 x0 x1 x2)
  {-# NOINLINE conditional #-}
  conditional' x0 x1 x2 x3 = unsafePerformIO (C.casadi_conditional__7 x0 x1 x2 x3)
  {-# NOINLINE conditional' #-}
  inv x = unsafePerformIO (C.casadi_inv__11 x)
  {-# NOINLINE inv #-}
  pinv x = unsafePerformIO (C.casadi_pinv__11 x)
  {-# NOINLINE pinv #-}
  pinv' x n o = unsafePerformIO (mapM fromGType o >>= C.casadi_pinv__10 x n)
  {-# NOINLINE pinv' #-}
  cmax x y = unsafePerformIO (C.casadi_fmax__4 x y)
  {-# NOINLINE cmax #-}
  cmin x y = unsafePerformIO (C.casadi_fmin__4 x y)
  {-# NOINLINE cmin #-}
  cand x y = unsafePerformIO (C.casadi_and__4 x y)
  {-# NOINLINE cand #-}
  cor x y = unsafePerformIO (C.casadi_or__4 x y)
  {-# NOINLINE cor #-}
  repmat x (s1, s2) = unsafePerformIO (C.casadi_repmat__11 x s1 s2)
  {-# NOINLINE repmat #-}
  printme x y = unsafePerformIO (mx_printme x y)
  {-# NOINLINE printme #-}

  sumSquare x = unsafePerformIO (C.casadi_sumsqr__3 x)
  {-# NOINLINE sumSquare #-}
  invSkew x = unsafePerformIO (C.casadi_inv_skew__3 x)
  {-# NOINLINE invSkew #-}
  cnot x = unsafePerformIO (C.casadi_not__4 x)
  {-# NOINLINE cnot #-}
  nullspace x = unsafePerformIO (C.casadi_nullspace__3 x)
  {-# NOINLINE nullspace #-}
  norm1 x = unsafePerformIO (C.casadi_norm_1__3 x)
  {-# NOINLINE norm1 #-}
  norm2 x = unsafePerformIO (C.casadi_norm_2__3 x)
  {-# NOINLINE norm2 #-}
  normFro x = unsafePerformIO (C.casadi_norm_fro__3 x)
  {-# NOINLINE normFro #-}
  normInf x = unsafePerformIO (C.casadi_norm_inf__3 x)
  {-# NOINLINE normInf #-}
  kron x y = unsafePerformIO (C.casadi_kron__3 x y)
  {-# NOINLINE kron #-}
  mldivide x y = unsafePerformIO (C.casadi_mldivide__3 x y)
  {-# NOINLINE mldivide #-}
  mrdivide x y = unsafePerformIO (C.casadi_mrdivide__3 x y)
  {-# NOINLINE mrdivide #-}
  mpower x y = unsafePerformIO (C.casadi_mpower__3 x y)
  {-# NOINLINE mpower #-}
  ceil' x = unsafePerformIO (C.casadi_ceil__4 x)
  {-# NOINLINE ceil' #-}
  floor' x = unsafePerformIO (C.casadi_floor__4 x)
  {-# NOINLINE floor' #-}


instance SMatrix MX where
  gradient x y = unsafePerformIO (C.casadi_gradient__3 x y)
  {-# NOINLINE gradient #-}
  jacobian x y = unsafePerformIO (C.casadi_jacobian__6 x y)
  {-# NOINLINE jacobian #-}
  hessian expr args = unsafePerformIO $ do
    grad <- mx__7
    hess <- C.casadi_hessian__3 expr args grad
    return (hess, grad)
  {-# NOINLINE hessian #-}
  jtimes x y z = unsafePerformIO (C.casadi_jtimes__6 x y z)
  {-# NOINLINE jtimes #-}
  forward x y z w = unsafePerformIO (mapM fromGType w >>= C.casadi_forward__7 x y z)
  {-# NOINLINE forward #-}
  reverse x y z w = unsafePerformIO (mapM fromGType w >>= C.casadi_reverse__7 x y z)
  {-# NOINLINE reverse #-}

  sym = mx_sym__8

  toFunction n x y opts0 = do
    opts <- mapM fromGType opts0
    C.function__5 n x y opts

  toFunction' n nxx nyy opts0 = do
    let (nx, x) = V.unzip nxx
        (ny, y) = V.unzip nyy
    opts <- mapM fromGType opts0
    C.function__3 n x y nx ny opts

  callSym f ins = unsafePerformIO (C.function_call__9 f ins)
  {-# NOINLINE callSym #-}
  callSym' f ins = unsafePerformIO (C.function_call__0 f ins)
  {-# NOINLINE callSym' #-}


instance Num MX where
  (+) x y = unsafePerformIO (C.casadi_plus__4 x y)
  {-# NOINLINE (+) #-}
  (-) x y = unsafePerformIO (C.casadi_minus__4 x y)
  {-# NOINLINE (-) #-}
  (*) x y = unsafePerformIO (C.casadi_times__4 x y)
  {-# NOINLINE (*) #-}
  fromInteger x = fromDouble (fromInteger x :: Double)
  {-# NOINLINE fromInteger #-}
  abs x = unsafePerformIO (C.casadi_abs__4 x)
  {-# NOINLINE abs #-}
  signum x = unsafePerformIO (C.casadi_sign__4 x)
  {-# NOINLINE signum #-}

instance Fractional MX where
  (/) x y = unsafePerformIO (C.casadi_rdivide__4 x y)
  {-# NOINLINE (/) #-}
  fromRational x = fromDouble (fromRational x :: Double)
  {-# NOINLINE fromRational #-}

instance Floating MX where
  pi = fromDouble (pi :: Double)
  {-# NOINLINE pi #-}
  (**) x y = unsafePerformIO (C.casadi_power__4 x y)
  {-# NOINLINE (**) #-}
  exp x   = unsafePerformIO (C.casadi_exp__4 x)
  {-# NOINLINE exp #-}
  log x   = unsafePerformIO (C.casadi_log__4 x)
  {-# NOINLINE log #-}
  sin x   = unsafePerformIO (C.casadi_sin__4 x)
  {-# NOINLINE sin #-}
  cos x   = unsafePerformIO (C.casadi_cos__4 x)
  {-# NOINLINE cos #-}
  tan x   = unsafePerformIO (C.casadi_tan__4 x)
  {-# NOINLINE tan #-}
  asin x  = unsafePerformIO (C.casadi_asin__4 x)
  {-# NOINLINE asin #-}
  atan x  = unsafePerformIO (C.casadi_atan__4 x)
  {-# NOINLINE atan #-}
  acos x  = unsafePerformIO (C.casadi_acos__4 x)
  {-# NOINLINE acos #-}
  sinh x  = unsafePerformIO (C.casadi_sinh__4 x)
  {-# NOINLINE sinh #-}
  cosh x  = unsafePerformIO (C.casadi_cosh__4 x)
  {-# NOINLINE cosh #-}
  tanh x  = unsafePerformIO (C.casadi_tanh__4 x)
  {-# NOINLINE tanh #-}
  asinh x = unsafePerformIO (C.casadi_asinh__4 x)
  {-# NOINLINE asinh #-}
  atanh x = unsafePerformIO (C.casadi_atanh__4 x)
  {-# NOINLINE atanh #-}
  acosh x = unsafePerformIO (C.casadi_acosh__4 x)
  {-# NOINLINE acosh #-}

instance Fmod MX where
  fmod x y = unsafePerformIO (C.casadi_mod__4 x y)
  {-# NOINLINE fmod #-}

instance ArcTan2 MX where
  arctan2 x y = unsafePerformIO (C.casadi_atan2__4 x y)
  {-# NOINLINE arctan2 #-}

instance SymOrd MX where
  x `leq` y = unsafePerformIO (C.casadi_le__4 x y)
  {-# NOINLINE leq #-}
  x `lt` y = unsafePerformIO (C.casadi_lt__4 x y)
  {-# NOINLINE lt #-}
  x `geq` y = unsafePerformIO (C.casadi_ge__4 x y)
  {-# NOINLINE geq #-}
  x `gt` y = unsafePerformIO (C.casadi_gt__4 x y)
  {-# NOINLINE gt #-}
  x  `eq` y = unsafePerformIO (C.casadi_eq__4 x y)
  {-# NOINLINE eq #-}
  x `ne` y = unsafePerformIO (C.casadi_ne__4 x y)
  {-# NOINLINE ne #-}
  max' x y = cmax x y
  {-# NOINLINE max' #-}
  min' x y = cmin x y
  {-# NOINLINE min' #-}

instance Erf MX where
  erf x = unsafePerformIO (C.casadi_erf__4 x)
  {-# NOINLINE erf #-}
  erfinv x = unsafePerformIO (C.casadi_erfinv__4 x)
  {-# NOINLINE erfinv #-}