packages feed

casadi-bindings-2.2.0.7: src/Casadi/Sparsity.hs

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

module Casadi.Sparsity
       ( Sparsity
       , upper, lower, spy, spyMatlab
       , dense, sparse, scalar
       , compress, compressed
       , getRow, getCol
       ) where

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

import Casadi.Core.Classes.Sparsity

import Casadi.SharedObject ( castSharedObject )

instance Serialize Sparsity where
  put = put . V.toList . compress
  get = fmap (compressed . V.fromList) get

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

instance Eq Sparsity where
  x == y = unsafePerformIO (sparsity_isEqual__1 x y)
  {-# NOINLINE (==) #-}

upper :: Int -> Sparsity
upper k = unsafePerformIO (sparsity_upper k)
{-# NOINLINE upper #-}

lower :: Int -> Sparsity
lower k = unsafePerformIO (sparsity_lower k)
{-# NOINLINE lower #-}

spy :: Sparsity -> IO ()
spy = sparsity_spy

spyMatlab :: Sparsity -> String -> IO ()
spyMatlab = sparsity_spyMatlab

scalar :: Sparsity
scalar = unsafePerformIO sparsity_scalar__0
{-# NOINLINE scalar #-}

getRow :: Sparsity -> V.Vector Int
getRow s = unsafePerformIO (sparsity_row__1 s) -- todo: getRow in 2.3
{-# NOINLINE getRow #-}

getCol :: Sparsity -> V.Vector Int
getCol s = unsafePerformIO (sparsity_getCol s)
{-# NOINLINE getCol #-}

sparse :: Int -> Int -> V.Vector Int -> V.Vector Int -> Sparsity
sparse nr nc r c = unsafePerformIO (sparsity__0 nr nc r c)
{-# NOINLINE sparse #-}

dense :: Int -> Int -> Sparsity
dense nr nc = unsafePerformIO (sparsity_dense__1 nr nc)
{-# NOINLINE dense #-}

compress :: Sparsity -> V.Vector Int
compress s = unsafePerformIO (sparsity_compress s)
{-# NOINLINE compress #-}

compressed :: V.Vector Int -> Sparsity
compressed v = unsafePerformIO (sparsity_compressed v)
{-# NOINLINE compressed #-}