{-# OPTIONS_HADDOCK hide, prune, ignore-exports #-} module Data.Number.Flint.Fmpz.Poly.Q.Instances ( FmpzPolyQ (..) ) where import Test.QuickCheck import GHC.Exts import System.IO.Unsafe import Control.Monad import Foreign.Ptr import Foreign.C.String import Foreign.Storable import Foreign.Marshal.Alloc (free) import Foreign.Marshal.Array (advancePtr) import Data.Number.Flint.Quotient import Data.Number.Flint.Fmpz import Data.Number.Flint.Fmpz.Instances import Data.Number.Flint.Fmpz.Poly import Data.Number.Flint.Fmpz.Poly.Factor import Data.Number.Flint.Fmpz.Poly.Q instance Show FmpzPolyQ where show :: FmpzPolyQ -> String show FmpzPolyQ p = forall a b. (a, b) -> b snd forall a b. (a -> b) -> a -> b $ forall a. IO a -> a unsafePerformIO forall a b. (a -> b) -> a -> b $ do forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ p forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ p -> do forall a. String -> (CString -> IO a) -> IO a withCString String "x" forall a b. (a -> b) -> a -> b $ \CString x -> do CString cs <- Ptr CFmpzPolyQ -> CString -> IO CString fmpz_poly_q_get_str_pretty Ptr CFmpzPolyQ p CString x String s <- CString -> IO String peekCString CString cs forall a. Ptr a -> IO () free CString cs forall (m :: * -> *) a. Monad m => a -> m a return String s instance Quotient FmpzPolyQ FmpzPoly where // :: FmpzPoly -> FmpzPoly -> FmpzPolyQ (//) FmpzPoly x FmpzPoly y = forall a b. (a, b) -> a fst forall a b. (a -> b) -> a -> b $ forall a. IO a -> a unsafePerformIO forall a b. (a -> b) -> a -> b $ do forall {a}. (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withNewFmpzPolyQ forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ poly -> do forall {a}. FmpzPoly -> (Ptr CFmpzPoly -> IO a) -> IO (FmpzPoly, a) withFmpzPoly FmpzPoly x forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPoly x -> do forall {a}. FmpzPoly -> (Ptr CFmpzPoly -> IO a) -> IO (FmpzPoly, a) withFmpzPoly FmpzPoly y forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPoly y -> do CFmpzPolyQ Ptr CFmpzPoly p Ptr CFmpzPoly q <- forall a. Storable a => Ptr a -> IO a peek Ptr CFmpzPolyQ poly Ptr CFmpzPoly -> Ptr CFmpzPoly -> IO () fmpz_poly_set Ptr CFmpzPoly p Ptr CFmpzPoly x Ptr CFmpzPoly -> Ptr CFmpzPoly -> IO () fmpz_poly_set Ptr CFmpzPoly q Ptr CFmpzPoly y numerator :: FmpzPolyQ -> FmpzPoly numerator FmpzPolyQ q = forall a b. (a, b) -> a fst forall a b. (a -> b) -> a -> b $ forall a. IO a -> a unsafePerformIO forall a b. (a -> b) -> a -> b $ do forall {a}. (Ptr CFmpzPoly -> IO a) -> IO (FmpzPoly, a) withNewFmpzPoly forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPoly poly -> do forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ q forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ q -> do CFmpzPolyQ Ptr CFmpzPoly num Ptr CFmpzPoly _ <- forall a. Storable a => Ptr a -> IO a peek Ptr CFmpzPolyQ q Ptr CFmpzPoly -> Ptr CFmpzPoly -> IO () fmpz_poly_set Ptr CFmpzPoly poly Ptr CFmpzPoly num denominator :: FmpzPolyQ -> FmpzPoly denominator FmpzPolyQ q = forall a b. (a, b) -> a fst forall a b. (a -> b) -> a -> b $ forall a. IO a -> a unsafePerformIO forall a b. (a -> b) -> a -> b $ do forall {a}. (Ptr CFmpzPoly -> IO a) -> IO (FmpzPoly, a) withNewFmpzPoly forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPoly poly -> do forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ q forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ q -> do CFmpzPolyQ Ptr CFmpzPoly _ Ptr CFmpzPoly den <- forall a. Storable a => Ptr a -> IO a peek Ptr CFmpzPolyQ q Ptr CFmpzPoly -> Ptr CFmpzPoly -> IO () fmpz_poly_set Ptr CFmpzPoly poly Ptr CFmpzPoly den instance Num FmpzPolyQ where * :: FmpzPolyQ -> FmpzPolyQ -> FmpzPolyQ (*) = forall {a}. (Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO a) -> FmpzPolyQ -> FmpzPolyQ -> FmpzPolyQ lift2 Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO () fmpz_poly_q_mul + :: FmpzPolyQ -> FmpzPolyQ -> FmpzPolyQ (+) = forall {a}. (Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO a) -> FmpzPolyQ -> FmpzPolyQ -> FmpzPolyQ lift2 Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO () fmpz_poly_q_add (-) = forall {a}. (Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO a) -> FmpzPolyQ -> FmpzPolyQ -> FmpzPolyQ lift2 Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO () fmpz_poly_q_sub abs :: FmpzPolyQ -> FmpzPolyQ abs = forall a. HasCallStack => a undefined signum :: FmpzPolyQ -> FmpzPolyQ signum = forall a. HasCallStack => a undefined fromInteger :: Integer -> FmpzPolyQ fromInteger Integer x = forall a. IO a -> a unsafePerformIO forall a b. (a -> b) -> a -> b $ do FmpzPolyQ result <- IO FmpzPolyQ newFmpzPolyQ forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ result forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ result -> Ptr CFmpzPolyQ -> CLong -> IO () fmpz_poly_q_set_si Ptr CFmpzPolyQ result (forall a b. (Integral a, Num b) => a -> b fromIntegral Integer x) forall (m :: * -> *) a. Monad m => a -> m a return FmpzPolyQ result instance Eq FmpzPolyQ where == :: FmpzPolyQ -> FmpzPolyQ -> Bool (==) FmpzPolyQ x FmpzPolyQ y = forall a b. (a, b) -> b snd forall a b. (a -> b) -> a -> b $ forall a b. (a, b) -> b snd forall a b. (a -> b) -> a -> b $ forall a. IO a -> a unsafePerformIO forall a b. (a -> b) -> a -> b $ do forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ x forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ x -> forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ y forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ y -> do CInt f <- Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO CInt fmpz_poly_q_equal Ptr CFmpzPolyQ x Ptr CFmpzPolyQ y forall (m :: * -> *) a. Monad m => a -> m a return forall a b. (a -> b) -> a -> b $ CInt f forall a. Eq a => a -> a -> Bool == CInt 1 instance Ord FmpzPolyQ where compare :: FmpzPolyQ -> FmpzPolyQ -> Ordering compare = forall a. HasCallStack => a undefined instance Real FmpzPolyQ where toRational :: FmpzPolyQ -> Rational toRational = forall a. HasCallStack => a undefined instance Enum FmpzPolyQ where toEnum :: Int -> FmpzPolyQ toEnum = forall a. HasCallStack => a undefined fromEnum :: FmpzPolyQ -> Int fromEnum = forall a. HasCallStack => a undefined lift2 :: (Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO a) -> FmpzPolyQ -> FmpzPolyQ -> FmpzPolyQ lift2 Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO a f FmpzPolyQ x FmpzPolyQ y = forall a. IO a -> a unsafePerformIO forall a b. (a -> b) -> a -> b $ do FmpzPolyQ result <- IO FmpzPolyQ newFmpzPolyQ forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ result forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ result -> do forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ x forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ x -> do forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ y forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ y -> do Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO a f Ptr CFmpzPolyQ result Ptr CFmpzPolyQ x Ptr CFmpzPolyQ y forall (m :: * -> *) a. Monad m => a -> m a return FmpzPolyQ result lift1 :: (Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO a) -> FmpzPolyQ -> FmpzPolyQ lift1 Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO a f FmpzPolyQ x = forall a. IO a -> a unsafePerformIO forall a b. (a -> b) -> a -> b $ do FmpzPolyQ result <- IO FmpzPolyQ newFmpzPolyQ forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ result forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ result -> forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ x forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ x -> Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO a f Ptr CFmpzPolyQ result Ptr CFmpzPolyQ x forall (m :: * -> *) a. Monad m => a -> m a return FmpzPolyQ result