module Numeric.LAPACK.Orthogonal.Householder (
   Plain.Householder,
   Plain.General,
   Plain.Tall,
   Plain.Wide,
   Plain.Square,
   Plain.LiberalSquare,
   mapExtent,
   fromMatrix,
   Plain.determinant,
   Plain.determinantAbsolute,
   leastSquares,
   minimumNorm,

   Mod.Transposition(..),
   Mod.Conjugation(..),
   extractQ,
   extractR,
   multiplyQ,

   tallExtractQ,
   tallExtractR,
   tallMultiplyQ,
   tallMultiplyQAdjoint,
   tallMultiplyR,
   tallSolveR,
   ) where

import qualified Numeric.LAPACK.Orthogonal.Plain as Plain
import qualified Numeric.LAPACK.Matrix.Array.Unpacked as Unpacked
import qualified Numeric.LAPACK.Matrix.Array.Private as ArrMatrix
import qualified Numeric.LAPACK.Matrix.Extent.Strict as ExtentStrict
import qualified Numeric.LAPACK.Matrix.Extent as Extent
import qualified Numeric.LAPACK.Matrix.Modifier as Mod
import qualified Numeric.LAPACK.Shape as ExtShape
import Numeric.LAPACK.Orthogonal.Plain (Householder)
import Numeric.LAPACK.Matrix.Array.Mosaic (Upper)
import Numeric.LAPACK.Matrix.Array.Private (Full, Square)
import Numeric.LAPACK.Matrix.Modifier (Transposition, Conjugation)

import qualified Numeric.Netlib.Class as Class

import qualified Data.Array.Comfort.Shape as Shape


mapExtent ::
   (Extent.Measure measA, Extent.C vertA, Extent.C horizA) =>
   (Extent.Measure measB, Extent.C vertB, Extent.C horizB) =>
   Extent.Map measA vertA horizA measB vertB horizB height width ->
   Householder measA vertA horizA height width a ->
   Householder measB vertB horizB height width a
mapExtent :: Map measA vertA horizA measB vertB horizB height width
-> Householder measA vertA horizA height width a
-> Householder measB vertB horizB height width a
mapExtent = Map measA vertA horizA measB vertB horizB height width
-> Householder measA vertA horizA height width a
-> Householder measB vertB horizB height width a
forall measA vertA horizA measB vertB horizB height width lower
       upper a.
(Measure measA, C vertA, C horizA, Measure measB, C vertB,
 C horizB) =>
Map measA vertA horizA measB vertB horizB height width
-> HouseholderFlex lower upper measA vertA horizA height width a
-> HouseholderFlex lower upper measB vertB horizB height width a
Plain.mapExtent (Map measA vertA horizA measB vertB horizB height width
 -> Householder measA vertA horizA height width a
 -> Householder measB vertB horizB height width a)
-> (Map measA vertA horizA measB vertB horizB height width
    -> Map measA vertA horizA measB vertB horizB height width)
-> Map measA vertA horizA measB vertB horizB height width
-> Householder measA vertA horizA height width a
-> Householder measB vertB horizB height width a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Map measA vertA horizA measB vertB horizB height width
-> Map measA vertA horizA measB vertB horizB height width
forall measA vertA horizA measB vertB horizB height width.
Map measA vertA horizA measB vertB horizB height width
-> Map measA vertA horizA measB vertB horizB height width
ExtentStrict.apply


fromMatrix ::
   (Extent.Measure meas, Extent.C vert, Extent.C horiz,
    Shape.C height, Shape.C width, Class.Floating a) =>
   Full meas vert horiz height width a ->
   Householder meas vert horiz height width a
fromMatrix :: Full meas vert horiz height width a
-> Householder meas vert horiz height width a
fromMatrix = Full meas vert horiz height width a
-> Householder meas vert horiz height width a
forall meas vert horiz height width a.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
Full meas vert horiz height width a
-> Householder meas vert horiz height width a
Plain.fromMatrix (Full meas vert horiz height width a
 -> Householder meas vert horiz height width a)
