packages feed

lapack-0.5.2: src/Numeric/LAPACK/Matrix/Layout/Basic.hs

module Numeric.LAPACK.Matrix.Layout.Basic where

import qualified Numeric.Netlib.Modifier as Modi
import Numeric.Netlib.Layout (Order(RowMajor,ColumnMajor))

import Data.Tuple.HT (swap)


transposeFromOrder :: Order -> Char
transposeFromOrder RowMajor = 'T'
transposeFromOrder ColumnMajor = 'N'

swapOnRowMajor :: Order -> (a,a) -> (a,a)
swapOnRowMajor order =
   case order of
      RowMajor -> swap
      ColumnMajor -> id

sideSwapFromOrder :: Order -> (a,a) -> (Char, (a,a))
sideSwapFromOrder order (m0,n0) =
   let ((side,m), (_,n)) = swapOnRowMajor order (('L', m0), ('R', n0))
   in (side,(m,n))


conjugatedOnRowMajor :: Order -> Modi.Conjugation
conjugatedOnRowMajor RowMajor = Modi.Conjugated
conjugatedOnRowMajor ColumnMajor = Modi.NonConjugated


uploFromOrder :: Order -> Char
uploFromOrder RowMajor = 'L'
uploFromOrder ColumnMajor = 'U'