{-# LINE 1 "src/Data/Number/Flint/Padic/FFI.hsc" #-}
module Data.Number.Flint.Padic.FFI (
Padic (..)
, CPadic (..)
, newPadic
, withPadic
, withNewPadic
, PadicCtx (..)
, CPadicCtx (..)
, newPadicCtx
, withPadicCtx
, withNewPadicCtx
, padic_unit
, padic_get_val
, padic_get_prec
, padic_ctx_init
, padic_ctx_clear
, _padic_ctx_pow_ui
, padic_ctx_print
, padic_init
, padic_init2
, padic_clear
, _padic_canonicalise
, _padic_reduce
, padic_reduce
, PadicPrintMode (..)
, padic_terse
, padic_series
, padic_val_unit
, padic_randtest
, padic_randtest_not_zero
, padic_randtest_int
, padic_set
, padic_set_si
, padic_set_ui
, padic_set_fmpz
, padic_set_fmpq
, padic_set_mpz
, padic_set_mpq
, padic_get_fmpz
, padic_get_fmpq
, padic_get_mpz
, padic_get_mpq
, padic_swap
, padic_zero
, padic_one
, padic_is_zero
, padic_is_one
, padic_equal
, _padic_lifts_exps
, _padic_lifts_pows
, padic_add
, padic_sub
, padic_neg
, padic_mul
, padic_shift
, padic_div
, _padic_inv_precompute
, _padic_inv_clear
, _padic_inv_precomp
, _padic_inv
, padic_inv
, padic_sqrt
, padic_pow_si
, _padic_exp_bound
, _padic_exp_rectangular
, padic_exp
, padic_exp_rectangular
, padic_exp_balanced
, _padic_log_bound
, _padic_log
, padic_log
, padic_log_rectangular
, padic_log_satoh
, padic_log_balanced
, _padic_teichmuller
, padic_teichmuller
, padic_val_fac_ui_2
, padic_val_fac_ui
, padic_val_fac
, padic_get_str
, _padic_fprint
, _padic_print
, padic_print
, padic_debug
) where
import Control.Monad
import Foreign.C.String
import Foreign.C.Types
import Foreign.ForeignPtr
import Foreign.Ptr ( Ptr, FunPtr, plusPtr, castPtr, nullPtr )
import Foreign.Storable
import Foreign.Marshal ( free, peekArray )
import Data.Number.Flint.Flint
import Data.Number.Flint.Fmpz
import Data.Number.Flint.Fmpq
data Padic = Padic {-# UNPACK #-} !(ForeignPtr CPadic)
data CPadic = CPadic (Ptr CFmpz) CLong CLong
instance Storable CPadic where
{-# INLINE sizeOf #-}
sizeOf :: CPadic -> Int
sizeOf CPadic
_ = (Int
24)
{-# LINE 144 "src/Data/Number/Flint/Padic/FFI.hsc" #-}
{-# INLINE alignment #-}
alignment :: CPadic -> Int
alignment CPadic
_ = Int
8
{-# LINE 146 "src/Data/Number/Flint/Padic/FFI.hsc" #-}
peek ptr = CPadic
<$> (return $ castPtr ptr)
<*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 149 "src/Data/Number/Flint/Padic/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 150 "src/Data/Number/Flint/Padic/FFI.hsc" #-}
poke ptr (CPadic u v n) = do
(\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr u
{-# LINE 152 "src/Data/Number/Flint/Padic/FFI.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr v
{-# LINE 153 "src/Data/Number/Flint/Padic/FFI.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 16) ptr n
{-# LINE 154 "src/Data/Number/Flint/Padic/FFI.hsc" #-}
newPadic :: IO Padic
newPadic = do
ForeignPtr CPadic
p <- forall a. Storable a => IO (ForeignPtr a)
mallocForeignPtr
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CPadic
p Ptr CPadic -> IO ()
padic_init
forall a. FinalizerPtr a -> ForeignPtr a -> IO ()
addForeignPtrFinalizer FunPtr (Ptr CPadic -> IO ())
p_padic_clear ForeignPtr CPadic
p
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ ForeignPtr CPadic -> Padic
Padic ForeignPtr CPadic
p
{-# INLINE withPadic #-}
withPadic :: Padic -> (Ptr CPadic -> IO a) -> IO (Padic, a)
withPadic (Padic ForeignPtr CPadic
p) Ptr CPadic -> IO a
f = do
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CPadic
p forall a b. (a -> b) -> a -> b
$ \Ptr CPadic
fp -> (ForeignPtr CPadic -> Padic
Padic ForeignPtr CPadic
p,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CPadic -> IO a
f Ptr CPadic
fp
{-# INLINE withNewPadic #-}
withNewPadic :: (Ptr CPadic -> IO a) -> IO (Padic, a)
withNewPadic Ptr CPadic -> IO a
f = do
Padic
x <- IO Padic
newPadic
forall {a}. Padic -> (Ptr CPadic -> IO a) -> IO (Padic, a)
withPadic Padic
x Ptr CPadic -> IO a
f
data PadicInv = PadicInv {-# UNPACK #-} !(ForeignPtr CPadicInv)
type CPadicInv = CFlint PadicInv
instance Storable CPadicInv where
{-# INLINE sizeOf #-}
sizeOf :: CPadicInv -> Int
sizeOf CPadicInv
_ = (Int
16)
{-# LINE 181 "src/Data/Number/Flint/Padic/FFI.hsc" #-}
{-# INLINE alignment #-}
alignment :: CPadicInv -> Int
alignment CPadicInv
_ = Int
8
{-# LINE 183 "src/Data/Number/Flint/Padic/FFI.hsc" #-}
peek = error "CPadicInv.peek: Not defined"
poke :: Ptr CPadicInv -> CPadicInv -> IO ()
poke = forall a. HasCallStack => [Char] -> a
error [Char]
"CPadicInv.poke: Not defined"
newPadicInv :: Fmpz -> CLong -> IO PadicInv
newPadicInv Fmpz
x CLong
n = do
ForeignPtr CPadicInv
p <- forall a. Storable a => IO (ForeignPtr a)
mallocForeignPtr
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CPadicInv
p forall a b. (a -> b) -> a -> b
$ \Ptr CPadicInv
p ->
forall {a}. Fmpz -> (Ptr CFmpz -> IO a) -> IO (Fmpz, a)
withFmpz Fmpz
x forall a b. (a -> b) -> a -> b
$ \Ptr CFmpz
x -> Ptr CPadicInv -> Ptr CFmpz -> CLong -> IO ()
_padic_inv_precompute Ptr CPadicInv
p Ptr CFmpz
x CLong
n
forall a. FinalizerPtr a -> ForeignPtr a -> IO ()
addForeignPtrFinalizer FunPtr (Ptr CPadicInv -> IO ())
p_padic_inv_clear ForeignPtr CPadicInv
p
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ ForeignPtr CPadicInv -> PadicInv
PadicInv ForeignPtr CPadicInv
p
{-# INLINE withPadicInv #-}
withPadicInv :: PadicInv -> (Ptr CPadicInv -> IO a) -> IO (PadicInv, a)
withPadicInv (PadicInv ForeignPtr CPadicInv
p) Ptr CPadicInv -> IO a
f =
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CPadicInv
p forall a b. (a -> b) -> a -> b
$ \ Ptr CPadicInv
fp -> (ForeignPtr CPadicInv -> PadicInv
PadicInv ForeignPtr CPadicInv
p,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CPadicInv -> IO a
f Ptr CPadicInv
fp
data PadicCtx = PadicCtx {-# UNPACK #-} !(ForeignPtr CPadicCtx)
data CPadicCtx =
CPadicCtx (Ptr CFmpz) CDouble (Ptr CFmpz) CLong CLong PadicPrintMode
instance Storable CPadicCtx where
{-# INLINE sizeOf #-}
sizeOf :: CPadicCtx -> Int
sizeOf CPadicCtx
_ = (Int
48)
{-# LINE 206 "src/Data/Number/Flint/Padic/FFI.hsc" #-}
{-# INLINE alignment #-}
alignment :: CPadicCtx -> Int
alignment CPadicCtx
_ = Int
8
{-# LINE 208 "src/Data/Number/Flint/Padic/FFI.hsc" #-}
peek ptr = CPadicCtx
<$> (return $ castPtr ptr)
<*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 211 "src/Data/Number/Flint/Padic/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 212 "src/Data/Number/Flint/Padic/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
{-# LINE 213 "src/Data/Number/Flint/Padic/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 32) ptr
{-# LINE 214 "src/Data/Number/Flint/Padic/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 40) ptr
{-# LINE 215 "src/Data/Number/Flint/Padic/FFI.hsc" #-}
poke = undefined
newPadicCtx :: Fmpz -> CLong -> CLong -> PadicPrintMode -> IO PadicCtx
newPadicCtx Fmpz
p CLong
min CLong
max PadicPrintMode
mode = do
ForeignPtr CPadicCtx
ctx <- forall a. Storable a => IO (ForeignPtr a)
mallocForeignPtr
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CPadicCtx
ctx forall a b. (a -> b) -> a -> b
$ \Ptr CPadicCtx
ctx ->
forall {a}. Fmpz -> (Ptr CFmpz -> IO a) -> IO (Fmpz, a)
withFmpz Fmpz
p forall a b. (a -> b) -> a -> b
$ \Ptr CFmpz
p ->
Ptr CPadicCtx
-> Ptr CFmpz -> CLong -> CLong -> PadicPrintMode -> IO ()
padic_ctx_init Ptr CPadicCtx
ctx Ptr CFmpz
p CLong
min CLong
max PadicPrintMode
mode
forall a. FinalizerPtr a -> ForeignPtr a -> IO ()
addForeignPtrFinalizer FunPtr (Ptr CPadicCtx -> IO ())
p_padic_ctx_clear ForeignPtr CPadicCtx
ctx
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ ForeignPtr CPadicCtx -> PadicCtx
PadicCtx ForeignPtr CPadicCtx
ctx
{-# INLINE withPadicCtx #-}
withPadicCtx :: PadicCtx -> (Ptr CPadicCtx -> IO a) -> IO (PadicCtx, a)
withPadicCtx (PadicCtx ForeignPtr CPadicCtx
p) Ptr CPadicCtx -> IO a
f = do
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CPadicCtx
p forall a b. (a -> b) -> a -> b
$ \Ptr CPadicCtx
fp -> (ForeignPtr CPadicCtx -> PadicCtx
PadicCtx ForeignPtr CPadicCtx
p,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CPadicCtx -> IO a
f Ptr CPadicCtx
fp
withNewPadicCtx :: Fmpz
-> CLong
-> CLong
-> PadicPrintMode
-> (Ptr CPadicCtx -> IO a)
-> IO (PadicCtx, a)
withNewPadicCtx Fmpz
p CLong
min CLong
max PadicPrintMode
mode Ptr CPadicCtx -> IO a
f = do
PadicCtx
ctx <- Fmpz -> CLong -> CLong -> PadicPrintMode -> IO PadicCtx
newPadicCtx Fmpz
p CLong
min CLong
max PadicPrintMode
mode
forall {a}. PadicCtx -> (Ptr CPadicCtx -> IO a) -> IO (PadicCtx, a)
withPadicCtx PadicCtx
ctx forall a b. (a -> b) -> a -> b
$ \Ptr CPadicCtx
ctx -> do Ptr CPadicCtx -> IO a
f Ptr CPadicCtx
ctx
padic_unit :: Ptr CPadic -> IO (Ptr CFmpz)
padic_unit :: Ptr CPadic -> IO (Ptr CFmpz)
padic_unit Ptr CPadic
x = 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 CPadic
x
padic_get_val :: Ptr CPadic -> IO CLong
padic_get_val :: Ptr CPadic -> IO CLong
padic_get_val Ptr CPadic
x = do
CPadic Ptr CFmpz
u CLong
v CLong
n <- forall a. Storable a => Ptr a -> IO a
peek Ptr CPadic
x
forall (m :: * -> *) a. Monad m => a -> m a
return CLong
v
padic_get_prec :: Ptr CPadic -> IO CLong
padic_get_prec :: Ptr CPadic -> IO CLong
padic_get_prec Ptr CPadic
x = do
CPadic Ptr CFmpz
u CLong
v CLong
n <- forall a. Storable a => Ptr a -> IO a
peek Ptr CPadic
x
forall (m :: * -> *) a. Monad m => a -> m a
return CLong
n
foreign import ccall "padic.h padic_ctx_init"
padic_ctx_init :: Ptr CPadicCtx
-> Ptr CFmpz -> CLong -> CLong -> PadicPrintMode -> IO ()
foreign import ccall "padic.h padic_ctx_clear"
padic_ctx_clear :: Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h &padic_ctx_clear"
p_padic_ctx_clear :: FunPtr (Ptr CPadicCtx -> IO ())
foreign import ccall "padic.h _padic_ctx_pow_ui"
_padic_ctx_pow_ui :: Ptr CFmpz -> CULong -> Ptr CPadicCtx -> IO CInt
padic_ctx_print :: Ptr CPadicCtx -> IO ()
padic_ctx_print Ptr CPadicCtx
ctx = do
CPadicCtx Ptr CFmpz
p CDouble
pinv Ptr CFmpz
pow CLong
min CLong
max PadicPrintMode
mode <- forall a. Storable a => Ptr a -> IO a
peek Ptr CPadicCtx
ctx
[Char] -> IO ()
putStr [Char]
"p = "
Ptr CFmpz -> IO CInt
fmpz_print Ptr CFmpz
p
[Char] -> IO ()
putStrLn forall a b. (a -> b) -> a -> b
$ [Char]
" (1/pinv = " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> [Char]
show (CDouble
1forall a. Fractional a => a -> a -> a
/CDouble
pinv)
forall a. [a] -> [a] -> [a]
++ [Char]
", min = " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> [Char]
show CLong
min
forall a. [a] -> [a] -> [a]
++ [Char]
", max = " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> [Char]
show CLong
max
forall a. [a] -> [a] -> [a]
++ [Char]
", mode = " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> [Char]
show PadicPrintMode
mode
forall a. [a] -> [a] -> [a]
++ [Char]
")"
newtype PadicPrintMode = PadicPrintMode {PadicPrintMode -> CInt
_PadicPrintMode :: CInt} deriving PadicPrintMode -> PadicPrintMode -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PadicPrintMode -> PadicPrintMode -> Bool
$c/= :: PadicPrintMode -> PadicPrintMode -> Bool
== :: PadicPrintMode -> PadicPrintMode -> Bool
$c== :: PadicPrintMode -> PadicPrintMode -> Bool
Eq
instance Storable PadicPrintMode where
{-# INLINE sizeOf #-}
sizeOf :: PadicPrintMode -> Int
sizeOf PadicPrintMode
_ = forall a. Storable a => a -> Int
sizeOf (forall a. HasCallStack => a
undefined :: CInt)
{-# INLINE alignment #-}
alignment :: PadicPrintMode -> Int
alignment PadicPrintMode
_ = forall a. Storable a => a -> Int
alignment (forall a. HasCallStack => a
undefined :: CInt)
peek :: Ptr PadicPrintMode -> IO PadicPrintMode
peek Ptr PadicPrintMode
ptr = do
CInt
v <- forall a. Storable a => Ptr a -> IO a
peek (forall a b. Ptr a -> Ptr b
castPtr Ptr PadicPrintMode
ptr) :: IO CInt
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ CInt -> PadicPrintMode
PadicPrintMode CInt
v
poke :: Ptr PadicPrintMode -> PadicPrintMode -> IO ()
poke = forall a. HasCallStack => a
undefined
instance Show PadicPrintMode where
show :: PadicPrintMode -> [Char]
show PadicPrintMode
mode
| PadicPrintMode
mode forall a. Eq a => a -> a -> Bool
== PadicPrintMode
padic_terse = [Char]
"PADIC_TERSE"
| PadicPrintMode
mode forall a. Eq a => a -> a -> Bool
== PadicPrintMode
padic_series = [Char]
"PADIC_SERIES"
| PadicPrintMode
mode forall a. Eq a => a -> a -> Bool
== PadicPrintMode
padic_val_unit = [Char]
"PADIC_VAL_UNIT"
| Bool
otherwise = [Char]
"unknown print mode"
padic_terse :: PadicPrintMode
padic_terse = CInt -> PadicPrintMode
PadicPrintMode CInt
0
{-# LINE 345 "src/Data/Number/Flint/Padic/FFI.hsc" #-}
padic_series = PadicPrintMode 1
{-# LINE 346 "src/Data/Number/Flint/Padic/FFI.hsc" #-}
padic_val_unit = PadicPrintMode 2
{-# LINE 347 "src/Data/Number/Flint/Padic/FFI.hsc" #-}
foreign import ccall "padic.h padic_init"
padic_init :: Ptr CPadic -> IO ()
foreign import ccall "padic.h padic_init2"
padic_init2 :: Ptr CPadic -> CLong -> IO ()
foreign import ccall "padic.h padic_clear"
padic_clear :: Ptr CPadic -> IO ()
foreign import ccall "padic.h &padic_clear"
p_padic_clear :: FunPtr (Ptr CPadic -> IO ())
foreign import ccall "padic.h _padic_canonicalise"
_padic_canonicalise :: Ptr CPadic -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h _padic_reduce"
_padic_reduce :: Ptr CPadic -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_reduce"
padic_reduce :: Ptr CPadic -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_randtest"
padic_randtest :: Ptr CPadic -> Ptr CFRandState -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_randtest_not_zero"
padic_randtest_not_zero :: Ptr CPadic -> Ptr CFRandState -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_randtest_int"
padic_randtest_int :: Ptr CPadic -> Ptr CFRandState -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_set"
padic_set :: Ptr CPadic -> Ptr CPadic -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_set_si"
padic_set_si :: Ptr CPadic -> CLong -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_set_ui"
padic_set_ui :: Ptr CPadic -> CULong -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_set_fmpz"
padic_set_fmpz :: Ptr CPadic -> Ptr CFmpz -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_set_fmpq"
padic_set_fmpq :: Ptr CPadic -> Ptr CFmpq -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_set_mpz"
padic_set_mpz :: Ptr CPadic -> Ptr CMpz -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_set_mpq"
padic_set_mpq :: Ptr CPadic -> Ptr CMpq -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_get_fmpz"
padic_get_fmpz :: Ptr CFmpz -> Ptr CPadic -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_get_fmpq"
padic_get_fmpq :: Ptr CFmpq -> Ptr CPadic -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_get_mpz"
padic_get_mpz :: Ptr CMpz -> Ptr CPadic -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_get_mpq"
padic_get_mpq :: Ptr CMpq -> Ptr CPadic -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_swap"
padic_swap :: Ptr CPadic -> Ptr CPadic -> IO ()
foreign import ccall "padic.h padic_zero"
padic_zero :: Ptr CPadic -> IO ()
foreign import ccall "padic.h padic_one"
padic_one :: Ptr CPadic -> IO ()
foreign import ccall "padic.h padic_is_zero"
padic_is_zero :: Ptr CPadic -> IO CInt
foreign import ccall "padic.h padic_is_one"
padic_is_one :: Ptr CPadic -> IO CInt
foreign import ccall "padic.h padic_equal"
padic_equal :: Ptr CPadic -> Ptr CPadic -> IO CInt
foreign import ccall "padic.h _padic_lifts_exps"
_padic_lifts_exps :: Ptr CLong -> CLong -> IO (Ptr CLong)
foreign import ccall "padic.h _padic_lifts_pows"
_padic_lifts_pows :: Ptr CFmpz -> Ptr CLong -> CLong -> Ptr CFmpz -> IO ()
foreign import ccall "padic.h padic_add"
padic_add :: Ptr CPadic -> Ptr CPadic -> Ptr CPadic -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_sub"
padic_sub :: Ptr CPadic -> Ptr CPadic -> Ptr CPadic -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_neg"
padic_neg :: Ptr CPadic -> Ptr CPadic -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_mul"
padic_mul :: Ptr CPadic -> Ptr CPadic -> Ptr CPadic -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_shift"
padic_shift :: Ptr CPadic -> Ptr CPadic -> CLong -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_div"
padic_div :: Ptr CPadic -> Ptr CPadic -> Ptr CPadic -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h _padic_inv_precompute"
_padic_inv_precompute :: Ptr CPadicInv -> Ptr CFmpz -> CLong -> IO ()
foreign import ccall "padic.h _padic_inv_clear"
_padic_inv_clear :: Ptr CPadicInv -> IO ()
foreign import ccall "padic.h &_padic_inv_clear"
p_padic_inv_clear :: FunPtr (Ptr CPadicInv -> IO ())
foreign import ccall "padic.h _padic_inv_precomp"
_padic_inv_precomp :: Ptr CFmpz -> Ptr CFmpz -> Ptr CPadicInv -> IO ()
foreign import ccall "padic.h _padic_inv"
_padic_inv :: Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpz -> CLong -> IO ()
foreign import ccall "padic.h padic_inv"
padic_inv :: Ptr CPadic -> Ptr CPadic -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_sqrt"
padic_sqrt :: Ptr CPadic -> Ptr CPadic -> Ptr CPadicCtx -> IO CInt
foreign import ccall "padic.h padic_pow_si"
padic_pow_si :: Ptr CPadic -> Ptr CPadic -> CLong -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h _padic_exp_bound"
_padic_exp_bound :: CLong -> CLong -> Ptr CFmpz -> IO CLong
foreign import ccall "padic.h _padic_exp_rectangular"
_padic_exp_rectangular :: Ptr CFmpz -> Ptr CFmpz -> CLong -> Ptr CFmpz -> CLong -> IO ()
foreign import ccall "padic.h padic_exp"
padic_exp :: Ptr CPadic -> Ptr CPadic -> Ptr CPadicCtx -> IO CInt
foreign import ccall "padic.h padic_exp_rectangular"
padic_exp_rectangular :: Ptr CPadic -> Ptr CPadic -> Ptr CPadicCtx -> IO CInt
foreign import ccall "padic.h padic_exp_balanced"
padic_exp_balanced :: Ptr CPadic -> Ptr CPadic -> Ptr CPadicCtx -> IO CInt
foreign import ccall "padic.h _padic_log_bound"
_padic_log_bound :: CLong -> CLong -> Ptr CFmpz -> IO CLong
foreign import ccall "padic.h _padic_log"
_padic_log :: Ptr CFmpz -> Ptr CFmpz -> CLong -> Ptr CFmpz -> CLong -> IO ()
foreign import ccall "padic.h padic_log"
padic_log :: Ptr CPadic -> Ptr CPadic -> Ptr CPadicCtx -> IO CInt
foreign import ccall "padic.h padic_log_rectangular"
padic_log_rectangular :: Ptr CPadic -> Ptr CPadic -> Ptr CPadicCtx -> IO CInt
foreign import ccall "padic.h padic_log_satoh"
padic_log_satoh :: Ptr CPadic -> Ptr CPadic -> Ptr CPadicCtx -> IO CInt
foreign import ccall "padic.h padic_log_balanced"
padic_log_balanced :: Ptr CPadic -> Ptr CPadic -> Ptr CPadicCtx -> IO CInt
foreign import ccall "padic.h _padic_teichmuller"
_padic_teichmuller :: Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpz -> CLong -> IO ()
foreign import ccall "padic.h padic_teichmuller"
padic_teichmuller :: Ptr CPadic -> Ptr CPadic -> Ptr CPadicCtx -> IO ()
foreign import ccall "padic.h padic_val_fac_ui_2"
padic_val_fac_ui_2 :: CULong -> IO CULong
foreign import ccall "padic.h padic_val_fac_ui"
padic_val_fac_ui :: CULong -> Ptr CFmpz -> IO CULong
foreign import ccall "padic.h padic_val_fac"
padic_val_fac :: Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpz -> IO ()
foreign import ccall "padic.h padic_get_str"
padic_get_str :: CString -> Ptr CPadic -> Ptr CPadicCtx -> IO CString
foreign import ccall "padic.h _padic_fprint"
_padic_fprint :: Ptr CFile -> Ptr CFmpz -> CLong -> Ptr CPadicCtx -> IO CInt
foreign import ccall "padic.h _padic_print"
_padic_print :: Ptr CFmpz -> CLong -> Ptr CPadicCtx -> IO CInt
padic_print :: Ptr CPadic -> Ptr CPadicCtx -> IO CInt
padic_print :: Ptr CPadic -> Ptr CPadicCtx -> IO CInt
padic_print Ptr CPadic
x 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 (CString -> Ptr CPadic -> Ptr CPadicCtx -> IO CString
padic_get_str forall a. Ptr a
nullPtr) Ptr CPadicCtx
ctx) Ptr CPadic
x
foreign import ccall "padic.h padic_debug"
padic_debug :: Ptr CPadic -> IO ()