-> (Full meas vert horiz height width a
    -> Full meas vert horiz height width a)
-> Full meas vert horiz height width a
-> Householder meas vert horiz height width a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Full meas vert horiz height width a
-> Full meas vert horiz height width a
forall pack property lower upper meas vert horiz height width a.
ToPlain pack property lower upper meas vert horiz height width =>
ArrayMatrix
  pack property lower upper meas vert horiz height width a
-> PlainArray
     pack property lower upper meas vert horiz height width a
ArrMatrix.toVector

leastSquares ::
   (Extent.Measure meas, Extent.C vert, Extent.C horiz,
    Shape.C height, Eq height, Shape.C width, Eq width, Shape.C nrhs,
    Class.Floating a) =>
   Householder meas horiz Extent.Small height width a ->
   Full meas vert horiz height nrhs a ->
   Full meas vert horiz width nrhs a
leastSquares :: Householder meas horiz Small height width a
-> Full meas vert horiz height nrhs a
-> Full meas vert horiz width nrhs a
leastSquares = (Array (Full meas vert horiz height nrhs) a
 -> Array (Full meas vert horiz width nrhs) a)
-> Full meas vert horiz height nrhs a
-> Full meas vert horiz width nrhs a
forall packA propA lowerA upperA measA vertA horizA heightA widthA
       packB propB lowerB upperB measB vertB horizB heightB widthB a b.
(ToPlain
   packA propA lowerA upperA measA vertA horizA heightA widthA,
 FromPlain
   packB propB lowerB upperB measB vertB horizB heightB widthB) =>
(PlainArray
   packA propA lowerA upperA measA vertA horizA heightA widthA a
 -> PlainArray
      packB propB lowerB upperB measB vertB horizB heightB widthB b)
-> ArrayMatrix
     packA propA lowerA upperA measA vertA horizA heightA widthA a
-> ArrayMatrix
     packB propB lowerB upperB measB vertB horizB heightB widthB b
ArrMatrix.lift1 ((Array (Full meas vert horiz height nrhs) a
  -> Array (Full meas vert horiz width nrhs) a)
 -> Full meas vert horiz height nrhs a
 -> Full meas vert horiz width nrhs a)
-> (Householder meas horiz Small height width a
    -> Array (Full meas vert horiz height nrhs) a
    -> Array (Full meas vert horiz width nrhs) a)
-> Householder meas horiz Small height width a
-> Full meas vert horiz height nrhs a
-> Full meas vert horiz width nrhs a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Householder meas horiz Small height width a
-> Array (Full meas vert horiz height nrhs) a
-> Array (Full meas vert horiz width nrhs) a
forall meas vert horiz height width nrhs a lower upper.
(Measure meas, C vert, C horiz, C height, Eq height, C width,
 C nrhs, Floating a) =>
HouseholderFlex lower upper meas horiz Small height width a
-> Full meas vert horiz height nrhs a
-> Full meas vert horiz width nrhs a
Plain.leastSquares

{- |
@
HH.minimumNorm (HH.fromMatrix a) b
==
Ortho.minimumNorm (adjoint a) b
@
-}
minimumNorm ::
   (Extent.Measure meas, Extent.C vert, Extent.C horiz,
    Shape.C height, Eq height, Shape.C width, Eq width, Shape.C nrhs,
    Class.Floating a) =>
   Householder meas vert Extent.Small width height a ->
   Full meas vert horiz height nrhs a ->
   Full meas vert horiz width nrhs a
minimumNorm :: Householder meas vert Small width height a
-> Full meas vert horiz height nrhs a
-> Full meas vert horiz width nrhs a
minimumNorm = (Array (Full meas vert horiz height nrhs) a
 -> Array (Full meas vert horiz width nrhs) a)
-> Full meas vert horiz height nrhs a
-> Full meas vert horiz width nrhs a
forall packA propA lowerA upperA measA vertA horizA heightA widthA
       packB propB lowerB upperB measB vertB horizB heightB widthB a b.
