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 :: Order -> Char
transposeFromOrder Order
RowMajor = Char
'T'
transposeFromOrder Order
ColumnMajor = Char
'N'

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

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


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


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