packages feed

computational-algebra-0.4.0.0: bench/bench.hs

{-# LANGUAGE DataKinds, FlexibleContexts, FlexibleInstances, GADTs            #-}
{-# LANGUAGE MultiParamTypeClasses, OverloadedStrings, PolyKinds, QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell, UndecidableInstances, DataKinds, NoImplicitPrelude   #-}
{-# OPTIONS_GHC -fno-warn-type-defaults -fno-warn-orphans #-}
import Algebra.Algorithms.Groebner
import Algebra.Prelude
import Control.DeepSeq
import Control.Parallel.Strategies
import Criterion.Main

i1, i2, i4 :: [OrderedPolynomial (Fraction Integer) Grevlex 3]
(i1, i2, i4) = ([x^2 + y^2 + z^2 - 1, x^2 + y^2 + z^2 - 2*x, 2*x -3*y - z],
                [x^2 * y - 2*x*y - 4*z - 1, z-y^2, x^3 - 4*z*y],
                [ z^5 + y^4 + x^3 - 1, z^3 + y^3 + x^2 - 1]
               )
  where
    [x,y,z] = vars

i3 :: [OrderedPolynomial Rational Grevlex 6]
i3 = [ 2 * s - a * y, b^2 - (x^2 + y^2), c^2 - ( (a-x) ^ 2 + y^2)]
  where
    [x,y,s,a,b,c] = vars

main :: IO ()
main = do
  defaultMain $ [ env (return $! toIdeal $ map (changeOrder Lex) i1) $ \ ~ideal ->
                   bgroup "lex01"
                   [ bench "simple" $ nf simpleBuchberger ideal
                   , bench "relprime" $ nf primeTestBuchberger ideal
                   , bench "syzygy" $ nf (syzygyBuchbergerWithStrategy NormalStrategy) ideal
                   , bench "syz+sugar" $ nf syzygyBuchberger  ideal
                   ]
                , env (return $! toIdeal $ map (changeOrder Grlex) i1) $ \ ~ideal ->
                   bgroup "grlex01"
                   [ bench "simple" $ nf simpleBuchberger ideal
                   , bench "relprime" $ nf primeTestBuchberger ideal
                   , bench "syzygy" $ nf (syzygyBuchbergerWithStrategy NormalStrategy) ideal
                   , bench "syz+sugar" $ nf syzygyBuchberger  ideal
                   ]
                , env (return $! toIdeal $ map (changeOrder Grevlex) i1) $ \ ~ideal ->
                   bgroup "grevlex01"
                   [ bench "simple" $ nf simpleBuchberger ideal
                   , bench "relprime" $ nf primeTestBuchberger ideal
                   , bench "syzygy" $ nf (syzygyBuchbergerWithStrategy NormalStrategy) ideal
                   , bench "syz+sugar" $ nf syzygyBuchberger  ideal
                   ]
                , env (return $! toIdeal $ map (changeOrder Grlex) i2) $ \ ~ideal ->
                   bgroup "grlex02"
                   [ bench "simple" $ nf simpleBuchberger ideal
                   , bench "relprime" $ nf primeTestBuchberger ideal
                   , bench "syzygy" $ nf (syzygyBuchbergerWithStrategy NormalStrategy) ideal
                   , bench "syz+sugar" $ nf syzygyBuchberger  ideal
                   ]
                , env (return $! toIdeal $ map (changeOrder Grevlex) i2) $ \ ~ideal ->
                   bgroup "grevlex02"
                   [ bench "simple" $ nf simpleBuchberger ideal
                   , bench "relprime" $ nf primeTestBuchberger ideal
                   , bench "syzygy" $ nf (syzygyBuchbergerWithStrategy NormalStrategy) ideal
                   , bench "syz+sugar" $ nf syzygyBuchberger  ideal
                     --    -- , bench "singular" $ nfIO (singularWith Grevlex ideal)
                   ]
                , env (return $! toIdeal $ map (changeOrder Lex) i3) $ \ ~ideal ->
                   bgroup "lex03"
                   [ bench "simple" $ nf simpleBuchberger ideal
                   , bench "relprime" $ nf primeTestBuchberger ideal
                   , bench "syzygy" $ nf (syzygyBuchbergerWithStrategy NormalStrategy) ideal
                   , bench "syz+sugar" $ nf syzygyBuchberger  ideal
                     --    -- , bench "singular" $ nfIO (singularWith Grevlex ideal)
                   ]
                , env (return $! toIdeal $ map (changeOrder Grlex) i3) $ \ ~ideal ->
                   bgroup "grlex03"
                   [ bench "simple" $ nf simpleBuchberger ideal
                   , bench "relprime" $ nf primeTestBuchberger ideal
                   , bench "syzygy" $ nf (syzygyBuchbergerWithStrategy NormalStrategy) ideal
                   , bench "syz+sugar" $ nf syzygyBuchberger  ideal
                     --    -- , bench "singular" $ nfIO (singularWith Grevlex ideal)
                   ]
                , env (return $! toIdeal $ map (changeOrder Grevlex) i3) $ \ ~ideal ->
                   bgroup "grevlex03"
                   [ bench "simple" $ nf simpleBuchberger ideal
                   , bench "relprime" $ nf primeTestBuchberger ideal
                   , bench "syzygy" $ nf (syzygyBuchbergerWithStrategy NormalStrategy) ideal
                   , bench "syz+sugar" $ nf syzygyBuchberger  ideal
                     --    -- , bench "singular" $ nfIO (singularWith Grevlex ideal)
                   ]
                , env (return $! toIdeal $ map (changeOrder Grlex) i4) $ \ ~ideal ->
                   bgroup "grlex04"
                   [ bench "simple" $ nf simpleBuchberger ideal
                   , bench "relprime" $ nf primeTestBuchberger ideal
                   , bench "syzygy" $ nf (syzygyBuchbergerWithStrategy NormalStrategy) ideal
                   , bench "syz+sugar" $ nf syzygyBuchberger  ideal
                     --    -- , bench "singular" $ nfIO (singularWith Grevlex ideal)
                   ]
                , env (return $! toIdeal $ map (changeOrder Grevlex) i4) $ \ ~ideal ->
                   bgroup "grevlex04"
                   [ bench "simple" $ nf simpleBuchberger ideal
                   , bench "relprime" $ nf primeTestBuchberger ideal
                   , bench "syzygy" $ nf (syzygyBuchbergerWithStrategy NormalStrategy) ideal
                   , bench "syz+sugar" $ nf syzygyBuchberger  ideal
                     --    -- , bench "singular" $ nfIO (singularWith Grevlex ideal)
                   ]
                ]