(ToPlain
   packA propA lowerA upperA measA vertA horizA heightA widthA,
 FromPlain
   packB propB lowerB upperB measB vertB horizB heightB widthB) =>
(PlainArray
   packA propA lowerA upperA measA vertA horizA heightA widthA a
 -> PlainArray
      packB propB lowerB upperB measB vertB horizB heightB widthB b)
-> ArrayMatrix
     packA propA lowerA upperA measA vertA horizA heightA widthA a
-> ArrayMatrix
     packB propB lowerB upperB measB vertB horizB heightB widthB b
ArrMatrix.lift1 ((Array (Full meas vert horiz height nrhs) a
  -> Array (Full meas vert horiz width nrhs) a)
 -> Full meas vert horiz height nrhs a
 -> Full meas vert horiz width nrhs a)
-> (Householder meas vert Small width height a
    -> Array (Full meas vert horiz height nrhs) a
    -> Array (Full meas vert horiz width nrhs) a)
-> Householder meas vert Small width height a
-> Full meas vert horiz height nrhs a
-> Full meas vert horiz width nrhs a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Householder meas vert Small width height a
-> Array (Full meas vert horiz height nrhs) a
-> Array (Full meas vert horiz width nrhs) a
forall meas vert horiz height width nrhs a lower upper.
(Measure meas, C vert, C horiz, C height, Eq height, C width,
 C nrhs, Floating a) =>
HouseholderFlex lower upper meas vert Small width height a
-> Full meas vert horiz height nrhs a
-> Full meas vert horiz width nrhs a
Plain.minimumNorm


extractQ ::
   (Extent.Measure meas, Extent.C vert, Extent.C horiz,
    ExtShape.Permutable height, Shape.C width, Class.Floating a) =>
   Householder meas vert horiz height width a -> Square height a
extractQ :: Householder meas vert horiz height width a -> Square height a
extractQ = Array (Full Shape Small Small height height) a -> Square height a
forall pack prop lower upper meas vert horiz height width a.
FromPlain pack prop lower upper meas vert horiz height width =>
PlainArray pack prop lower upper meas vert horiz height width a
-> ArrayMatrix pack prop lower upper meas vert horiz height width a
ArrMatrix.lift0 (Array (Full Shape Small Small height height) a -> Square height a)
-> (Householder meas vert horiz height width a
    -> Array (Full Shape Small Small height height) a)
-> Householder meas vert horiz height width a
-> Square height a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Householder meas vert horiz height width a
-> Array (Full Shape Small Small height height) a
forall meas vert horiz height width a.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
Householder meas vert horiz height width a -> Square height a
Plain.extractQ

tallExtractQ ::
   (Extent.Measure meas, Extent.C vert,
    Shape.C height, ExtShape.Permutable width, Class.Floating a) =>
   Householder meas vert Extent.Small height width a ->
   Full meas vert Extent.Small height width a
tallExtractQ :: Householder meas vert Small height width a
-> Full meas vert Small height width a
tallExtractQ = Array (Full meas vert Small height width) a
-> Full meas vert Small height width a
forall pack prop lower upper meas vert horiz height width a.
FromPlain pack prop lower upper meas vert horiz height width =>
PlainArray pack prop lower upper meas vert horiz height width a
-> ArrayMatrix pack prop lower upper meas vert horiz height width a
ArrMatrix.lift0 (Array (Full meas vert Small height width) a
 -> Full meas vert Small height width a)
-> (Householder meas vert Small height width a
    -> Array (Full meas vert Small height width) a)
-> Householder meas vert Small height width a
-> Full meas vert Small height width a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Householder meas vert Small height width a
-> Array (Full meas vert Small height width) a
forall meas vert height width a.
(Measure meas, C vert, C height, C width, Floating a) =>
Householder meas vert Small height width a
-> Full meas vert Small height width a
Plain.tallExtractQ


