module Data.Vector.Dense.Class.Special (
newZeroVector,
newConstantVector,
newBasisVector,
setZeroVector,
setConstantVector,
setBasisVector,
) where
import Foreign
import BLAS.Elem
import BLAS.Tensor
import Data.Vector.Dense.Class.Internal
import Data.Vector.Dense.Class.Creating
newBasisVector :: (WriteVector x m, Elem e) => Int -> Int -> m (x n e)
newBasisVector n i = do
x <- newVector_ n
setBasisVector i x
return x
setBasisVector :: (WriteVector x m, Elem e) => Int -> x n e -> m ()
setBasisVector i x
| i < 0 || i >= dim x =
fail $ "tried to set a vector of dimension `" ++ show (dim x) ++ "'"
++ " to basis vector `" ++ show i ++ "'"
| otherwise = do
setZeroVector x
unsafeWriteElem x i 1