module Numeric.LAPACK.Orthogonal.Householder (
Basic.Householder,
Basic.General,
Basic.Tall,
Basic.Wide,
Basic.Square,
Basic.mapExtent,
fromMatrix,
Basic.determinant,
Basic.determinantAbsolute,
leastSquares,
minimumNorm,
Mod.Transposition(..),
Mod.Conjugation(..),
extractQ,
extractR,
multiplyQ,
tallExtractQ,
tallExtractR,
tallMultiplyQ,
tallMultiplyQAdjoint,
tallMultiplyR,
tallSolveR,
) where
import qualified Numeric.LAPACK.Orthogonal.Private as Basic
import qualified Numeric.LAPACK.Matrix.Array as ArrMatrix
import qualified Numeric.LAPACK.Matrix.Extent as Extent
import qualified Numeric.LAPACK.Matrix.Modifier as Mod
import Numeric.LAPACK.Orthogonal.Private (Householder)
import Numeric.LAPACK.Matrix.Array.Triangular (Upper)
import Numeric.LAPACK.Matrix.Array (Full, Square)
import Numeric.LAPACK.Matrix.Modifier (Transposition, Conjugation)
import qualified Numeric.Netlib.Class as Class
import qualified Data.Array.Comfort.Shape as Shape
fromMatrix ::
(Extent.C vert, Extent.C horiz, Shape.C height, Shape.C width,
Class.Floating a) =>
Full vert horiz height width a ->
Householder vert horiz height width a
fromMatrix = Basic.fromMatrix . ArrMatrix.toVector
leastSquares ::
(Extent.C vert, Extent.C horiz,
Shape.C height, Eq height, Shape.C width, Eq width, Shape.C nrhs,
Class.Floating a) =>
Householder horiz Extent.Small height width a ->
Full vert horiz height nrhs a ->
Full vert horiz width nrhs a
leastSquares = ArrMatrix.lift1 . Basic.leastSquares
minimumNorm ::
(Extent.C vert, Extent.C horiz,
Shape.C height, Eq height, Shape.C width, Eq width, Shape.C nrhs,
Class.Floating a) =>
Householder vert Extent.Small width height a ->
Full vert horiz height nrhs a ->
Full vert horiz width nrhs a
minimumNorm = ArrMatrix.lift1 . Basic.minimumNorm
extractQ ::
(Extent.C vert, Extent.C horiz, Shape.C height, Shape.C width,
Class.Floating a) =>
Householder vert horiz height width a -> Square height a
extractQ = ArrMatrix.lift0 . Basic.extractQ
tallExtractQ ::
(Extent.C vert, Shape.C height, Shape.C width, Class.Floating a) =>
Householder vert Extent.Small height width a ->
Full vert Extent.Small height width a
tallExtractQ = ArrMatrix.lift0 . Basic.tallExtractQ
tallMultiplyQ ::
(Extent.C vert, Extent.C horiz,
Shape.C height, Eq height, Shape.C width, Shape.C fuse, Eq fuse,
Class.Floating a) =>
Householder vert Extent.Small height fuse a ->
Full vert horiz fuse width a ->
Full vert horiz height width a
tallMultiplyQ = ArrMatrix.lift1 . Basic.tallMultiplyQ
tallMultiplyQAdjoint ::
(Extent.C vert, Extent.C horiz,
Shape.C height, Shape.C width, Shape.C fuse, Eq fuse, Class.Floating a) =>
Householder horiz Extent.Small fuse height a ->
Full vert horiz fuse width a ->
Full vert horiz height width a
tallMultiplyQAdjoint = ArrMatrix.lift1 . Basic.tallMultiplyQAdjoint
multiplyQ ::
(Extent.C vertA, Extent.C horizA, Shape.C widthA,
Extent.C vertB, Extent.C horizB, Shape.C widthB,
Shape.C height, Eq height, Class.Floating a) =>
Transposition -> Conjugation ->
Householder vertA horizA height widthA a ->
Full vertB horizB height widthB a ->
Full vertB horizB height widthB a
multiplyQ transposed conjugated =
ArrMatrix.lift1 . Basic.multiplyQ transposed conjugated
extractR ::
(Extent.C vert, Extent.C horiz, Shape.C height, Shape.C width,
Class.Floating a) =>
Householder vert horiz height width a ->
Full vert horiz height width a
extractR = ArrMatrix.lift0 . Basic.extractR
tallExtractR ::
(Extent.C vert, Shape.C height, Shape.C width, Class.Floating a) =>
Householder vert Extent.Small height width a -> Upper width a
tallExtractR = ArrMatrix.lift0 . Basic.tallExtractR
tallMultiplyR ::
(Extent.C vertA, Extent.C vert, Extent.C horiz, Shape.C height, Eq height,
Shape.C heightA, Shape.C widthB, Class.Floating a) =>
Transposition ->
Householder vertA Extent.Small heightA height a ->
Full vert horiz height widthB a ->
Full vert horiz height widthB a
tallMultiplyR transposed = ArrMatrix.lift1 . Basic.tallMultiplyR transposed
tallSolveR ::
(Extent.C vertA, Extent.C vert, Extent.C horiz,
Shape.C height, Shape.C width, Eq width, Shape.C nrhs, Class.Floating a) =>
Transposition -> Conjugation ->
Householder vertA Extent.Small height width a ->
Full vert horiz width nrhs a -> Full vert horiz width nrhs a
tallSolveR transposed conjugated =
ArrMatrix.lift1 . Basic.tallSolveR transposed conjugated