fpnla-0.1: src/FPNLA/Operations/BLAS.hs
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
-- | This module defines all the BLAS (Basic Linear Algebra Subprograms) operations supported by the framework.
-- See <http://www.netlib.org/blas/> for more information about BLAS and <http://www.ugcs.caltech.edu/~srbecker/blasqr_betterFonts.pdf> for a quick description of all BLAS operation signatures and behaviour.
module FPNLA.Operations.BLAS (
-- * Level One
-- | Vector-Vector operations
DOT(..),
-- * Level Two
-- | Matrix-Vector operations
GEMV(..),
-- * Level Three
-- | Matrix-Matrix operations
SYRK(..),
GEMM(..),
TRSM(..)
) where
import FPNLA.Matrix (MatrixVector, Vector)
import FPNLA.Operations.Parameters (Elt (), ResM (), ResV (), ResS(),
StratCtx (), TransType (),
TriangType (), UnitType ())
-- | Defines the signature of the level-1 BLAS /dot/ operation in the framework.
class (Elt e, Vector v e) => DOT s v e where
dot :: StratCtx s -- ^ The context of the operation
-> v e -- ^ A vector /x/
-> v e -- ^ A vector /y/
-> ResS s e -- ^ The scalar product between /x/ and /y/
-- | Defines the signature of the level-2 BLAS /gemv/ operation in the framework.
class (Elt e, MatrixVector m v e) => GEMV s m v e where
gemv :: StratCtx s -- ^ The context of the operation
-> TransType (m e) -- ^ A matrix /A/
-> v e -- ^ A vector /x/
-> e -- ^ A scalar /alpha/
-> e -- ^ A scalar /beta/
-> v e -- ^ A vecor /y/
-> ResV s v e -- ^ @alpha * A * x + beta * y@
-- | Defines the signature of the level-3 BLAS /syrk/ operation in the framework.
class (Elt e, MatrixVector m v e) => SYRK s m v e where
syrk :: StratCtx s -- ^ The context of the operation
-> e -- ^ A scalar /alpha/
-> TransType (m e) -- ^ A matrix /A/
-> e -- ^ A scalar /beta/
-> TriangType (m e) -- ^ A triangular matrix /C/
-> ResM s v m e -- ^ @alpha * A * A' + beta * C@ where @A'@ is the conjugate transposed of /A/.
-- | Defines the signature of the level-3 BLAS /gemm/ operation in the framework.
class (Elt e, MatrixVector m v e) => GEMM s m v e where
gemm :: StratCtx s -- ^ The context of the operation
-> TransType (m e) -- ^ A matrix /A/
-> TransType (m e) -- ^ A matrix /B/
-> e -- ^ A scalar /alpha/
-> e -- ^ A scalar /beta/
-> m e -- ^ A matrix /C/
-> ResM s v m e -- ^ @alpha * A * B + beta * C@
-- | Defines the signature of the level-3 BLAS /trsm/ operation in the framework.
class (Elt e, MatrixVector m v e) => TRSM s m v e where
trsm :: StratCtx s -- ^ The context of the operation
-> e -- ^ A scalar /alpha/
-> TransType (TriangType (UnitType (m e))) -- ^ A triangular matrix /A/
-> m e -- ^ A matrix /B/
-> ResM s v m e -- ^ @alpha * A_inv * B@ where @A_inv@ is the inverse of /A/.