tallMultiplyQ ::
   (Extent.Measure meas, Extent.C vert, Extent.C horiz,
    ExtShape.Permutable height, Eq height, Shape.C width, Shape.C fuse, Eq fuse,
    Class.Floating a) =>
   Householder meas vert Extent.Small height fuse a ->
   Full meas vert horiz fuse width a ->
   Full meas vert horiz height width a
tallMultiplyQ :: Householder meas vert Small height fuse a
-> Full meas vert horiz fuse width a
-> Full meas vert horiz height width a
tallMultiplyQ = (Array (Full meas vert horiz fuse width) a
 -> Array (Full meas vert horiz height width) a)
-> Full meas vert horiz fuse width a
-> Full meas vert horiz height width a
forall packA propA lowerA upperA measA vertA horizA heightA widthA
       packB propB lowerB upperB measB vertB horizB heightB widthB a b.
(ToPlain
   packA propA lowerA upperA measA vertA horizA heightA widthA,
 FromPlain
   packB propB lowerB upperB measB vertB horizB heightB widthB) =>
(PlainArray
   packA propA lowerA upperA measA vertA horizA heightA widthA a
 -> PlainArray
      packB propB lowerB upperB measB vertB horizB heightB widthB b)
-> ArrayMatrix
     packA propA lowerA upperA measA vertA horizA heightA widthA a
-> ArrayMatrix
     packB propB lowerB upperB measB vertB horizB heightB widthB b
ArrMatrix.lift1 ((Array (Full meas vert horiz fuse width) a
  -> Array (Full meas vert horiz height width) a)
 -> Full meas vert horiz fuse width a
 -> Full meas vert horiz height width a)
-> (Householder meas vert Small height fuse a
    -> Array (Full meas vert horiz fuse width) a
    -> Array (Full meas vert horiz height width) a)
-> Householder meas vert Small height fuse a
-> Full meas vert horiz fuse width a
-> Full meas vert horiz height width a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Householder meas vert Small height fuse a
-> Array (Full meas vert horiz fuse width) a
-> Array (Full meas vert horiz height width) a
forall meas vert horiz height width fuse a lower upper.
(Measure meas, C vert, C horiz, C height, Eq height, C width,
 C fuse, Eq fuse, Floating a) =>
HouseholderFlex lower upper meas vert Small height fuse a
-> Full meas vert horiz fuse width a
-> Full meas vert horiz height width a
Plain.tallMultiplyQ

tallMultiplyQAdjoint ::
   (Extent.Measure meas, Extent.C vert, Extent.C horiz,
    ExtShape.Permutable height, Shape.C width, Shape.C fuse, Eq fuse,
    Class.Floating a) =>
   Householder meas horiz Extent.Small fuse height a ->
   Full meas vert horiz fuse width a ->
   Full meas vert horiz height width a
tallMultiplyQAdjoint :: Householder meas horiz Small fuse height a
-> Full meas vert horiz fuse width a
-> Full meas vert horiz height width a
tallMultiplyQAdjoint = (Array (Full meas vert horiz fuse width) a
 -> Array (Full meas vert horiz height width) a)
-> Full meas vert horiz fuse width a
-> Full meas vert horiz height width a
forall packA propA lowerA upperA measA vertA horizA heightA widthA
       packB propB lowerB upperB measB vertB horizB heightB widthB a b.
(ToPlain
   packA propA lowerA upperA measA vertA horizA heightA widthA,
 FromPlain
   packB propB lowerB upperB measB vertB horizB heightB widthB) =>
(PlainArray
   packA propA lowerA upperA measA vertA horizA heightA widthA a
 -> PlainArray
      packB propB lowerB upperB measB vertB horizB heightB widthB b)
-> ArrayMatrix
     packA propA lowerA upperA measA vertA horizA heightA widthA a
-> ArrayMatrix
     packB propB lowerB upperB measB vertB horizB heightB widthB b
