module Data.Number.Flint.Fmpz.Mat.Instances where import System.IO.Unsafe import Foreign.C.String import Foreign.Marshal.Alloc ( free ) import Foreign.Storable import Data.Number.Flint.Fmpz.Mat instance Show FmpzMat where show :: FmpzMat -> String show FmpzMat x = IO String -> String forall a. IO a -> a unsafePerformIO (IO String -> String) -> IO String -> String forall a b. (a -> b) -> a -> b $ do (FmpzMat _, CString cs) <- FmpzMat -> (Ptr CFmpzMat -> IO CString) -> IO (FmpzMat, CString) forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat x Ptr CFmpzMat -> IO CString fmpz_mat_get_str_pretty 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 Eq FmpzMat where == :: FmpzMat -> FmpzMat -> Bool (==) FmpzMat x FmpzMat y = IO Bool -> Bool forall a. IO a -> a unsafePerformIO (IO Bool -> Bool) -> IO Bool -> Bool forall a b. (a -> b) -> a -> b $ do (FmpzMat _, (FmpzMat _, CInt flag)) <- FmpzMat -> (Ptr CFmpzMat -> IO (FmpzMat, CInt)) -> IO (FmpzMat, (FmpzMat, CInt)) forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat x ((Ptr CFmpzMat -> IO (FmpzMat, CInt)) -> IO (FmpzMat, (FmpzMat, CInt))) -> (Ptr CFmpzMat -> IO (FmpzMat, CInt)) -> IO (FmpzMat, (FmpzMat, CInt)) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzMat x -> do FmpzMat -> (Ptr CFmpzMat -> IO CInt) -> IO (FmpzMat, CInt) forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat y ((Ptr CFmpzMat -> IO CInt) -> IO (FmpzMat, CInt)) -> (Ptr CFmpzMat -> IO CInt) -> IO (FmpzMat, CInt) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzMat y -> do Ptr CFmpzMat -> Ptr CFmpzMat -> IO CInt fmpz_mat_equal Ptr CFmpzMat x Ptr CFmpzMat 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 flag CInt -> CInt -> Bool forall a. Eq a => a -> a -> Bool == CInt 1 instance Num FmpzMat where + :: FmpzMat -> FmpzMat -> FmpzMat (+) = (Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO ()) -> FmpzMat -> FmpzMat -> FmpzMat forall {a}. (Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO a) -> FmpzMat -> FmpzMat -> FmpzMat lift2 Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO () fmpz_mat_add (-) = (Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO ()) -> FmpzMat -> FmpzMat -> FmpzMat forall {a}. (Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO a) -> FmpzMat -> FmpzMat -> FmpzMat lift2 Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO () fmpz_mat_sub * :: FmpzMat -> FmpzMat -> FmpzMat (*) = (Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO ()) -> FmpzMat -> FmpzMat -> FmpzMat forall {a}. (Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO a) -> FmpzMat -> FmpzMat -> FmpzMat lift2 Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO () fmpz_mat_mul negate :: FmpzMat -> FmpzMat negate = (Ptr CFmpzMat -> Ptr CFmpzMat -> IO ()) -> FmpzMat -> FmpzMat forall {a}. (Ptr CFmpzMat -> Ptr CFmpzMat -> IO a) -> FmpzMat -> FmpzMat lift1 Ptr CFmpzMat -> Ptr CFmpzMat -> IO () fmpz_mat_neg fromInteger :: Integer -> FmpzMat fromInteger = Integer -> FmpzMat forall a. HasCallStack => a undefined signum :: FmpzMat -> FmpzMat signum = FmpzMat -> FmpzMat forall a. HasCallStack => a undefined abs :: FmpzMat -> FmpzMat abs = FmpzMat -> FmpzMat forall a. HasCallStack => a undefined instance Semigroup FmpzMat where <> :: FmpzMat -> FmpzMat -> FmpzMat (<>) = FmpzMat -> FmpzMat -> FmpzMat forall a. Num a => a -> a -> a (*) lift1 :: (Ptr CFmpzMat -> Ptr CFmpzMat -> IO a) -> FmpzMat -> FmpzMat lift1 Ptr CFmpzMat -> Ptr CFmpzMat -> IO a f FmpzMat x = IO FmpzMat -> FmpzMat forall a. IO a -> a unsafePerformIO (IO FmpzMat -> FmpzMat) -> IO FmpzMat -> FmpzMat forall a b. (a -> b) -> a -> b $ do (FmpzMat _, (CLong nx, CLong mx)) <- FmpzMat -> (Ptr CFmpzMat -> IO (CLong, CLong)) -> IO (FmpzMat, (CLong, CLong)) forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat x ((Ptr CFmpzMat -> IO (CLong, CLong)) -> IO (FmpzMat, (CLong, CLong))) -> (Ptr CFmpzMat -> IO (CLong, CLong)) -> IO (FmpzMat, (CLong, CLong)) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzMat x -> do CFmpzMat Ptr CFmpz _ CLong nx CLong mx Ptr (Ptr CFmpz) _ <- Ptr CFmpzMat -> IO CFmpzMat forall a. Storable a => Ptr a -> IO a peek Ptr CFmpzMat x (CLong, CLong) -> IO (CLong, CLong) forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return (CLong nx, CLong mx) FmpzMat result <- CLong -> CLong -> IO FmpzMat newFmpzMat CLong nx CLong mx FmpzMat -> (Ptr CFmpzMat -> IO (FmpzMat, a)) -> IO (FmpzMat, (FmpzMat, a)) forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat x ((Ptr CFmpzMat -> IO (FmpzMat, a)) -> IO (FmpzMat, (FmpzMat, a))) -> (Ptr CFmpzMat -> IO (FmpzMat, a)) -> IO (FmpzMat, (FmpzMat, a)) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzMat x -> do FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat result ((Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a)) -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzMat result -> do Ptr CFmpzMat -> Ptr CFmpzMat -> IO a f Ptr CFmpzMat result Ptr CFmpzMat x FmpzMat -> IO FmpzMat forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return FmpzMat result lift2 :: (Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO a) -> FmpzMat -> FmpzMat -> FmpzMat lift2 Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO a f FmpzMat x FmpzMat y = IO FmpzMat -> FmpzMat forall a. IO a -> a unsafePerformIO (IO FmpzMat -> FmpzMat) -> IO FmpzMat -> FmpzMat forall a b. (a -> b) -> a -> b $ do (FmpzMat _, (CLong nx, CLong mx)) <- FmpzMat -> (Ptr CFmpzMat -> IO (CLong, CLong)) -> IO (FmpzMat, (CLong, CLong)) forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat x ((Ptr CFmpzMat -> IO (CLong, CLong)) -> IO (FmpzMat, (CLong, CLong))) -> (Ptr CFmpzMat -> IO (CLong, CLong)) -> IO (FmpzMat, (CLong, CLong)) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzMat x -> do CFmpzMat Ptr CFmpz _ CLong nx CLong mx Ptr (Ptr CFmpz) _ <- Ptr CFmpzMat -> IO CFmpzMat forall a. Storable a => Ptr a -> IO a peek Ptr CFmpzMat x (CLong, CLong) -> IO (CLong, CLong) forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return (CLong nx, CLong mx) (FmpzMat _, (CLong ny, CLong my)) <- FmpzMat -> (Ptr CFmpzMat -> IO (CLong, CLong)) -> IO (FmpzMat, (CLong, CLong)) forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat y ((Ptr CFmpzMat -> IO (CLong, CLong)) -> IO (FmpzMat, (CLong, CLong))) -> (Ptr CFmpzMat -> IO (CLong, CLong)) -> IO (FmpzMat, (CLong, CLong)) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzMat y -> do CFmpzMat Ptr CFmpz _ CLong ny CLong my Ptr (Ptr CFmpz) _ <- Ptr CFmpzMat -> IO CFmpzMat forall a. Storable a => Ptr a -> IO a peek Ptr CFmpzMat y (CLong, CLong) -> IO (CLong, CLong) forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return (CLong ny, CLong my) FmpzMat result <- CLong -> CLong -> IO FmpzMat newFmpzMat CLong nx CLong my FmpzMat -> (Ptr CFmpzMat -> IO (FmpzMat, (FmpzMat, a))) -> IO (FmpzMat, (FmpzMat, (FmpzMat, a))) forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat result ((Ptr CFmpzMat -> IO (FmpzMat, (FmpzMat, a))) -> IO (FmpzMat, (FmpzMat, (FmpzMat, a)))) -> (Ptr CFmpzMat -> IO (FmpzMat, (FmpzMat, a))) -> IO (FmpzMat, (FmpzMat, (FmpzMat, a))) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzMat z -> do FmpzMat -> (Ptr CFmpzMat -> IO (FmpzMat, a)) -> IO (FmpzMat, (FmpzMat, a)) forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat x ((Ptr CFmpzMat -> IO (FmpzMat, a)) -> IO (FmpzMat, (FmpzMat, a))) -> (Ptr CFmpzMat -> IO (FmpzMat, a)) -> IO (FmpzMat, (FmpzMat, a)) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzMat x -> do FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) forall {a}. FmpzMat -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) withFmpzMat FmpzMat y ((Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a)) -> (Ptr CFmpzMat -> IO a) -> IO (FmpzMat, a) forall a b. (a -> b) -> a -> b $ \Ptr CFmpzMat y -> do Ptr CFmpzMat -> Ptr CFmpzMat -> Ptr CFmpzMat -> IO a f Ptr CFmpzMat z Ptr CFmpzMat x Ptr CFmpzMat y FmpzMat -> IO FmpzMat forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return FmpzMat result