lapack-0.5: test/Test/Indexed.hs
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE ConstraintKinds #-}
module Test.Indexed where
import qualified Test.Generator as Gen
import Test.Utility (NonEmptyInt)
import qualified Numeric.LAPACK.Matrix.Shape as MatrixShape
import qualified Numeric.LAPACK.Matrix.Extent as Extent
import qualified Numeric.LAPACK.Matrix as Matrix
import qualified Numeric.LAPACK.Vector as Vector
import Numeric.LAPACK.Matrix (Matrix, (#!), (#*|))
import Numeric.LAPACK.Vector ((-*|))
import qualified Numeric.Netlib.Class as Class
import qualified Data.Array.Comfort.Shape as Shape
import qualified Test.QuickCheck as QC
type GenMatrixNonEmpty = Gen.Matrix NonEmptyInt NonEmptyInt
genMatrixIndexGen ::
(Class.Floating a) =>
(array -> [ix]) ->
GenMatrixNonEmpty a array ->
GenMatrixNonEmpty a (ix, array)
genMatrixIndexGen indices gen =
flip Gen.mapQC gen $ \m -> do
ij <- QC.elements $ indices m
return (ij,m)
genMatrixIndex ::
(Matrix.Indexed typ,
Matrix.BoxExtra typ xl, Matrix.BoxExtra typ xu,
Extent.Measure meas, Extent.C vert, Extent.C horiz,
Shape.Indexed height, Shape.Indexed width, Class.Floating a) =>
GenMatrixNonEmpty a
(Matrix typ xl xu lower upper meas vert horiz height width a) ->
GenMatrixNonEmpty a
(Shape.Index (height,width),
Matrix typ xl xu lower upper meas vert horiz height width a)
genMatrixIndex = genMatrixIndexGen Matrix.indices
unitDot ::
(Matrix.BoxExtra typ xl, Matrix.BoxExtra typ xu,
Matrix.Indexed typ, Matrix.MultiplyVector typ,
Matrix.MultiplyVectorExtra typ xl, Matrix.MultiplyVectorExtra typ xu,
MatrixShape.Strip lower, MatrixShape.Strip upper,
Extent.Measure meas, Extent.C vert, Extent.C horiz,
Shape.Indexed height, Eq height,
Shape.Indexed width, Eq width,
Class.Floating a, Eq a) =>
(Shape.Index (height,width),
Matrix typ xl xu lower upper meas vert horiz height width a) ->
Bool
unitDot ((i,j),m) =
m#!(i,j) ==
Vector.unit (Matrix.height m) i -*|
(m #*| Vector.unit (Matrix.width m) j)