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 = (FmpzPolyQ, String) -> String forall a b. (a, b) -> b snd ((FmpzPolyQ, String) -> String) -> (FmpzPolyQ, String) -> String forall a b. (a -> b) -> a -> b $ IO (FmpzPolyQ, String) -> (FmpzPolyQ, String) forall a. IO a -> a unsafePerformIO (IO (FmpzPolyQ, String) -> (FmpzPolyQ, String)) -> IO (FmpzPolyQ, String) -> (FmpzPolyQ, String) forall a b. (a -> b) -> a -> b $ do FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO String) -> IO (FmpzPolyQ, String) forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ p ((Ptr CFmpzPolyQ -> IO String) -> IO (FmpzPolyQ, String)) -> (Ptr CFmpzPolyQ -> IO String) -> IO (FmpzPolyQ, String) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ p -> do String -> (CString -> IO String) -> IO String forall a. String -> (CString -> IO a) -> IO a withCString String "x" ((CString -> IO String) -> IO String) -> (CString -> IO String) -> IO String 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 CString -> IO () forall a. Ptr a -> IO () free CString cs String -> IO String forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return String s instance Quotient FmpzPolyQ FmpzPoly where // :: FmpzPoly -> FmpzPoly -> FmpzPolyQ (//) FmpzPoly x FmpzPoly y = (FmpzPolyQ, (FmpzPoly, (FmpzPoly, ()))) -> FmpzPolyQ forall a b. (a, b) -> a fst ((FmpzPolyQ, (FmpzPoly, (FmpzPoly, ()))) -> FmpzPolyQ) -> (FmpzPolyQ, (FmpzPoly, (FmpzPoly, ()))) -> FmpzPolyQ forall a b. (a -> b) -> a -> b $ IO (FmpzPolyQ, (FmpzPoly, (FmpzPoly, ()))) -> (FmpzPolyQ, (FmpzPoly, (FmpzPoly, ()))) forall a. IO a -> a unsafePerformIO (IO (FmpzPolyQ, (FmpzPoly, (FmpzPoly, ()))) -> (FmpzPolyQ, (FmpzPoly, (FmpzPoly, ())))) -> IO (FmpzPolyQ, (FmpzPoly, (FmpzPoly, ()))) -> (FmpzPolyQ, (FmpzPoly, (FmpzPoly, ()))) forall a b. (a -> b) -> a -> b $ do (Ptr CFmpzPolyQ -> IO (FmpzPoly, (FmpzPoly, ()))) -> IO (FmpzPolyQ, (FmpzPoly, (FmpzPoly, ()))) forall {a}. (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withNewFmpzPolyQ ((Ptr CFmpzPolyQ -> IO (FmpzPoly, (FmpzPoly, ()))) -> IO (FmpzPolyQ, (FmpzPoly, (FmpzPoly, ())))) -> (Ptr CFmpzPolyQ -> IO (FmpzPoly, (FmpzPoly, ()))) -> IO (FmpzPolyQ, (FmpzPoly, (FmpzPoly, ()))) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ poly -> do FmpzPoly -> (Ptr CFmpzPoly -> IO (FmpzPoly, ())) -> IO (FmpzPoly, (FmpzPoly, ())) forall {a}. FmpzPoly -> (Ptr CFmpzPoly -> IO a) -> IO (FmpzPoly, a) withFmpzPoly FmpzPoly x ((Ptr CFmpzPoly -> IO (FmpzPoly, ())) -> IO (FmpzPoly, (FmpzPoly, ()))) -> (Ptr CFmpzPoly -> IO (FmpzPoly, ())) -> IO (FmpzPoly, (FmpzPoly, ())) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPoly x -> do FmpzPoly -> (Ptr CFmpzPoly -> IO ()) -> IO (FmpzPoly, ()) forall {a}. FmpzPoly -> (Ptr CFmpzPoly -> IO a) -> IO (FmpzPoly, a) withFmpzPoly FmpzPoly y ((Ptr CFmpzPoly -> IO ()) -> IO (FmpzPoly, ())) -> (Ptr CFmpzPoly -> IO ()) -> IO (FmpzPoly, ()) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPoly y -> do CFmpzPolyQ Ptr CFmpzPoly p Ptr CFmpzPoly q <- Ptr CFmpzPolyQ -> IO CFmpzPolyQ 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 = (FmpzPoly, (FmpzPolyQ, ())) -> FmpzPoly forall a b. (a, b) -> a fst ((FmpzPoly, (FmpzPolyQ, ())) -> FmpzPoly) -> (FmpzPoly, (FmpzPolyQ, ())) -> FmpzPoly forall a b. (a -> b) -> a -> b $ IO (FmpzPoly, (FmpzPolyQ, ())) -> (FmpzPoly, (FmpzPolyQ, ())) forall a. IO a -> a unsafePerformIO (IO (FmpzPoly, (FmpzPolyQ, ())) -> (FmpzPoly, (FmpzPolyQ, ()))) -> IO (FmpzPoly, (FmpzPolyQ, ())) -> (FmpzPoly, (FmpzPolyQ, ())) forall a b. (a -> b) -> a -> b $ do (Ptr CFmpzPoly -> IO (FmpzPolyQ, ())) -> IO (FmpzPoly, (FmpzPolyQ, ())) forall {a}. (Ptr CFmpzPoly -> IO a) -> IO (FmpzPoly, a) withNewFmpzPoly ((Ptr CFmpzPoly -> IO (FmpzPolyQ, ())) -> IO (FmpzPoly, (FmpzPolyQ, ()))) -> (Ptr CFmpzPoly -> IO (FmpzPolyQ, ())) -> IO (FmpzPoly, (FmpzPolyQ, ())) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPoly poly -> do FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO ()) -> IO (FmpzPolyQ, ()) forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ q ((Ptr CFmpzPolyQ -> IO ()) -> IO (FmpzPolyQ, ())) -> (Ptr CFmpzPolyQ -> IO ()) -> IO (FmpzPolyQ, ()) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ q -> do CFmpzPolyQ Ptr CFmpzPoly num Ptr CFmpzPoly _ <- Ptr CFmpzPolyQ -> IO CFmpzPolyQ 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 = (FmpzPoly, (FmpzPolyQ, ())) -> FmpzPoly forall a b. (a, b) -> a fst ((FmpzPoly, (FmpzPolyQ, ())) -> FmpzPoly) -> (FmpzPoly, (FmpzPolyQ, ())) -> FmpzPoly forall a b. (a -> b) -> a -> b $ IO (FmpzPoly, (FmpzPolyQ, ())) -> (FmpzPoly, (FmpzPolyQ, ())) forall a. IO a -> a unsafePerformIO (IO (FmpzPoly, (FmpzPolyQ, ())) -> (FmpzPoly, (FmpzPolyQ, ()))) -> IO (FmpzPoly, (FmpzPolyQ, ())) -> (FmpzPoly, (FmpzPolyQ, ())) forall a b. (a -> b) -> a -> b $ do (Ptr CFmpzPoly -> IO (FmpzPolyQ, ())) -> IO (FmpzPoly, (FmpzPolyQ, ())) forall {a}. (Ptr CFmpzPoly -> IO a) -> IO (FmpzPoly, a) withNewFmpzPoly ((Ptr CFmpzPoly -> IO (FmpzPolyQ, ())) -> IO (FmpzPoly, (FmpzPolyQ, ()))) -> (Ptr CFmpzPoly -> IO (FmpzPolyQ, ())) -> IO (FmpzPoly, (FmpzPolyQ, ())) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPoly poly -> do FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO ()) -> IO (FmpzPolyQ, ()) forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ q ((Ptr CFmpzPolyQ -> IO ()) -> IO (FmpzPolyQ, ())) -> (Ptr CFmpzPolyQ -> IO ()) -> IO (FmpzPolyQ, ()) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ q -> do CFmpzPolyQ Ptr CFmpzPoly _ Ptr CFmpzPoly den <- Ptr CFmpzPolyQ -> IO CFmpzPolyQ 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 (*) = (Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO ()) -> 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 (+) = (Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO ()) -> 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 (-) = (Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO ()) -> 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_sub abs :: FmpzPolyQ -> FmpzPolyQ abs = FmpzPolyQ -> FmpzPolyQ forall a. HasCallStack => a undefined signum :: FmpzPolyQ -> FmpzPolyQ signum = FmpzPolyQ -> FmpzPolyQ forall a. HasCallStack => a undefined fromInteger :: Integer -> FmpzPolyQ fromInteger Integer x = IO FmpzPolyQ -> FmpzPolyQ forall a. IO a -> a unsafePerformIO (IO FmpzPolyQ -> FmpzPolyQ) -> IO FmpzPolyQ -> FmpzPolyQ forall a b. (a -> b) -> a -> b $ do FmpzPolyQ result <- IO FmpzPolyQ newFmpzPolyQ FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO ()) -> IO (FmpzPolyQ, ()) forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ result ((Ptr CFmpzPolyQ -> IO ()) -> IO (FmpzPolyQ, ())) -> (Ptr CFmpzPolyQ -> IO ()) -> IO (FmpzPolyQ, ()) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ result -> Ptr CFmpzPolyQ -> CLong -> IO () fmpz_poly_q_set_si Ptr CFmpzPolyQ result (Integer -> CLong forall a b. (Integral a, Num b) => a -> b fromIntegral Integer x) FmpzPolyQ -> IO FmpzPolyQ forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return FmpzPolyQ result instance Eq FmpzPolyQ where == :: FmpzPolyQ -> FmpzPolyQ -> Bool (==) FmpzPolyQ x FmpzPolyQ y = (FmpzPolyQ, Bool) -> Bool forall a b. (a, b) -> b snd ((FmpzPolyQ, Bool) -> Bool) -> (FmpzPolyQ, Bool) -> Bool forall a b. (a -> b) -> a -> b $ (FmpzPolyQ, (FmpzPolyQ, Bool)) -> (FmpzPolyQ, Bool) forall a b. (a, b) -> b snd ((FmpzPolyQ, (FmpzPolyQ, Bool)) -> (FmpzPolyQ, Bool)) -> (FmpzPolyQ, (FmpzPolyQ, Bool)) -> (FmpzPolyQ, Bool) forall a b. (a -> b) -> a -> b $ IO (FmpzPolyQ, (FmpzPolyQ, Bool)) -> (FmpzPolyQ, (FmpzPolyQ, Bool)) forall a. IO a -> a unsafePerformIO (IO (FmpzPolyQ, (FmpzPolyQ, Bool)) -> (FmpzPolyQ, (FmpzPolyQ, Bool))) -> IO (FmpzPolyQ, (FmpzPolyQ, Bool)) -> (FmpzPolyQ, (FmpzPolyQ, Bool)) forall a b. (a -> b) -> a -> b $ do FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO (FmpzPolyQ, Bool)) -> IO (FmpzPolyQ, (FmpzPolyQ, Bool)) forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ x ((Ptr CFmpzPolyQ -> IO (FmpzPolyQ, Bool)) -> IO (FmpzPolyQ, (FmpzPolyQ, Bool))) -> (Ptr CFmpzPolyQ -> IO (FmpzPolyQ, Bool)) -> IO (FmpzPolyQ, (FmpzPolyQ, Bool)) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ x -> FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO Bool) -> IO (FmpzPolyQ, Bool) forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ y ((Ptr CFmpzPolyQ -> IO Bool) -> IO (FmpzPolyQ, Bool)) -> (Ptr CFmpzPolyQ -> IO Bool) -> IO (FmpzPolyQ, Bool) 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 Bool -> IO Bool forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return (Bool -> IO Bool) -> Bool -> IO Bool forall a b. (a -> b) -> a -> b $ CInt f CInt -> CInt -> Bool forall a. Eq a => a -> a -> Bool == CInt 1 instance Ord FmpzPolyQ where compare :: FmpzPolyQ -> FmpzPolyQ -> Ordering compare = FmpzPolyQ -> FmpzPolyQ -> Ordering forall a. HasCallStack => a undefined instance Real FmpzPolyQ where toRational :: FmpzPolyQ -> Rational toRational = FmpzPolyQ -> Rational forall a. HasCallStack => a undefined instance Enum FmpzPolyQ where toEnum :: Int -> FmpzPolyQ toEnum = Int -> FmpzPolyQ forall a. HasCallStack => a undefined fromEnum :: FmpzPolyQ -> Int fromEnum = FmpzPolyQ -> Int 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 = IO FmpzPolyQ -> FmpzPolyQ forall a. IO a -> a unsafePerformIO (IO FmpzPolyQ -> FmpzPolyQ) -> IO FmpzPolyQ -> FmpzPolyQ forall a b. (a -> b) -> a -> b $ do FmpzPolyQ result <- IO FmpzPolyQ newFmpzPolyQ FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO (FmpzPolyQ, (FmpzPolyQ, a))) -> IO (FmpzPolyQ, (FmpzPolyQ, (FmpzPolyQ, a))) forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ result ((Ptr CFmpzPolyQ -> IO (FmpzPolyQ, (FmpzPolyQ, a))) -> IO (FmpzPolyQ, (FmpzPolyQ, (FmpzPolyQ, a)))) -> (Ptr CFmpzPolyQ -> IO (FmpzPolyQ, (FmpzPolyQ, a))) -> IO (FmpzPolyQ, (FmpzPolyQ, (FmpzPolyQ, a))) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ result -> do FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO (FmpzPolyQ, a)) -> IO (FmpzPolyQ, (FmpzPolyQ, a)) forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ x ((Ptr CFmpzPolyQ -> IO (FmpzPolyQ, a)) -> IO (FmpzPolyQ, (FmpzPolyQ, a))) -> (Ptr CFmpzPolyQ -> IO (FmpzPolyQ, a)) -> IO (FmpzPolyQ, (FmpzPolyQ, a)) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ x -> do FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ y ((Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a)) -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) 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 FmpzPolyQ -> IO FmpzPolyQ forall a. a -> IO a 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 = IO FmpzPolyQ -> FmpzPolyQ forall a. IO a -> a unsafePerformIO (IO FmpzPolyQ -> FmpzPolyQ) -> IO FmpzPolyQ -> FmpzPolyQ forall a b. (a -> b) -> a -> b $ do FmpzPolyQ result <- IO FmpzPolyQ newFmpzPolyQ FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO (FmpzPolyQ, a)) -> IO (FmpzPolyQ, (FmpzPolyQ, a)) forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ result ((Ptr CFmpzPolyQ -> IO (FmpzPolyQ, a)) -> IO (FmpzPolyQ, (FmpzPolyQ, a))) -> (Ptr CFmpzPolyQ -> IO (FmpzPolyQ, a)) -> IO (FmpzPolyQ, (FmpzPolyQ, a)) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ result -> FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) forall {a}. FmpzPolyQ -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) withFmpzPolyQ FmpzPolyQ x ((Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a)) -> (Ptr CFmpzPolyQ -> IO a) -> IO (FmpzPolyQ, a) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzPolyQ x -> Ptr CFmpzPolyQ -> Ptr CFmpzPolyQ -> IO a f Ptr CFmpzPolyQ result Ptr CFmpzPolyQ x FmpzPolyQ -> IO FmpzPolyQ forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return FmpzPolyQ result