entangle-0.1.0: src/lib/GatesMatrices.hs
{-# LANGUAGE MultiParamTypeClasses #-}
module GatesMatrices (
nameToMatrix,
nameToParameterizedMatrix) where
import Complex
import Expr
import QMatrix
-- |nameToMatrix takes a gate name and returns its matrix
nameToMatrix :: (QCMatrix m a, Floating a, Fractional a) => String -> m (Complex a)
nameToMatrix "not" = pauliX
nameToMatrix "X" = pauliX
nameToMatrix "Z" = pauliZ
nameToMatrix "H" = hadamard
nameToMatrix "W" = swapSqrt
nameToMatrix "swap" = swap
nameToMatrix n = error $ "Gate \"" ++ show n ++ "\" is not supported yet"
nameToParameterizedMatrix :: (QCMatrix m a, FromDouble a, Floating a) => String -> Double -> m (Complex a)
nameToParameterizedMatrix "R(2pi/%)" n = phaseShift (2 * pi / fromDouble n)
nameToParameterizedMatrix n _ = error $ "Parameterized gate \"" ++ show n ++ "\" is not supported yet"