{-# LINE 1 "src/Data/Number/Flint/Fq/NMod/Poly/Factor/FFI.hsc" #-}
module Data.Number.Flint.Fq.NMod.Poly.Factor.FFI (
FqNModPolyFactor (..)
, CFqNModPolyFactor (..)
, newFqNModPolyFactor
, withFqNModPolyFactor
, fq_nmod_poly_factor_init
, fq_nmod_poly_factor_clear
, fq_nmod_poly_factor_realloc
, fq_nmod_poly_factor_fit_length
, fq_nmod_poly_factor_set
, fq_nmod_poly_factor_print_pretty
, fq_nmod_poly_factor_print
, fq_nmod_poly_factor_insert
, fq_nmod_poly_factor_concat
, fq_nmod_poly_factor_pow
, fq_nmod_poly_remove
, fq_nmod_poly_is_irreducible
, fq_nmod_poly_is_irreducible_ddf
, fq_nmod_poly_is_irreducible_ben_or
, _fq_nmod_poly_is_squarefree
, fq_nmod_poly_is_squarefree
, fq_nmod_poly_factor_equal_deg_prob
, fq_nmod_poly_factor_equal_deg
, fq_nmod_poly_factor_split_single
, fq_nmod_poly_factor_distinct_deg
, fq_nmod_poly_factor_squarefree
, fq_nmod_poly_factor
, fq_nmod_poly_factor_cantor_zassenhaus
, fq_nmod_poly_factor_kaltofen_shoup
, fq_nmod_poly_factor_berlekamp
, fq_nmod_poly_factor_with_berlekamp
, fq_nmod_poly_factor_with_cantor_zassenhaus
, fq_nmod_poly_factor_with_kaltofen_shoup
, fq_nmod_poly_iterated_frobenius_preinv
, fq_nmod_poly_roots
) where
import Control.Monad
import Foreign.C.String
import Foreign.C.Types
import qualified Foreign.Concurrent
import Foreign.ForeignPtr
import Foreign.Ptr ( Ptr, FunPtr, plusPtr )
import Foreign.Marshal.Array ( advancePtr )
import Foreign.Storable
import Foreign.Marshal ( free )
import Data.Number.Flint.Flint
import Data.Number.Flint.Fmpz
import Data.Number.Flint.Fmpz.Mod.Poly
import Data.Number.Flint.NMod.Poly
import Data.Number.Flint.NMod.Mat
import Data.Number.Flint.Fq
import Data.Number.Flint.Fq.Types
import Data.Number.Flint.Fq.NMod
import Data.Number.Flint.Fq.NMod.Mat
import Data.Number.Flint.Fq.NMod
import Data.Number.Flint.Fq.NMod.Poly
import Data.Number.Flint.Fq.NMod.Types
instance Storable CFqNModPolyFactor where
{-# INLINE sizeOf #-}
sizeOf :: CFqNModPolyFactor -> Int
sizeOf CFqNModPolyFactor
_ = (Int
32)
{-# LINE 91 "src/Data/Number/Flint/Fq/NMod/Poly/Factor/FFI.hsc" #-}
{-# INLINE alignment #-}
alignment :: CFqNModPolyFactor -> Int
alignment CFqNModPolyFactor
_ = Int
8
{-# LINE 93 "src/Data/Number/Flint/Fq/NMod/Poly/Factor/FFI.hsc" #-}
peek ptr = CFqNModPolyFactor
<$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 95 "src/Data/Number/Flint/Fq/NMod/Poly/Factor/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
{-# LINE 96 "src/Data/Number/Flint/Fq/NMod/Poly/Factor/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
{-# LINE 97 "src/Data/Number/Flint/Fq/NMod/Poly/Factor/FFI.hsc" #-}
<*> (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
{-# LINE 98 "src/Data/Number/Flint/Fq/NMod/Poly/Factor/FFI.hsc" #-}
poke = undefined
newFqNModPolyFactor :: FqNModCtx -> IO FqNModPolyFactor
newFqNModPolyFactor ctx :: FqNModCtx
ctx@(FqNModCtx ForeignPtr CFqNModCtx
ftx) = do
ForeignPtr CFqNModPolyFactor
x <- forall a. Storable a => IO (ForeignPtr a)
mallocForeignPtr
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CFqNModPolyFactor
x forall a b. (a -> b) -> a -> b
$ \Ptr CFqNModPolyFactor
x -> do
forall {a}.
FqNModCtx -> (Ptr CFqNModCtx -> IO a) -> IO (FqNModCtx, a)
withFqNModCtx FqNModCtx
ctx forall a b. (a -> b) -> a -> b
$ \Ptr CFqNModCtx
ctx -> do
Ptr CFqNModPolyFactor -> Ptr CFqNModCtx -> IO ()
fq_nmod_poly_factor_init Ptr CFqNModPolyFactor
x Ptr CFqNModCtx
ctx
forall env a.
FinalizerEnvPtr env a -> Ptr env -> ForeignPtr a -> IO ()
addForeignPtrFinalizerEnv FunPtr (Ptr CFqNModPolyFactor -> Ptr CFqNModCtx -> IO ())
p_fq_nmod_poly_factor_clear Ptr CFqNModPolyFactor
x ForeignPtr CFqNModCtx
ftx
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ ForeignPtr CFqNModPolyFactor -> FqNModPolyFactor
FqNModPolyFactor ForeignPtr CFqNModPolyFactor
x
{-# INLINE withFqNModPolyFactor #-}
withFqNModPolyFactor :: FqNModPolyFactor
-> (Ptr CFqNModPolyFactor -> IO a) -> IO (FqNModPolyFactor, a)
withFqNModPolyFactor (FqNModPolyFactor ForeignPtr CFqNModPolyFactor
x) Ptr CFqNModPolyFactor -> IO a
f = do
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CFqNModPolyFactor
x forall a b. (a -> b) -> a -> b
$ \Ptr CFqNModPolyFactor
px -> Ptr CFqNModPolyFactor -> IO a
f Ptr CFqNModPolyFactor
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 CFqNModPolyFactor -> FqNModPolyFactor
FqNModPolyFactor ForeignPtr CFqNModPolyFactor
x,)
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor_init"
fq_nmod_poly_factor_init :: Ptr CFqNModPolyFactor -> Ptr CFqNModCtx -> IO ()
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor_clear"
fq_nmod_poly_factor_clear :: Ptr CFqNModPolyFactor -> Ptr CFqNModCtx -> IO ()
foreign import ccall "fq_nmod_poly_factor.h &fq_nmod_poly_factor_clear"
p_fq_nmod_poly_factor_clear :: FunPtr (Ptr CFqNModPolyFactor -> Ptr CFqNModCtx -> IO ())
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor_realloc"
fq_nmod_poly_factor_realloc :: Ptr CFqNModPolyFactor -> CLong -> Ptr CFqNModCtx -> IO ()
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor_fit_length"
fq_nmod_poly_factor_fit_length :: Ptr CFqNModPolyFactor -> CLong -> Ptr CFqNModCtx -> IO ()
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor_set"
fq_nmod_poly_factor_set :: Ptr CFqNModPolyFactor -> Ptr CFqNModPolyFactor -> Ptr CFqNModCtx -> IO ()
fq_nmod_poly_factor_print_pretty :: Ptr CFqNModPolyFactor
-> CString
-> Ptr CFqNModCtx
-> IO ()
fq_nmod_poly_factor_print_pretty :: Ptr CFqNModPolyFactor -> CString -> Ptr CFqNModCtx -> IO ()
fq_nmod_poly_factor_print_pretty Ptr CFqNModPolyFactor
fac CString
var Ptr CFqNModCtx
ctx = do
CFqNModPolyFactor Ptr CFqNModPoly
poly Ptr CLong
exp CLong
num CLong
alloc <- forall a. Storable a => Ptr a -> IO a
peek Ptr CFqNModPolyFactor
fac
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ [Int
0 .. forall a b. (Integral a, Num b) => a -> b
fromIntegral CLong
num forall a. Num a => a -> a -> a
- Int
1] forall a b. (a -> b) -> a -> b
$ \Int
j -> do
Ptr CFqNModPoly -> CString -> Ptr CFqNModCtx -> IO CInt
fq_nmod_poly_print_pretty (Ptr CFqNModPoly
poly forall a. Storable a => Ptr a -> Int -> Ptr a
`advancePtr` Int
j) CString
var Ptr CFqNModCtx
ctx
String -> IO ()
putStr String
" ^ "
CLong
e <- forall a. Storable a => Ptr a -> IO a
peek (Ptr CLong
exp forall a. Storable a => Ptr a -> Int -> Ptr a
`advancePtr` Int
j)
String -> IO ()
putStrLn forall a b. (a -> b) -> a -> b
$ forall a. Show a => a -> String
show CLong
e
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor_print"
fq_nmod_poly_factor_print :: Ptr CFqNModPolyFactor -> Ptr CFqNModCtx -> IO ()
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor_insert"
fq_nmod_poly_factor_insert :: Ptr CFqNModPolyFactor -> Ptr CFqNModPoly -> CLong -> Ptr CFqNModCtx -> IO ()
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor_concat"
fq_nmod_poly_factor_concat :: Ptr CFqNModPolyFactor -> Ptr CFqNModPolyFactor -> Ptr CFqNModCtx -> IO ()
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor_pow"
fq_nmod_poly_factor_pow :: Ptr CFqNModPolyFactor -> CLong -> Ptr CFqNModCtx -> IO ()
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_remove"
fq_nmod_poly_remove :: Ptr CFqNModPoly -> Ptr CFqNModPoly -> Ptr CFqNModCtx -> IO CULong
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_is_irreducible"
fq_nmod_poly_is_irreducible :: Ptr CFqNModPoly -> Ptr CFqNModCtx -> IO CInt
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_is_irreducible_ddf"
fq_nmod_poly_is_irreducible_ddf :: Ptr CFqNModPoly -> Ptr CFqNModCtx -> IO CInt
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_is_irreducible_ben_or"
fq_nmod_poly_is_irreducible_ben_or :: Ptr CFqNModPoly -> Ptr CFqNModCtx -> IO CInt
foreign import ccall "fq_nmod_poly_factor.h _fq_nmod_poly_is_squarefree"
_fq_nmod_poly_is_squarefree :: Ptr (Ptr CFqNMod) -> CLong -> Ptr CFqNModCtx -> IO CInt
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_is_squarefree"
fq_nmod_poly_is_squarefree :: Ptr CFqNModPoly -> Ptr CFqNModCtx -> IO CInt
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor_equal_deg_prob"
fq_nmod_poly_factor_equal_deg_prob :: Ptr CFqNModPoly -> Ptr CFRandState -> Ptr CFqNModPoly -> CLong -> Ptr CFqNModCtx -> IO CInt
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor_equal_deg"
fq_nmod_poly_factor_equal_deg :: Ptr CFqNModPolyFactor -> Ptr CFqNModPoly -> CLong -> Ptr CFqNModCtx -> IO ()
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor_split_single"
fq_nmod_poly_factor_split_single :: Ptr CFqNModPoly -> Ptr CFqNModPoly -> Ptr CFqNModCtx -> IO ()
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor_distinct_deg"
fq_nmod_poly_factor_distinct_deg :: Ptr CFqNModPolyFactor -> Ptr CFqNModPoly -> Ptr (Ptr CLong) -> Ptr CFqNModCtx -> IO ()
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor_squarefree"
fq_nmod_poly_factor_squarefree :: Ptr CFqNModPolyFactor -> Ptr CFqNModPoly -> Ptr CFqNModCtx -> IO ()
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor"
fq_nmod_poly_factor :: Ptr CFqNModPolyFactor -> Ptr CFqNMod -> Ptr CFqNModPoly -> Ptr CFqNModCtx -> IO ()
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor_cantor_zassenhaus"
fq_nmod_poly_factor_cantor_zassenhaus :: Ptr CFqNModPolyFactor -> Ptr CFqNModPoly -> Ptr CFqNModCtx -> IO ()
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor_kaltofen_shoup"
fq_nmod_poly_factor_kaltofen_shoup :: Ptr CFqNModPolyFactor -> Ptr CFqNModPoly -> Ptr CFqNModCtx -> IO ()
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor_berlekamp"
fq_nmod_poly_factor_berlekamp :: Ptr CFqNModPolyFactor -> Ptr CFqNModPoly -> Ptr CFqNModCtx -> IO ()
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor_with_berlekamp"
fq_nmod_poly_factor_with_berlekamp :: Ptr CFqNModPolyFactor -> Ptr CFqNMod -> Ptr CFqNModPoly -> Ptr CFqNModCtx -> IO ()
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor_with_cantor_zassenhaus"
fq_nmod_poly_factor_with_cantor_zassenhaus :: Ptr CFqNModPolyFactor -> Ptr CFqNMod -> Ptr CFqNModPoly -> Ptr CFqNModCtx -> IO ()
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_factor_with_kaltofen_shoup"
fq_nmod_poly_factor_with_kaltofen_shoup :: Ptr CFqNModPolyFactor -> Ptr CFqNMod -> Ptr CFqNModPoly -> Ptr CFqNModCtx -> IO ()
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_iterated_frobenius_preinv"
fq_nmod_poly_iterated_frobenius_preinv :: Ptr (Ptr CFqNModPoly) -> CLong -> Ptr CFqNModPoly -> Ptr CFqNModPoly -> Ptr CFqNModCtx -> IO ()
foreign import ccall "fq_nmod_poly_factor.h fq_nmod_poly_roots"
fq_nmod_poly_roots :: Ptr CFqNModPolyFactor -> Ptr CFqNModPoly -> CInt -> Ptr CFqNModCtx -> IO ()