ArrMatrix.lift1 ((Array (Full meas vert horiz fuse width) a
  -> Array (Full meas vert horiz height width) a)
 -> Full meas vert horiz fuse width a
 -> Full meas vert horiz height width a)
-> (Householder meas horiz Small fuse height a
    -> Array (Full meas vert horiz fuse width) a
    -> Array (Full meas vert horiz height width) a)
-> Householder meas horiz Small fuse height a
-> Full meas vert horiz fuse width a
-> Full meas vert horiz height width a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Householder meas horiz Small fuse height a
-> Array (Full meas vert horiz fuse width) a
-> Array (Full meas vert horiz height width) a
forall meas vert horiz height width fuse a lower upper.
(Measure meas, C vert, C horiz, C height, C width, C fuse, Eq fuse,
 Floating a) =>
HouseholderFlex lower upper meas horiz Small fuse height a
-> Full meas vert horiz fuse width a
-> Full meas vert horiz height width a
Plain.tallMultiplyQAdjoint


multiplyQ ::
   (Extent.Measure measA, Extent.C vertA, Extent.C horizA, Shape.C widthA,
    Extent.Measure measB, Extent.C vertB, Extent.C horizB, Shape.C widthB,
    ExtShape.Permutable height, Eq height, Class.Floating a) =>
   Transposition -> Conjugation ->
   Householder measA vertA horizA height widthA a ->
   Full measB vertB horizB height widthB a ->
   Full measB vertB horizB height widthB a
multiplyQ :: Transposition
-> Conjugation
-> Householder measA vertA horizA height widthA a
-> Full measB vertB horizB height widthB a
-> Full measB vertB horizB height widthB a
multiplyQ Transposition
transposed Conjugation
conjugated =
   (Array (Full measB vertB horizB height widthB) a
 -> Array (Full measB vertB horizB height widthB) a)
-> Full measB vertB horizB height widthB a
-> Full measB vertB horizB height widthB a
forall packA propA lowerA upperA measA vertA horizA heightA widthA
       packB propB lowerB upperB measB vertB horizB heightB widthB a b.
(ToPlain
   packA propA lowerA upperA measA vertA horizA heightA widthA,
 FromPlain
   packB propB lowerB upperB measB vertB horizB heightB widthB) =>
(PlainArray
   packA propA lowerA upperA measA vertA horizA heightA widthA a
 -> PlainArray
      packB propB lowerB upperB measB vertB horizB heightB widthB b)
-> ArrayMatrix
     packA propA lowerA upperA measA vertA horizA heightA widthA a
-> ArrayMatrix
     packB propB lowerB upperB measB vertB horizB heightB widthB b
ArrMatrix.lift1 ((Array (Full measB vertB horizB height widthB) a
  -> Array (Full measB vertB horizB height widthB) a)
 -> Full measB vertB horizB height widthB a
 -> Full measB vertB horizB height widthB a)
-> (Householder measA vertA horizA height widthA a
    -> Array (Full measB vertB horizB height widthB) a
    -> Array (Full measB vertB horizB height widthB) a)
-> Householder measA vertA horizA height widthA a
-> Full measB vertB horizB height widthB a
-> Full measB vertB horizB height widthB a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transposition
-> Conjugation
-> Householder measA vertA horizA height widthA a
-> Array (Full measB vertB horizB height widthB) a
-> Array (Full measB vertB horizB height widthB) a
forall measA vertA horizA widthA measB vertB horizB widthB height a
       lower upper.
(Measure measA, C vertA, C horizA, C widthA, Measure measB,
 C vertB, C horizB, C widthB, C height, Eq height, Floating a) =>
Transposition
-> Conjugation
-> HouseholderFlex lower upper measA vertA horizA height widthA a
-> Full measB vertB horizB height widthB a
-> Full measB vertB horizB height widthB a
Plain.multiplyQ Transposition
transposed Conjugation
conjugated


