-- Do not edit! Automatically created with doctest-extract from src/Numeric/BLAS/Vector.hs
{-# LINE 117 "src/Numeric/BLAS/Vector.hs" #-}

module Test.ComplexFloat.Numeric.BLAS.Vector where

import Test.DocTest.Base
import qualified Test.DocTest.Driver as DocTest

{-# LINE 118 "src/Numeric/BLAS/Vector.hs" #-}
import     Test.Type
import     Test.Generator (genNumber)
import     Test.Slice (shapeInt)
import     Test.Utility (approx)
import     qualified Numeric.BLAS.Matrix.RowMajor as Matrix
import     qualified Numeric.BLAS.Vector as Vector
import     qualified Numeric.Netlib.Class as Class
import     qualified Data.Array.Comfort.Shape as Shape
import     qualified Data.Array.Comfort.Storable as Array
import     qualified Data.List as List
import     Numeric.BLAS.Vector ((+++), (|+|), (|-|))
import     Numeric.BLAS.Scalar (RealOf, absolute, minusOne)
import     Data.Array.Comfort.Storable (Array, (!))
import     Data.Complex (Complex((:+)))
import     Data.Monoid ((<>))
import     Data.Tuple.HT (mapPair)
import     Control.Applicative (liftA2)
import     Control.Monad (replicateM)

import     qualified Test.QuickCheck as QC
import     Test.QuickCheck ((==>))

type     Vector = Vector.Vector (Shape.ZeroBased Int)
type     Number_ = ComplexFloat
type     Real_ = RealOf Number_
type     Complex_ = Complex Real_
type     ComplexDummy_ = ComplexFloat

maxElem     :: Integer
maxElem     = 10

maxDim     :: Int
maxDim     = 100

genVector     ::
       (Shape.C sh, Class.Floating a) =>
       sh -> QC.Gen a -> QC.Gen (Vector.Vector sh a)
genVector     shape genElem =
       fmap (Vector.fromList shape) $ replicateM (Shape.size shape) genElem

real_     :: QC.Gen Real_
real_     = genNumber maxElem

complex_     :: QC.Gen Complex_
complex_     = genNumber maxElem

number_     :: QC.Gen Number_
number_     = genNumber maxElem

isNonEmpty     :: Shape.C sh => Array sh a -> Bool
isNonEmpty     xs = Shape.size (Array.shape xs) > 0

forVector     ::
       (QC.Testable prop, QC.Arbitrary a, Class.Floating a, Show a) =>
       QC.Gen a -> (Vector a -> prop) -> QC.Property
forVector     genElem =
       QC.forAllShrink
          (flip genVector genElem . shapeInt =<< QC.choose (0,maxDim))
          (map Vector.autoFromList . QC.shrink . Vector.toList)

forVector2     ::
       (QC.Testable prop, QC.Arbitrary a, Class.Floating a, Show a) =>
       QC.Gen a -> (Vector a -> Vector a -> prop) -> QC.Property
forVector2     genElem prop =
       QC.forAllShrink
          (do shape <- fmap shapeInt $ QC.choose (0,maxDim)
              liftA2 (,) (genVector shape genElem) (genVector shape genElem))
          (map (mapPair (Vector.autoFromList, Vector.autoFromList) . unzip) .
           QC.shrink .
           uncurry zip . mapPair (Vector.toList, Vector.toList))
          (uncurry prop)

type     IntervalVector = Vector.Vector (Shape.Interval Int)

forIntervalVector     ::
       (QC.Testable prop, QC.Arbitrary a, Class.Floating a, Show a) =>
       QC.Gen a -> (IntervalVector a -> prop) -> QC.Property
forIntervalVector     genElem prop =
       forVector genElem $ \xs start -> prop $
          Array.mapShape
             (\(Shape.ZeroBased n) -> Shape.Interval start (start+n-1)) xs

type     CyclicVector = Vector.Vector (Shape.Cyclic Int)

genCyclicVector     ::
       (Class.Floating a) =>
       Integer -> Int -> QC.Gen (CyclicVector a)
genCyclicVector     maxE dim =
       fmap (Vector.fromList (Shape.Cyclic dim)) $
       replicateM dim $ genNumber maxE

cyclicVectorFromListGen     :: (Class.Floating a) => [a] -> CyclicVector a
cyclicVectorFromListGen     xs = Vector.fromList (Shape.Cyclic $ length xs) xs

cyclicVectorFromList     :: [Number_] -> CyclicVector Number_
cyclicVectorFromList     = cyclicVectorFromListGen

forCyclicVector     ::
       (QC.Testable prop, QC.Arbitrary a, Class.Floating a, Show a) =>
       QC.Gen a -> (CyclicVector a -> prop) -> QC.Property
forCyclicVector     genElem =
       QC.forAllShrink
          (flip genVector genElem . Shape.Cyclic =<< QC.choose (0,maxDim))
          (map cyclicVectorFromListGen . QC.shrink . Vector.toList)

test :: DocTest.T ()
test = do
 DocTest.printPrefix "Numeric.BLAS.Vector:239: "
{-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-}
      QC.forAll number_ $ \x -> Vector.constant () x == Vector.singleton x
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:241: "
{-# LINE 241 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 241 "src/Numeric/BLAS/Vector.hs" #-}
        
   QC.forAll (QC.choose (0,1000)) $ \n ->
   QC.forAll number_ $ \x ->
      Vector.sum (Vector.constant (shapeInt n) x) == fromIntegral n * x
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:258: "
{-# LINE 258 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 258 "src/Numeric/BLAS/Vector.hs" #-}
        
   QC.forAll (QC.choose (0,1000)) $ \n ->
   Vector.sum (Vector.zero (shapeInt n)) == (0 :: Number_)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:267: "
{-# LINE 267 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 267 "src/Numeric/BLAS/Vector.hs" #-}
        
   QC.forAll (QC.choose (0,1000)) $ \n ->
   Vector.sum (Vector.one (shapeInt n)) == (fromIntegral n :: Number_)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:276: "
{-# LINE 276 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 276 "src/Numeric/BLAS/Vector.hs" #-}
        
   QC.forAll (fmap shapeInt $ QC.choose (1,1000)) $ \sh ->
   QC.forAll (QC.elements $ Shape.indices sh) $ \k ->
   Vector.sum (Vector.unit sh k) == (1 :: Number_)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:298: "
{-# LINE 298 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 298 "src/Numeric/BLAS/Vector.hs" #-}
        
   forVector number_ $ \xs ->
   forVector number_ $ \ys ->
   forVector number_ $ \zs ->
   Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs))
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:314: "
{-# LINE 314 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 314 "src/Numeric/BLAS/Vector.hs" #-}
      Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:315: "
{-# LINE 315 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 315 "src/Numeric/BLAS/Vector.hs" #-}
      Vector.autoFromList [1] == (Vector.reverse $ Vector.autoFromList [1] :: Vector Number_)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:316: "
{-# LINE 316 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 316 "src/Numeric/BLAS/Vector.hs" #-}
      Vector.autoFromList [3,2,1] == (Vector.reverse $ Vector.autoFromList [1,2,3] :: Vector Number_)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:318: "
{-# LINE 318 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 318 "src/Numeric/BLAS/Vector.hs" #-}
      forVector number_ $ \xs -> reverse (Vector.toList xs) == Vector.toList (Vector.reverse xs)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:319: "
{-# LINE 319 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 319 "src/Numeric/BLAS/Vector.hs" #-}
      forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:320: "
{-# LINE 320 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 320 "src/Numeric/BLAS/Vector.hs" #-}
        
   forVector number_ $ \xs ->
   forVector number_ $ \ys ->
   Vector.reverse (xs <> ys) == Vector.reverse ys <> Vector.reverse xs
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:344: "
{-# LINE 344 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 344 "src/Numeric/BLAS/Vector.hs" #-}
        
   forIntervalVector number_ $ \xs ->
   reverse (Vector.toList xs) == Vector.toList (Vector.intervalReverse xs)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:348: "
{-# LINE 348 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 348 "src/Numeric/BLAS/Vector.hs" #-}
        
   forIntervalVector number_ $ \xs ->
   xs == Vector.intervalReverse (Vector.intervalReverse xs)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:352: "
{-# LINE 352 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 352 "src/Numeric/BLAS/Vector.hs" #-}
        
   forIntervalVector number_ $ \xs ->
   let is = Shape.indices $ Array.shape xs in
   not (null is) ==>
   QC.forAll (QC.elements is) $ \i ->
   xs!i == Vector.intervalReverse xs ! (-i)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:370: "
{-# LINE 370 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 370 "src/Numeric/BLAS/Vector.hs" #-}
      cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList [])
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:371: "
{-# LINE 371 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 371 "src/Numeric/BLAS/Vector.hs" #-}
      cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1])
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:372: "
{-# LINE 372 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 372 "src/Numeric/BLAS/Vector.hs" #-}
      cyclicVectorFromList [1,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3])
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:373: "
{-# LINE 373 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 373 "src/Numeric/BLAS/Vector.hs" #-}
      cyclicVectorFromList [1,6,5,4,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3,4,5,6])
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:375: "
{-# LINE 375 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 375 "src/Numeric/BLAS/Vector.hs" #-}
      forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:376: "
{-# LINE 376 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 376 "src/Numeric/BLAS/Vector.hs" #-}
        
   forCyclicVector number_ $ \xs ->
   let is = Shape.indices $ Array.shape xs in
   not (null is) ==>
   QC.forAll (QC.elements is) $ \i ->
   xs!i == Vector.cyclicReverse xs ! (-i)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:399: "
{-# LINE 399 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 399 "src/Numeric/BLAS/Vector.hs" #-}
        
   QC.forAll (QC.choose (1,100)) $ \dim ->
   QC.forAll (QC.choose (0, dim-1)) $ \i ->
   QC.forAll (QC.choose (0, dim-1)) $ \j ->
      Vector.unit (Shape.ZeroBased dim) i
      ==
      (Vector.swap i j (Vector.unit (Shape.ZeroBased dim) j) :: Vector Number_)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:426: "
{-# LINE 426 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 426 "src/Numeric/BLAS/Vector.hs" #-}
        
   forVector2 number_ $ \xs ys ->
      Vector.dot xs ys
      ==
      Matrix.multiply (Matrix.singleRow xs) (Matrix.singleColumn ys) ! ((),())
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:433: "
{-# LINE 433 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 433 "src/Numeric/BLAS/Vector.hs" #-}
        
   QC.forAll (QC.choose (1,100)) $ \dim ->
   QC.forAll (QC.choose (0, dim-1)) $ \i ->
   QC.forAll (QC.choose (0, dim-1)) $ \j ->
      Vector.dot
         (Vector.unit (shapeInt dim) i)
         (Vector.unit (shapeInt dim) j)
      ==
      (fromIntegral (fromEnum (i==j)) :: Number_)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:459: "
{-# LINE 459 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 459 "src/Numeric/BLAS/Vector.hs" #-}
      forVector2 number_ $ \xs ys -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:512: "
{-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-}
      forVector number_ $ \xs -> Vector.sum xs == List.sum (Vector.toList xs)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:587: "
{-# LINE 587 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 587 "src/Numeric/BLAS/Vector.hs" #-}
      forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs))
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:611: "
{-# LINE 611 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.example(
{-# LINE 611 "src/Numeric/BLAS/Vector.hs" #-}
    Vector.argAbsMaximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]
  )
  [ExpectedLine [LineChunk "(3,6.0 :+ 0.0)"]]
 DocTest.printPrefix "Numeric.BLAS.Vector:614: "
{-# LINE 614 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 614 "src/Numeric/BLAS/Vector.hs" #-}
      forVector number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:615: "
{-# LINE 615 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 615 "src/Numeric/BLAS/Vector.hs" #-}
        
   forVector number_ $ \xs -> isNonEmpty xs ==>
   let (_xi,xm) = Vector.argAbsMaximum xs in
   List.all (\x -> absolute x <= absolute xm) $ Vector.toList xs
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:620: "
{-# LINE 620 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 620 "src/Numeric/BLAS/Vector.hs" #-}
        
   forVector number_ $ \xs ->
   forVector number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==>
   let (_xi,xm) = Vector.argAbsMaximum xs
       (_yi,ym) = Vector.argAbsMaximum ys
       (zi,zm) = Vector.argAbsMaximum (xs+++ys) in
   case zi of
      Left _ -> xm==zm && absolute xm >= absolute ym
      Right _ -> ym==zm && absolute xm < absolute ym
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:673: "
{-# LINE 673 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.example(
{-# LINE 673 "src/Numeric/BLAS/Vector.hs" #-}
    Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]
  )
  [ExpectedLine [LineChunk "(1,3.0 :+ 4.0)"]]
 DocTest.printPrefix "Numeric.BLAS.Vector:676: "
{-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}
      forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:709: "
{-# LINE 709 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 709 "src/Numeric/BLAS/Vector.hs" #-}
        
   QC.forAll (QC.choose (0,10)) $ \dim ->
   QC.forAll (genVector (shapeInt dim) (genNumber 3)) $ \xs ->
   approx 1e-2
      (Vector.product xs)
      (List.product (Vector.toList (xs :: Vector Number_)))
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:725: "
{-# LINE 725 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 725 "src/Numeric/BLAS/Vector.hs" #-}
      forVector real_ $ \xs -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:726: "
{-# LINE 726 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 726 "src/Numeric/BLAS/Vector.hs" #-}
      forVector real_ $ \xs -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:727: "
{-# LINE 727 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 727 "src/Numeric/BLAS/Vector.hs" #-}
      forVector real_ $ \xs -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:743: "
{-# LINE 743 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 743 "src/Numeric/BLAS/Vector.hs" #-}
      forVector real_ $ \xs -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:773: "
{-# LINE 773 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 773 "src/Numeric/BLAS/Vector.hs" #-}
      forVector number_ $ \xs -> Vector.negate xs == Vector.scale minusOne xs
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:774: "
{-# LINE 774 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 774 "src/Numeric/BLAS/Vector.hs" #-}
      forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:843: "
{-# LINE 843 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 843 "src/Numeric/BLAS/Vector.hs" #-}
      forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:844: "
{-# LINE 844 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 844 "src/Numeric/BLAS/Vector.hs" #-}
      forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:856: "
{-# LINE 856 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 856 "src/Numeric/BLAS/Vector.hs" #-}
      QC.forAll number_ $ \a -> forVector2 number_ $ \xs ys -> Vector.mac a xs ys == Vector.scale a xs |+| ys
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:877: "
{-# LINE 877 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 877 "src/Numeric/BLAS/Vector.hs" #-}
      forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:890: "
{-# LINE 890 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 890 "src/Numeric/BLAS/Vector.hs" #-}
      QC.forAll (genNumber maxElem) $ \d -> forVector number_ $ \xs -> xs == Vector.raise (-d) (Vector.raise d xs)
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:907: "
{-# LINE 907 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 907 "src/Numeric/BLAS/Vector.hs" #-}
      forVector2 number_ $ \xs ys -> Vector.mul xs ys == Vector.mul ys xs
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:915: "
{-# LINE 915 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 915 "src/Numeric/BLAS/Vector.hs" #-}
      forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:939: "
{-# LINE 939 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 939 "src/Numeric/BLAS/Vector.hs" #-}
        
   forVector2 number_ $ \xs ys ->
   let xrs = Vector.realPart xs in
   Vector.mulReal xrs ys
   ==
   Vector.mul (Vector.fromReal xrs) ys
  )
 DocTest.printPrefix "Numeric.BLAS.Vector:961: "
{-# LINE 961 "src/Numeric/BLAS/Vector.hs" #-}
 DocTest.property(
{-# LINE 961 "src/Numeric/BLAS/Vector.hs" #-}
        
   forVector2 number_ $ \xs ys ->
   let xrs = Vector.realPart xs in
   Vector.mulRealConj xrs ys
   ==
   Vector.mul (Vector.fromReal xrs) (Vector.conjugate ys)
  )