{-# LINE 1 "src/Data/Number/Flint/Padic/Mat/FFI.hsc" #-}
module Data.Number.Flint.Padic.Mat.FFI (
PadicMat (..)
, CPadicMat (..)
, newPadicMat
, withPadicMat
, padic_mat
, padic_mat_entry
, padic_mat_get_val
, padic_mat_get_prec
, padic_mat_nrows
, padic_mat_ncols
, padic_mat_init
, padic_mat_init2
, padic_mat_clear
, _padic_mat_canonicalise
, _padic_mat_reduce
, padic_mat_reduce
, padic_mat_is_empty
, padic_mat_is_square
, padic_mat_is_canonical
, padic_mat_set
, padic_mat_swap
, padic_mat_swap_entrywise
, padic_mat_zero
, padic_mat_one
, padic_mat_set_fmpq_mat
, padic_mat_get_fmpq_mat
, padic_mat_get_entry_padic
, padic_mat_set_entry_padic
, padic_mat_equal
, padic_mat_is_zero
, padic_mat_get_str
, padic_mat_get_str_pretty
, padic_mat_fprint
, padic_mat_fprint_pretty
, padic_mat_print
, padic_mat_print_pretty
, padic_mat_randtest
, padic_mat_transpose
, _padic_mat_add
, padic_mat_add
, _padic_mat_sub
, padic_mat_sub
, _padic_mat_neg
, padic_mat_neg
, _padic_mat_scalar_mul_padic
, padic_mat_scalar_mul_padic
, _padic_mat_scalar_mul_fmpz
, padic_mat_scalar_mul_fmpz
, padic_mat_scalar_div_fmpz
, padic_mat_mul
) where
import Control.Monad
import Foreign.C.String
import Foreign.C.Types
import Foreign.ForeignPtr
import Foreign.Ptr ( Ptr, FunPtr, plusPtr, castPtr )
import Foreign.Storable
import Foreign.Marshal ( free )
import Data.Number.Flint.Flint
import Data.Number.Flint.Fmpz
import Data.Number.Flint.Fmpz.Mat
import Data.Number.Flint.Fmpq.Mat
import Data.Number.Flint.Padic
data PadicMat = PadicMat {-# UNPACK #-} !(ForeignPtr CPadicMat)
data CPadicMat = CPadicMat (Ptr CFmpzMat) CLong CLong
instance Storable CPadicMat where
{-# INLINE sizeOf #-}
sizeOf :: CPadicMat -> Int
sizeOf CPadicMat
_ = (Int
48)
{-# LINE 105 "src/Data/Number/Flint/Padic/Mat/FFI.hsc" #-}
{-# INLINE alignment #-}
alignment :: CPadicMat -> Int
alignment CPadicMat
_ = Int
8
{-# LINE 107 "src/Data/Number/Flint/Padic/Mat/FFI.hsc" #-}
peek ptr = return CPadicMat
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 109 "src/Data/Number/Flint/Padic/Mat/FFI.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 32) ptr
{-# LINE 110 "src/Data/Number/Flint/Padic/Mat/FFI.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 40) ptr
{-# LINE 111 "src/Data/Number/Flint/Padic/Mat/FFI.hsc" #-}
poke = undefined
newPadicMat :: CLong -> CLong -> CLong -> IO PadicMat
newPadicMat CLong
rows CLong
cols CLong
prec = do
ForeignPtr CPadicMat
x <- forall a. Storable a => IO (ForeignPtr a)
mallocForeignPtr
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CPadicMat
x forall a b. (a -> b) -> a -> b
$ \Ptr CPadicMat
x -> Ptr CPadicMat -> CLong -> CLong -> CLong -> IO ()
padic_mat_init Ptr CPadicMat
x CLong
rows CLong
cols CLong
prec
forall a. FinalizerPtr a -> ForeignPtr a -> IO ()
addForeignPtrFinalizer FunPtr (Ptr CPadicMat -> IO ())
p_padic_mat_clear ForeignPtr CPadicMat
x
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ ForeignPtr CPadicMat -> PadicMat
PadicMat ForeignPtr CPadicMat
x
{-# INLINE withPadicMat #-}
withPadicMat :: PadicMat -> (Ptr CPadicMat -> IO a) -> IO (PadicMat, a)
withPadicMat (PadicMat ForeignPtr CPadicMat
x) Ptr CPadicMat -> IO a
f = do
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CPadicMat
x forall a b. (a -> b) -> a -> b
$ \Ptr CPadicMat
px -> Ptr CPadicMat -> IO a
f Ptr CPadicMat
px forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. Monad m => a -> m a
return forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ForeignPtr CPadicMat -> PadicMat
PadicMat ForeignPtr CPadicMat
x,)
padic_mat :: Ptr CPadicMat -> IO (Ptr CFmpzMat)
padic_mat :: Ptr CPadicMat -> IO (Ptr CFmpzMat)
padic_mat Ptr CPadicMat
ptr = forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ forall a b. Ptr a -> Ptr b
castPtr Ptr CPadicMat
ptr
padic_mat_entry :: Ptr CPadicMat -> CLong -> CLong -> IO (Ptr CFmpz)
padic_mat_entry :: Ptr CPadicMat -> CLong -> CLong -> IO (Ptr CFmpz)
padic_mat_entry Ptr CPadicMat
a CLong
i CLong
j = do
CPadicMat Ptr CFmpzMat
mat CLong
_ CLong
_ <- forall a. Storable a => Ptr a -> IO a
peek Ptr CPadicMat
a
Ptr CFmpzMat -> CLong -> CLong -> IO (Ptr CFmpz)
fmpz_mat_entry Ptr CFmpzMat
mat CLong
i CLong
j
foreign import ccall "padic_mat.h padic_mat_get_val"
padic_mat_get_val :: Ptr CPadicMat -> IO CLong
foreign import ccall "padic_mat.h padic_mat_get_prec"
padic_mat_get_prec :: Ptr CPadicMat -> IO CLong
foreign import ccall "padic_mat.h padic_mat_nrows"
padic_mat_nrows :: Ptr CPadicMat -> IO CLong
foreign import ccall "padic_mat.h padic_mat_ncols"
padic_mat_ncols :: Ptr CPadicMat -> IO CLong
foreign import ccall "padic_mat.h padic_mat_init"
padic_mat_init :: Ptr CPadicMat -> CLong -> CLong -> CLong -> IO ()
foreign import ccall "padic_mat.h padic_mat_init2"
padic_mat_init2 :: Ptr CPadicMat -> CLong -> CLong -> CLong -> IO ()
foreign import ccall "padic_mat.h padic_mat_clear"
padic_mat_clear :: Ptr CPadicMat -> IO ()
foreign import ccall "padic_mat.h &padic_mat_clear"
p_padic_mat_clear :: FunPtr (Ptr CPadicMat -> IO ())
foreign import ccall "padic_mat.h _padic_mat_canonicalise"
_padic_mat_canonicalise :: Ptr CPadicMat -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic_mat.h _padic_mat_reduce"
_padic_mat_reduce :: Ptr CPadicMat -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic_mat.h padic_mat_reduce"
padic_mat_reduce :: Ptr CPadicMat -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic_mat.h padic_mat_is_empty"
padic_mat_is_empty :: Ptr CPadicMat -> IO CInt
foreign import ccall "padic_mat.h padic_mat_is_square"
padic_mat_is_square :: Ptr CPadicMat -> IO CInt
foreign import ccall "padic_mat.h padic_mat_is_canonical"
padic_mat_is_canonical :: Ptr CPadicMat -> Ptr CFmpz -> IO CInt
foreign import ccall "padic_mat.h padic_mat_set"
padic_mat_set :: Ptr CPadicMat -> Ptr CPadicMat -> IO ()
foreign import ccall "padic_mat.h padic_mat_swap"
padic_mat_swap :: Ptr CPadicMat -> Ptr CPadicMat -> IO ()
foreign import ccall "padic_mat.h padic_mat_swap_entrywise"
padic_mat_swap_entrywise :: Ptr CPadicMat -> Ptr CPadicMat -> IO ()
foreign import ccall "padic_mat.h padic_mat_zero"
padic_mat_zero :: Ptr CPadicMat -> IO ()
foreign import ccall "padic_mat.h padic_mat_one"
padic_mat_one :: Ptr CPadicMat -> IO ()
foreign import ccall "padic_mat.h padic_mat_set_fmpq_mat"
padic_mat_set_fmpq_mat :: Ptr CPadicMat -> Ptr CFmpqMat -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic_mat.h padic_mat_get_fmpq_mat"
padic_mat_get_fmpq_mat :: Ptr CFmpqMat -> Ptr CPadicMat -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic_mat.h padic_mat_get_entry_padic"
padic_mat_get_entry_padic :: Ptr CPadic -> Ptr CPadicMat -> CLong -> CLong -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic_mat.h padic_mat_set_entry_padic"
padic_mat_set_entry_padic :: Ptr CPadicMat -> CLong -> CLong -> Ptr CPadic -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic_mat.h padic_mat_equal"
padic_mat_equal :: Ptr CPadicMat -> Ptr CPadicMat -> IO CInt
foreign import ccall "padic_mat.h padic_mat_is_zero"
padic_mat_is_zero :: Ptr CPadicMat -> IO CInt
foreign import ccall "padic_mat.h padic_mat_get_str"
padic_mat_get_str:: Ptr CPadicMat -> Ptr CPadicCtx -> IO CString
foreign import ccall "padic_mat.h padic_mat_get_str_pretty"
padic_mat_get_str_pretty:: Ptr CPadicMat -> Ptr CPadicCtx -> IO CString
foreign import ccall "padic_mat.h padic_mat_fprint"
padic_mat_fprint :: Ptr CFile -> Ptr CPadicMat -> Ptr CPadicCtx -> IO CInt
foreign import ccall "padic_mat.h padic_mat_fprint_pretty"
padic_mat_fprint_pretty :: Ptr CFile -> Ptr CPadicMat -> Ptr CPadicCtx -> IO CInt
padic_mat_print :: Ptr CPadicMat -> Ptr CPadicCtx -> IO CInt
padic_mat_print :: Ptr CPadicMat -> Ptr CPadicCtx -> IO CInt
padic_mat_print Ptr CPadicMat
mat Ptr CPadicCtx
ctx = forall a. (Ptr a -> IO CString) -> Ptr a -> IO CInt
printCStr (forall a b c. (a -> b -> c) -> b -> a -> c
flip Ptr CPadicMat -> Ptr CPadicCtx -> IO CString
padic_mat_get_str Ptr CPadicCtx
ctx) Ptr CPadicMat
mat
padic_mat_print_pretty :: Ptr CPadicMat -> Ptr CPadicCtx -> IO CInt
padic_mat_print_pretty :: Ptr CPadicMat -> Ptr CPadicCtx -> IO CInt
padic_mat_print_pretty Ptr CPadicMat
mat Ptr CPadicCtx
ctx = forall a. (Ptr a -> IO CString) -> Ptr a -> IO CInt
printCStr (forall a b c. (a -> b -> c) -> b -> a -> c
flip Ptr CPadicMat -> Ptr CPadicCtx -> IO CString
padic_mat_get_str_pretty Ptr CPadicCtx
ctx) Ptr CPadicMat
mat
foreign import ccall "padic_mat.h padic_mat_randtest"
padic_mat_randtest :: Ptr CPadicMat -> Ptr CFRandState -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic_mat.h padic_mat_transpose"
padic_mat_transpose :: Ptr CPadicMat -> Ptr CPadicMat -> IO ()
foreign import ccall "padic_mat.h _padic_mat_add"
_padic_mat_add :: Ptr CPadicMat -> Ptr CPadicMat -> Ptr CPadicMat -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic_mat.h padic_mat_add"
padic_mat_add :: Ptr CPadicMat -> Ptr CPadicMat -> Ptr CPadicMat -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic_mat.h _padic_mat_sub"
_padic_mat_sub :: Ptr CPadicMat -> Ptr CPadicMat -> Ptr CPadicMat -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic_mat.h padic_mat_sub"
padic_mat_sub :: Ptr CPadicMat -> Ptr CPadicMat -> Ptr CPadicMat -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic_mat.h _padic_mat_neg"
_padic_mat_neg :: Ptr CPadicMat -> Ptr CPadicMat -> IO ()
foreign import ccall "padic_mat.h padic_mat_neg"
padic_mat_neg :: Ptr CPadicMat -> Ptr CPadicMat -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic_mat.h _padic_mat_scalar_mul_padic"
_padic_mat_scalar_mul_padic :: Ptr CPadicMat -> Ptr CPadicMat -> Ptr CPadic -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic_mat.h padic_mat_scalar_mul_padic"
padic_mat_scalar_mul_padic :: Ptr CPadicMat -> Ptr CPadicMat -> Ptr CPadic -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic_mat.h _padic_mat_scalar_mul_fmpz"
_padic_mat_scalar_mul_fmpz :: Ptr CPadicMat -> Ptr CPadicMat -> Ptr CFmpz -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic_mat.h padic_mat_scalar_mul_fmpz"
padic_mat_scalar_mul_fmpz :: Ptr CPadicMat -> Ptr CPadicMat -> Ptr CFmpz -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic_mat.h padic_mat_scalar_div_fmpz"
padic_mat_scalar_div_fmpz :: Ptr CPadicMat -> Ptr CPadicMat -> Ptr CFmpz -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic_mat.h padic_mat_mul"
padic_mat_mul :: Ptr CPadicMat -> Ptr CPadicMat -> Ptr CPadicMat -> Ptr CPadicCtx -> IO ()