extractR ::
   (Extent.Measure meas, Extent.C vert, Extent.C horiz,
    ExtShape.Permutable height, Shape.C width, Class.Floating a) =>
   Householder meas vert horiz height width a ->
   Unpacked.UpperTrapezoid meas vert horiz height width a
extractR :: Householder meas vert horiz height width a
-> UpperTrapezoid meas vert horiz height width a
extractR = FullArray meas vert horiz height width a
-> UpperTrapezoid meas vert horiz height width a
forall propertyA lowerA upperA measA vertA horizA heightA widthA a.
(Property propertyA, Strip lowerA, Strip upperA) =>
FullArray measA vertA horizA heightA widthA a
-> UnpackedMatrix
     propertyA lowerA upperA measA vertA horizA heightA widthA a
ArrMatrix.liftUnpacked0 (FullArray meas vert horiz height width a
 -> UpperTrapezoid meas vert horiz height width a)
-> (Householder meas vert horiz height width a
    -> FullArray meas vert horiz height width a)
-> Householder meas vert horiz height width a
-> UpperTrapezoid meas vert horiz height width a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Householder meas vert horiz height width a
-> FullArray meas vert horiz height width a
forall meas vert horiz height width a lower upper.
(Measure meas, C vert, C horiz, C height, C width, Floating a) =>
HouseholderFlex lower upper meas vert horiz height width a
-> Full meas vert horiz height width a
Plain.extractR

tallExtractR ::
   (Extent.Measure meas, Extent.C vert,
    Shape.C height, ExtShape.Permutable width, Class.Floating a) =>
   Householder meas vert Extent.Small height width a -> Upper width a
tallExtractR :: Householder meas vert Small height width a -> Upper width a
tallExtractR = Array (UpperTriangularP Packed width) a -> Upper width a
forall pack prop lower upper meas vert horiz height width a.
FromPlain pack prop lower upper meas vert horiz height width =>
PlainArray pack prop lower upper meas vert horiz height width a
-> ArrayMatrix pack prop lower upper meas vert horiz height width a
ArrMatrix.lift0 (Array (UpperTriangularP Packed width) a -> Upper width a)
-> (Householder meas vert Small height width a
    -> Array (UpperTriangularP Packed width) a)
-> Householder meas vert Small height width a
-> Upper width a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Householder meas vert Small height width a
-> Array (UpperTriangularP Packed width) a
forall meas vert height width a.
(Measure meas, C vert, C height, C width, Floating a) =>
Householder meas vert Small height width a -> Upper width a
Plain.tallExtractR

tallMultiplyR ::
   (Extent.Measure measA, Extent.C vertA,
    Extent.Measure meas, Extent.C vert, Extent.C horiz,
    ExtShape.Permutable height, Eq height,
    Shape.C heightA, Shape.C widthB, Class.Floating a) =>
   Transposition ->
   Householder measA vertA Extent.Small heightA height a ->
   Full meas vert horiz height widthB a ->
   Full meas vert horiz height widthB a
tallMultiplyR :: Transposition
-> Householder measA vertA Small heightA height a
-> Full meas vert horiz height widthB a
-> Full meas vert horiz height widthB a
tallMultiplyR Transposition
transposed = (Array (Full meas vert horiz height widthB) a
 -> Array (Full meas vert horiz height widthB) a)
-> Full meas vert horiz height widthB a
-> Full meas vert horiz height widthB a
forall packA propA lowerA upperA measA vertA horizA heightA widthA
       packB propB lowerB upperB measB vertB horizB heightB widthB a b.
(ToPlain
   packA propA lowerA upperA measA vertA horizA heightA widthA,
 FromPlain
   packB propB lowerB upperB measB vertB horizB heightB widthB) =>
(PlainArray
   packA propA lowerA upperA measA vertA horizA heightA widthA a
 -> PlainArray
      packB propB lowerB upperB measB vertB horizB heightB widthB b)
-> ArrayMatrix
     packA propA lowerA upperA measA vertA horizA heightA widthA a
-> ArrayMatrix
     packB propB lowerB upperB measB vertB horizB heightB widthB b
