packages feed

casadi-bindings-2.2.0.3: src/Casadi/DMatrix.hs

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

module Casadi.DMatrix
       ( DMatrix, dcrs, dmm, dinnerProd, dvector, ddata, ddiag
       , ddense, dsparsify, dtrans
       , dtriu, dtril
       , dtriu2symm, dtril2symm
       , dsize, dsize1, dsize2, dnumel
       , dvertcat, dhorzcat, dveccat, dvertsplit, dhorzsplit
       , deye, dones, dzeros, dzerosSp
       , dindexed
       , dgetNZ, dsetNZ
       , dcopy
       ) where

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

import Casadi.Core.Classes.Sparsity
import Casadi.Core.Classes.DMatrix
import Casadi.Core.Classes.Slice ( Slice )

import Casadi.Overloading ( Fmod(..), ArcTan2(..), SymOrd(..), Erf(..) )

instance Conjugate DMatrix where
  conjugate = id

instance Show DMatrix where
  show x = unsafePerformIO (dmatrix_getDescription x)
  {-# NOINLINE show #-}

instance Eq DMatrix where
  x == y = unsafePerformIO (dmatrix_zz_isEqual__0 x y)
  {-# NOINLINE (==) #-}

-- | matrix matrix product
dmm :: DMatrix -> DMatrix -> DMatrix
dmm x y = unsafePerformIO (dmatrix_zz_mtimes__1 x y)
{-# NOINLINE dmm #-}

-- | sumAll(x*y), x and y same dimension
dinnerProd :: DMatrix -> DMatrix -> DMatrix
dinnerProd x y = unsafePerformIO (dmatrix_zz_inner_prod x y)
{-# NOINLINE dinnerProd #-}

-- | transpose
dtrans :: DMatrix -> DMatrix
dtrans x = unsafePerformIO (dmatrix_T x)
{-# NOINLINE dtrans #-}

ddense :: DMatrix -> DMatrix
ddense x = unsafePerformIO (dmatrix_zz_dense x)
{-# NOINLINE ddense #-}

dsparsify :: DMatrix -> DMatrix
dsparsify x = unsafePerformIO (dmatrix_zz_sparsify__0 x)
{-# NOINLINE dsparsify #-}

dcrs :: DMatrix -> Sparsity
dcrs x = unsafePerformIO (dmatrix_sparsityRef__0 x)
{-# NOINLINE dcrs #-}

ddiag :: DMatrix -> DMatrix
ddiag x = unsafePerformIO (dmatrix_zz_diag x)
{-# NOINLINE ddiag #-}

-- | from vector
dvector :: V.Vector Double -> DMatrix
dvector x = unsafePerformIO (dmatrix__4 x)
{-# NOINLINE dvector #-}

ddata :: DMatrix -> V.Vector Double
ddata x = unsafePerformIO (dmatrix_data__0 x)
{-# NOINLINE ddata #-}

dsize :: DMatrix -> Int
dsize x = unsafePerformIO (dmatrix_size__1 x)
{-# NOINLINE dsize #-}

dsize1 :: DMatrix -> Int
dsize1 x = unsafePerformIO (dmatrix_size1 x)
{-# NOINLINE dsize1 #-}

dsize2 :: DMatrix -> Int
dsize2 x = unsafePerformIO (dmatrix_size2 x)
{-# NOINLINE dsize2 #-}

dnumel :: DMatrix -> Int
dnumel x = unsafePerformIO (dmatrix_numel__1 x)
{-# NOINLINE dnumel #-}

dvertcat :: V.Vector DMatrix -> DMatrix
dvertcat x = unsafePerformIO (dmatrix_zz_vertcat x)
{-# NOINLINE dvertcat #-}

dveccat :: V.Vector DMatrix -> DMatrix
dveccat x = unsafePerformIO (dmatrix_zz_veccat x)
{-# NOINLINE dveccat #-}

dvertsplit :: DMatrix -> V.Vector Int -> V.Vector DMatrix
dvertsplit x ks = unsafePerformIO (dmatrix_zz_vertsplit x ks)
{-# NOINLINE dvertsplit #-}

dhorzsplit :: DMatrix -> V.Vector Int -> V.Vector DMatrix
dhorzsplit x ks = unsafePerformIO (dmatrix_zz_horzsplit x ks)
{-# NOINLINE dhorzsplit #-}

dhorzcat :: V.Vector DMatrix -> DMatrix
dhorzcat x = unsafePerformIO (dmatrix_zz_horzcat x)
{-# NOINLINE dhorzcat #-}

dtriu :: DMatrix -> DMatrix
dtriu x = unsafePerformIO (dmatrix_zz_triu__0 x)
{-# NOINLINE dtriu #-}

dtril :: DMatrix -> DMatrix
dtril x = unsafePerformIO (dmatrix_zz_tril__0 x)
{-# NOINLINE dtril #-}

dtriu2symm :: DMatrix -> DMatrix
dtriu2symm x = unsafePerformIO (dmatrix_zz_triu2symm x)
{-# NOINLINE dtriu2symm #-}

dtril2symm :: DMatrix -> DMatrix
dtril2symm x = unsafePerformIO (dmatrix_zz_tril2symm x)
{-# NOINLINE dtril2symm #-}

deye :: Int -> DMatrix
deye n = unsafePerformIO (dmatrix_eye n)
{-# NOINLINE deye #-}

dones :: (Int,Int) -> DMatrix
dones (r,c) = unsafePerformIO (dmatrix_ones__3 r c)
{-# NOINLINE dones #-}

dzeros :: (Int,Int) -> DMatrix
dzeros (r,c) = unsafePerformIO (dmatrix_zeros__3 r c)
{-# NOINLINE dzeros #-}

dzerosSp :: Sparsity -> DMatrix
dzerosSp sp = unsafePerformIO (dmatrix_zeros__0 sp)
{-# NOINLINE dzerosSp #-}

dindexed :: DMatrix -> Slice -> Slice -> DMatrix
dindexed m sx sy = unsafePerformIO (dmatrix_getSub__3 m False sx sy)
{-# NOINLINE dindexed #-}

dgetNZ :: DMatrix -> Slice -> DMatrix
dgetNZ m s = unsafePerformIO (dmatrix_getNZ__1 m False s)
{-# NOINLINE dgetNZ #-}

dsetNZ :: DMatrix -> DMatrix -> Slice -> IO ()
dsetNZ m y s = dmatrix_setNZ__1 m y False s

dcopy :: DMatrix -> IO DMatrix
dcopy m = dmatrix__10 m

instance Num DMatrix where
  (+) x y = unsafePerformIO (dmatrix_zz_plus x y)
  {-# NOINLINE (+) #-}
  (-) x y = unsafePerformIO (dmatrix_zz_minus x y)
  {-# NOINLINE (-) #-}
  (*) x y = unsafePerformIO (dmatrix_zz_times x y)
  {-# NOINLINE (*) #-}
  fromInteger x = unsafePerformIO (dmatrix__5 (fromInteger x :: Double))
  {-# NOINLINE fromInteger #-}
  abs x = unsafePerformIO (dmatrix_zz_abs x)
  {-# NOINLINE abs #-}
  signum x = unsafePerformIO (dmatrix_zz_sign x)
  {-# NOINLINE signum #-}

instance Fractional DMatrix where
  (/) x y = unsafePerformIO (dmatrix___truediv____0 x y)
  {-# NOINLINE (/) #-}
  fromRational x = unsafePerformIO (dmatrix__5 (fromRational x :: Double))
  {-# NOINLINE fromRational #-}

instance Floating DMatrix where
  pi = unsafePerformIO (dmatrix__5 (pi :: Double))
  {-# NOINLINE pi #-}
  (**) x y = unsafePerformIO (dmatrix_zz_power x y)
  {-# NOINLINE (**) #-}
  exp x   = unsafePerformIO (dmatrix_zz_exp x)
  {-# NOINLINE exp #-}
  log x   = unsafePerformIO (dmatrix_zz_log x)
  {-# NOINLINE log #-}
  sin x   = unsafePerformIO (dmatrix_zz_sin x)
  {-# NOINLINE sin #-}
  cos x   = unsafePerformIO (dmatrix_zz_cos x)
  {-# NOINLINE cos #-}
  tan x   = unsafePerformIO (dmatrix_zz_tan x)
  {-# NOINLINE tan #-}
  asin x  = unsafePerformIO (dmatrix_zz_asin x)
  {-# NOINLINE asin #-}
  atan x  = unsafePerformIO (dmatrix_zz_atan x)
  {-# NOINLINE atan #-}
  acos x  = unsafePerformIO (dmatrix_zz_acos x)
  {-# NOINLINE acos #-}
  sinh x  = unsafePerformIO (dmatrix_zz_sinh x)
  {-# NOINLINE sinh #-}
  cosh x  = unsafePerformIO (dmatrix_zz_cosh x)
  {-# NOINLINE cosh #-}
  tanh x  = unsafePerformIO (dmatrix_zz_tanh x)
  {-# NOINLINE tanh #-}
  asinh x = unsafePerformIO (dmatrix_zz_asinh x)
  {-# NOINLINE asinh #-}
  atanh x = unsafePerformIO (dmatrix_zz_atanh x)
  {-# NOINLINE atanh #-}
  acosh x = unsafePerformIO (dmatrix_zz_acosh x)
  {-# NOINLINE acosh #-}

instance Fmod DMatrix where
  fmod x y = unsafePerformIO (dmatrix_zz_mod x y)
  {-# NOINLINE fmod #-}

instance ArcTan2 DMatrix where
  arctan2 x y = unsafePerformIO (dmatrix_zz_atan2 x y)
  {-# NOINLINE arctan2 #-}

instance SymOrd DMatrix where
  x `leq` y = unsafePerformIO (dmatrix_zz_le x y)
  {-# NOINLINE leq #-}
  x `geq` y = unsafePerformIO (dmatrix_zz_ge x y)
  {-# NOINLINE geq #-}
  x  `eq` y = unsafePerformIO (dmatrix_zz_eq x y)
  {-# NOINLINE eq #-}


instance Erf DMatrix where
  erf x = unsafePerformIO (dmatrix_zz_erf x)
  {-# NOINLINE erf #-}
  erfinv x = unsafePerformIO (dmatrix_zz_erfinv x)
  {-# NOINLINE erfinv #-}