ArrMatrix.lift1 ((Array (Full meas vert horiz height widthB) a
  -> Array (Full meas vert horiz height widthB) a)
 -> Full meas vert horiz height widthB a
 -> Full meas vert horiz height widthB a)
-> (Householder measA vertA Small heightA height a
    -> Array (Full meas vert horiz height widthB) a
    -> Array (Full meas vert horiz height widthB) a)
-> Householder measA vertA Small heightA height a
-> Full meas vert horiz height widthB a
-> Full meas vert horiz height widthB a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transposition
-> Householder measA vertA Small heightA height a
-> Array (Full meas vert horiz height widthB) a
-> Array (Full meas vert horiz height widthB) a
forall measA vertA meas vert horiz height heightA widthB a lower
       upper.
(Measure measA, C vertA, Measure meas, C vert, C horiz, C height,
 Eq height, C heightA, C widthB, Floating a) =>
Transposition
-> HouseholderFlex lower upper measA vertA Small heightA height a
-> Full meas vert horiz height widthB a
-> Full meas vert horiz height widthB a
Plain.tallMultiplyR Transposition
transposed

tallSolveR ::
   (Extent.Measure measA, Extent.C vertA,
    Extent.Measure meas, Extent.C vert, Extent.C horiz,
    Shape.C height, ExtShape.Permutable width, Eq width, Shape.C nrhs,
    Class.Floating a) =>
   Transposition -> Conjugation ->
   Householder measA vertA Extent.Small height width a ->
   Full meas vert horiz width nrhs a -> Full meas vert horiz width nrhs a
tallSolveR :: Transposition
-> Conjugation
-> Householder measA vertA Small height width a
-> Full meas vert horiz width nrhs a
-> Full meas vert horiz width nrhs a
tallSolveR Transposition
transposed Conjugation
conjugated =
   (Array (Full meas vert horiz width nrhs) a
 -> Array (Full meas vert horiz width nrhs) a)
-> Full meas vert horiz width nrhs a
-> Full meas vert horiz width nrhs a
forall packA propA lowerA upperA measA vertA horizA heightA widthA
       packB propB lowerB upperB measB vertB horizB heightB widthB a b.
(ToPlain
   packA propA lowerA upperA measA vertA horizA heightA widthA,
 FromPlain
   packB propB lowerB upperB measB vertB horizB heightB widthB) =>
(PlainArray
   packA propA lowerA upperA measA vertA horizA heightA widthA a
 -> PlainArray
      packB propB lowerB upperB measB vertB horizB heightB widthB b)
-> ArrayMatrix
     packA propA lowerA upperA measA vertA horizA heightA widthA a
-> ArrayMatrix
     packB propB lowerB upperB measB vertB horizB heightB widthB b
ArrMatrix.lift1 ((Array (Full meas vert horiz width nrhs) a
  -> Array (Full meas vert horiz width nrhs) a)
 -> Full meas vert horiz width nrhs a
 -> Full meas vert horiz width nrhs a)
-> (Householder measA vertA Small height width a
    -> Array (Full meas vert horiz width nrhs) a
    -> Array (Full meas vert horiz width nrhs) a)
-> Householder measA vertA Small height width a
-> Full meas vert horiz width nrhs a
-> Full meas vert horiz width nrhs a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transposition
-> Conjugation
-> Householder measA vertA Small height width a
-> Array (Full meas vert horiz width nrhs) a
-> Array (Full meas vert horiz width nrhs) a
forall measA vertA meas vert horiz height width nrhs a lower upper.
(Measure measA, C vertA, Measure meas, C vert, C horiz, C height,
 C width, Eq width, C nrhs, Floating a) =>
Transposition
-> Conjugation
-> HouseholderFlex lower upper measA vertA Small height width a
-> Full meas vert horiz width nrhs a
-> Full meas vert horiz width nrhs a
Plain.tallSolveR Transposition
transposed Conjugation
conjugated